From caf79acfb64befea343b7c70838da7b9f5639597 Mon Sep 17 00:00:00 2001 From: apo Date: Fri, 20 Jan 2006 06:55:16 +0000 Subject: [PATCH] Join BR-D5-38-2003 --- adm_local/unix/make_commence.in | 1 + doc/salome/VISU_index.html | 86 + doc/salome/VISU_index_v3.1.0.html | 21 +- ...activation_of_commands_display_results.htm | 191 + doc/salome/gui/GAUSS/animation_function.htm | 94 + doc/salome/gui/GAUSS/blue_down.jpg | Bin 0 -> 806 bytes doc/salome/gui/GAUSS/blue_left.jpg | Bin 0 -> 747 bytes doc/salome/gui/GAUSS/blue_right.jpg | Bin 0 -> 792 bytes doc/salome/gui/GAUSS/blue_up.jpg | Bin 0 -> 799 bytes doc/salome/gui/GAUSS/cameras.htm | 236 + doc/salome/gui/GAUSS/command_activation.htm | 112 + .../command_activation_in_display_meshes.htm | 114 + .../gui/GAUSS/command_activation_picking.htm | 139 + .../GAUSS/command_activation_segmentation.htm | 174 + ...ommand_activation_timestamps_animation.htm | 108 + doc/salome/gui/GAUSS/command_deactivation.htm | 101 + .../command_description_in_display_meshes.htm | 283 ++ .../command_description_segmentation.htm | 529 ++ ...mmand_description_timestamps_animation.htm | 172 + doc/salome/gui/GAUSS/command_result.htm | 115 + doc/salome/gui/GAUSS/cshdat_robohelp.htm | 258 + doc/salome/gui/GAUSS/cshdat_webhelp.htm | 251 + doc/salome/gui/GAUSS/default.css | 76 + doc/salome/gui/GAUSS/default_ns.css | 93 + ...escription_of_commands_display_results.htm | 952 ++++ ...scription_of_the_picking_functionality.htm | 234 + .../gui/GAUSS/display_meshes_general.htm | 92 + ...isplay_results_at_gauss_points_general.htm | 111 + doc/salome/gui/GAUSS/ehelp.xml | 10 + doc/salome/gui/GAUSS/ehlpdhtm.js | 4239 +++++++++++++++++ doc/salome/gui/GAUSS/ex_green.jpg | Bin 0 -> 7431 bytes doc/salome/gui/GAUSS/gauss points viewer.log | 341 ++ doc/salome/gui/GAUSS/gauss_points_viewer.htm | 139 + .../gui/GAUSS/gauss_points_viewer_csh.htm | 106 + .../gui/GAUSS/gauss_points_viewer_rhc.htm | 106 + doc/salome/gui/GAUSS/general.htm | 91 + .../general_navigation_within_the_scene.htm | 87 + .../general_storage_of_produced_data.htm | 158 + .../GAUSS/general_timestamps_animation.htm | 91 + doc/salome/gui/GAUSS/image1.gif | Bin 0 -> 33620 bytes doc/salome/gui/GAUSS/image10.gif | Bin 0 -> 3091 bytes doc/salome/gui/GAUSS/image100.gif | Bin 0 -> 31172 bytes doc/salome/gui/GAUSS/image101.gif | Bin 0 -> 21412 bytes doc/salome/gui/GAUSS/image102.gif | Bin 0 -> 957 bytes doc/salome/gui/GAUSS/image103.gif | Bin 0 -> 955 bytes doc/salome/gui/GAUSS/image104.gif | Bin 0 -> 941 bytes doc/salome/gui/GAUSS/image105.gif | Bin 0 -> 966 bytes doc/salome/gui/GAUSS/image106.gif | Bin 0 -> 1158 bytes doc/salome/gui/GAUSS/image107.gif | Bin 0 -> 1153 bytes doc/salome/gui/GAUSS/image108.gif | Bin 0 -> 1147 bytes doc/salome/gui/GAUSS/image109.gif | Bin 0 -> 957 bytes doc/salome/gui/GAUSS/image11.gif | Bin 0 -> 3018 bytes doc/salome/gui/GAUSS/image110.gif | Bin 0 -> 941 bytes doc/salome/gui/GAUSS/image111.gif | Bin 0 -> 966 bytes doc/salome/gui/GAUSS/image112.gif | Bin 0 -> 955 bytes doc/salome/gui/GAUSS/image113.gif | Bin 0 -> 966 bytes doc/salome/gui/GAUSS/image114.gif | Bin 0 -> 988 bytes doc/salome/gui/GAUSS/image115.gif | Bin 0 -> 1348 bytes doc/salome/gui/GAUSS/image116.gif | Bin 0 -> 55330 bytes doc/salome/gui/GAUSS/image117.gif | Bin 0 -> 1700 bytes doc/salome/gui/GAUSS/image12.gif | Bin 0 -> 14028 bytes doc/salome/gui/GAUSS/image13.gif | Bin 0 -> 1650 bytes doc/salome/gui/GAUSS/image28.gif | Bin 0 -> 964 bytes doc/salome/gui/GAUSS/image29.gif | Bin 0 -> 884 bytes doc/salome/gui/GAUSS/image3.gif | Bin 0 -> 36609 bytes doc/salome/gui/GAUSS/image30.gif | Bin 0 -> 24689 bytes doc/salome/gui/GAUSS/image31.gif | Bin 0 -> 2957 bytes doc/salome/gui/GAUSS/image32.gif | Bin 0 -> 3071 bytes doc/salome/gui/GAUSS/image33.gif | Bin 0 -> 1947 bytes doc/salome/gui/GAUSS/image34.gif | Bin 0 -> 1494 bytes doc/salome/gui/GAUSS/image35.gif | Bin 0 -> 1603 bytes doc/salome/gui/GAUSS/image36.gif | Bin 0 -> 482 bytes doc/salome/gui/GAUSS/image37.gif | Bin 0 -> 52125 bytes doc/salome/gui/GAUSS/image38.gif | Bin 0 -> 24487 bytes doc/salome/gui/GAUSS/image39.gif | Bin 0 -> 57210 bytes doc/salome/gui/GAUSS/image4.gif | Bin 0 -> 2849 bytes doc/salome/gui/GAUSS/image40.gif | Bin 0 -> 37657 bytes doc/salome/gui/GAUSS/image41.gif | Bin 0 -> 54854 bytes doc/salome/gui/GAUSS/image42.gif | Bin 0 -> 25675 bytes doc/salome/gui/GAUSS/image45.gif | Bin 0 -> 2196 bytes doc/salome/gui/GAUSS/image46.gif | Bin 0 -> 981 bytes doc/salome/gui/GAUSS/image47.gif | Bin 0 -> 973 bytes doc/salome/gui/GAUSS/image48.gif | Bin 0 -> 1004 bytes doc/salome/gui/GAUSS/image49.gif | Bin 0 -> 963 bytes doc/salome/gui/GAUSS/image5.gif | Bin 0 -> 2339 bytes doc/salome/gui/GAUSS/image50.gif | Bin 0 -> 21965 bytes doc/salome/gui/GAUSS/image51.gif | Bin 0 -> 8122 bytes doc/salome/gui/GAUSS/image52.gif | Bin 0 -> 8982 bytes doc/salome/gui/GAUSS/image53.gif | Bin 0 -> 9634 bytes doc/salome/gui/GAUSS/image54.gif | Bin 0 -> 8557 bytes doc/salome/gui/GAUSS/image55.gif | Bin 0 -> 17523 bytes doc/salome/gui/GAUSS/image56.gif | Bin 0 -> 15380 bytes doc/salome/gui/GAUSS/image57.gif | Bin 0 -> 2023 bytes doc/salome/gui/GAUSS/image58.gif | Bin 0 -> 2649 bytes doc/salome/gui/GAUSS/image59.gif | Bin 0 -> 13929 bytes doc/salome/gui/GAUSS/image6.gif | Bin 0 -> 25675 bytes doc/salome/gui/GAUSS/image60.gif | Bin 0 -> 1963 bytes doc/salome/gui/GAUSS/image61.gif | Bin 0 -> 34441 bytes doc/salome/gui/GAUSS/image62.gif | Bin 0 -> 7492 bytes doc/salome/gui/GAUSS/image63.gif | Bin 0 -> 53512 bytes doc/salome/gui/GAUSS/image64.gif | Bin 0 -> 37728 bytes doc/salome/gui/GAUSS/image65.gif | Bin 0 -> 316 bytes doc/salome/gui/GAUSS/image66.gif | Bin 0 -> 592 bytes doc/salome/gui/GAUSS/image67.gif | Bin 0 -> 3591 bytes doc/salome/gui/GAUSS/image68.gif | Bin 0 -> 16685 bytes doc/salome/gui/GAUSS/image69.gif | Bin 0 -> 2498 bytes doc/salome/gui/GAUSS/image7.gif | Bin 0 -> 14013 bytes doc/salome/gui/GAUSS/image70.gif | Bin 0 -> 53167 bytes doc/salome/gui/GAUSS/image71.gif | Bin 0 -> 419 bytes doc/salome/gui/GAUSS/image72.gif | Bin 0 -> 44353 bytes doc/salome/gui/GAUSS/image73.gif | Bin 0 -> 53190 bytes doc/salome/gui/GAUSS/image74.gif | Bin 0 -> 2285 bytes doc/salome/gui/GAUSS/image75.gif | Bin 0 -> 60739 bytes doc/salome/gui/GAUSS/image76.gif | Bin 0 -> 25675 bytes doc/salome/gui/GAUSS/image77.gif | Bin 0 -> 1894 bytes doc/salome/gui/GAUSS/image78.gif | Bin 0 -> 11375 bytes doc/salome/gui/GAUSS/image79.gif | Bin 0 -> 21595 bytes doc/salome/gui/GAUSS/image8.gif | Bin 0 -> 10360 bytes doc/salome/gui/GAUSS/image80.gif | Bin 0 -> 22677 bytes doc/salome/gui/GAUSS/image81.gif | Bin 0 -> 3819 bytes doc/salome/gui/GAUSS/image82.gif | Bin 0 -> 3241 bytes doc/salome/gui/GAUSS/image83.gif | Bin 0 -> 52480 bytes doc/salome/gui/GAUSS/image84.gif | Bin 0 -> 18447 bytes doc/salome/gui/GAUSS/image85.gif | Bin 0 -> 6262 bytes doc/salome/gui/GAUSS/image86.gif | Bin 0 -> 51893 bytes doc/salome/gui/GAUSS/image87.gif | Bin 0 -> 5161 bytes doc/salome/gui/GAUSS/image88.gif | Bin 0 -> 4314 bytes doc/salome/gui/GAUSS/image89.gif | Bin 0 -> 14984 bytes doc/salome/gui/GAUSS/image9.gif | Bin 0 -> 4593 bytes doc/salome/gui/GAUSS/image90.gif | Bin 0 -> 60895 bytes doc/salome/gui/GAUSS/image91.gif | Bin 0 -> 82011 bytes doc/salome/gui/GAUSS/image92.gif | Bin 0 -> 82375 bytes doc/salome/gui/GAUSS/image93.gif | Bin 0 -> 92157 bytes doc/salome/gui/GAUSS/image94.gif | Bin 0 -> 73241 bytes doc/salome/gui/GAUSS/image95.gif | Bin 0 -> 85677 bytes doc/salome/gui/GAUSS/image96.gif | Bin 0 -> 55451 bytes doc/salome/gui/GAUSS/image97.gif | Bin 0 -> 51146 bytes doc/salome/gui/GAUSS/image98.gif | Bin 0 -> 52348 bytes doc/salome/gui/GAUSS/image99.gif | Bin 0 -> 5169 bytes doc/salome/gui/GAUSS/index.htm | 86 + doc/salome/gui/GAUSS/info_blue.jpg | Bin 0 -> 1903 bytes .../loading_of_previously_saved_data.htm | 118 + doc/salome/gui/GAUSS/making_an_avi_clip.htm | 213 + .../gui/GAUSS/managing_configurations.htm | 257 + .../GAUSS/navigation_using_the_keyboard.htm | 177 + .../gui/GAUSS/navigation_using_the_mouse.htm | 230 + .../GAUSS/navigation_using_the_spacemouse.htm | 272 ++ doc/salome/gui/GAUSS/picking_general.htm | 166 + doc/salome/gui/GAUSS/purple_right_sm.jpg | Bin 0 -> 439 bytes doc/salome/gui/GAUSS/robohhre.lng | 101 + ...alome-visu_preferences_display_results.htm | 135 + .../gui/GAUSS/salome_visu_preferences.htm | 109 + ...references_navigation_within_the_scene.htm | 191 + .../GAUSS/salome_visu_preferences_picking.htm | 178 + doc/salome/gui/GAUSS/segmentation_general.htm | 109 + ...c_additional_commands_for_fields_items.htm | 232 + doc/salome/gui/GAUSS/webhelp.cab | Bin 0 -> 89619 bytes doc/salome/gui/GAUSS/webhelp.jar | Bin 0 -> 134517 bytes doc/salome/gui/GAUSS/whcsh_home.htm | 600 +++ doc/salome/gui/GAUSS/whcshdata.htm | 88 + doc/salome/gui/GAUSS/whdata/whftdata.js | 25 + doc/salome/gui/GAUSS/whdata/whftdata0.htm | 53 + doc/salome/gui/GAUSS/whdata/whfts.htm | 21 + doc/salome/gui/GAUSS/whdata/whfts.js | 40 + doc/salome/gui/GAUSS/whdata/whfwdata.js | 37 + doc/salome/gui/GAUSS/whdata/whfwdata0.htm | 267 ++ doc/salome/gui/GAUSS/whdata/whfwdata1.htm | 259 + doc/salome/gui/GAUSS/whdata/whfwdata2.htm | 258 + doc/salome/gui/GAUSS/whdata/whfwdata3.htm | 102 + doc/salome/gui/GAUSS/whdata/whgdata.js | 26 + doc/salome/gui/GAUSS/whdata/whglo.htm | 15 + doc/salome/gui/GAUSS/whdata/whglo.js | 34 + doc/salome/gui/GAUSS/whdata/whidata.js | 89 + doc/salome/gui/GAUSS/whdata/whidx.htm | 15 + doc/salome/gui/GAUSS/whdata/whidx.js | 34 + doc/salome/gui/GAUSS/whdata/whtdata.js | 64 + doc/salome/gui/GAUSS/whdata/whtdata0.htm | 61 + doc/salome/gui/GAUSS/whdata/whtoc.htm | 16 + doc/salome/gui/GAUSS/whdata/whtoc.js | 31 + doc/salome/gui/GAUSS/whestart.ico | Bin 0 -> 10134 bytes doc/salome/gui/GAUSS/whfbody.htm | 37 + doc/salome/gui/GAUSS/whfdhtml.htm | 30 + doc/salome/gui/GAUSS/whfform.htm | 136 + doc/salome/gui/GAUSS/whfhost.js | 945 ++++ doc/salome/gui/GAUSS/whform.js | 216 + doc/salome/gui/GAUSS/whframes.js | 79 + doc/salome/gui/GAUSS/whgbody.htm | 35 + doc/salome/gui/GAUSS/whgdata/whexpbar.gif | Bin 0 -> 67 bytes doc/salome/gui/GAUSS/whgdata/whlstf0.htm | 48 + doc/salome/gui/GAUSS/whgdata/whlstf1.htm | 43 + doc/salome/gui/GAUSS/whgdata/whlstf2.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstf3.htm | 51 + doc/salome/gui/GAUSS/whgdata/whlstf4.htm | 47 + doc/salome/gui/GAUSS/whgdata/whlstf5.htm | 47 + doc/salome/gui/GAUSS/whgdata/whlstf6.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstf7.htm | 53 + doc/salome/gui/GAUSS/whgdata/whlstf8.htm | 40 + doc/salome/gui/GAUSS/whgdata/whlstfl0.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl1.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl10.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl11.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl12.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl13.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl14.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl15.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl16.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl17.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl18.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl19.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl2.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl20.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl21.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl22.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl23.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl3.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl4.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl5.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl6.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl7.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl8.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstfl9.htm | 45 + doc/salome/gui/GAUSS/whgdata/whlstg0.htm | 38 + doc/salome/gui/GAUSS/whgdata/whlsti0.htm | 41 + doc/salome/gui/GAUSS/whgdata/whlstt0.htm | 61 + doc/salome/gui/GAUSS/whgdata/whlstt1.htm | 62 + doc/salome/gui/GAUSS/whgdata/whlstt10.htm | 62 + doc/salome/gui/GAUSS/whgdata/whlstt11.htm | 62 + doc/salome/gui/GAUSS/whgdata/whlstt2.htm | 65 + doc/salome/gui/GAUSS/whgdata/whlstt3.htm | 64 + doc/salome/gui/GAUSS/whgdata/whlstt4.htm | 67 + doc/salome/gui/GAUSS/whgdata/whlstt5.htm | 64 + doc/salome/gui/GAUSS/whgdata/whlstt6.htm | 62 + doc/salome/gui/GAUSS/whgdata/whlstt7.htm | 68 + doc/salome/gui/GAUSS/whgdata/whlstt8.htm | 66 + doc/salome/gui/GAUSS/whgdata/whlstt9.htm | 64 + doc/salome/gui/GAUSS/whgdata/whnvf30.htm | 13 + doc/salome/gui/GAUSS/whgdata/whnvf31.htm | 15 + doc/salome/gui/GAUSS/whgdata/whnvf32.htm | 15 + doc/salome/gui/GAUSS/whgdata/whnvf33.htm | 15 + doc/salome/gui/GAUSS/whgdata/whnvl31.htm | 72 + doc/salome/gui/GAUSS/whgdata/whnvl32.htm | 72 + doc/salome/gui/GAUSS/whgdata/whnvl33.htm | 43 + doc/salome/gui/GAUSS/whgdata/whnvp30.htm | 16 + doc/salome/gui/GAUSS/whgdata/whnvp31.htm | 16 + doc/salome/gui/GAUSS/whgdata/whnvp32.htm | 16 + doc/salome/gui/GAUSS/whgdata/whnvp33.htm | 16 + doc/salome/gui/GAUSS/whgdata/whnvt30.htm | 47 + doc/salome/gui/GAUSS/whgdata/whnvt31.htm | 45 + doc/salome/gui/GAUSS/whgdata/whnvt32.htm | 45 + doc/salome/gui/GAUSS/whgdata/whnvt33.htm | 45 + doc/salome/gui/GAUSS/whgdef.htm | 98 + doc/salome/gui/GAUSS/whgdhtml.htm | 150 + doc/salome/gui/GAUSS/whghost.js | 247 + doc/salome/gui/GAUSS/whhost.js | 1305 +++++ doc/salome/gui/GAUSS/whibody.htm | 284 ++ doc/salome/gui/GAUSS/whidhtml.htm | 30 + doc/salome/gui/GAUSS/whiform.htm | 91 + doc/salome/gui/GAUSS/whihost.js | 424 ++ doc/salome/gui/GAUSS/whlang.js | 453 ++ doc/salome/gui/GAUSS/whmozemu.js | 67 + doc/salome/gui/GAUSS/whmsg.js | 69 + doc/salome/gui/GAUSS/whnjs.htm | 25 + doc/salome/gui/GAUSS/whphost.js | 581 +++ doc/salome/gui/GAUSS/whproj.htm | 24 + doc/salome/gui/GAUSS/whproj.js | 85 + doc/salome/gui/GAUSS/whproj.xml | 3 + doc/salome/gui/GAUSS/whproxy.js | 74 + doc/salome/gui/GAUSS/whres.xml | 256 + doc/salome/gui/GAUSS/whrstart.ico | Bin 0 -> 10134 bytes doc/salome/gui/GAUSS/whskin_banner.htm | 49 + doc/salome/gui/GAUSS/whskin_blank.htm | 10 + doc/salome/gui/GAUSS/whskin_frmset01.htm | 172 + doc/salome/gui/GAUSS/whskin_frmset010.htm | 50 + doc/salome/gui/GAUSS/whskin_homepage.htm | 139 + doc/salome/gui/GAUSS/whskin_info.htm | 20 + doc/salome/gui/GAUSS/whskin_mbars.htm | 59 + doc/salome/gui/GAUSS/whskin_papplet.htm | 360 ++ doc/salome/gui/GAUSS/whskin_pdhtml.htm | 64 + doc/salome/gui/GAUSS/whskin_pickup.htm | 229 + doc/salome/gui/GAUSS/whskin_plist.htm | 238 + doc/salome/gui/GAUSS/whskin_tbars.htm | 101 + doc/salome/gui/GAUSS/whskin_tw.htm | 63 + doc/salome/gui/GAUSS/whst_topics.xml | 82 + doc/salome/gui/GAUSS/whstart.ico | Bin 0 -> 10134 bytes doc/salome/gui/GAUSS/whstart.js | 432 ++ doc/salome/gui/GAUSS/whstub.js | 159 + doc/salome/gui/GAUSS/wht_abge.jpg | Bin 0 -> 6210 bytes doc/salome/gui/GAUSS/wht_abgi.jpg | Bin 0 -> 4967 bytes doc/salome/gui/GAUSS/wht_abgw.jpg | Bin 0 -> 5659 bytes doc/salome/gui/GAUSS/wht_abte.jpg | Bin 0 -> 9810 bytes doc/salome/gui/GAUSS/wht_abti.jpg | Bin 0 -> 3863 bytes doc/salome/gui/GAUSS/wht_abtw.jpg | Bin 0 -> 3973 bytes doc/salome/gui/GAUSS/wht_fts_h.gif | Bin 0 -> 188 bytes doc/salome/gui/GAUSS/wht_fts_n.gif | Bin 0 -> 188 bytes doc/salome/gui/GAUSS/wht_glo_h.gif | Bin 0 -> 142 bytes doc/salome/gui/GAUSS/wht_glo_n.gif | Bin 0 -> 142 bytes doc/salome/gui/GAUSS/wht_go.gif | Bin 0 -> 260 bytes doc/salome/gui/GAUSS/wht_hide.gif | Bin 0 -> 842 bytes doc/salome/gui/GAUSS/wht_idx_h.gif | Bin 0 -> 168 bytes doc/salome/gui/GAUSS/wht_idx_n.gif | Bin 0 -> 168 bytes doc/salome/gui/GAUSS/wht_logo1.gif | Bin 0 -> 1405 bytes doc/salome/gui/GAUSS/wht_logo2.gif | Bin 0 -> 1393 bytes doc/salome/gui/GAUSS/wht_next.gif | Bin 0 -> 73 bytes doc/salome/gui/GAUSS/wht_next_g.gif | Bin 0 -> 73 bytes doc/salome/gui/GAUSS/wht_prev.gif | Bin 0 -> 73 bytes doc/salome/gui/GAUSS/wht_prev_g.gif | Bin 0 -> 73 bytes doc/salome/gui/GAUSS/wht_spac.gif | Bin 0 -> 43 bytes doc/salome/gui/GAUSS/wht_sync.gif | Bin 0 -> 846 bytes doc/salome/gui/GAUSS/wht_tab0.gif | Bin 0 -> 285 bytes doc/salome/gui/GAUSS/wht_tab1.gif | Bin 0 -> 237 bytes doc/salome/gui/GAUSS/wht_tab2.gif | Bin 0 -> 226 bytes doc/salome/gui/GAUSS/wht_tab3.gif | Bin 0 -> 209 bytes doc/salome/gui/GAUSS/wht_tab4.gif | Bin 0 -> 198 bytes doc/salome/gui/GAUSS/wht_tab5.gif | Bin 0 -> 221 bytes doc/salome/gui/GAUSS/wht_tab6.gif | Bin 0 -> 212 bytes doc/salome/gui/GAUSS/wht_tab7.gif | Bin 0 -> 236 bytes doc/salome/gui/GAUSS/wht_tab8.gif | Bin 0 -> 225 bytes doc/salome/gui/GAUSS/wht_toc1.gif | Bin 0 -> 124 bytes doc/salome/gui/GAUSS/wht_toc2.gif | Bin 0 -> 922 bytes doc/salome/gui/GAUSS/wht_toc3.gif | Bin 0 -> 911 bytes doc/salome/gui/GAUSS/wht_toc4.gif | Bin 0 -> 953 bytes doc/salome/gui/GAUSS/wht_toc_h.gif | Bin 0 -> 204 bytes doc/salome/gui/GAUSS/wht_toc_n.gif | Bin 0 -> 195 bytes doc/salome/gui/GAUSS/wht_ws.gif | Bin 0 -> 973 bytes doc/salome/gui/GAUSS/wht_ws_g.gif | Bin 0 -> 949 bytes doc/salome/gui/GAUSS/whtbar.js | 2043 ++++++++ doc/salome/gui/GAUSS/whtdhtml.htm | 49 + doc/salome/gui/GAUSS/whthost.js | 1504 ++++++ doc/salome/gui/GAUSS/whtopic.js | 724 +++ doc/salome/gui/GAUSS/whutils.js | 527 ++ doc/salome/gui/GAUSS/whver.js | 103 + doc/salome/gui/GAUSS/whxdata/whftdata0.xml | 39 + doc/salome/gui/GAUSS/whxdata/whfts.xml | 10 + doc/salome/gui/GAUSS/whxdata/whfwdata0.xml | 253 + doc/salome/gui/GAUSS/whxdata/whfwdata1.xml | 245 + doc/salome/gui/GAUSS/whxdata/whfwdata2.xml | 244 + doc/salome/gui/GAUSS/whxdata/whfwdata3.xml | 88 + doc/salome/gui/GAUSS/whxdata/whglo.xml | 4 + doc/salome/gui/GAUSS/whxdata/whidx.xml | 4 + doc/salome/gui/GAUSS/whxdata/whtdata0.xml | 61 + doc/salome/gui/GAUSS/whxdata/whtoc.xml | 4 + doc/salome/gui/Makefile.in | 4 + doc/salome/tui/VISU/doxyfile | 95 +- idl/VISU_Gen.idl | 145 +- resources/Vertex_Program_ARB.txt | 21 + resources/Visu_PlaneSegmentation.png | Bin 0 -> 241 bytes resources/Visu_SphereSegmentation.png | Bin 0 -> 893 bytes resources/Visu_gauss_points.png | Bin 0 -> 689 bytes resources/Visu_load_texture.png | Bin 0 -> 231 bytes resources/Visu_recording_pause.png | Bin 0 -> 220 bytes resources/Visu_recording_play.png | Bin 0 -> 256 bytes resources/Visu_recording_start.png | Bin 0 -> 260 bytes resources/Visu_recording_stop.png | Bin 0 -> 208 bytes resources/Visu_vvtk_switch.png | Bin 0 -> 782 bytes resources/sprite_alpha.bmp | Bin 0 -> 822 bytes resources/sprite_texture.bmp | Bin 0 -> 822 bytes src/CONVERTOR/Makefile.in | 32 +- src/CONVERTOR/VISUConvertor.cxx | 126 +- src/CONVERTOR/VISU_Convertor.cxx | 73 +- src/CONVERTOR/VISU_Convertor.hxx | 485 +- src/CONVERTOR/VISU_ConvertorDef.hxx | 78 + src/CONVERTOR/VISU_ConvertorUtils.cxx | 39 +- src/CONVERTOR/VISU_ConvertorUtils.hxx | 19 + src/CONVERTOR/VISU_Convertor_impl.cxx | 2552 ++++++++-- src/CONVERTOR/VISU_Convertor_impl.hxx | 978 +++- src/CONVERTOR/VISU_IDMapper.cxx | 77 + src/CONVERTOR/VISU_IDMapper.hxx | 150 + src/CONVERTOR/VISU_MedConvertor.cxx | 2728 ++++++++--- src/CONVERTOR/VISU_MedConvertor.hxx | 265 +- src/CONVERTOR/VISU_MergeFilter.cxx | 418 ++ src/CONVERTOR/VISU_MergeFilter.hxx | 99 + src/ENGINE/VISU_Engine_i.cc | 15 + src/ENGINE/VISU_Engine_i.hh | 3 + src/Makefile.in | 2 +- src/OBJECT/Makefile.in | 43 +- src/OBJECT/VISU_Actor.cxx | 552 ++- src/OBJECT/VISU_Actor.h | 243 +- src/OBJECT/VISU_ActorFactory.h | 68 + src/OBJECT/VISU_Event.h | 47 + src/OBJECT/VISU_GaussPtsAct.cxx | 1511 ++++++ src/OBJECT/VISU_GaussPtsAct.h | 470 ++ src/OBJECT/VISU_GaussPtsActorFactory.h | 57 + src/OBJECT/VISU_GaussPtsDeviceActor.cxx | 686 +++ src/OBJECT/VISU_GaussPtsDeviceActor.h | 236 + src/OBJECT/VISU_GaussPtsSettings.cxx | 106 + src/OBJECT/VISU_GaussPtsSettings.h | 231 + src/OBJECT/VISU_MeshAct.cxx | 402 +- src/OBJECT/VISU_MeshAct.h | 98 +- src/OBJECT/VISU_ScalarMapAct.cxx | 41 +- src/OBJECT/VISU_VectorsAct.cxx | 61 +- src/OBJECT/VISU_VectorsAct.h | 25 +- src/PIPELINE/Makefile.in | 77 +- src/PIPELINE/SALOME_ExtractGeometry.cxx | 174 +- src/PIPELINE/SALOME_ExtractGeometry.h | 43 +- src/PIPELINE/VISUPipeLine.cxx | 50 +- src/PIPELINE/VISU_CutLinesPL.cxx | 2 +- src/PIPELINE/VISU_CutPlanesPL.cxx | 2 +- src/PIPELINE/VISU_DeformedShapePL.cxx | 17 +- src/PIPELINE/VISU_Extractor.cxx | 75 +- src/PIPELINE/VISU_FieldTransform.cxx | 108 +- src/PIPELINE/VISU_GaussPointsPL.cxx | 699 +++ src/PIPELINE/VISU_GaussPointsPL.hxx | 291 ++ src/PIPELINE/VISU_ImplicitFunctionWidget.cxx | 136 + src/PIPELINE/VISU_ImplicitFunctionWidget.hxx | 79 + src/PIPELINE/VISU_IsoSurfacesPL.cxx | 9 +- src/PIPELINE/VISU_LookupTable.cxx | 144 +- src/PIPELINE/VISU_LookupTable.hxx | 9 +- src/PIPELINE/VISU_OpenGLPointSpriteMapper.cxx | 884 ++++ src/PIPELINE/VISU_OpenGLPointSpriteMapper.hxx | 285 ++ src/PIPELINE/VISU_PipeLine.cxx | 262 +- src/PIPELINE/VISU_PipeLine.hxx | 174 +- src/PIPELINE/VISU_PipeLineUtils.hxx | 20 +- src/PIPELINE/VISU_PlanesWidget.cxx | 1614 +++++++ src/PIPELINE/VISU_PlanesWidget.hxx | 312 ++ src/PIPELINE/VISU_Plot3DPL.cxx | 2 +- src/PIPELINE/VISU_ScalarBarCtrl.cxx | 520 ++ src/PIPELINE/VISU_ScalarBarCtrl.hxx | 138 + src/PIPELINE/VISU_ScalarMapPL.cxx | 182 +- src/PIPELINE/VISU_ScalarMapPL.hxx | 116 +- src/PIPELINE/VISU_SphereWidget.cxx | 622 +++ src/PIPELINE/VISU_SphereWidget.hxx | 134 + src/PIPELINE/VISU_StreamLinesPL.cxx | 5 +- src/PIPELINE/VISU_VectorsPL.cxx | 133 +- src/PIPELINE/VISU_VectorsPL.hxx | 9 +- src/PIPELINE/VISU_WidgetCtrl.cxx | 364 ++ src/PIPELINE/VISU_WidgetCtrl.hxx | 120 + src/PIPELINE/VISU_img2vti.cxx | 88 + src/VISUGUI/Makefile.in | 39 +- src/VISUGUI/VISUM_images.po | 67 + src/VISUGUI/VISUM_msg_en.po | 763 +++ src/VISUGUI/VisuGUI.cxx | 302 +- src/VISUGUI/VisuGUI.h | 7 +- src/VISUGUI/VisuGUI_BuildProgressDlg.cxx | 392 ++ src/VISUGUI/VisuGUI_BuildProgressDlg.h | 111 + src/VISUGUI/VisuGUI_CubeAxesDlg.cxx | 594 --- src/VISUGUI/VisuGUI_CubeAxesDlg.h | 132 - src/VISUGUI/VisuGUI_Displayer.cxx | 9 +- src/VISUGUI/VisuGUI_Factory.cxx | 4 +- src/VISUGUI/VisuGUI_FontWg.cxx | 149 - src/VISUGUI/VisuGUI_GaussPointsDlg.cxx | 733 +++ src/VISUGUI/VisuGUI_GaussPointsDlg.h | 162 + src/VISUGUI/VisuGUI_Module.cxx | 1658 +++++++ src/VISUGUI/VisuGUI_Module.h | 192 + src/VISUGUI/VisuGUI_NonIsometricDlg.h | 40 - src/VISUGUI/VisuGUI_OffsetDlg.cxx | 2 +- src/VISUGUI/VisuGUI_Plot3DDlg.cxx | 1 + src/VISUGUI/VisuGUI_PopupTools.cxx | 114 +- src/VISUGUI/VisuGUI_PopupTools.h | 4 + src/VISUGUI/VisuGUI_Prs3dTools.h | 125 +- src/VISUGUI/VisuGUI_ScalarBarDlg.cxx | 54 +- src/VISUGUI/VisuGUI_ScalarBarDlg.h | 7 +- src/VISUGUI/VisuGUI_Selection.cxx | 106 +- src/VISUGUI/VisuGUI_Selection.h | 4 +- src/VISUGUI/VisuGUI_TimeAnimation.cxx | 253 +- src/VISUGUI/VisuGUI_TimeAnimation.h | 10 +- src/VISUGUI/VisuGUI_Timer.cxx | 104 + src/VISUGUI/VisuGUI_Timer.h | 43 + src/VISUGUI/VisuGUI_Tools.cxx | 208 +- src/VISUGUI/VisuGUI_Tools.h | 39 +- src/VISUGUI/VisuGUI_TransparencyDlg.cxx | 245 + src/VISUGUI/VisuGUI_TransparencyDlg.h | 76 + src/VISUGUI/VisuGUI_ViewTools.cxx | 74 + src/VISUGUI/VisuGUI_ViewTools.h | 241 + src/VISU_I/Makefile.in | 162 +- src/VISU_I/VISUConfig.hh | 8 +- src/VISU_I/VISU_ColoredPrs3d_i.cc | 727 +++ src/VISU_I/VISU_ColoredPrs3d_i.hh | 304 ++ src/VISU_I/VISU_CorbaMedConvertor.cxx | 851 ++-- src/VISU_I/VISU_CorbaMedConvertor.hxx | 158 +- src/VISU_I/VISU_CutLines_i.cc | 28 +- src/VISU_I/VISU_CutLines_i.hh | 4 + src/VISU_I/VISU_CutPlanes_i.cc | 22 +- src/VISU_I/VISU_CutPlanes_i.hh | 4 + src/VISU_I/VISU_DeformedShape_i.cc | 28 +- src/VISU_I/VISU_DeformedShape_i.hh | 4 +- src/VISU_I/VISU_GaussPoints_i.cc | 835 ++++ src/VISU_I/VISU_GaussPoints_i.hh | 343 ++ src/VISU_I/VISU_Gen_i.cc | 64 +- src/VISU_I/VISU_Gen_i.hh | 366 +- src/VISU_I/VISU_I.cxx | 54 + src/VISU_I/VISU_IsoSurfaces_i.cc | 21 +- src/VISU_I/VISU_IsoSurfaces_i.hh | 4 + src/VISU_I/VISU_Mesh_i.cc | 32 +- src/VISU_I/VISU_Plot3D_i.cc | 50 +- src/VISU_I/VISU_Plot3D_i.hh | 4 + src/VISU_I/VISU_Prs3d_i.cc | 311 +- src/VISU_I/VISU_Prs3d_i.hh | 208 +- src/VISU_I/VISU_Result_i.cc | 1255 ++++- src/VISU_I/VISU_Result_i.hh | 71 +- src/VISU_I/VISU_ScalarMap_i.cc | 522 +- src/VISU_I/VISU_ScalarMap_i.hh | 224 +- src/VISU_I/VISU_StreamLines_i.cc | 40 +- src/VISU_I/VISU_StreamLines_i.hh | 4 +- src/VISU_I/VISU_TimeAnimation.cxx | 328 +- src/VISU_I/VISU_TimeAnimation.h | 8 +- src/VISU_I/VISU_Vectors_i.cc | 23 +- src/VISU_I/VISU_Vectors_i.hh | 4 +- src/VISU_I/VISU_ViewManager_i.cc | 27 +- src/VISU_I/VISU_View_i.cc | 59 +- src/VISU_SWIG/Makefile.in | 5 +- src/VISU_SWIG/VISU_Gen_s.cc | 3 +- src/VVTK/Makefile.in | 80 + src/VVTK/VVTK.h | 13 + src/VVTK/VVTK_ImageWriter.cxx | 112 + src/VVTK/VVTK_ImageWriter.h | 64 + src/VVTK/VVTK_ImageWriterMgr.cxx | 105 + src/VVTK/VVTK_ImageWriterMgr.h | 65 + src/VVTK/VVTK_InteractorStyle.cxx | 294 ++ src/VVTK/VVTK_InteractorStyle.h | 149 + src/VVTK/VVTK_MainWindow.cxx | 537 +++ src/VVTK/VVTK_MainWindow.h | 222 + src/VVTK/VVTK_PickingDlg.cxx | 378 ++ src/VVTK/VVTK_PickingDlg.h | 100 + src/VVTK/VVTK_PrimitiveBox.cxx | 358 ++ src/VVTK/VVTK_PrimitiveBox.h | 121 + src/VVTK/VVTK_Recorder.cxx | 464 ++ src/VVTK/VVTK_Recorder.h | 166 + src/VVTK/VVTK_RecorderDlg.cxx | 183 + .../VVTK_RecorderDlg.h} | 66 +- src/VVTK/VVTK_Renderer.cxx | 432 ++ src/VVTK/VVTK_Renderer.h | 179 + src/VVTK/VVTK_SegmentationCursorDlg.cxx | 839 ++++ src/VVTK/VVTK_SegmentationCursorDlg.h | 182 + src/VVTK/VVTK_SizeBox.cxx | 350 ++ src/VVTK/VVTK_SizeBox.h | 119 + src/VVTK/VVTK_ViewManager.cxx | 26 + src/VVTK/VVTK_ViewManager.h | 28 + src/VVTK/VVTK_ViewModel.cxx | 208 + src/VVTK/VVTK_ViewModel.h | 70 + src/VVTK/VVTK_ViewWindow.cxx | 297 ++ src/VVTK/VVTK_ViewWindow.h | 124 + 531 files changed, 67395 insertions(+), 5674 deletions(-) create mode 100644 doc/salome/VISU_index.html create mode 100644 doc/salome/gui/GAUSS/activation_of_commands_display_results.htm create mode 100644 doc/salome/gui/GAUSS/animation_function.htm create mode 100644 doc/salome/gui/GAUSS/blue_down.jpg create mode 100644 doc/salome/gui/GAUSS/blue_left.jpg create mode 100644 doc/salome/gui/GAUSS/blue_right.jpg create mode 100644 doc/salome/gui/GAUSS/blue_up.jpg create mode 100644 doc/salome/gui/GAUSS/cameras.htm create mode 100644 doc/salome/gui/GAUSS/command_activation.htm create mode 100644 doc/salome/gui/GAUSS/command_activation_in_display_meshes.htm create mode 100644 doc/salome/gui/GAUSS/command_activation_picking.htm create mode 100644 doc/salome/gui/GAUSS/command_activation_segmentation.htm create mode 100644 doc/salome/gui/GAUSS/command_activation_timestamps_animation.htm create mode 100644 doc/salome/gui/GAUSS/command_deactivation.htm create mode 100644 doc/salome/gui/GAUSS/command_description_in_display_meshes.htm create mode 100644 doc/salome/gui/GAUSS/command_description_segmentation.htm create mode 100644 doc/salome/gui/GAUSS/command_description_timestamps_animation.htm create mode 100644 doc/salome/gui/GAUSS/command_result.htm create mode 100644 doc/salome/gui/GAUSS/cshdat_robohelp.htm create mode 100644 doc/salome/gui/GAUSS/cshdat_webhelp.htm create mode 100644 doc/salome/gui/GAUSS/default.css create mode 100644 doc/salome/gui/GAUSS/default_ns.css create mode 100644 doc/salome/gui/GAUSS/description_of_commands_display_results.htm create mode 100644 doc/salome/gui/GAUSS/description_of_the_picking_functionality.htm create mode 100644 doc/salome/gui/GAUSS/display_meshes_general.htm create mode 100644 doc/salome/gui/GAUSS/display_results_at_gauss_points_general.htm create mode 100644 doc/salome/gui/GAUSS/ehelp.xml create mode 100644 doc/salome/gui/GAUSS/ehlpdhtm.js create mode 100644 doc/salome/gui/GAUSS/ex_green.jpg create mode 100644 doc/salome/gui/GAUSS/gauss points viewer.log create mode 100644 doc/salome/gui/GAUSS/gauss_points_viewer.htm create mode 100644 doc/salome/gui/GAUSS/gauss_points_viewer_csh.htm create mode 100644 doc/salome/gui/GAUSS/gauss_points_viewer_rhc.htm create mode 100644 doc/salome/gui/GAUSS/general.htm create mode 100644 doc/salome/gui/GAUSS/general_navigation_within_the_scene.htm create mode 100644 doc/salome/gui/GAUSS/general_storage_of_produced_data.htm create mode 100644 doc/salome/gui/GAUSS/general_timestamps_animation.htm create mode 100644 doc/salome/gui/GAUSS/image1.gif create mode 100644 doc/salome/gui/GAUSS/image10.gif create mode 100644 doc/salome/gui/GAUSS/image100.gif create mode 100644 doc/salome/gui/GAUSS/image101.gif create mode 100644 doc/salome/gui/GAUSS/image102.gif create mode 100644 doc/salome/gui/GAUSS/image103.gif create mode 100644 doc/salome/gui/GAUSS/image104.gif create mode 100644 doc/salome/gui/GAUSS/image105.gif create mode 100644 doc/salome/gui/GAUSS/image106.gif create mode 100644 doc/salome/gui/GAUSS/image107.gif create mode 100644 doc/salome/gui/GAUSS/image108.gif create mode 100644 doc/salome/gui/GAUSS/image109.gif create mode 100644 doc/salome/gui/GAUSS/image11.gif create mode 100644 doc/salome/gui/GAUSS/image110.gif create mode 100644 doc/salome/gui/GAUSS/image111.gif create mode 100644 doc/salome/gui/GAUSS/image112.gif create mode 100644 doc/salome/gui/GAUSS/image113.gif create mode 100644 doc/salome/gui/GAUSS/image114.gif create mode 100644 doc/salome/gui/GAUSS/image115.gif create mode 100644 doc/salome/gui/GAUSS/image116.gif create mode 100644 doc/salome/gui/GAUSS/image117.gif create mode 100644 doc/salome/gui/GAUSS/image12.gif create mode 100644 doc/salome/gui/GAUSS/image13.gif create mode 100644 doc/salome/gui/GAUSS/image28.gif create mode 100644 doc/salome/gui/GAUSS/image29.gif create mode 100644 doc/salome/gui/GAUSS/image3.gif create mode 100644 doc/salome/gui/GAUSS/image30.gif create mode 100644 doc/salome/gui/GAUSS/image31.gif create mode 100644 doc/salome/gui/GAUSS/image32.gif create mode 100644 doc/salome/gui/GAUSS/image33.gif create mode 100644 doc/salome/gui/GAUSS/image34.gif create mode 100644 doc/salome/gui/GAUSS/image35.gif create mode 100644 doc/salome/gui/GAUSS/image36.gif create mode 100644 doc/salome/gui/GAUSS/image37.gif create mode 100644 doc/salome/gui/GAUSS/image38.gif create mode 100644 doc/salome/gui/GAUSS/image39.gif create mode 100644 doc/salome/gui/GAUSS/image4.gif create mode 100644 doc/salome/gui/GAUSS/image40.gif create mode 100644 doc/salome/gui/GAUSS/image41.gif create mode 100644 doc/salome/gui/GAUSS/image42.gif create mode 100644 doc/salome/gui/GAUSS/image45.gif create mode 100644 doc/salome/gui/GAUSS/image46.gif create mode 100644 doc/salome/gui/GAUSS/image47.gif create mode 100644 doc/salome/gui/GAUSS/image48.gif create mode 100644 doc/salome/gui/GAUSS/image49.gif create mode 100644 doc/salome/gui/GAUSS/image5.gif create mode 100644 doc/salome/gui/GAUSS/image50.gif create mode 100644 doc/salome/gui/GAUSS/image51.gif create mode 100644 doc/salome/gui/GAUSS/image52.gif create mode 100644 doc/salome/gui/GAUSS/image53.gif create mode 100644 doc/salome/gui/GAUSS/image54.gif create mode 100644 doc/salome/gui/GAUSS/image55.gif create mode 100644 doc/salome/gui/GAUSS/image56.gif create mode 100644 doc/salome/gui/GAUSS/image57.gif create mode 100644 doc/salome/gui/GAUSS/image58.gif create mode 100644 doc/salome/gui/GAUSS/image59.gif create mode 100644 doc/salome/gui/GAUSS/image6.gif create mode 100644 doc/salome/gui/GAUSS/image60.gif create mode 100644 doc/salome/gui/GAUSS/image61.gif create mode 100644 doc/salome/gui/GAUSS/image62.gif create mode 100644 doc/salome/gui/GAUSS/image63.gif create mode 100644 doc/salome/gui/GAUSS/image64.gif create mode 100644 doc/salome/gui/GAUSS/image65.gif create mode 100644 doc/salome/gui/GAUSS/image66.gif create mode 100644 doc/salome/gui/GAUSS/image67.gif create mode 100644 doc/salome/gui/GAUSS/image68.gif create mode 100644 doc/salome/gui/GAUSS/image69.gif create mode 100644 doc/salome/gui/GAUSS/image7.gif create mode 100644 doc/salome/gui/GAUSS/image70.gif create mode 100644 doc/salome/gui/GAUSS/image71.gif create mode 100644 doc/salome/gui/GAUSS/image72.gif create mode 100644 doc/salome/gui/GAUSS/image73.gif create mode 100644 doc/salome/gui/GAUSS/image74.gif create mode 100644 doc/salome/gui/GAUSS/image75.gif create mode 100644 doc/salome/gui/GAUSS/image76.gif create mode 100644 doc/salome/gui/GAUSS/image77.gif create mode 100644 doc/salome/gui/GAUSS/image78.gif create mode 100644 doc/salome/gui/GAUSS/image79.gif create mode 100644 doc/salome/gui/GAUSS/image8.gif create mode 100644 doc/salome/gui/GAUSS/image80.gif create mode 100644 doc/salome/gui/GAUSS/image81.gif create mode 100644 doc/salome/gui/GAUSS/image82.gif create mode 100644 doc/salome/gui/GAUSS/image83.gif create mode 100644 doc/salome/gui/GAUSS/image84.gif create mode 100644 doc/salome/gui/GAUSS/image85.gif create mode 100644 doc/salome/gui/GAUSS/image86.gif create mode 100644 doc/salome/gui/GAUSS/image87.gif create mode 100644 doc/salome/gui/GAUSS/image88.gif create mode 100644 doc/salome/gui/GAUSS/image89.gif create mode 100644 doc/salome/gui/GAUSS/image9.gif create mode 100644 doc/salome/gui/GAUSS/image90.gif create mode 100644 doc/salome/gui/GAUSS/image91.gif create mode 100644 doc/salome/gui/GAUSS/image92.gif create mode 100644 doc/salome/gui/GAUSS/image93.gif create mode 100644 doc/salome/gui/GAUSS/image94.gif create mode 100644 doc/salome/gui/GAUSS/image95.gif create mode 100644 doc/salome/gui/GAUSS/image96.gif create mode 100644 doc/salome/gui/GAUSS/image97.gif create mode 100644 doc/salome/gui/GAUSS/image98.gif create mode 100644 doc/salome/gui/GAUSS/image99.gif create mode 100644 doc/salome/gui/GAUSS/index.htm create mode 100644 doc/salome/gui/GAUSS/info_blue.jpg create mode 100644 doc/salome/gui/GAUSS/loading_of_previously_saved_data.htm create mode 100644 doc/salome/gui/GAUSS/making_an_avi_clip.htm create mode 100644 doc/salome/gui/GAUSS/managing_configurations.htm create mode 100644 doc/salome/gui/GAUSS/navigation_using_the_keyboard.htm create mode 100644 doc/salome/gui/GAUSS/navigation_using_the_mouse.htm create mode 100644 doc/salome/gui/GAUSS/navigation_using_the_spacemouse.htm create mode 100644 doc/salome/gui/GAUSS/picking_general.htm create mode 100644 doc/salome/gui/GAUSS/purple_right_sm.jpg create mode 100644 doc/salome/gui/GAUSS/robohhre.lng create mode 100644 doc/salome/gui/GAUSS/salome-visu_preferences_display_results.htm create mode 100644 doc/salome/gui/GAUSS/salome_visu_preferences.htm create mode 100644 doc/salome/gui/GAUSS/salome_visu_preferences_navigation_within_the_scene.htm create mode 100644 doc/salome/gui/GAUSS/salome_visu_preferences_picking.htm create mode 100644 doc/salome/gui/GAUSS/segmentation_general.htm create mode 100644 doc/salome/gui/GAUSS/specific_additional_commands_for_fields_items.htm create mode 100644 doc/salome/gui/GAUSS/webhelp.cab create mode 100644 doc/salome/gui/GAUSS/webhelp.jar create mode 100644 doc/salome/gui/GAUSS/whcsh_home.htm create mode 100644 doc/salome/gui/GAUSS/whcshdata.htm create mode 100644 doc/salome/gui/GAUSS/whdata/whftdata.js create mode 100644 doc/salome/gui/GAUSS/whdata/whftdata0.htm create mode 100644 doc/salome/gui/GAUSS/whdata/whfts.htm create mode 100644 doc/salome/gui/GAUSS/whdata/whfts.js create mode 100644 doc/salome/gui/GAUSS/whdata/whfwdata.js create mode 100644 doc/salome/gui/GAUSS/whdata/whfwdata0.htm create mode 100644 doc/salome/gui/GAUSS/whdata/whfwdata1.htm create mode 100644 doc/salome/gui/GAUSS/whdata/whfwdata2.htm create mode 100644 doc/salome/gui/GAUSS/whdata/whfwdata3.htm create mode 100644 doc/salome/gui/GAUSS/whdata/whgdata.js create mode 100644 doc/salome/gui/GAUSS/whdata/whglo.htm create mode 100644 doc/salome/gui/GAUSS/whdata/whglo.js create mode 100644 doc/salome/gui/GAUSS/whdata/whidata.js create mode 100644 doc/salome/gui/GAUSS/whdata/whidx.htm create mode 100644 doc/salome/gui/GAUSS/whdata/whidx.js create mode 100644 doc/salome/gui/GAUSS/whdata/whtdata.js create mode 100644 doc/salome/gui/GAUSS/whdata/whtdata0.htm create mode 100644 doc/salome/gui/GAUSS/whdata/whtoc.htm create mode 100644 doc/salome/gui/GAUSS/whdata/whtoc.js create mode 100644 doc/salome/gui/GAUSS/whestart.ico create mode 100644 doc/salome/gui/GAUSS/whfbody.htm create mode 100644 doc/salome/gui/GAUSS/whfdhtml.htm create mode 100644 doc/salome/gui/GAUSS/whfform.htm create mode 100644 doc/salome/gui/GAUSS/whfhost.js create mode 100644 doc/salome/gui/GAUSS/whform.js create mode 100644 doc/salome/gui/GAUSS/whframes.js create mode 100644 doc/salome/gui/GAUSS/whgbody.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whexpbar.gif create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstf0.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstf1.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstf2.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstf3.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstf4.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstf5.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstf6.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstf7.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstf8.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl0.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl1.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl10.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl11.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl12.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl13.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl14.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl15.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl16.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl17.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl18.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl19.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl2.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl20.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl21.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl22.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl23.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl3.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl4.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl5.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl6.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl7.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl8.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstfl9.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstg0.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlsti0.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstt0.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstt1.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstt10.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstt11.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstt2.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstt3.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstt4.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstt5.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstt6.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstt7.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstt8.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whlstt9.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whnvf30.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whnvf31.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whnvf32.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whnvf33.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whnvl31.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whnvl32.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whnvl33.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whnvp30.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whnvp31.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whnvp32.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whnvp33.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whnvt30.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whnvt31.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whnvt32.htm create mode 100644 doc/salome/gui/GAUSS/whgdata/whnvt33.htm create mode 100644 doc/salome/gui/GAUSS/whgdef.htm create mode 100644 doc/salome/gui/GAUSS/whgdhtml.htm create mode 100644 doc/salome/gui/GAUSS/whghost.js create mode 100644 doc/salome/gui/GAUSS/whhost.js create mode 100644 doc/salome/gui/GAUSS/whibody.htm create mode 100644 doc/salome/gui/GAUSS/whidhtml.htm create mode 100644 doc/salome/gui/GAUSS/whiform.htm create mode 100644 doc/salome/gui/GAUSS/whihost.js create mode 100644 doc/salome/gui/GAUSS/whlang.js create mode 100644 doc/salome/gui/GAUSS/whmozemu.js create mode 100644 doc/salome/gui/GAUSS/whmsg.js create mode 100644 doc/salome/gui/GAUSS/whnjs.htm create mode 100644 doc/salome/gui/GAUSS/whphost.js create mode 100644 doc/salome/gui/GAUSS/whproj.htm create mode 100644 doc/salome/gui/GAUSS/whproj.js create mode 100644 doc/salome/gui/GAUSS/whproj.xml create mode 100644 doc/salome/gui/GAUSS/whproxy.js create mode 100644 doc/salome/gui/GAUSS/whres.xml create mode 100644 doc/salome/gui/GAUSS/whrstart.ico create mode 100644 doc/salome/gui/GAUSS/whskin_banner.htm create mode 100644 doc/salome/gui/GAUSS/whskin_blank.htm create mode 100644 doc/salome/gui/GAUSS/whskin_frmset01.htm create mode 100644 doc/salome/gui/GAUSS/whskin_frmset010.htm create mode 100644 doc/salome/gui/GAUSS/whskin_homepage.htm create mode 100644 doc/salome/gui/GAUSS/whskin_info.htm create mode 100644 doc/salome/gui/GAUSS/whskin_mbars.htm create mode 100644 doc/salome/gui/GAUSS/whskin_papplet.htm create mode 100644 doc/salome/gui/GAUSS/whskin_pdhtml.htm create mode 100644 doc/salome/gui/GAUSS/whskin_pickup.htm create mode 100644 doc/salome/gui/GAUSS/whskin_plist.htm create mode 100644 doc/salome/gui/GAUSS/whskin_tbars.htm create mode 100644 doc/salome/gui/GAUSS/whskin_tw.htm create mode 100644 doc/salome/gui/GAUSS/whst_topics.xml create mode 100644 doc/salome/gui/GAUSS/whstart.ico create mode 100644 doc/salome/gui/GAUSS/whstart.js create mode 100644 doc/salome/gui/GAUSS/whstub.js create mode 100644 doc/salome/gui/GAUSS/wht_abge.jpg create mode 100644 doc/salome/gui/GAUSS/wht_abgi.jpg create mode 100644 doc/salome/gui/GAUSS/wht_abgw.jpg create mode 100644 doc/salome/gui/GAUSS/wht_abte.jpg create mode 100644 doc/salome/gui/GAUSS/wht_abti.jpg create mode 100644 doc/salome/gui/GAUSS/wht_abtw.jpg create mode 100644 doc/salome/gui/GAUSS/wht_fts_h.gif create mode 100644 doc/salome/gui/GAUSS/wht_fts_n.gif create mode 100644 doc/salome/gui/GAUSS/wht_glo_h.gif create mode 100644 doc/salome/gui/GAUSS/wht_glo_n.gif create mode 100644 doc/salome/gui/GAUSS/wht_go.gif create mode 100644 doc/salome/gui/GAUSS/wht_hide.gif create mode 100644 doc/salome/gui/GAUSS/wht_idx_h.gif create mode 100644 doc/salome/gui/GAUSS/wht_idx_n.gif create mode 100644 doc/salome/gui/GAUSS/wht_logo1.gif create mode 100644 doc/salome/gui/GAUSS/wht_logo2.gif create mode 100644 doc/salome/gui/GAUSS/wht_next.gif create mode 100644 doc/salome/gui/GAUSS/wht_next_g.gif create mode 100644 doc/salome/gui/GAUSS/wht_prev.gif create mode 100644 doc/salome/gui/GAUSS/wht_prev_g.gif create mode 100644 doc/salome/gui/GAUSS/wht_spac.gif create mode 100644 doc/salome/gui/GAUSS/wht_sync.gif create mode 100644 doc/salome/gui/GAUSS/wht_tab0.gif create mode 100644 doc/salome/gui/GAUSS/wht_tab1.gif create mode 100644 doc/salome/gui/GAUSS/wht_tab2.gif create mode 100644 doc/salome/gui/GAUSS/wht_tab3.gif create mode 100644 doc/salome/gui/GAUSS/wht_tab4.gif create mode 100644 doc/salome/gui/GAUSS/wht_tab5.gif create mode 100644 doc/salome/gui/GAUSS/wht_tab6.gif create mode 100644 doc/salome/gui/GAUSS/wht_tab7.gif create mode 100644 doc/salome/gui/GAUSS/wht_tab8.gif create mode 100644 doc/salome/gui/GAUSS/wht_toc1.gif create mode 100644 doc/salome/gui/GAUSS/wht_toc2.gif create mode 100644 doc/salome/gui/GAUSS/wht_toc3.gif create mode 100644 doc/salome/gui/GAUSS/wht_toc4.gif create mode 100644 doc/salome/gui/GAUSS/wht_toc_h.gif create mode 100644 doc/salome/gui/GAUSS/wht_toc_n.gif create mode 100644 doc/salome/gui/GAUSS/wht_ws.gif create mode 100644 doc/salome/gui/GAUSS/wht_ws_g.gif create mode 100644 doc/salome/gui/GAUSS/whtbar.js create mode 100644 doc/salome/gui/GAUSS/whtdhtml.htm create mode 100644 doc/salome/gui/GAUSS/whthost.js create mode 100644 doc/salome/gui/GAUSS/whtopic.js create mode 100644 doc/salome/gui/GAUSS/whutils.js create mode 100644 doc/salome/gui/GAUSS/whver.js create mode 100644 doc/salome/gui/GAUSS/whxdata/whftdata0.xml create mode 100644 doc/salome/gui/GAUSS/whxdata/whfts.xml create mode 100644 doc/salome/gui/GAUSS/whxdata/whfwdata0.xml create mode 100644 doc/salome/gui/GAUSS/whxdata/whfwdata1.xml create mode 100644 doc/salome/gui/GAUSS/whxdata/whfwdata2.xml create mode 100644 doc/salome/gui/GAUSS/whxdata/whfwdata3.xml create mode 100644 doc/salome/gui/GAUSS/whxdata/whglo.xml create mode 100644 doc/salome/gui/GAUSS/whxdata/whidx.xml create mode 100644 doc/salome/gui/GAUSS/whxdata/whtdata0.xml create mode 100644 doc/salome/gui/GAUSS/whxdata/whtoc.xml create mode 100755 resources/Vertex_Program_ARB.txt create mode 100644 resources/Visu_PlaneSegmentation.png create mode 100644 resources/Visu_SphereSegmentation.png create mode 100644 resources/Visu_gauss_points.png create mode 100755 resources/Visu_load_texture.png create mode 100644 resources/Visu_recording_pause.png create mode 100644 resources/Visu_recording_play.png create mode 100644 resources/Visu_recording_start.png create mode 100644 resources/Visu_recording_stop.png create mode 100644 resources/Visu_vvtk_switch.png create mode 100644 resources/sprite_alpha.bmp create mode 100644 resources/sprite_texture.bmp create mode 100644 src/CONVERTOR/VISU_ConvertorDef.hxx create mode 100644 src/CONVERTOR/VISU_IDMapper.cxx create mode 100644 src/CONVERTOR/VISU_IDMapper.hxx create mode 100644 src/CONVERTOR/VISU_MergeFilter.cxx create mode 100644 src/CONVERTOR/VISU_MergeFilter.hxx create mode 100644 src/OBJECT/VISU_ActorFactory.h create mode 100644 src/OBJECT/VISU_Event.h create mode 100644 src/OBJECT/VISU_GaussPtsAct.cxx create mode 100644 src/OBJECT/VISU_GaussPtsAct.h create mode 100644 src/OBJECT/VISU_GaussPtsActorFactory.h create mode 100644 src/OBJECT/VISU_GaussPtsDeviceActor.cxx create mode 100644 src/OBJECT/VISU_GaussPtsDeviceActor.h create mode 100644 src/OBJECT/VISU_GaussPtsSettings.cxx create mode 100644 src/OBJECT/VISU_GaussPtsSettings.h create mode 100644 src/PIPELINE/VISU_GaussPointsPL.cxx create mode 100644 src/PIPELINE/VISU_GaussPointsPL.hxx create mode 100644 src/PIPELINE/VISU_ImplicitFunctionWidget.cxx create mode 100644 src/PIPELINE/VISU_ImplicitFunctionWidget.hxx create mode 100755 src/PIPELINE/VISU_OpenGLPointSpriteMapper.cxx create mode 100755 src/PIPELINE/VISU_OpenGLPointSpriteMapper.hxx create mode 100644 src/PIPELINE/VISU_PlanesWidget.cxx create mode 100644 src/PIPELINE/VISU_PlanesWidget.hxx create mode 100644 src/PIPELINE/VISU_ScalarBarCtrl.cxx create mode 100644 src/PIPELINE/VISU_ScalarBarCtrl.hxx create mode 100755 src/PIPELINE/VISU_SphereWidget.cxx create mode 100755 src/PIPELINE/VISU_SphereWidget.hxx create mode 100644 src/PIPELINE/VISU_WidgetCtrl.cxx create mode 100644 src/PIPELINE/VISU_WidgetCtrl.hxx create mode 100644 src/PIPELINE/VISU_img2vti.cxx create mode 100644 src/VISUGUI/VISUM_images.po create mode 100644 src/VISUGUI/VISUM_msg_en.po create mode 100644 src/VISUGUI/VisuGUI_BuildProgressDlg.cxx create mode 100644 src/VISUGUI/VisuGUI_BuildProgressDlg.h delete mode 100755 src/VISUGUI/VisuGUI_CubeAxesDlg.cxx delete mode 100755 src/VISUGUI/VisuGUI_CubeAxesDlg.h delete mode 100755 src/VISUGUI/VisuGUI_FontWg.cxx create mode 100644 src/VISUGUI/VisuGUI_GaussPointsDlg.cxx create mode 100644 src/VISUGUI/VisuGUI_GaussPointsDlg.h create mode 100644 src/VISUGUI/VisuGUI_Module.cxx create mode 100644 src/VISUGUI/VisuGUI_Module.h delete mode 100644 src/VISUGUI/VisuGUI_NonIsometricDlg.h create mode 100644 src/VISUGUI/VisuGUI_Timer.cxx create mode 100644 src/VISUGUI/VisuGUI_Timer.h create mode 100644 src/VISUGUI/VisuGUI_TransparencyDlg.cxx create mode 100644 src/VISUGUI/VisuGUI_TransparencyDlg.h create mode 100644 src/VISUGUI/VisuGUI_ViewTools.cxx create mode 100644 src/VISUGUI/VisuGUI_ViewTools.h create mode 100644 src/VISU_I/VISU_ColoredPrs3d_i.cc create mode 100644 src/VISU_I/VISU_ColoredPrs3d_i.hh create mode 100644 src/VISU_I/VISU_GaussPoints_i.cc create mode 100644 src/VISU_I/VISU_GaussPoints_i.hh create mode 100644 src/VISU_I/VISU_I.cxx create mode 100755 src/VVTK/Makefile.in create mode 100755 src/VVTK/VVTK.h create mode 100755 src/VVTK/VVTK_ImageWriter.cxx create mode 100755 src/VVTK/VVTK_ImageWriter.h create mode 100755 src/VVTK/VVTK_ImageWriterMgr.cxx create mode 100755 src/VVTK/VVTK_ImageWriterMgr.h create mode 100644 src/VVTK/VVTK_InteractorStyle.cxx create mode 100644 src/VVTK/VVTK_InteractorStyle.h create mode 100644 src/VVTK/VVTK_MainWindow.cxx create mode 100644 src/VVTK/VVTK_MainWindow.h create mode 100644 src/VVTK/VVTK_PickingDlg.cxx create mode 100644 src/VVTK/VVTK_PickingDlg.h create mode 100644 src/VVTK/VVTK_PrimitiveBox.cxx create mode 100644 src/VVTK/VVTK_PrimitiveBox.h create mode 100755 src/VVTK/VVTK_Recorder.cxx create mode 100755 src/VVTK/VVTK_Recorder.h create mode 100644 src/VVTK/VVTK_RecorderDlg.cxx rename src/{VISUGUI/VisuGUI_FontWg.h => VVTK/VVTK_RecorderDlg.h} (52%) mode change 100755 => 100644 create mode 100644 src/VVTK/VVTK_Renderer.cxx create mode 100644 src/VVTK/VVTK_Renderer.h create mode 100644 src/VVTK/VVTK_SegmentationCursorDlg.cxx create mode 100644 src/VVTK/VVTK_SegmentationCursorDlg.h create mode 100644 src/VVTK/VVTK_SizeBox.cxx create mode 100644 src/VVTK/VVTK_SizeBox.h create mode 100644 src/VVTK/VVTK_ViewManager.cxx create mode 100644 src/VVTK/VVTK_ViewManager.h create mode 100644 src/VVTK/VVTK_ViewModel.cxx create mode 100644 src/VVTK/VVTK_ViewModel.h create mode 100755 src/VVTK/VVTK_ViewWindow.cxx create mode 100755 src/VVTK/VVTK_ViewWindow.h diff --git a/adm_local/unix/make_commence.in b/adm_local/unix/make_commence.in index 549610f5..574db11c 100644 --- a/adm_local/unix/make_commence.in +++ b/adm_local/unix/make_commence.in @@ -37,6 +37,7 @@ CXX_DEPEND_FLAG = @CXX_DEPEND_FLAG@ # BOOST Library BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_LIBS = @BOOST_LIBS@ # JAVA diff --git a/doc/salome/VISU_index.html b/doc/salome/VISU_index.html new file mode 100644 index 00000000..a69a8403 --- /dev/null +++ b/doc/salome/VISU_index.html @@ -0,0 +1,86 @@ + + + + + + + + Post-Pro Module Documentation + + + +
  +
+
                   +   
+ + + + + + + + + +
+ + + +
+ +
+
+
+

Post-Pro MODULE Documentation

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

Application-About.png +     

+
+ +
+ + + + +
+
+
+
+
+ +
GUI Documentation
+ +
+ +
Gauss Viewer User Guide
+ +
+ +
TUI Documentation
+ +

+
+
+
+
+
+
+ + diff --git a/doc/salome/VISU_index_v3.1.0.html b/doc/salome/VISU_index_v3.1.0.html index d123d0aa..a69a8403 100644 --- a/doc/salome/VISU_index_v3.1.0.html +++ b/doc/salome/VISU_index_v3.1.0.html @@ -65,25 +65,16 @@
-
- -
GUI Documentation
+
GUI Documentation
-
- -
+
+ +
Gauss Viewer User Guide
-

-
- -
+
TUI Documentation
- -
- -
- +


diff --git a/doc/salome/gui/GAUSS/activation_of_commands_display_results.htm b/doc/salome/gui/GAUSS/activation_of_commands_display_results.htm new file mode 100644 index 00000000..97430cd1 --- /dev/null +++ b/doc/salome/gui/GAUSS/activation_of_commands_display_results.htm @@ -0,0 +1,191 @@ + + + + + +Activation of commands display results + + + + + + + + + + + +

Activation of commands

+ +

The user has to select in the tree browser the time stamp value to display, by a right-mouse + button click. Items concerned by this command are all sub-items of ‘Fields’ entry.

+ +

Then, a contextual popup menu displays possible display modes, depending + whether the time stamps contains scalar and/or vector values:

+ +

 

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

Options for fields containing only Vector and/or Scalar + values:

+

Options for fields containing only Scalar values:

+

+

+ +

 

+ +

Fig. 4 : Different display mode for results

+ +

 

+ +

These commands are also accessible from the Visualization + menu and from the Visualization + toolbar and are applied to the current selected field.

+ +

 

+ +

+ +

 

+ +

Fig. 5 : Visualization toolbar

+ +

 

+ +

Note:

+ +

In the case of data assigned + to Gauss Points, these existing modes of presentation may give incorrect + presentations because of the algorithms used for the translation of data + from Gauss points to the whole mesh element. Therefore, a message will + be displayed to inform the user about that and let him the possibility + to go on anyway or to cancel the operation:

+ +

 

+ +

+ +

 

+ +

Fig. 6 : Notification message for existing and not modified + VISU presentation

+ +

 

+ +

Two new options are added to the popup menus (scalar and scalar/vector), + the menu bar and the toolbar:

+ +

 

+ +

+ +

 

+ +

Fig. 7 : New command dedicated to Gauss points support

+ +

 

+ +

The first one displays results + of a computation at Gauss points, the second one displays only the Gauss + points (geometry) in the 3D view + for checking purpose.

+ +

This latest option should be understood as a debug mode to check if + coordinates of Gauss points are correctly computed by the system. Later + on, this option could be moved to the ‘Families’ entry of the tree browser + – like for Mesh entities – but this requires modifying the MED file data + model, and is out of the scope of this specification.

+ + + + diff --git a/doc/salome/gui/GAUSS/animation_function.htm b/doc/salome/gui/GAUSS/animation_function.htm new file mode 100644 index 00000000..997b817d --- /dev/null +++ b/doc/salome/gui/GAUSS/animation_function.htm @@ -0,0 +1,94 @@ + + + + + +Animation function + + + + + + + + + + + +

Animation function

+ +

When a field defines several timestamps, a right-mouse + button click display an ‘Animation’ + popup menu that allows user to define an animation of the results between + 2 date.

+ +

 

+ +

This option will be extended + to results at Gauss point, later on, in the frame of lot 3 – Advanced + version of the viewer.

+ + + + diff --git a/doc/salome/gui/GAUSS/blue_down.jpg b/doc/salome/gui/GAUSS/blue_down.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5376a154a5f0dc66f0c43c4f32b112e559349918 GIT binary patch literal 806 zcmex=J4j*U&$?YOzOo%)}-M@CBq z81f0J`b%9}F*oKr|IuRydhBLwRFC!isVd2G;aQ!`tGYWOf3>giYH9vwxb*CK(Q(h5 zSsBs2x}t`gKTkIkx4*Uc_HM}x&FrK@Iw!hzIE-inlY7Sg@@(reUl24YrKM# z9*eQgXnuJrW6|Sne6RDxnx3}Ky>{^MjZ^n$L~k}!HPfF{5;|*7Tffz`XE!CMi8^F> zid?@c$kFzFPwcU|J33EXF=O27=Dnii$oPvldc+2_ujJ}JJ8f4{bD!S&;OT9*&) z+goYny1Mr9wz%j_^~aT5PlBUNe`~jWW!^RSnnaJZ607^Pr>Cci9o-`JC@93M^2@hX zD+0dS_3r)=v&fF4;Q7|Hv#+w-El%#ZWmU&J`?_q}Dfy7&KD*z~UEF2P-+KC3o`S%F xg<7kaxYS#%CeF6LH2YrFo;Ftn3&sBood?z42CM)8 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/blue_left.jpg b/doc/salome/gui/GAUSS/blue_left.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ceb91efb3b75f1a0afb197c683167dc5d35f5794 GIT binary patch literal 747 zcmex=Fr!$i~FND!{^+XutI#El1qh5p}S;9&-e3Ni~a*fWG~H@WlNw}$zI zXQ1GVvZ~H<$(xc@P1&ae7rF5`yv+^W6O*Uxdcq}m$Il0sJ(jFm?7Ds1mzkDUZkF?% z_qQBaWxdD#KZEDG7wcwQPOWKPw)=|p@|@has%b(~rKJ0p{9Jb;g|#VIEIM*?(d*<(wry@ZX$GleAOpR6zl3&UBCE@d?$4gf1<~Mv(?jxn7eB8HZPycnUodTPi zH-DOzvTm{!?^2l#-B~69PpxHqw|iWaVP_FIa9mI&B;=^&$ME&{Cz&}ZW$13btmnyg z_IKo~W%qxsyHV_NU1w30chQw6doCC)c)01bEr){3jD$;i_H{~|W~yf|{bdob#LJ`N jb5O9z-ud&-9=^TncV_?6cU9+K_djlD618U%|9=wzFdO6% literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/blue_right.jpg b/doc/salome/gui/GAUSS/blue_right.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf6f924028e9282c4dfa083ff4d5f7a20c6480f3 GIT binary patch literal 792 zcmex=~Mn^83ciTRup10WDQI#oVf9#@c&y3Jj_7b1epaH z>>0wg);|60Zl!Q`{mYooQ^WIiOnGtjQQlN<%bp(3Jd4XN>pHulmRwpoZ+8CfeCbo? z*MC{TB)e6ogKrbtYWquhArE;@pN=VCCOo<0LvwmW>&zKpD_IrK*O^Rh*^qXiG-Tag z$*B4XCtNPP3AxvHTTGvA$K~`_4D)7t=s$Y!>qXy{NiPovNxHAPvv^5*oafb>Yc8zj zS^V*d!JY##yvrSP6bd*+d^iPN0|NuaQ+#?VFB@~VO?V|5IQO~tk+Nl_#j7}GO+FqBE-bnfrg3Vj&Kb)nz7OUfLqkMdl?20fRh|tC zww$rC+kB?}<(sl6XM6}>I45%PnWc3aUiBMR?|fIPu6j>+zU=`4^NXuPqNEonDa{cS zx~jBg`tr)s@@$u1=GE`R&-3tn+SHZ-4kL?tc2ZgRcK?0szI(2p9kW literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/blue_up.jpg b/doc/salome/gui/GAUSS/blue_up.jpg new file mode 100644 index 0000000000000000000000000000000000000000..383840fdb1334d5d2b6a81967ab24a4b8dc01ef5 GIT binary patch literal 799 zcmex=oA_xov7FITP0R{$EMs}dHVXA??VPO?y5E2$)W9Lv*;xu#= z6%S105(KJeW@BZADFcQLv!Ef9V_+iC6ve`WLLw74DhVt9zs11A%m{Q0vmk>#L+GDb zmFBnmm@@dgQ&wC09-f)Ay4RNJYoc;kZikZdsZ%qp=9+a%FZ2pH67$7VL71bnB)U4^ za^=qAr1S;HZ`EAkSaJGD{ufT=oxfY+jEeh0g-?0gM(i?=Uv*dF$rGNZfkr;^3pySw z+Q7MPk?LE6faZG)S}}RGs~^>^;cs2^rZT?d$&^de-dxVvR`j!A-J_)NZEv-sZgb7* z)qknoZ>@2;?UGG<`qISc*Q#j`9?yL>C28iQ#6#-BDlB0RLab*36d4u-+G;S!UAy(B z=kmT(-S6{G$O#&JnN+H=@uTvl*@Y+kLUp%G&lfnBW$C7|$|ZH?g0Ci5j3cVHU3+Ti8zHZ} z+w{oXpO0DE?tKo+v-i)KI?uQ$)AHt}m)BY*xEvE(kiIN-2SaB|hWFq5ja%;89)D4! z<8qZ*QBG{3^B#te&mX6!?qu^#K05co#mk$`J;DVy%(}Ve@nTa}hod|^pPSihnHI#y mP2JM#`sZ#!?V~kH94`cd))(xop8B$E`u>owTZ6>^-vj{my8!wC literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/cameras.htm b/doc/salome/gui/GAUSS/cameras.htm new file mode 100644 index 00000000..9f55bd5c --- /dev/null +++ b/doc/salome/gui/GAUSS/cameras.htm @@ -0,0 +1,236 @@ + + + + + +Cameras + + + + + + + + + + + +

Cameras

+ +

Salome provides a simple way to store and retrieve a + specific point of view corresponding to the scene really seen by user. + This behaviour will be kept without any change for the project.

+ +

 

+ +

This command is activated by right clicking with the mouse on the 3D + view. Then a popup menu is opened, and user can select the ‘Save + view parameters’.

+ +

 

+ +

The selection of this command creates a new child node in the Study + and is shown in the Study browser under the main entry ‘Post-Pro’ – i.e. + nodes are located at the same levels as MED files.

+ +

 

+ +

From these nodes, 4 options are accessible through another contextual + popup menu, as described in the following figure:

+ +

 

+ +

+ +

 

+ +

Fig. 37 : Popup menu from a ‘Camera’ item of the tree

+ +

 

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

Command

+

Purpose

+

Restore view parameters

+

Apply the current settings of the view parameter to the current 3D view.

+

Save view parameters

+

Save current parameters of the 3D view to the current entry of the tree + (position, view point and focal distance).

+

Rename

+

Allows user to redefine the name of the element. A dialog is opened + to realize the input.

+

Delete

+

Remove the element from the study browser.

+ +

 

+ +

Persistence of ‘View parameters’ is ensured as a standard Salome behavior + and consists in storing/retrieving the corresponding SALOMEDS Study attribute.

+ +

 

+ +

Movement + of the camera between 2 positions

+ +

In certain situation, the movement of camera is slow and smooth to allow + user to understand the displacement. Situation concerned are:

+ +

 

+ + + +

 

+ +

The path between 2 positions will be interpolated by a number of steps + computed by the system according to an angular step defined in the preferences.

+ +

 

+ +

The interpolated movement takes care about initial and final positions + and orientations of the view point and the focal point.

+ +

 

+ +

+ +

 

+ +

Fig. 38 : Transformation between 2 cameras

+ +

 

+ +

Changing the view point to a predefined state

+ +

The user can also change the view point by any of the pre-defined icons + of the 3D view (top, down, front, back, left, right, axo):

+ +

 

+ +
    + +
  • The camera is smoothly + modified to the standard pre-defined + state of the corresponding pre-defined view (position, focus, focal + distance)

  • + +
  • The center of dynamic rotation of the view is + modified to the one corresponding to the pre-defined view

  • + +
  • In the case a point is selected, it remains selected

  • +
+ +

 

+ + + + diff --git a/doc/salome/gui/GAUSS/command_activation.htm b/doc/salome/gui/GAUSS/command_activation.htm new file mode 100644 index 00000000..a0800633 --- /dev/null +++ b/doc/salome/gui/GAUSS/command_activation.htm @@ -0,0 +1,112 @@ + + + + + +Command Activation + + + + + + + + + + + +

Command Activation

+ +

The command is defined in the ‘File’ + menu of the VISU module:

+ +

Click File +  Import + from file    Displays + a selection file dialog box.

+ +

 

+ +

+ +

 

+ +

Fig. 1 : Opening a MED file in Salome

+ +

 

+ +

The dialog allows the user to browse the files hierarchy accessible + from his PC. When user found the file, he validates its choice by pressing + the ‘Open’ button.

+ +

 

+ +

 

+ + + + diff --git a/doc/salome/gui/GAUSS/command_activation_in_display_meshes.htm b/doc/salome/gui/GAUSS/command_activation_in_display_meshes.htm new file mode 100644 index 00000000..38d7269d --- /dev/null +++ b/doc/salome/gui/GAUSS/command_activation_in_display_meshes.htm @@ -0,0 +1,114 @@ + + + + + +Command Activation in Display Meshes + + + + + + + + + + + +

Activation of commands

+ +

The user has to select in the tree browser the mesh element + to display by a right-mouse button click. Items concerned by this command + are all sub-items of ‘Families’ + and ‘Groups’ entries.

+ +

 

+ +

Then, a contextual popup menu displays possible actions:

+ +

 

+ +
    + +
  • If the element has never been yet displayed, a + unique ‘Create Presentation’ action + is proposed to load corresponding data from the MED file and to compute + the graphical presentation of the element. Element is then displayed in + the current default mode.

  • + +
  • If the element has already been loaded, then several + options are proposed. They are defined in the next paragraph.

  • +
+ +

 

+ +

These commands are also accessible from the menu bar and from the Representation toolbar and are applied + to the current selection of the tree.

+ +

 

+ + + + diff --git a/doc/salome/gui/GAUSS/command_activation_picking.htm b/doc/salome/gui/GAUSS/command_activation_picking.htm new file mode 100644 index 00000000..36c242ad --- /dev/null +++ b/doc/salome/gui/GAUSS/command_activation_picking.htm @@ -0,0 +1,139 @@ + + + + + +Command Activation picking + + + + + + + + + + + +

Command activation

+ +

The activation of the command is possible from:

+ +

 

+ +
    + +
  • The menu bar: Picking + ► Gauss Point Info

  • + +
  • A + new icon from a new ‘Gauss Point’ toolbar’

  • +
+ +

 

+ +

+ +

 

+ +

Fig. 46 : New Gauss Point + toolbar

+ +

 

+ +

This new toolbar will be connected to the main + 3D view only. The second icon will be explained in Segmentation.

+ +

 

+ +

Note:

+ +

The timestamp popup menu + will not provide this functionality since the picking, as defined for + Gauss points behaviour, is implemented as a View + attribute. Thus, picking will be enabled for all presentation displayed + in the 3D view.

+ +

 

+ +

The activation of the command is done by selection of the ‘Gauss + Point Info’ item from either the menu bar or the toolbar icon. + A check mark will be added on + the left side of the corresponding menu bar item to remind to user that + the option is active. In the case of the toolbar icon, the button remains + pressed when command is activated.

+ +

 

+ +

Reversibly, the deactivation of the command is done by another selection + of the command, which acts as a toggle option. The check mark will then + be erased from the menu item, and button from the toolbar will be released.

+ + + + diff --git a/doc/salome/gui/GAUSS/command_activation_segmentation.htm b/doc/salome/gui/GAUSS/command_activation_segmentation.htm new file mode 100644 index 00000000..444733ad --- /dev/null +++ b/doc/salome/gui/GAUSS/command_activation_segmentation.htm @@ -0,0 +1,174 @@ + + + + + +Command Activation Segmentation + + + + + + + + + + + +

Command Activation

+ +

The activation of the command is possible from:

+ +

 

+ + + +

 

+ +
    + +
  • The menu bar: Segmentation + ► Sphere Segmentation

  • + +
      + +
    • A new icon from the updated + ‘Gauss Point’ toolbar

    • +
    +
+ +

 

+ +

Note:

+ +

As for picking command, + the timestamp popup menu will not provide this functionality since the + segmentation is also implemented as a View attribute. Thus, segmentation + will be enabled for all presentation displayed in the 3D view.

+ +

 

+ +

As for plane segmentation + command, the timestamp popup menu will not provide this functionality + since the segmentation is also implemented as a View attribute. Thus, + segmentation will be enabled for all presentation displayed in the 3D + view.

+ +

 

+ +

The activation of the command is done by selection of the ‘Box + Segmentation’ item from either the menu bar or the toolbar icon. + A check mark will be added on + the left side of the corresponding menu bar item to remind to user that + the option is active. In the case of the toolbar icon, the button remains + pressed when command is activated.

+ +

 

+ +

Reversibly, the deactivation of the command is done by another selection + of the command, which acts as a toggle option. The check mark will then + be erased from the menu item, and button from the toolbar will be released.

+ +

 

+ +

The activation of the command is done by selection of the ‘Sphere + Segmentation’ item from either the menu bar or the toolbar icon. + A check mark will be added on + the left side of the corresponding menu bar item to remind to user that + the option is active. In the case of the toolbar icon, the button remains + pressed when command is activated.

+ +

 

+ +

Reversibly, the deactivation of the command is done by another selection + of the command, which acts as a toggle option. The check mark will then + be erased from the menu item, and button from the toolbar will be released.

+ +

 

+ +

 

+ + + + diff --git a/doc/salome/gui/GAUSS/command_activation_timestamps_animation.htm b/doc/salome/gui/GAUSS/command_activation_timestamps_animation.htm new file mode 100644 index 00000000..d415fd30 --- /dev/null +++ b/doc/salome/gui/GAUSS/command_activation_timestamps_animation.htm @@ -0,0 +1,108 @@ + + + + + +Command activation timestamps animation + + + + + + + + + + + +

Command activation

+ +

The command can be activated from the study browser only:

+ +

 

+ +
    + +
  • Mouse right button click over a ‘Field’ + of the study tree browser

  • +
+ +

 

+ +

This opens a popup menu with only one option: ‘Animation’

+ +

 

+ +

+ +

 

+ +

Fig. 29 : ‘Animation’ popup menu

+ + + + diff --git a/doc/salome/gui/GAUSS/command_deactivation.htm b/doc/salome/gui/GAUSS/command_deactivation.htm new file mode 100644 index 00000000..417b38b0 --- /dev/null +++ b/doc/salome/gui/GAUSS/command_deactivation.htm @@ -0,0 +1,101 @@ + + + + + +Command deactivation + + + + + + + + + + + +

Command deactivation

+ +

When user exits the picking function (see Picking + command activation), the system performs the following tasks:

+ +

 

+ +
    + +
  • Erase the parent mesh element if displayed

  • + +
  • Erase the marker from the scalar bar (except the + case of Gauss point without result)

  • + +
  • Remove the information window

  • + +
  • Unselect the current selected Gauss point (if + any)

  • +
+ + + + diff --git a/doc/salome/gui/GAUSS/command_description_in_display_meshes.htm b/doc/salome/gui/GAUSS/command_description_in_display_meshes.htm new file mode 100644 index 00000000..0aaa8d3d --- /dev/null +++ b/doc/salome/gui/GAUSS/command_description_in_display_meshes.htm @@ -0,0 +1,283 @@ + + + + + +Command Description in Display Meshes + + + + + + + + + + + +

Description of commands

+ +

The popup + menu proposes two main lists of commands related to the display of the + meshes elements, in addition to a few other standards actions:

+ +

 

+ +

+ +

 

+ +

Fig. 3 : Families or Groups item Popup menu

+ +

 

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

Command

+

Purpose

+

Sub-commands of Representation + menu

+

Points

+

Display all nodes of the meshes elements

+

Wireframe

+

Display meshes elements (skin of the elements) by drawing lines on their + boundaries.

+
    + +
  • Quadrangular items are represented by 4 lines + (and not 2 triangles)

  • + +
  • Quadratic elements are displayed like linear ones + (i.e.: boundaries) as a standard display.

  • +
+

+

Remark: + in the frames of this project, only Standard + display will be implemented.

+

Surface

+

Shaded display of the skin of the elements

+

Insideframe

+

Same as Wireframe, + but extended to all elements (inside included)

+

Surfaceframe

+

Equivalent to Surface + Wireframe + display mode.

+

Shrink

+

Explode elements to distinguish their boundaries from each other (homothetic + transformation). This mode can be activated either for Wireframe or Surface + display mode.

+

Unshrink

+

Cancels Shrink toggle option

+

Sub-commands of Properties menu

+

Color

+

Or both:

+

   Cell + Color

+

   Edge + Color

+

in the case of ‘Surfaceframe’ presentation

+

Allows user to define the color property of the elements through a standard + dialog:

+

+

 

+

Color is applied once user has pressed the OK + button.

+

Opacity

+

Allows user to define the transparency property of the elements. The + existing functionality allows to define a new value from a dialog and + to apply it by pressing the OK + button.

+

This behaviour will be changed + to a modeless dialog, as it is already implemented in the SMESH module, + so that the application of the transparency will be done in real time + (using a slider).

+

+

 

+

To exit the dialog, user has to press the Close + button (the current choice will be kept).

+

Line width

+

Allows user to define the line width property of the elements through + a standard dialog.

+

Values can be set from 1 to 10 units.

+

 

+

+

 

+

Property is applied once user has pressed the OK + button.

+

Note: this option affects only wireframe-based presentation.

+

Other commands

+

Rename

+

Allows user to redefine the name of the element. A dialog is opened + to realize the input.

+

Erase

+

Erase the elements from the 3D view.

+

Display Only

+

Clear the 3D view and display the element alone.

+

Delete

+

Erase the elements from the 3D view and remove it from the study browser.

+ +

 

+ +

 

+ + + + diff --git a/doc/salome/gui/GAUSS/command_description_segmentation.htm b/doc/salome/gui/GAUSS/command_description_segmentation.htm new file mode 100644 index 00000000..5eb50285 --- /dev/null +++ b/doc/salome/gui/GAUSS/command_description_segmentation.htm @@ -0,0 +1,529 @@ + + + + + +Command description segmentation + + + + + + + + + + + + +

Command description

+ +

Box Segmentation

+ +

Once the command is activated, a new window, below + the main 3D view and docked + within the desktop is created to display the content of the segmentation + cursor.

+ +

 

+ +

A dialog box (see Fig. + 52 : Segmentation configuration dialog) is also displayed to manually + configure the segmentation cursor parameters.

+ +

 

+ +

As an example of the expected results, the next picture shows the 2 + views of the PERFECT viewer:

+ +

 

+ +

+ +

 

+ +

Fig. 51 : PERFECT viewer segmentation

+ +

 

+ +

Sphere Segmentation

+ +

 

+ +

As for plane segmentation, once the command + is activated, a new window, below the + main 3D view and docked + within the desktop is created to display the content of the segmentation + cursor.

+ +

 

+ +

A dialog + box (see Fig. + 54 : Sphere Segmentation configuration dialog) is also displayed to + manually configure the segmentation cursor parameters.

+ +

 

+ +

 

+ +
    + +
  • The main view (top) shows the results at Gauss + points with its scalar bars as described in the previous chapter. In addition, + a semi-transparent segmentation cursor + – in the form of a box with an axis to define its orientation – is added + to define the part of the variables to be inspected. Two + different presentations for Gauss points are used, depending on + location of points: inside or outside the segmentation cursor. Inside + points uses the normal presentation for Gauss points as defined in Fig. + 10 : Results at Gauss points primitive configuration dialog. Outside + points presentation is to be defined in the segmentation configuration + dialog.

  • +
+ +

 

+ +
    + +
  • The second view (bottom) – also called segmentation + viewer – shows, in real time, the results at Gauss points only (no meshes + elements) that are located inside + the segmentation cursor. Gauss points are displayed with the same + presentation as the one used for points + inside the cursor of the first view. This view is automatically + updated when the cursor is changed in the first view.

  • +
+ +

 

+ +

 

+ +

Picking capabilities

+ +

The picking functionality, as defined in Picking, + is available in both views. The picked point is also highlighted by the + 3D cursor in both views simultaneously. The semi-transparent information + window is displayed in the view used for the picking.

+ +

 

+ +

In the case a picked point (from the first view) is not visible in the + second view – i.e.: the point is not contained within the segmentation + cursor – only the picking cursor is displayed in the second view till + the selection is cancelled.

+ +

 

+ +

 

+ +

Edition of the box segmentation cursor

+ +

A dialog with 2 tabs is opened when the function is activated. When + user exits this dialog, the function is ended and the second view (segmentation + cursor viewer) is erased.

+ +

 

+ +

The following dialog + describes configuration of the segmentation cursor:

+ +

 

+ +

+ +

 

+ +

Fig. 52 : Segmentation configuration dialog

+ +

 

+ +

This dialog defines the coordinates of the origin of the segmentation + cursor, in addition to its direction and depth.

+ +

 

+ +

Parameters are explained as follows:

+ +

 

+ +

+ +

 

+ +

Fig. 53 : Understanding segmentation cursor parameters

+ +

 

+ +

It is also possible to graphically edit + these parameters directly from the first 3D view with the mouse:

+ +

 

+ +
    + +
  • Translation (dragging) of the lower plane along + the V axis changes the origin of the cursor

  • + +
  • Rotating the V axis around its origin defines + a new direction for the cursor

  • + +
  • Dragging the second plane (upper one) along its + axis changes the depth of the cursor. It is not possible to move this + second plane under the first one (minimum depth is set to 0).

  • +
+ +

 

+ +

The dialog is automatically updated.

+ +

 

+ +

 

+ +

Edition of the segmentation cursor

+ +

 

+ +

A dialog with 2 tabs is opened when the function is activated. When + user exits this dialog, the function is ended and the second view (segmentation + cursor viewer) is erased.

+ +

 

+ +

The following + dialog describes configuration of the segmentation cursor:

+ +

 

+ +

+ +

 

+ +

Fig. 54 : Sphere Segmentation configuration dialog

+ +

 

+ +

This dialog defines the coordinates of + the origin of the segmentation cursor, in addition to its radius.

+ +

 

+ +
    + +
  • Origin + defines the coordinates of the origin of the segmentation cursor. Default is set to the CAD origin.

  • +
+ +

 

+ +
    + +
  • Radius + corresponds to the radius of the sphere. Default + is set to 5% of the diagonal of the bounding box for the scene + (i.e.: diameter is then equal to 10% of the diagonal).

  • +
+ +

 

+ +
    + +
  • +/- + Ratio corresponds to the number by which the radius will be respectively + multiplied or divided at edition. Default + is set to 2 mm.

  • +
+ +

 

+ +

Keyboard: + During rendering the scene, it is possible to modify the radius + (multiply/divide by the radius ratio) by using ‘D’, + ‘d’ keys of the keyboard when + the 3D view is active. The effect is immediately applied. The value of + the ratio is only defined through the dialog box.

+ +

 

+ +

Parameters are explained as follows:

+ +

 

+ +

+ +

 

+ +

Fig. 55 : Understanding segmentation cursor parameters

+ +

 

+ +

It is also possible to graphically edit these parameters directly from + the first 3D view with the mouse:

+ +

 

+ +
    + +
  • Translation (dragging) of the sphere by moving + the centre (glyph) of the sphere

  • + +
  • Change the radius my moving the boundary glyph + on the top of the sphere (minimum radius is set to 0)

  • +
+ +

 

+ +

The dialog is automatically updated accordingly.

+ +

 

+ +

 

+ +

The second tab provides the user with + the ability to change both presentations of Gauss points inside and outside + the segmentation cursor within the same dialog. This is applicable for + all segmentation cursors (plane & sphere).

+ +

Therefore, + dialogs are made of two parts:

+ +

 

+ +
    + +
  • First + part defines primitives inside the cursor

  • + +
  • Second + part defines primitives outside the cursor

  • +
+ +

 

+ +

Note:

+ +

the next dialogs only + described the content of primitive parameterisation inside the cursor, + intended that all the three primitives are also applicable outside the + cursor.

+ +

 

+ +

Primitive presentation definition for + Gauss points and in the case of a segmentation are defined by the following + dialogs:

+ +

 

+ +

+ +

 

+ +

Fig. 56 : Segmentation Gauss points primitive – Point + sprite parameters

+ +

 

+ +

+ +

 

+ +

Fig. 57 : Segmentation Gauss points primitive – OpenGL + parameters

+ +

 

+ +

+ +

 

+ +

Fig. 58 : Segmentation Gauss points primitive – Geometrical + sphere parameters

+ +

 

+ +

 

+ +

The first part of the dialog is the same as for Fig. + 10 : Results at Gauss points primitive configuration dialog.

+ +

 

+ +
    + +
  • Size: defines the size of Gauss points located + outside the segmentation cursor. It is a percentage of the normal size + of Gauss points defined in Fig. + 10 : Results at Gauss points primitive configuration dialog.

  • + +
  • Color: define the unique color used for Gauss + points located outside the segmentation cursor. It is a button control. + When user press it, he can choose a color from a standard color configuration + dialog:

  • +
+ +

 

+ +

+ +

 

+ +

Fig. 59 : Standard color dialog

+ +

 

+ +

Predefined view for the segmentation 3D view

+ +

A new toolbar is defined for the second view only (segmentation viewer) + to define certain pre-defined point of view:

+ +

 

+ +

+ +

 

+ +

Fig. 60 : New toolbar for the segmentation viewer 3D view

+ +

 

+ +

From left to right, the predefined points of view are:

+ +

 

+ +
    + +
  • Front

  • + +
  • Back

  • + +
  • Top

  • + +
  • Bottom

  • + +
  • Left

  • + +
  • Right

  • + +
  • Cursor (front)

  • + +
  • Cursor (back)

  • +
+ +

 

+ +

This toolbar is docked to the frame of the second view.

+ +

 

+ +

Note:

+ +

The possibility to adjust + in real time the segmentation viewer to the segmentation cursor can be + proposed as a future improvement of this functionality, but is out of + the scope of this project.

+ +

 

+ + + + diff --git a/doc/salome/gui/GAUSS/command_description_timestamps_animation.htm b/doc/salome/gui/GAUSS/command_description_timestamps_animation.htm new file mode 100644 index 00000000..215d21ec --- /dev/null +++ b/doc/salome/gui/GAUSS/command_description_timestamps_animation.htm @@ -0,0 +1,172 @@ + + + + + +Command description timestamps animation + + + + + + + + + + + +

Command description

+ +

Selection of the ‘Animation’ + popup menu opens the following modeless dialog:

+ +

 

+ +

+ +

 

+ +

Fig. 30 : ‘Animation’ dialog

+ +

 

+ +
    + +
  • Setup Animation + opens another dialog to define presentation to animate. It is described + later on in this chapter

  • +
+ +

 

+ +
    + +
  • Generate frames + button computes all presentation on selected timestamps (see Setup Animation). + Presentations are kept in memory.

  • +
+ +

 

+ +
    + +
  • The other buttons acts as a record player (to + play, move forward, move backward, and so on), define speed for animation + and save a bitmap file for each timestamp on disk.

  • +
+ +

 

+ +

‘Close’ button stops the on + going animation, clear memory and exits the animation mode.

+ +

To go on the explanation, ‘Setup Animation’ + button open the next dialog:

+ +

 

+ +

+ +

 

+ +

Fig. 31 : ‘Setup Animation’ dialog

+ +

 

+ +
    + +
  • Use range of timestamps allows user to define + a range for timestamps to consider. If not checked, all available timestamps + of the variable are considered

  • +
+ +

 

+ +
    + +
  • Field shows the list of fields available

  • +
+ +

 

+ +
    + +
  • Properties area is defined by two buttons. The + first one allows user to select the presentation mode he want to see during + the animation. The second one launches the configuration dialogs corresponding + to the selected presentation (already described in GUI specs of LOT 1 + and LOT 3).

  • +
+ +

 

+ +

 

+ + + + diff --git a/doc/salome/gui/GAUSS/command_result.htm b/doc/salome/gui/GAUSS/command_result.htm new file mode 100644 index 00000000..93c7c89a --- /dev/null +++ b/doc/salome/gui/GAUSS/command_result.htm @@ -0,0 +1,115 @@ + + + + + +Command Result + + + + + + + + + + + +

Command Result

+ +

The validation of the command starts the process of loading + data (see 'Loading MED files‘).

+ +

 

+ +

The browser, corresponding to the current study, is updated by the logical structure of the loaded MED + file in the form of a hierarchical tree.

+ +

 

+ +

The navigation within the tree is made possible by pressing either [+] to expand or [-] + to collapse a node. Node names correspond to names associated to entities + from the MED file.

+ +

 

+ +

+ +

 

+ +

Fig. 2 : Study browser populated by data loaded from MED + file

+ +

 

+ +

The 3D viewer is still not updated at this time (i.e.: nothing is yet + displayed in the 3D viewer).

+ + + + diff --git a/doc/salome/gui/GAUSS/cshdat_robohelp.htm b/doc/salome/gui/GAUSS/cshdat_robohelp.htm new file mode 100644 index 00000000..0867a68f --- /dev/null +++ b/doc/salome/gui/GAUSS/cshdat_robohelp.htm @@ -0,0 +1,258 @@ + + +Gauss Points Viewer + + + + + + + + + + + + + + + + + diff --git a/doc/salome/gui/GAUSS/cshdat_webhelp.htm b/doc/salome/gui/GAUSS/cshdat_webhelp.htm new file mode 100644 index 00000000..ac72b5e2 --- /dev/null +++ b/doc/salome/gui/GAUSS/cshdat_webhelp.htm @@ -0,0 +1,251 @@ + + +Gauss Points Viewer + + + + + + + + + + + + + + + + + diff --git a/doc/salome/gui/GAUSS/default.css b/doc/salome/gui/GAUSS/default.css new file mode 100644 index 00000000..321e4fcf --- /dev/null +++ b/doc/salome/gui/GAUSS/default.css @@ -0,0 +1,76 @@ +BODY { + font-family:Arial; + background-color:#ffffff; } +H1 { + font-weight:bold; + font-size:24.0pt; } +LI.kadov-H1 { + font-weight:bold; + font-size:24.0pt; } +H2 { + font-weight:bold; + font-size:18.0pt; } +LI.kadov-H2 { + font-weight:bold; + font-size:18.0pt; } +H3 { + font-weight:bold; + font-size:14.0pt; } +LI.kadov-H3 { + font-weight:bold; + font-size:14.0pt; } +H4 { + font-weight:bold; + font-size:12.0pt; } +LI.kadov-H4 { + font-weight:bold; + font-size:12.0pt; } +H5 { + font-weight:bold; + font-size:10.0pt; } +LI.kadov-H5 { + font-weight:bold; + font-size:10.0pt; } +H6 { + font-weight:bold; + font-size:8.0pt; } +LI.kadov-H6 { + font-weight:bold; + font-size:8.0pt; } +P { + font-size:12.0pt; + margin-top:0pt; + margin-bottom:0pt; } +LI.kadov-P { + font-size:12.0pt; + margin-top:0pt; + margin-bottom:0pt; } +A.expandspot { + color:#008000; + cursor:hand; + font-style:italic; + text-decoration:none; } +SPAN.expandtext { + font-style:italic; + font-weight:normal; + color:#ff0000; } +A.dropspot { + cursor:hand; + color:#008000; + font-style:italic; + text-decoration:none; } +A.glossterm { + color:#800000; + cursor:hand; + font-style:italic; + text-decoration:none; } +SPAN.glosstext { + font-style:italic; + font-weight:normal; + color:#0000ff; } +OL { + margin-top:0px; + margin-bottom:0px; } +UL { + margin-top:0px; + margin-bottom:0px; } diff --git a/doc/salome/gui/GAUSS/default_ns.css b/doc/salome/gui/GAUSS/default_ns.css new file mode 100644 index 00000000..dbda41ef --- /dev/null +++ b/doc/salome/gui/GAUSS/default_ns.css @@ -0,0 +1,93 @@ +BODY { + font-family:Arial; + background-color:#ffffff; } +H1 { + font-weight:bold; + font-size:24.0pt; + font-family:Arial; } +LI.kadov-H1 { + font-weight:bold; + font-size:24.0pt; } +H2 { + font-weight:bold; + font-size:18.0pt; + font-family:Arial; } +LI.kadov-H2 { + font-weight:bold; + font-size:18.0pt; } +H3 { + font-weight:bold; + font-size:14.0pt; + font-family:Arial; } +LI.kadov-H3 { + font-weight:bold; + font-size:14.0pt; } +H4 { + font-weight:bold; + font-size:12.0pt; + font-family:Arial; } +LI.kadov-H4 { + font-weight:bold; + font-size:12.0pt; } +H5 { + font-weight:bold; + font-size:10.0pt; + font-family:Arial; } +LI.kadov-H5 { + font-weight:bold; + font-size:10.0pt; } +H6 { + font-weight:bold; + font-size:8.0pt; + font-family:Arial; } +LI.kadov-H6 { + font-weight:bold; + font-size:8.0pt; } +P { + font-size:12.0pt; + margin-top:1pt; + margin-bottom:1pt; + font-family:Arial; } +LI.kadov-P { + font-size:12.0pt; + margin-top:0pt; + margin-bottom:0pt; } +A.expandspot { + color:#008000; + cursor:hand; + font-style:italic; + text-decoration:none; } +SPAN.expandtext { + font-style:italic; + font-weight:normal; + color:#ff0000; } +A.dropspot { + cursor:hand; + color:#008000; + font-style:italic; + text-decoration:none; } +A.glossterm { + color:#800000; + cursor:hand; + font-style:italic; + text-decoration:none; } +SPAN.glosstext { + font-style:italic; + font-weight:normal; + color:#0000ff; } +OL { + margin-top:0px; + margin-bottom:0px; + font-family:Arial; } +UL { + margin-top:0px; + margin-bottom:0px; + font-family:Arial; } +ol ol { + margin-top:1px; } +ol ul { + margin-top:1px; } +ul ul { + margin-top:1px; } +ul ol { + margin-top:1px; } diff --git a/doc/salome/gui/GAUSS/description_of_commands_display_results.htm b/doc/salome/gui/GAUSS/description_of_commands_display_results.htm new file mode 100644 index 00000000..038a88ff --- /dev/null +++ b/doc/salome/gui/GAUSS/description_of_commands_display_results.htm @@ -0,0 +1,952 @@ + + + + + +Description of commands display results + + + + + + + + + + + + +

Description of commands

+ +

Results at Gauss Points

+ +

 

+ +

This mode corresponds to a new development that will be performed in + the frame of this project.

+ +

 

+ +

Values are displayed at Gauss points as point sprites in the 3D view.

+ +

 

+ +
    + +
  • Point sprites are processed using 2 textures (16x16 + pixels):

  • +
+ +

 

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

Texture for intensity (brightness)  

+

+

Texture for alpha channel (transparency)  

+

+
+

 

+ +
    + +
  • Color and size of the points depend on the value + of the results (scalar, modulus of vectors or each component of a vector, + tensor or matrix)

  • + +
  • The default sizes to use for point sprites presentation + will be computed by the system. (therefore, these parameters cannot be + defined in the preferences). Nevertheless, the minimum and maximum range + values for the rendering will be parameterized in the configuration dialog.

  • + +
  • The maximum size of the point sprite is limited + (clamp) so that when user applies a high zoom factor, the whole scene + remains visible

  • + +
  • A point sprite is displayed in a 3D environment + so that its size is depending on location within the 3D scene. At a given + computed size, a point sprite will be bigger when it is near from the + camera, than when it is far from the camera.

  • +
+ +

 

+ +

+ +

 

+ +

Fig. 8 : Point sprite display mode

+ +

 

+ +

Two different scalar bars are displayed simultaneously:

+ +

 

+ +
    + +
  • The first scale – global + – corresponds to the minimum and maximum values founded for the variable + at all time stamps (located on + the left side). When active, the second is greyed and disabled (not used).

  • + +
  • The second scale – local + – defines the minimum and maximum values at the current + time stamp for the variable (located on the right side). When active, + the first one shows the limits of the second one by 2 black lines.

  • + +
  • Possibility to display only one bar (defined in + the preferences). In this case it is the local one.

  • +
+ +

 

+ +
    + +
  • Two modes are defined for these scalar bars:

  • + +
      + +
    • Palette of colours (rainbow scale)

    • + +
    • 2 colors (bicolor scale)

    • +
    +
+ +

 

+ +
    + +
  • Only one is active at a time. It uses all the + available colors.

  • +
+ +

 

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

Mode

+

2 bars / + active = global bar

+

2 bars / active = local bar

+

1 active bar = local bar

+

Palette

+

+

+

+

Bicolor

+

red > 0

+

blue < 0

+

+

+

+ +

 

+ +

Fig. 9 : Scalar bars for results at Gauss point

+ +

 

+ +

The necessity to display simultaneously 2 synchronized scalars bars + requires defining a new dialog for the configuration.

+ +

 

+ +

Besides, a dedicated dialog is also defined to customize the point sprite + behaviour. Thus, when user activates the command, he is prompted by a + dialog with 2 tabs. They are defined as follows:

+ +

+ +

+ +

 

+ +

Fig. 10 : Results at Gauss points primitive configuration + dialog

+ +

 

+ +
    + +
  • Primitives + allows user to choose the graphic primitive to use to display results + at Gauss points. As a first step, the ‘point + sprite’ only will be used (LOT 1). Other primitives will be discussed + later on at LOT 3, and are suggested here for information purpose only.

  • +
+ +

 

+ +

When user activates the Results at Gauss + points function, the dialog of the ‘Primitive’ tab is moved to an auto-adaptable + dialog which content depends on the selected primitive. Three different + primitives are available and defined as follows:

+ +

 

+ +

+ +

 

+ +

Fig. 11 : Results at Gauss points – Point sprite primitive + configuration dialog

+ +

 

+ +
    + +
  • Point sprite parameters remain unchanged + regarding the definition given in LOT 1 specification.

  • +
+ +

 

+ +

+ +

 

+ +

Fig. 12 : Results at Gauss points – OpenGL primitive configuration + dialog

+ +

 

+ +
    + +
  • OpenGL + point is a new mode to display results as simple OpenGL points. The Clamp parameter defines the maximum + size of the OpenGL point as it is defined for the Point sprite option.

  • +
+ +

 

+ +

 

+ +

+ +

 

+ +

Fig. 13 : OpenGL points presentations

+ +

 

+ +

+ +

 

+ +

Fig. 14 : Results at Gauss points – Geometrical sphere + primitive configuration dialog

+ +

 

+ +
    + +
  • Geometrical + Sphere is the second new mode that displays results using a standard + sphere with a number of faces to be defined thought a Resolution + parameter. Default Resolution is set + to 8. This number corresponds to the Latitude and Longitude definitions + of VTK sphere. The Number of Faces + parameter – not editable – is computed by the system ( NbrFaces = 2*Resolution + x  [Resolution-2] + ) and displayed for information purpose to end-user.

  • +
+ +

 

+ +

    

+ +

 

+ +

Fig. 15 : Sphere presentations (resp. with resolution + 8 and 6)

+ +

 

+ +

        Note:

+ +

In the case the number + of faces (equal to the total number of points in the scene when no segmentation + cursor is used or number of points within the cursor when a segmentation + is in progress, multiplied by the number of faces of one Sphere in the + current resolution) to display is greater than the number defined in the + “Notify when number of faces exceeds:” parameter, then user is prompted + by a dialog to continue or to cancel the display operation.

+ +

 

+ +

+ +

 

+ +

Fig. 16 : Notification message for existing and not modified + VISU presentation

+ +

 

+ +
    + +
  • Size block remains unchanged + as well.

  • +
+ +

 

+ +

For both of these new modes – OpenGL points + and Sphere – the computation of size and the definition of colors + applied to points are done in the same way as for point sprite.

+ +

 

+ +
    + +
  • The Maximum Size + (Clamp) value corresponds to the maximum size that can have a point + sprite during rendering whatever is the magnification of the point or + the zoom of the view. Technically, it corresponds to setting up a clamp + in the vertex shader. The unit is the pixel, and minimum value is defined + to 1, maximum value can be either set to 512 pixels or read from the hardware + by using OpenGL extension functions. + Default value is set to 256 pixels.

  • + +
  • Textures + allows user to define the 2 textures (16x16 pixels) used for point sprite + rendering. The main defines the shape of the point sprite, the alpha channel + one defines the transparency filter by the threshold parameter (default is 0.1). The buttons at the + end of each ‘edit-box’ control open a standard open file dialog to look + for a texture within the directory structure of the disk:

  • +
+ +

 

+ +

+ +

 

+ +

Fig. 17 : Open file dialog to load a texture

+ +

 

+ +
    + +
  • Range for min/max + defines 2 values that will be respectively multiplied by a reference + length (representative of the average size of cells of the mesh) + to define the range for minimum and maximum size of a point during rendering + (at magnification = 100%). Default values are:

  • +
+ +

 

+ +
    + +
      + +
    • Rainbow + scale: min = 10%, max + = 33%

    • + +
        + +
      • Min size will + be associated to the smallest real value (included negative values) of + a result.

      • + +
      • Max size will + be associated to the largest real values of results

      • +
      + +
    • Bicolor + scale: min = 0 (not editable), + max = 33%

    • + +
        + +
      • Null size + will be associated to the 0 scalar value of a result.

      • + +
      • Max size will + be associated to the largest absolute values of results

      • +
      +
    +
+ +

 

+ +

Both values are dynamically + updated by the system according to the selected scalar bar (see Fig. + 18: Scalar bar configuration). In the case of a bicolor scale, the + minimum value is set to 0 in the dialog and the control is disabled.

+ +
    + +
  • Magnification + (%) corresponds to the change of the size in 2D of a result + at Gauss point primitive or Gauss + point primitives (not applicable on other existing presentations). + Acceptable values are in the range ]0;N[. 100% means no magnification, + 50% means half of its size, 200% mean twice its size and so forth. Default is set to 100%.

  • + +
  • +/- Ratio + corresponds to the number by which the magnification will be respectively + multiplied or divided at edition. Minimum value is defined to 0.01, maximum + is defined to 10. Default is set to 2.

  • +
+ +

 

+ +

Keyboard:

+ +

During rendering the scene, it is possible to modify the magnification + (multiply/divide by the magnification ratio) by using ‘M’, + ‘m’ keys of the keyboard when + the 3D view is active. The effect is immediately applied. The ratio is + only defined through the dialog box.

+ +

 

+ +

Spacemouse:

+ +

The dynamic modification of the magnification is also possible using + 2 buttons of the Spacemouse Plus + (see Navigation + using the spacemouse).

+ +

+ +

+ +

 

+ +

Fig. 18 : Scalar bar configuration

+ +

 

+ +

This last dialog allows user to define the characteristics of the scalar + bars to display within the scene.

+ +

 

+ +
    + +
  • Active bar section

  • + +
      + +
    • Local: + when selected, the local bar will be active. Colors used for rendering + the results are taken from this bar. If displayed, global bar will be + greyed and 2 markers will define the limits of the local min/max.

    • + +
    • Global: + when selected, the global bar will be active. Colors for results are taken + in this bar (i.e.: not all colors may be used to display results at a + given time stamp). Local bar is greyed and inactive.

    • + +
    • Displayed: + when checked, the global bar is displayed, else it is not seen. This control + is systematically checked and disabled when the global bar is defined + as active.

    • +
    +
+ +

 

+ +
    + +
  • Scalar range

  • + +
      + +
    • Scalar Mode: + this feature is the same as for standard scalar bar. It allows refining + the value to be inspected:

    • + +
        + +
      • Modulus: value of a scalar or modulus + of a vector

      • + +
      • Component N: Nth component of a vector, + a tensor or a matrix

      • +
      +
    +
+ +

 

+ +
    + +
  • Colors and labels

  • + +
      + +
    • Bicolor: + 2 colors will be used for the active bar:

    • + +
        + +
      • Red for positive values

      • + +
      • Blue for negative values

      • +
      +
    +
+ +

These colors also correspond to colors associated + to min/max values of the palette option.

+ +
    + +
      + +
    •  Rainbow: + A palette of several colors will be used to render the results. A regular + and linear progression is considered from min to max.

    • + +
    • Nb. of colors: + defines the number of color to design the palette (up to 256 colors can + be used).

    • + +
    • Nb. of labels: + defines the number of labels to be written in the bar as text markers.

    • +
    +
+ +

 

+ +
    + +
  • Orientation

  • + +
      + +
    • Vertical: + bar will be vertical

    • + +
    • Horizontal: + bar will be horizontal

    • +
    +
+ +

 

+ +
    + +
  • Origin

  • + +
      + +
    • X: + abscissa of the origin of the bar (from the left side)

    • + +
    • Y: + ordinate of the origin of the bar (from the bottom)

    • +
    +
+ +

 

+ +
    + +
  • Dimension

  • + +
      + +
    • Width: + width of the each bar

    • + +
    • Height: + height of each bar

    • + +
    • Spacing: + space between both bar (only if the 2 bars are to be displayed)

    • +
    +
+ +
    + +
  •  
  • +
+ +

 

+ +
    + +
  • Text properties + button: correspond to the standard feature to define the font and text + associated to the active bar

  • +
+ +

 

+ +

Finally, to exit the dialog and apply choices, press the OK + button, else CANCEL button, to + quit.

+ +

 

+ +

 

+ +

 

+ +

Gauss + Points – Geometry (new presentation)

+ +

 

+ +

This mode corresponds to a new development + that will be performed in the frame of this project. It is very similar + to the presentation of Results as Gauss points (discussed in the previous + paragraph), so only differences are presented here.

+ +

 

+ +

Roughly, the differences between this presentation and the one for results + at Gauss points are:

+ +

 

+ +
    + +
  • Size of points and color are fixed (because there + is no result)

  • + +
  • There are no scalar bars

  • +
+ +

 

+ +

+ +

 

+ +

Fig. 19 : Point sprite display mode (no results case)

+ +

 

+ +

Besides, a dedicated dialog is also defined to customize the point sprite + behaviour. Thus, when user activates the command, he is prompted by a + dialog box defined as follow:

+ +

 

+ +

+ +

 

+ +

Fig. 20 : Gauss points (Geometry) – Point sprite primitive + configuration dialog

+ +

 

+ +

+ +

 

+ +

Fig. 21 : Gauss points (Geometry) – OpenGL primitive configuration + dialog

+ +

 

+ +

+ +

 

+ +

Fig. 22 : Gauss points (Geometry) – Geometrical Sphere + primitive configuration dialog

+ +

 

+ +

 

+ +

The first part of the dialog is the same as for Fig. + 10 : Results at Gauss points primitive configuration dialog.

+ +

 

+ +
    + +
  • Size defines + a value that will be multiplied by a reference length (representative + of the average size of cells of the mesh) to define the size of points + during rendering (at magnification = 100%). Default + values 10%.

  • + +
  • Magnification + and Ratio have the same meaning + as for Results at Gauss points presentation.

  • + +
  • Color: + define the unique color for Gauss. It is a button control. When user press + it, he can choose a color from a standard color configuration dialog:

  • +
+ +

 

+ +

+ +

 

+ +

Fig. 23 : Standard color dialog

+ +

 

+ +

 

+ +

Display of a deformed shape

+ +

 

+ +

Once the option is activated, user is prompted + by a dialog made of two tabs. First tab defined the following dialog to + set-up the presentation at Gauss points and scale factor:

+ +

 

+ +

+ +

 

+ +

Fig. 24 : Deformed Shape dialog – Point sprite primitive

+ +

 

+ +
    + +
  • Scale + Factor is a ratio that is applied to the deformation at each Gauss + points to amplify it for user understanding

  • +
+ +

 

+ +
    + +
  • All other parameters + have already been explained. Content is modified depending on chosen Primitive.

  • +
+ +

 

+ +

+ +

 

+ +

Fig. 25 : Deformed Shape dialog – OpenGL primitive

+ +

 

+ +

+ +

 

+ +

Fig. 26 : Deformed Shape dialog – Geometrical Sphere primitive

+ +

 

+ +

The second tab of the dialog allows the user + to set-up scalar bars in the same way as for Display Results at Gauss + points presentation.

+ +

 

+ +

When user validates the dialog by pressing + the ‘OK’ button, the 3D view is + updated to display the Gauss points, using the selected primitive form, + at their new location.

+ +

 

+ +

In this display mode, the + mesh is never displayed.

+ +

 

+ + + + diff --git a/doc/salome/gui/GAUSS/description_of_the_picking_functionality.htm b/doc/salome/gui/GAUSS/description_of_the_picking_functionality.htm new file mode 100644 index 00000000..37072e5c --- /dev/null +++ b/doc/salome/gui/GAUSS/description_of_the_picking_functionality.htm @@ -0,0 +1,234 @@ + + + + + +Description of the picking functionality + + + + + + + + + + + +

Description of the picking functionality

+ +

In default mode, moving the mouse over the results at + Gauss points presentation produces the display of a specific + 3D cursor on each detected + Gauss points. Then, user has the possibility to select the detected item + to analyse it.

+ +

 

+ +

The specific cursor used for both modes, detection (pre-highlight) and + selection (highlight), is defined by a six-pyramids 3D graphic primitive + centred on the Gauss points. For more convenience, detection and selection + mode have different colors (same as Salome VISU) and cursor is displayed + in reverse-video.

+ +

 

+ +

+ +

 

+ +

Fig. 47 : Cursor for detection and selection of a result + at Gauss point

+ +

 

+ +

Selection of a point

+ +

There are two to way to select the current detected point:

+ +

Mouse: + A left-mouse button click on the detected point

+ +

Keyboard: +  ‘S’ (or ‘s’) + key of the keyboard when the 3D view is active

+ +

 

+ +

Note:

+ +

Only one point can be + selected at a time. Thus, selection of another point automatically unselects + the possibly selected one.

+ +

 

+ +

Modification of the camera after picking + of a point

+ +

Two situations occur:

+ +

 

+ +

i) No point is yet selected (>> first selection)

+ +
    + +
  • The camera is smoothly moved, as defined in Movement + of the camera between 2 positions, in such a way that the centre of + the 3D view becomes the selected point (focus + is set to this point) and focal distance + is adapted to increase the zoom (x 1.5).

  • + +
  • The center of + dynamic rotations of the view is modified to the selected point

  • +
+ +

 

+ +

ii) A point is already selected (>> Nth + selection)

+ +
    + +
  • The camera is smoothly moved, as defined in Movement + of the camera between 2 positions, in such a way that the centre of + the 3D view becomes the selected point (focus + is set to this point). The focal distance + is not changed.

  • + +
  • The center of + dynamic rotations of the view is modified to the selected point

  • +
+ +

 

+ +

 

+ +

Display information

+ +

Once a point is selected, a semi-transparent window is displayed next + to the selected point and shows the following information:

+ +

 

+ +
    + +
  • The ID of the point within its parent mesh element

  • + +
  • Coordinates of the Gauss point

  • + +
  • In the case of a result at Gauss point: Scalar + value being inspected + all components individually

  • + +
  • Name of its parent mesh element

  • +
+ +

 

+ +

+ +

 

+ +

Fig. 48 : Sample of semi-transparent window

+ +

 

+ +

In addition, the active scalar bar is updated to highlight the corresponding + value of the selected scalar value by a black line (not applicable for + a Gauss point without result).

+ +

 

+ +

Display parent mesh element

+ +

Once a point is selected, it is possible to display/erase + the parent mesh element in wireframe by using one of the following toggle + options:

+ +

 

+ +

Mouse: + Popup menu on the selected point: ‘Display + Parent mesh element’ (a check + mark on the left of the item informs if the parent is displayed + or not)

+ +

Keyboard: + ‘P’ (or ‘p’) + key of the keyboard when the 3D view is active (toggle option)

+ +

 

+ + + + diff --git a/doc/salome/gui/GAUSS/display_meshes_general.htm b/doc/salome/gui/GAUSS/display_meshes_general.htm new file mode 100644 index 00000000..a09de98b --- /dev/null +++ b/doc/salome/gui/GAUSS/display_meshes_general.htm @@ -0,0 +1,92 @@ + + + + + +Display Meshes General + + + + + + + + + + + +

General

+ +

This functionality allows the user to display in the + 3D view the loaded meshes entities.

+ +

 

+ +

There are several standard ways in Salome to display meshes and to modify + corresponding properties. Commands are accessible from the menu bar, contextual + popup menus and a toolbar. All these resources are defined and embedded + within VISU module.

+ + + + diff --git a/doc/salome/gui/GAUSS/display_results_at_gauss_points_general.htm b/doc/salome/gui/GAUSS/display_results_at_gauss_points_general.htm new file mode 100644 index 00000000..ef79772d --- /dev/null +++ b/doc/salome/gui/GAUSS/display_results_at_gauss_points_general.htm @@ -0,0 +1,111 @@ + + + + + +Display results at Gauss Points_General + + + + + + + + + + + +

General

+ +

The current functionality of SALOME allows user to display + in the 3D view the results of a calculation when known for each element + or each nodes. The capability to consider results at Gauss Points is a + new behaviour of this project.

+ +

 

+ +

Note:

+ +

The current existing + presentations for results on nodes of elements or on elements – in VISU + – will not be modified in this project. These modes are briefly presented + in this specification + for information purpose. Reversibly, presentation of results at + Gauss Points corresponds to a new functionality that will be added to + the VISU module. This + new display mode will be the only way to visualize results at Gauss points. + The GUI of this new presentation will be fully defined in the next paragraphs.

+ +

 

+ +

The process to access these commands is similar to the one defined for + displaying meshes elements. That is: menu bar, contextual popup menu and + toolbar. They are described here after.

+ +

 

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

General

+ +

This standard behaviour already exists in Salome and + does not need to be modified here. The objective consists in handling + a Gauss point as an enhancement of the VISU module capabilities.

+ +

 

+ +

We will first briefly remind here how the standard behaviour works. + Secondly, we will explain how Gauss points will be supported.

+ + + + diff --git a/doc/salome/gui/GAUSS/general_navigation_within_the_scene.htm b/doc/salome/gui/GAUSS/general_navigation_within_the_scene.htm new file mode 100644 index 00000000..195c37a4 --- /dev/null +++ b/doc/salome/gui/GAUSS/general_navigation_within_the_scene.htm @@ -0,0 +1,87 @@ + + + + + +General Navigation within the scene + + + + + + + + + + + +

General

+ +

This section describes how to navigate within a 3D graphic + scene using a mouse, the keyboard or a spacemouse. It also describes the + type of movement for a camera to go from one point of view to another + one.

+ + + + diff --git a/doc/salome/gui/GAUSS/general_storage_of_produced_data.htm b/doc/salome/gui/GAUSS/general_storage_of_produced_data.htm new file mode 100644 index 00000000..72f2dd62 --- /dev/null +++ b/doc/salome/gui/GAUSS/general_storage_of_produced_data.htm @@ -0,0 +1,158 @@ + + + + + +General Storage of produced data + + + + + + + + + + + +

Saving data

+ +

Information created during a session:

+ +

 

+ +
    + +
  • Cameras

  • + +
  • Configurations

  • +
+ +

 

+ +

have been published within the Study document and are visible in the + tree browser of the Study.

+ +

 

+ +

Salome provides a standard way to store this Study document – Mesh, + Results, Cameras and Segmentation cursors – in the form of an HDF file. + This behaviour will be used without modification.

+ +

 

+ +

The storage of the Study document is accessed from:

+ +

 

+ +
    + +
  • The menu bar: File + ► Save or File ► Save As

  • +
+ +

 

+ +

+ +

 

+ +

Fig. 61 : Salome ‘File’ menu

+ +

 

+ +

The ‘Save’ option automatically updates the file on disk by keeping + its name. When this command is run for the first time on a new document, + then the ‘Save As’ command is executed. The ‘Save As’ command opens a + dialog that allows user:

+ +

 

+ +
    + +
  • To define the location of the file (pathname)

  • + +
  • To rename the file

  • +
+ +

 

+ +

+ +

 

+ +

Fig. 62 : Salome ‘Save As’ dialog

+ +

 

+ +

 

+ + + + diff --git a/doc/salome/gui/GAUSS/general_timestamps_animation.htm b/doc/salome/gui/GAUSS/general_timestamps_animation.htm new file mode 100644 index 00000000..02ca52b9 --- /dev/null +++ b/doc/salome/gui/GAUSS/general_timestamps_animation.htm @@ -0,0 +1,91 @@ + + + + + +General timestamps animation + + + + + + + + + + + +

General

+ +

Salome defines a standard way to show a timestamps animation. + This functionality will be extended to Results Gauss points.

+ +

 

+ +

The general behaviour of this command will not be changed in the frame + of this project. The following sections explain briefly how the animation + function of Salome is running.

+ + + + diff --git a/doc/salome/gui/GAUSS/image1.gif b/doc/salome/gui/GAUSS/image1.gif new file mode 100644 index 0000000000000000000000000000000000000000..fcece82ff5b4b92098916fbb08f8dd3e7c2a9df4 GIT binary patch literal 33620 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image10.gif b/doc/salome/gui/GAUSS/image10.gif new file mode 100644 index 0000000000000000000000000000000000000000..c005ebf12c26f47eaaf6b4bfc18c3f3fee835001 GIT binary patch literal 3091 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 ZF*>6)dZRhIqdoegK{}*G`lAB^06Y0}CZzxX literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image102.gif b/doc/salome/gui/GAUSS/image102.gif new file mode 100644 index 0000000000000000000000000000000000000000..4a4900febaa0665fff9eb9ab2060833dc1c79435 GIT binary patch literal 957 zcmX9-OGuPa6h4&2EM}2OBjJE0nHizQky0W8vrN&Lpox-7qPQWnkrpDg_$!!-D3WU6 z3e_lD8dNGRqKFK!g`S0NW)>-uhKd9_v}hpW^xfNq;XcpzI{(x+9I4)SK1xOOo7@Qe zFYr@Pq^{;$r&M-~%QyM3zVZ&csZH$ubF(`a3pc3|T{BNc~f`WGq=rVo7}^3mG9R zBtnX{l2sCQh=4SN3Or%;1k7xhEweDI=fmC@wuZ&9dU{+N%hs}3R<8!Hjj$CKVfB?p z*(!^&dZ7>wrI6>ulfv!x|&r5-72;)`&Ig9YTQ>BVyFMg&M0y6o#BL zcy^+kQP_q9)IbruxQZtXQi)ESLc?_99k&cJKynT#H)uQ6hUJjcAc2 zVnaws1u?)kyuuvZKs3rA6Y4y_2X&}`aXr9u+~WX4eM=A-9D)^lMSQ-Q=pNdFCLndh zj9if=nuoNI5F$Yh+@qJU2v4rw$#kuS9Pon>h=4>Xp5qcb6a(P@gc+-T+S=OM+R@RG zNFU47z2kQa3eQb1?Y?mM{+0tb!VT@)>bnXb51hC& ze6g|ebl;A)!LPj=V|y;O)U_47XzDJ$x{&uiyD;^nqWE>y&MT#LPa8Y0uUYqN>CnLO z!IqERRdY?TgI(#jn@?VzdQ|pd@0p2YX=Zr)vzPb2wO5=?oLZUdukLv>`zctf@qyIP Q_p#drWf6IooegOJKXJRyuK)l5 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image103.gif b/doc/salome/gui/GAUSS/image103.gif new file mode 100644 index 0000000000000000000000000000000000000000..147612dcbd095dcb3b4e2cbc030b1eec39474cc8 GIT binary patch literal 955 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image107.gif b/doc/salome/gui/GAUSS/image107.gif new file mode 100644 index 0000000000000000000000000000000000000000..ed094896ecbb633f483b708cf5bff4f8965a4d47 GIT binary patch literal 1153 zcmX9-4M^N&7=K{ST|>%`Jfx1ObBG_aWe+vaQG;9Frl~WA8f|!_^x~=o#+D<}{m1ZQ zZcy5|dcn$-Yc;l!hJz@EIyA_4vRHYtb%eXzhX{Gu@JQn6_kVlgct4-t*Ym%f6`|6t zuLj9StK<&H{v10w*g4J^#&2U^{ow{>p_QKa6Fp(nCLWsDMEo-nuq$fT5K#))FYO(OMa;#5#lm zZIm%etXrtjqKv?h>kOV9!Vfzz;$o0urToj!W!N z41oV9%vhbFC&J-yTU%RKS63twnVy~=85xO2qp?^l9*-|BE+!I*WHKph%Y%bMj^nr= zj*!?1GgcUzaY*iefjl^Qz_;t0!SQ3Btir0&qtWe+>A95yyM{lX?9ACv*pggs3Z2|o z_KGjiIuYtlUtd#uynpD$p1ktQzWx2pm5oKMmj)_$)9(If_C9a+ubiFyIQ0IfOQi?z z&J1Pt1&hD?JMZVSds_c7kCf!^8K`-!^5N3@H=`H!jd~B9yMBJh`n@uKsOXTt@B71v z)UWRT`ube&+wqx&6ZQU#+@7pQ3r0R_3ZH6-rK+;I*7=_9>|9lKxOnc8Q?xs8>Dh19 zOys$p4;Ck%u8RIpRTQeOyC3fT;`fP*Z@j#6dup_^Ebv!h7xqWSBqG4U6B69FX^!9Mg!YB7j zZm#@09yxX7%DoNQN7e$XpB-JdvE`TMtQYc6@5rogneWUgOI~lz9$%R6e!MIH*7lr8 di@$rdZ_};b&F{`#JO0#Ee*C2OugrAX_8)ZmF5v(G literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image108.gif b/doc/salome/gui/GAUSS/image108.gif new file mode 100644 index 0000000000000000000000000000000000000000..a1874cabb1cf8bfa4086ba429e7439e6d00670dc GIT binary patch literal 1147 zcmX9-4QSM57=Oq^?qs3I^xEPqH>d7onemKtlrB!tE4Gm2a4_vQtkJRGX zN0NDX_NH^2n>q*ToTy1OZy4p=D`<3gH8#!LXmeb;QNxkp>+k>i!ts7Szpv+i%idkO za6zS?y!4ptVVR$0CJQ^uiedD|PTd@FI2=x=Gb1Cz?RI-S9Ea4IlPGuoSEWYeSD~Az4aR zlC@ET*Fv#WtQ2cgDKtyXO0zaXAsk8}&G3U0BtQiW>hRXKfddRFgff;uiH(#(NuiBH zD3D4hCA4u1HBt+uVaRp{&$cMrC~U(4YM=;S?L@sbuwVwn*efNq z$qwGYjccW)Hc=vbB#mg1C1OKJNCh##H@w0e+(0zSAQS2gzX7#T0b}<7&vB0f3~gG1 z$lwsH*lWaRnu+eAEocH#N6g3-S)zGJ3ke|-)WAJ@35)P#*V{7f)WK?p=Zq7=_@ zi5-do@O;9I)k(?;g+k$QxTdBi8jW^$cel5@lI5pLGvGSH{L3rzLzJJ#Q>KE_y z+zM=ZaQ%2;-uhKd9_v}hpW^xfNq;XcpzI{(x+9I4)SK1xOOo7@Qe zFYr@Pq^{;$r&M-~%QyM3zVZ&csZH$ubF(`a3pc3|T{BNc~f`WGq=rVo7}^3mG9R zBtnX{l2sCQh=4SN3Or%;1k7xhEweDI=fmC@wuZ&9dU{+N%hs}3R<8!Hjj$CKVfB?p z*(!^&dZ7>wrI6>ulfv!x|&r5-72;)`&Ig9YTQ>BVyFMg&M0y6o#BL zcy^+kQP_q9)IbruxQZtXQi)ESLc?_99k&cJKynT#H)uQ6hUJjcAc2 zVnaws1u?)kyuuvZKs3rA6Y4y_2X&}`aXr9u+~WX4eM=A-9D)^lMSQ-Q=pNdFCLndh zj9if=nuoNI5F$Yh+@qJU2v4rw$#kuS9Pon>h=4>Xp5qcb6a(P@gc+-T+S=OM+R@RG zNFU47z2kQa3eQb1?Y?mM{+0tb!VT@)>bnXb51hC& ze6g|ebl;A)!LPj=V|y;O)U_47XzDJ$x{&uiyD;^nqWE>y&MT#LPa8Y0uUYqN>CnLO z!IqERRdY?TgI(#jn@?VzdQ|pd@0p2YX=Zr)vzPb2wO5=?oLZUdukLv>`zctf@qyIP Q_p#drWf6IooegOJKXJRyuK)l5 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image11.gif b/doc/salome/gui/GAUSS/image11.gif new file mode 100644 index 0000000000000000000000000000000000000000..9db7337d5f5da0a4e09c9824fcee044264e5d03d GIT binary patch literal 3018 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image110.gif b/doc/salome/gui/GAUSS/image110.gif new file mode 100644 index 0000000000000000000000000000000000000000..584b367efa13cf10296343c2076963b957173438 GIT binary patch literal 941 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image115.gif b/doc/salome/gui/GAUSS/image115.gif new file mode 100644 index 0000000000000000000000000000000000000000..ac02dbf4ac47d99bcb975323e2873921c40ea2e8 GIT binary patch literal 1348 zcmX9-3rv+&96!7qI$DqoS-^NWWk4h5QItuyAOpcr*CGZv7@&ty2*O;9LU&VlQCSmr z$Au$L0U<1jmyqcYBE4|$3DG8GfJK+02tpnz#2u&K_jR_r^Zfr_|L;acNAB90@*eRd z&xta$>QAdqTI{si9*nV`2GbLJdwWMmM<*vI7Z(>-S62@Y4_{wje}DhDxVYHZ*ocUT z(9lp>pp^#?4imkYk#oa$r>2IlH5F4r7$KYx0dPtvC5#eIiJ(NPca#yv2xmkvBGspq z6UGVWL~tV2N-78wgbN}BkyuN@B@t3V1SBJoTnN%G@0T)aNCRMjk!zB|Eh7@P;tcX&K!ZsYB28!TSNd#0d0X$$pnz}>*7o1Bq zESLc?_Cj!}W(RNJ#zBueodm)M~g0RK;zvARNhl9QA3^73>#oxxx*o6T))Z6hNi zd3jl`KB=jx*J`!Oha-tpC(Kx3yoy7j{1=F$BopgB_O{gYo_5?AaHxOi*E5CAn`0{W zw$|P$a-;jL#@0IH1@E`cdqlU@M;9->d-c#j+ZA(ZaGI&&QEt@_<-4*!G!L{l-m89d zs&z4RiQTVx95rZc7^|@U(NN z(9^-*8y!CTZ)R=TpEjow?#dTh9r zuxQ$nT=;d;s>qwmO>+cuY~3l?&sld~?b@U7Wj&icJrRveV!SL)!IxFzgo zr%6k>bJC`!6#dERx^P2o+)zniL%{Uaw;z1r9N%)+|KZSAFSP25uh~t+1cs+>Sn6%= eSr<6d^1bUvGp+qwKPZkAA%D-byE@pD-Twh75Td~V literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image116.gif b/doc/salome/gui/GAUSS/image116.gif new file mode 100644 index 0000000000000000000000000000000000000000..289665aba3510727a9d328e4875a463111178899 GIT binary patch literal 55330 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image12.gif b/doc/salome/gui/GAUSS/image12.gif new file mode 100644 index 0000000000000000000000000000000000000000..876f656b66cd4d2349a362eefdbf4757d28f727d GIT binary patch literal 14028 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image13.gif b/doc/salome/gui/GAUSS/image13.gif new file mode 100644 index 0000000000000000000000000000000000000000..948e0ab6deb323dc814da78185b883024cc26c77 GIT binary patch literal 1650 zcmd_pi#rnt008hUF zGMPtxeL{Ur>*{R9<~5tgVIF73-rL>vciiuP_yq*{dmK-A46p#K^#c9_1OnC6)YR40 zH8eCdH8pj0b@lZ0Kp>F5zP^Ehfsv6B7z{QxHikeTP$<;Q%*@=}90r3~SXjW}a7#-| z1OkCXBCV~hZEbDQXtcAlv#YDCo12@JmCD=O+t1I>-`_tVARsU>(8Wa=92^`H5)v93 z8Wt9I_Uu_K78@BEiNoQdqN1XsqtBl|9}^R!fWhM9SNlOsNJM&|EdSXfw8R8&$@B8rHR;BdLQva+(W^78WQ z*A+qnflMaX)YOR6((3B!>g($p8X5$7c{Mc>m;xp$D5$TOx3;!+baZ$~JUpeIUNW!l z?(W{+UJ8Zs{Q2|#{(dTz+S4N*92^`P8X6uRrch)^rE+9s#95)(?CBBo_wP}uG#V{J zE~nG!G@4{$Li*{`CkBI&Bb5&D2Usi?StMe!*)Mip%*@Qp&d$!w&CSoxFDxu@IGn}B zMJ|`yBNp>`yrre3<>h4_?_gzRWn3s+U0qeF;7TQ0r8>H{wzj$|U0+|{*w~Otuk!i) z1%Y65b5kbEkw{2eTU*=P+X_XVQc2v|*-PLD3nU2N~QYe|L5q}0befwv{V4BmPH_?X{8O!_{S$}7Ex8IP}f&EbL;_GZ|O6uDQW;^vlRc5Gcs4uB6`-EEzmBeW6x^kC0 zoPY;ie0T56ubiM<;~(i{uR$Xh>#|KmnyC=(U<%l7ueLikvh`l)?)0;CO!c;V+wX8w zEhi`JJLkeRofyoGRJrJn(Gp!t(LVlg1`9({{ppKuCN)Jp7$;?LT*!JRUwYz?oiOQ` z;=GQd89HA231s`7k~j|3DCGu*Od;7|Gjqf6B8aZLGLZ>JsU=sm=R02VIi!u7Z>>wbX(DE-9Us9p!YrY?v4G4$ zb(*$*IQN&1mWRQ-EbVSUP>AXfg~_z9D28_SI9A2*pE@uJ4DgY>!qS$Cjj3sji%l~= z#2C-3KsV!#15geLWNxv+sIULvhj);oh?|C$n*&pEo6NyWvQE00=Ze$ezU$2?PeY1* zozxLsq(uK~pnM|T(h)}k8nqzCPhWFdsjh?)N65S5pfvkP13L`(z19yHlmM+e&ttyP zYfq~yc+2neGr7q2Ny3y)8jb-#PAo7Ks+R$TOnvMd13)~ma8onArXn*3po1%8VH_6> z(n4G=L75NDkinV?i~UI}7U7%3SR8M_6#c<2C)x3kTOd3yyttNirQBOIcdNFM0ZZu34)@Y*x^&MWbb{O{4vM+^Zc{srW1 Bw-*2a literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image28.gif b/doc/salome/gui/GAUSS/image28.gif new file mode 100644 index 0000000000000000000000000000000000000000..cac7cd758e287e8e63fea27777e20f85eb0704b9 GIT binary patch literal 964 zcmX9-OGuPa6h7iqqYN>#m?3Z$qlsonMF%W1#7Fp8C>FSBV`AJ@Nh`H-@rxot8zGPm zM$Muu!9au{f+~@gT=b!H0uB%su;}oZ33P<37 zfu92Gf?yqEcYW#0Q6v(HMx(J*&RC4q z*t}2(hf+xM{NMx$PyvHFybW#O07INpZwZvxh&UBz-XRo-I#p-hE!2oPH5dw=!E-1o zGz!~rfEp-**Dw)K!36Mt0cn1T0#On3VZjWDu~!xI*})sQajhoiqeS*d8qp$4#D+6=G(lyX<)>ot*15Lf%}8Z3bEC0zXKtqHSML4I?)J0oClj?RBlW$vS|;zG zyPhcp9aUq8r$0QduXs5VtxC2%TkYR2d-!MX)5x3Ax#_9SCm$D&FaFqWO1`LE`L>iV zn<(z)N3PYrovth#^*%Zty|-8qPsQ%iMqTUJ#P^;Dx92aMs3>&xpSk>XZ!_9?J~ow2 QR+pcO|EznylF3lZKcR2L%K!iX literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image29.gif b/doc/salome/gui/GAUSS/image29.gif new file mode 100644 index 0000000000000000000000000000000000000000..5aa238a063db2912d0bf654581ee810d8f693b2f GIT binary patch literal 884 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 Qk}Bzv>Wz-RTR;E+JMmF1CIA2c literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image30.gif b/doc/salome/gui/GAUSS/image30.gif new file mode 100644 index 0000000000000000000000000000000000000000..f78b7c2b7300f010bccbf1f8497a7a635304feb2 GIT binary patch literal 24689 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image32.gif b/doc/salome/gui/GAUSS/image32.gif new file mode 100644 index 0000000000000000000000000000000000000000..ac13a4fdf76d0f22f26eab4de9d75d05669a3bb3 GIT binary patch literal 3071 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image33.gif b/doc/salome/gui/GAUSS/image33.gif new file mode 100644 index 0000000000000000000000000000000000000000..a2eedf5bb60b40071989d04639513a32da505069 GIT binary patch literal 1947 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image35.gif b/doc/salome/gui/GAUSS/image35.gif new file mode 100644 index 0000000000000000000000000000000000000000..c9f1f553e7bb2f8992bcf9790bc5a1f202d72bc1 GIT binary patch literal 1603 zcmV-J2E6%4Nk%v~VKM-g0M!5h6c!YOf`r7z#QcVY%mOsz;^eHVtV~Kw^uo+!X8f$K z{A6Zil#-Ox*3|s2to-`?{I;|N0{pbLw2X?3{Nm(PQdIof+_bj*bar&q(){$Y#2g+R zyu$qa0tD>t?6k79{KCAPnw=I-k%G1Ey?Q2H322i>0(!w7@7JE}O>z znj!gUIXdvTd=7WD3W3r@zn}E=0ed4SRS+FFH*|D~AYXZVd3hxzl6xgIA8ai-ik)yc zca?g8eUTG`Rh*uRjRhkUl9ZFOfs>e;s;hILc$2WDf4($?N`|^~t*^7P%e51?NNu^t zpP{~wf!WKbO4HQIke17%fzU_N)N;Jal)u{TCEQ8I=^d@6tK;`7V83>Ko;h{YpX`GiG0H}M}YQ5fCDJBTEqE^x78je9n- zU&(qWFAh{G4+*{hbl@6>q=}1SPKNG&&FXo?<*J|$Lzb&q#2?N(?6M_&$kfQsZ`Ptp zB`VRWr-0bDD(zatY^Q|+LoVZ2^=7)GJGIsdu%;MCM-1i88dlV#MYVcQQ8nV06;^SA zZLzG|n9e#fAR|$dMA+}YRuf`~9!!v z3ci8={vBM#0S1My7MQ>wMso(wpF4M60yUAZ3b9Ti!<|-lHOW`^$|rLaTOyT_Jx;vS zmUY~Aso@p6T~FtEe_f?)PnKkQbr#V#&Ur)p7e_~F5v0^q;mH?ZeGLgRnOFI}q7{Gc zHF(T?%sABl&V9Ol_82J`_GgoU)r{vMeFO@D-AjNa)gFUo8TH_bvq+dqg=)12k%qc( z2w{C1c~(zQGA2nE5vn<;B8~%2*w$Yj@pmDO{@M6sheWQlk%;S!cT>wPLFnOT}CXG7&ki5{D(ern%)P5$}hqIAkS z#GRfX*d}|S!s)7j%b1E#p|xI!Xse2nSE{2$0Q=U6l73355N(K%U#47Y>Z=eM5Mb`P z=%#D`E&`tF8P2xwDGZ za>uVmNG%Z}&rEZw3Qmga%0frLGqO=uq4UTBrcM?bxB$0I=549rIaJ#*B}9tv+8 zR!fX^phNvUMA-?KER$w%=b<*)Nh^IvXr<*X8Uq1H5OUr53IM| zT=&Af4Tr*SlUGoAHIl%f4XB@a^8R$E6PHI_Co?<_xQjCw;qMY3h!A#Xa^hHqt^rFBiy4ybg7{ zJr>)i@bzjh7}rLSPjAi2i(U2O`cC_>_Z!EKn6~dbAAd-7s*f-D!~!1O^hdl184n5c zlNkH%SFr2(&u#_uP^>nWH2byhVh)5~1c%fw&Y7%zD9a!L!8MZu9^rut1mQmNm%aUY zs7S}FAhuL^E81z0g!$;72NM)N0b*}v=93osijcsz5v_X6%h?Ta7d;9J&4Nhu;RAz6 zDslZyh96|0_%gOc+?hvuGE5!=aW=j#My65on_fx`CBhbNuxUy_Apk)oMKf+_?~7M_ z;t>s%#4?VMi4Jq(*Jc>SHUiOw9qJ$!c^E)L?hKKFQkxLuSS2rN>S+FY0n0Smu`sOe zlia~T>ue&gq|E>~1t@?CRLRO!x{{Rz@IVzZkbo4_@|L#DB`yV8Ec|9{Y-aon3jCy|{M_37{AOJI#=Hau{G?!YO z$)Gq}!u07a?a(u1v2MZOU}%*sSx&j^$v%LO-|b3@GeS YKmr5~95me3n|JSC4iiiW790WqJ5wk4kpKVy literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image37.gif b/doc/salome/gui/GAUSS/image37.gif new file mode 100644 index 0000000000000000000000000000000000000000..2689532b8273fdae963506e6dc116220edaba306 GIT binary patch literal 52125 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image38.gif b/doc/salome/gui/GAUSS/image38.gif new file mode 100644 index 0000000000000000000000000000000000000000..eb7faa5bba2eafbabc8b173fae93a08d663e5e3c GIT binary patch literal 24487 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 L%{_&T1q1*)t|+%A literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image39.gif b/doc/salome/gui/GAUSS/image39.gif new file mode 100644 index 0000000000000000000000000000000000000000..ed16fd4699fe31b968b4b30c0bddcbcb05492011 GIT binary patch literal 57210 zcmWhyXFL>+8^3+$oW1u5*^ZD9XC#EqsH}7(*(*sxckXP-Cabf`IGh&QGF?#LwXLhm#>zUes9xJC z)W$Q66iMV1ms?m})z;UiR8)FjWNhX|l#rB|`Z%R+VoS=Yatuw+D{qm% z;%MXK7!+U7*4}1z=fV2+mi7&APJaHd@GzS|lDwuirDL#XXmDz7R@>ApJtrqDGV;ft zWABJ0`D@Ouo*tz5I8Iq@N?nJ9tSqUZ#_>sBP!hRqXezy;Sy0E3lvCmwoLEv(kyqW} zdhc$}=oADAYv>+Z-&m*A)p`f|*#tkMH1`HYkhFEK2nzBqEX)VRr`y;&q!-s2x;-74 z`)p=qsj7A%=+Q$n3mY@HCua8E=>=s$q%>7CoZ%HiQW`ld?X`D&VM%F;s;P~<4p!UZ z?(W{MwtWC8DNjOC!w?rDp{h4B`Jtq>=f}_QoLpS0`lhZC>5gvRBcmgnikP6Js|IsugKXRqQT!5Sfr*CpB(pmtSD!}`2DS~=lptSkK~>|D z`Yu&#&ytD;$2(48@p%$D)+iKHSPn%{Ts$bXq@klTv7ol3`fX5PfMf7;M|%fV9YaHl znF)-1a__E_iy%!ctjk+?C;nFyH}CZ?y9-O}>95+%Y#de9wSz)Q zsutdcMrI|iD7*VVMy3{i{5nxJw2?4!EomB2y&2@_;;pKwWoT*=mh`frt}d^j#L(U^ zF)3YMQ8g@yl33K{7)T-&w0Q@H+1R_9xse3L<%3ci8ahT23))JmdmMxFATVfKUysdA z8*P^`8($(RnzZm`ol;Hl_Vtzr{3rkK1pwjS)T=X68^*$KXiOz{N4I{%}X7v9}>SL~TWGUY18sV{iHJYpOV0&S({`LEp7$Q>0 z^vCP0Fi5hvIr2LSuNQ2VEsbfcxFKO>j+m8|sQgre>o(n(YpncK=hp9OF2JoYUuXZm zk1Lm}+P=w2xpX2F*aH{vTXIL3%|KVWqrvBm!kTN>`jgLHD==%R+ZfKi;KfWKWH7%c z>#}@wMqF?BmevlZ8aj2jl14?`4&bzHKTHqWOL38*O_; zU+*kF|FZi0(ZT#Z#dNmf;m>d=wkzhWUpzwj?)UhMm3Q8EwEz8`Q7dg%@5U9a_FI|G z&<4YE1)krWxF)DY?PeCkv(~W)y@ZfsgkNGsSBRWCA(2Eboe;ffz5-D(sI}va7@Hx) zwlGFK(0wI_)8D-)9$hd~BJ~A2$vp?>xQ7=^TPWVpz^{Ng>Yzk0hJ{-+jPdG zs1)-D!c}UPVo1u0ACFRHw>Sf?GQ2#o973~Ni5e6Y=Fs~&o(82#%hW{_U9F9aly)u} zv>KO=6=yw!K*hs~!KE*E4YpWcCaWaAB3Z@fL0H2uuuJX|VtR6FbiJ;(^gg+RwjUq8 z4%&~tR33Dk{L-pnI)%yCfV`;wa7GDte3T5fhsMG!f?;(Bi0^(dXOBbGzt`dKX1m_o zeL}dxzm7eOLvWUK#tCz!eIG)(a$$Fo62!lo?Y3|aS+j=xCQ zBt8B@eyZ5Ik^8ptc%$Iu((#vyO5ZH?LordmHK3hE5F8!^ewN>`p zB237Z;$q4alBW#d_>BV?p(L_X4ag=VomVdI#)`st#PLrpKo3To8Rbf8ol(CWcUcG7 zM=4YmIS-9ub2gaqhaT>HUOEZn5ZiN}b}`0^st*B4gXLV4Np9MOyeY{&>a94y%_$)C zku-qc_7E=a4`gJ??qfH^=o=X7gZb#uLd`&CCgXGLO&B7`oeT&Z(SzG&8!6{t^qo(f zIn1+(tY@~h1O?R<<`mXWZd+%(D$W_yi-{CF<)Q6{*Fd|o4G^JNpjX%d^c|vKHk}q3 zd}HkPeM%a?dB4#}W37en$->ST4b9=k+Q34sg3Tq~tCQ_xNsR_~MQ^>nI^0>CT=-;d zpP9kf@MFO9#sGl9n5&v+|Q-B62)RH278FUf&x7Rfkz4jRz5f#H{+tsMu5zQ zxF}u}D*)=P&;D2108n%ogJdVbTV{F$ZQ0^DsB6&ck*qxSG^j@20iTCxCzz%O<)JV0 zQSb&FO+eE_HZe1Rv+rJIZ}o?psLELGa1dp`(j)Z+$vo_XL;+3z z5o;xY8XhElmk59|ZesY2M#*G4~O zu0KUum#8CX zzGu}#o|5tBdaOWKW}^9Q2{6B)6_&_GD9e~LV=wng)q`aMTM!k>c{YP(_rnk*mi=QS zHI^ABmw|GxCSs9p&TtB*^Fo1GbQvFpeI^LZ(&P^pRxRdxzYO7*Sf25b20++DB(Iv! zf|QMmAZJHcHExQ+F2uSp3GmY3>j^A>R=2=MH0y}p37=2DWxYGyI|%>&ln+CO@ zMzT>pLj`7NC>S+TKzoJZS~HEUni{R_?fmasAt((T#bLBef@ZIZ;FgKHL$XO6#u$*; zvh;09%qLDqJ$9vJ2s%&?=Fp7cl^Lf=?b;JX->;G1K%#}4oWU2yySVotoxY>EPY+bP zP)cY6K1XVlrgs;+x_h+$1b_iLMSwq==>d+_MhR&H&KNaxt|Fy6k;Zhuus1G>-3k{i zi31k6qq~K?v9K^)A@u7^-^EmF6t_2(N4pHNB%uepSt81e6xHV|04}NoMGA=1>I9rH zcNvzOnbrVAmQd#HUIeQG=XSslaVjpNXo=~E1@ zd-81ej#BPyuT)b*+T}fubGe^}n}Qq5M}1sAk-6&ox;4x?N!KtKXze)Xiy$j#~QZl+=FEeh_xC7iI3jS^+xB_g$2}J# z!18p0?h)F^ZVeCJQtOR3VFt4FqC3Phw%p8W?!U|B(-V8a;48;;h8s*tt$l1 zW-;h9DntP98>dcn{(R@Y!I=PFk>O&(I~5YQZrdlT+WjZOvNF<)c;_Q9Nfhx<~)t+Qf6 zY-2H3V`)AHhucXP0RZCK`(u9Vj0Rn)<{97=SI(VA|tM+BDes{ou!d@TpHp zhXYA&Ux5c2&wqwIU!*6|ZJ!I%lGbLD#(yX64m@|enDl$#IbilV=<)OMtME+n^KUar zkNuzjm|^0bO+I#i4)%C1gMIFk3?DoXcLKnQ08azyEXw0x-b>(B8bo;<$prvjumh@j zq+L8SNmI2;VBfOEcIj6K(^&D~Ds;Nu<8+l5X;yJ*7>{(_#~C+F z(yjP1uC}C^zevCHIK#d??fRuOExWWf-b7wJ&>#*hL31&|F$kiw2sB^_E=v%b^~f$O zxI8QTI4kUNR^*GU2XR>hlk5;|R=h_xX)rr-FpIF2mFkiGXe;}9#p<pB+{!Fsq z(~JBClY$R?H|AyXKhEZVHOXHZ%-4`Cm>#s+v3of?Tkzvj{?S&!W_vPhh>WZ#WXUPyk}c$rE#&4e6v)9LLklG| zozHm|3jP5y0-z3M@M=*g(MTAHE4G@Hz!nu_$0anki?vK8u_`4O?MtplLjRGAjgTd# zp2b(~OE96uIyuG2zXCH+r?&~C6<4R4O@$?hDz-`OZ7BgUCb%9nJl&_ zdW97)u_!8W{qxF&U(!FmG{m$du;O*Vc8QN^iTZZQW7AjRt*;;2mwC>y+&!C<2#ha* zkOB8@FpV6u_+dcm$>li}<+jvvTYR}X8K6F1UOZHuYhUq7vqECL{H19{bxwInd_{q5 zWetBNV6B48UzyEc*=k?W7GFW}tY|W=s6WOVG?;tUZ?@JqYSv7c)=O$Ns>o5lm{PHS8%=f^ zH|H8xhbU7OjVGqnv!RXNZyP#0tt<`8L2jmm0?es0*A{r zy&AOV-)MVLp9nNI%hvF}edEg5>{{92bFGE=q($OygS1vt=6p-cPD`XfD?;myEMx6e zfeLQ9S~z2)?vppVxbioe&B6(d&*fU5&NurBynUMc_O;xba)%bPovQlED*4<>Hm$Zs zt(MTgwMFqQ7b@GvhU>H#+XHf2a^JR{*|&S=wh*Mz42=l{92x z``^D!rvE8#+XZ&&_x>>Q(7^@CZ!(|MUaELone*;0W6RBJ!WGDO9~^3(bY znFVUTUu)~wX)Z8rRnMdS)vW!h^-gD`T}H4Qs?`lUDOWS2zWvi}oLH$ARxKsadHSa( zbiVxSaJRxp>z*c9#k1UazD^B?6cMfEmaA+D?W&3|KVX0R=8vK+7Ow1H)0fky+}13v zU3VxzoAv5JX}z_|s~_0uM=Ve-K55{~?NQr#Bj(*Fcc#^+?%ikNIA9dkYAR66P}zTd zq020+H=9x&CI4=?wUW`S{`1?YkiTyShWZ}Tk?B+b3mB>hfU2_!D~^}17M9j5l-Gm} zJJDf<+d~17U}ZA+t*KP)?$Bk;zS8(U@=%|LU{@ez1OP@4hIY|YM+T6TX~EG6l+sJt zZg=_7`NTe>-H|!7vEDzUx$$FP%z7sT2gln+79Gb@DCOJoW20fC!-?+~y$6rv$L7Pj z=10axPew<=M$f{=j}xhgs+!_$D32gu^;$!9&amGy$bJL*2oJrFh2v&&J( z7pFX)eY}-F?9DW7Kl;(PYRcx>$E$l&uHm1;e0Zznr`?!l?o@pw{TuT1`Se8LKi?Vm z+n>Cvru~G3t;}1No^^l6#>sIb`9Jp1A7-{PeC;@s`Ux4cW8i;J`2OH;QOKkY4kGGEGDT$=V-T2WZ~ zvADQ6y5wQ^`LDv#k;3Bo=;!Y~i>E@LKQ4Yg68ii>X!+OPXW;2)hKS|${7fkG5`2G= zzL?3lzs#Am3|?9^+-(oOR$enaT#AHZkAScItzK$^j;R10IxN2gd_sq&Q{(+u!R5bT zI8lURK6pLafQSPVX%b0g!5#wG%QBOkJ(J>E*bz(G+ZD zzrW!k{KfTj!^!E3WA%n-_3Hhl4NvAT9?V}I_P+#nton6qJaYOPp!3z)_sgTDuXx3; zp{E;9nZNouZN{GIY(|cKP1O0?@M}Yv4#Z*x3+GygkHODrowXFm1{rK$1yDmXtJC1N z%OD~Rq=*NXje;!yJ7dowP$1t6@U`O(yRx?kSCYYoZ#@`d876t)ZY&AzjbXD z?HM9HKNx9{w*ELq^l$zqw#5GQ+kXoD{)ABeTnYO_dD;Ib;ZKe3-|ElrgawAV@Y_e* z<0XO)>wPAI3VCu-awMlZn3+DCJF}Qq|X!iVJ6s zU7lLqyTkwP&;N^LJk>KhZQUuKKWo%7>)o$uy7Tt5`C7M`KFBZmuhf1;rf|cWSFLn4 z1W-sIF$vfrxmC02%X(2L9@!q3@fCweCP}BD8M>H}JW|EQ6>)gCFHr(x)Ud)M@V z)NOq)Z>N$#@?bIFDw))ELy}KpwDwVkxP7|UuqyPrQ5KiRY_3cZ$ldi48?^ckll%F#^N zy!JbdkoM^83sdXvy?6d1IT`$%RL>XeUv+{b#)};q(TkyyJGbs#-`9Ej^o&8c`q8)5 z_DWLZU5sapQ@RS%vh1&WJf7g_K@4pd89*#mdpLk3+#=x1Q%l zgQdR6T{E^T3H$<{m(vtoMjIJ%-F~`~>8zXbF=qDNB7b>tG}EV)kyOH5(^TrPLi@tE zYjVRT=C3nNOIXF~=Ysb27pHn;F16Y?Znl1#THw$|p7R{j-fresQuuy$s%lelQ5LtN zUX@C^t}`o9WX^D+9%wAX4O`}X3A6?LB${9P*Dz&%Rj6_5x?LIJr6xYIT5F&8}}JYbY_*Gx;#9+Cv|NHE4H?JBS`N+ZHpX-_=Xz}VYmWJ@-&@hdTM7MC!4X71_uhZ62mT#QuzGTveji_kG81{+TG9}Ax0w^S@)AQQ_lSJ`qui?- zx*R8+exS~e0q8;k+tNq8?#P&k=#SlGWuiL^9uYub{&Db`U>gusH4bcc#MFnexng8E zZ0wc*gd!Xh<33-OLP1@9yIr}--IZ?1Z)_=g=oMMszWboNRpWQ-y8&CeCRF1YD;RSngoS+_hL@82v6&Rji(;83CBK zeEl)DtP{?QWrk*pCkQzMS#P70U{iPqm@4kUNhjdN`jx#?Gya_f#$Cu}<2-IA-dSP= zD`XdOLGXAYXb{e`zQ!i9xyIl3jle;_E#gw#1af54B}^BbLnH>^%tkZ_luiVkVerI6_58>HQp9L( z#wW8_LFjrn$5xNKjm?oB(@Bgx7rEy*Cu@`*R$K(>-ix65!<1CXr8b3zV16uIFRxQX zzFGhB6VbLX@+)lYsx@)~8m)&@&EJt25ICAZ-fUh56R8AU%;EDF@oOkk+iuZsdJIhH z6-Hbc4I!)?tM`LeGF5DN`4|f~#kvUIPaYM}DOW1pSY|xa=$196x2v}~hS)%Ztsr(>e#MePe=E%plaGh`f03S%z2O|Ni0)h1S3lOpAcd%Wu zPK9{Ab<7hly0Z{WFH-NvIT8L410D0um~>mFn@DFqo~jM8)nIwahX{y>Z9q)W(h4)Q zoCuS4ma)!TDT$=%U5dnjOeqAe%eGgbp)@3Sn4U)@6$lJO0|K(U;7d2UME$i8+!TFe zeDTNXg2vAt;v>*=_}35Y3c*5xJy1k!r-1Lp`7r!-K}&Zi%vL!GxIh5p0>HYqwJ;^l zBQA;YPEpu$oUnF=$SD~j$LkL}`GRA;A4||usvw26i6I|wl0c9{f>sCtsw^!p87ewk zLnwPRlYW-m?B7>1tLs4RQQndeOF$Ns}m0$_St`MZWV++67{gvAcCC4pw~k{$YV5A z&IJn;6vcq$$&jaQn8*vfY$)|)kah-*G~^7RzBwuXH?Rg`bkA-XZa28AN@GE6(x7U* zF(6GLFgh84Vh!o$+a`mh(!nUNahmL@Wv5UFfgOy~Cw5|qNIZcHOpjcpl2xTqkw6_h zO{j>qG5d6lv9*c7EZqsZ9zytZihF-uq&~$r|H~jl?F+Bf`dz=!Em>F}LG;WP7&VqyC24<~9fO ze)ET>2&agQ`-!X;a(_Jk1v1FHZ%qM#XR$z86B-LW*s$%?UypOV2QHX=udph)?Uw%S zm>Ymth!bzlr_GqK<)L>MLu?cu4>1s0&9voq~ zo{+QycZdX`Hh~eMr2)mNgO-3_e|72Bps6Fk2w&sP&E^32C}CcJ{5C;QRL9{(oY|#k zBeO`!Crl6YlKxPUYMwmOv?@eJ4q=%kjmjg>nm2_7)XOl6gozf@^@!N6TB?wnGT*th zOb5$nJ9zHs3hwU{cr5@=m9zj8rr?|^!uK2@V)@7T!yu2J%MH9Sl)DjIOC$Oy8(GCc!56W?7p%Knb`b3IwKDa&x`KUZmU<+ z4S@ zW6}R|5u;|C<)w^x4Ng;;O_k>5sK_(@OJ%S85hFd2szMlCRS~<($1W>qqA*pTOE&SO zm}rY7)Ma;%;mXKUnSq=`e0GfLh1pKW9Q7d_4e6=p^l~*hQrC?W22&En4u`XTZ~ z6&Z6xvkveL@Rb{6$?6Rpe_%P~6$1m4K{Bk6LzW3uR^TDaQ_CdRhI)599W?(Si(RZ6 zb}%mFT6PF;o;UZF2?I|~s7#3&Gi z^wZB8lI45Rmb*PL<_}3(N14QhntwGx%tHEeOE{?GgIa~U+ukO$yqBBKmrkcf{wOm? zwOq>pPox4ew=ov~uqj^O%KNO?OHUFa%AS>~#=0dVrKgoH#WBeI6yGwt!Xid+OE!z( zO??>6s?06SZ#ws6JB3f1W@MR~^QDIjyO`hbU}D3}+Q2=sp10U|m)`Jvn0-Iv1}1=T z!#&-zb6kYhIo&B}#Lj;~Jo`0<{=<7c0qG=2)tzZKs2DXjNX__JF^tDhp7Y<1it zpH$r<{`~aR$2RO)6!D?$Sp?J;zn2?YMTp9`jb5CI;hK4_FcZSXpRhL*GHsi@Vf(lW zoT647+G`u1VVk{oE2hf!#qHVbJpp+-&>Ab)MM_s1z>>o96u%R0x?3=dxql6^D1F z^R1HeU5gIA3J%Se?Mr{!w>3IeRm}};%+=g*>>hRa(CgsWFt)EM^g4u8x)rN6j#mmZ zn9E<(qbw@rEiP^>p6RtME^_6~{k*-ZJ+Vp=kQ1^<^(n7ewTK;XHs4vSdv}NQMCLRlCRPYLOlXJ}stftJFeP)GA z>Y4B_9E)2H0l&h0Ghcu?37OQtY`enlyDIf@nI+Su2EQ^$b(T?dk!@O03|W;MTR!*2 zMWEV6ObRHe=yE1ChGWuMlaCNk&2(wzb9pp^FfNaljFTriBe?$iTiIDh&%n~GQxutQ z)Y>5Qf)TS}Tp~%yE>wcBVl=;-t5Wb)(Ii*neWq*CYd^Ke9IuQYO$ll?Cd#B(r%Jb6 z$uKz<;1n>qbkVXShts5s_nD7Lw&$}>ekOLswpgRlac|@#Zu+MC;>SCuAN`na`A^@t zy_i*E>2|No&NV&O{!AwjR z-U`42@U8_H*~YR-;|cEfZcn7Vr6mO)UK905N<$0*Zg6WdF{!tB#Ky4|knSA`4sVok z@v5?UGTD5beslF1>l}@Ei==`@4SiFX^QrG zbCcARxzqg0>rHe_%h-R6`Hn#ulvnh=7En=j(R_oHdECu`HM(-&&O&D|haI?C+oqY_ zshN_(y7nY?E9hPhqI%CnVC}A_{LCxK6p;9btQ))p7?#i!xc4b~ZzgkZ1{U?vS5Coy z&p&(bY|&TF{U}ly6V2F+x57t>QQ@|%`zwmj6{mehUQj3+_QZDI%H4On1K^5>J{k92 zciUh2wZCQI`xrrxqqmXth7CruZ+3`4ugE|2J&0tx$x@h*y2j=bFmba<^XN3*dUq?% z-UdNHv<;-#p5~->9|UPLAcAcezVJ;~oR>n#NDZ715A{K?lrw(XOCF*#`c;PI_%q)J zDQ${|ojV@Ep&9T=Evfzwv`Izi1imKI!Y>3#0b}#@}B`xpTZ5&}MPD>V3UxdbP%V(zy4T z`kr@Yz?FRGe&0?2V{H4=WKi3xrydTZ!BQ`b|Naz5(#VQL7gy*U;9*C)P9abiUV`58 zcV7Gh#KCuT!gpva&Fa>%mjY+zbq6};76>l z9rVB55uHE?IEsXA0+eu(f@Bg@6wgbCn8pG{!Qks5ax!$`oeB_ox$%sRw`h6{sIb`} z$ok{yc%&Y03@<$r!x}|=s=T|V=C!OA!3x2|K75FdcErYTVPk?Z#K-Q@K4>84Omyx= zg7FcUBQ{FPJz5e?aEy)8O^#8WiIl=eS=mPVU}MDHBNdaQRI`tz(EsHH%wbIQKtR8p zCiW_t$==uLppUBYjhwSH>l{dWlV`2>Fj)9<;6|j#fZNOOj)xLO`<8Ad6TMh#cuN6X`w!;+O&5$cFhWPr8@IJOo5~prhTEARnRZ^_K)zPt>u>e2_*isSl#xBcx1W2ufjRqFi z6~!vTZiB%(cSbRAne`0#iy8PC)irW7-!vENFihSZX~^pG^b5f^P*mkG|-N(*qi zQF-%3-UbiYMoJ1YwdJw(99)}F(t$A)P099W1)PaOeAFUkr=Uz9*M~oyyF(1{3bb|q zdG7|a!u}{=Z_aa?Pd}xJoZZI&jrV!lapq&)7$wXlFkkeqaME?I$t~4VRSxYlmuWoO z#QXO3y*Ez1CD%dGPcg8LX24Z_^kZwGuZX_)X4S6J^gQ-dZi2`r@0VayP3DiUV8 z`}K;>>N;yT&t-YmA`M~)0S-&Yt1wH_mBo@+OmS2s{*+RCvtpGp36R90te9g>+fv{2 zo2?gn;&~|nJFsJ$!>i|QG^Cz^l#RY!RqQoXxqdeJ^08 z#}nl(ep!#Gqpc>Y8!_H*J-uR(7u_BxOdl@>BaS`LW|JFD^zNo(Bgd{mwxRsM`&|vn zflYS($wAz=fzJ-+IA=2yqZGZ~yXDfQtoPxH5dP?_8I1SI&VzFwxX2VexXO#cwi zS!IJm!f+6-UVhyA@^wxwhZa&%TRpIUo*KR9&AS8IPp%`|kF)7etk z{KDoTkyBG_T_2hr#u_CvnyUg}l=sFmGmdMqTxJ|~@H71>kG_*6lZ*eX{aqwmCF0lE z16};D-RpisKP;y(3}=whsc}P&Fzs#zzcQ52nQ+6Fta7RK8?Lk! z0&!)8&#s-9JK`+4T_lS6?$yT8^Oc{~;RyVr1AX)tU5WmN#e%uXEFU4BQF6uEg{j4_ zIk`<^Bxae1mU~(ZRvDZ{J0q`&TS>F%|cv=k(Es~c^?7qlGmMw;RU+f3I_O~^9`yhUw=xI9jK>neC zf3$0E7a?}5d8=!3mZHA)*knk$t0xA+8Pv$I*sa2DnA@z6RLeCNvLJy$<_#c@_OdG% z>@5?m(lPv_?pL*tJc+9SMefBiqm^$2P5+w5Ti5Pfn}%DzXq|eD9$hl`n6t|B#DM+i zTi2h2#*lwCl==AsEuZjD70OP(=5HoiKbxB>v-tU1uYFq}z0js;sS|qTpQrU_z;vy8 zM!A0D_L)FZ&JD8EG{yJd7PioHx@hQUrTar!`^Frb*ZR}1&4gqfS1P7jO*6_orZLcM zszfN7Zt!4#l^Iv<-kZ*u9rbLg&zqLNue@V7I+Rd{B~v_Z``b?!Wj0pd z_VK*M2%Rao*;L-H!1+gy?W-%hM9GiayGEeFw1u&UHBZ*h9YRdj$7C*svin|veREh| z7?Yf5tHwAM)d|b?v~=t#zLZxz!~j{p;o5 z9`z@tmhTjQ97LRX-3hAjNPzUM>cGuDLw`Rae{r-ByNxK&ak+Z;{iQK4{(H62-tsYd zcb%iu&hpL&w0e;E*Zj5LG8hQuG>j5R{9!JqO305Om5&+8E)IRX`l8zC%xrAxRNU>% zH}fu-l);uv$AbX;Eso2m6ph#aly_b4vtl;JVOU&k+JjGbS%*yeZ7pt-exhDmbun~H zK(40{M^Z1hk7?o?7RgU%9A*xyd+z`7PkppjHqn?pu5(Hzv$)*WxNZj2U#yXd5fHGjnt$yT;ggO)HMGy1G_4=!+mVB{44W%-!tp;58GOUKo>v3Umsm6_SrT{ zn0-`kp(xH_$NrPKLF1WuDa8aHWtyRJPmyjYRkRFZ-~G#cRt6XyOo-C;`puM%j$$;L zd`^@P??5r+UoJe-hk7-?`)wv3x%cFKsQ5&h-SyW~wH-Z`cW&?ApnQdw9{s4jez@&; z75(((Q4oyyFV4BYl`tIf8J}s9aD&u3TR8BrPCz5hOQ~(Cu;BA<-_iWL1kTXFuC<8W zvoO)Bhn*Nt8YIGa<-M1Nfewt0EDEC~h~N+$+kof`XkeU?NRNg#0jh)WVwI-Y9=SJeV8)^y}yiRL4#3n#0;};l|N75r^S5_Iq-7{>Qo7X`b*@&|VtQpo%T$8t($Tsm83-X^on zk=cTyn2;;1r=quL%dDEtoWf#E+hndUI63)3l$0}%xHA)Ig<0L1Ss%b@FUAdn^2}Xf zljW9BD+tzh8o?rq7Wg5 zahW0)`B&od9jmgLE(%LUN@GQGUse^k?<%bpDNKs1jEO7Pxu8LJFX-G={^p{{e)odr zU3shG3!q{Z{xv1;HFz>cPW1LQD*qKs{9U#5LyVy=C5DkgkXbk*fKKdmldnuN0f1pN zQPt;6C8I*pK;R~Tce4O`3g%X2F>uG|U?UOLUHphhrVs=}o?bRiPj}?wl_5r>u}qNn z9p7+Q-_bSia93T&5@TNpW2X{EM~Q0%>n26(+VSh!p(SQTu09(de~sQXN^&)-D=|-% zxbEp{6fA+=F9GdJm{=_tu}d0fW?E;KwC%bYg{~V1mRS9Ay-u=SKC;u>D8&iXkPg;Mv#}0GCF`arnco{>z{liWG zqD$1YQz*NOkBYz2L(^C%${5Em_F!~+3P4kO_Lx{E(wV54;q5tvnGc1exz7B{qa5*D zS(`YNhC;SS-D1Rao@cPoQ>LZY?H>m75=*6*R@j`9nbM1Fg%*B(iSQ6wozBuaPSZ<# z#Rata&&-Sa{#ILzjAPOzS%@amGRzs$wsEi2)zE*FTcQOL@{4FZkboH&w&d=)!kmu@ zy5~C!fU^ym(lZ(K;K8MQ`-!}-FF6LOO-hC@d~F^J4$sZD%zmSW3K6@7c#*}BvOsPg z3pdRYvCPVOHX=HBpUBQrnu59BAj$9p%xjDiLQb3o^p6}a@Eht?l{yyg@;$%A`=w;e zP&$6!SRj?lj2t!pH7E(rWTx|YQVS|m{0#dDaF*T~Zue4o;UaYQ;|(~O&g(w>i-h5$VrSmK=ks0M{*ki2vmAu;UNhXSkY2j(H^@7y*A)+OJu+ zHMVhYL(HC$FfS4yn9Vi9bkF`$3ty-IBpGYhK58AEpPWk&EWa&~umvkD;!84hdx&Rqlb*OQ_h?9W_|}}nv+W$i zO+so`izVuj8hn61x46#zS&r?#BV`b=iL|8jJC$dM4Gn~C?UP6>S29KIdCqO)!?KDud*>Ua(xc*0#iejgzJ;O26bE(TGcXxmhkf>oq98;MeNK%%@~T z^3=(&kUp+{J-c-vYghJctW!I?d-Fqb*N(r5;Jhg%vnlByR4E`VH-me>=%&w)uBwF! zhnGXMO5=9#b$aq!0I)LY=CR_a8&;yDCg(Fur~$qiV(2eO8frGXa;~ z>+^koAm=irwwP*dhki*v2&qOnS3NKC>KEEf2}Z}v?T(cSe2ybMneenIVRot}IH|zD zh`C--hZEGx{R7=uvO$j{&c@+?%a3#7x}{M+ zhAq!mp8eC1Kqwz6M|C&TY9I8phB}uN)JDjzjtSj+>4gHtb}cN{ZH4Y`8|Yc-oPg!% z269x8TwCWAcfh!#go)c*L%h_p;CB@cGB=3yu|e?+II0M>9Mc z;}_0;f8mOrYFZM^7znW~0&N3aL8C%~5FL#H9y*Z2P>+^k_PnSDY3E;3AeAg87%4ls zhu!aSJj+I!{Onx(>hd&A>S3@R*#51rT|U}Ww|$p7cK=4qi(f_bruJIn@dLww7j#w@ zwiMNr^#HwgebIMaJUE~nuQ<=+F8;O##ymZtO+1o{`Lsa5;Pp`$n%q>UGdxcsV4);h z4&js3>5@w=-?0^Wq4~(Od%TPw{IjXZ@Hq3pU%Cc+-OBP2oa5ki8gSl~QNX`Pn!|5* zDE=^Q?&5_64_a@)1Nn62nqvRu!u>A8ntVOgw?Bkz-@r}`bU0&W8Y1`E@J#95qCFU9 zOebFt2I>eD<5uytn%tQC+HAEmgxl}W6u`grmRuWb7Dkoym9bZPpS!`Ez=)y-1cR;5 zY!P=ZhU%%$Tl7or^+m}250*e_zZ=TlGAxs-2rsCNcPK}%*SU@;nyQkwxub43#|J=x z4(Pxg=zyB`5DV}_4j=%);Xn@Tp8}Xd4$xZ-^7nx;S!_DXGQZ0Xv8C5U#c&zWWMwhUHvZ49yKbJl9_t*R zpa1qjx#pR5Dv=iw$_c2$NUh>7FjeQXpbN03TJ@dGx1I(trNt1;^7};_o5)FR!7n

Fx1Sj%bqGIn^l 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 A$^ZZW literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image4.gif b/doc/salome/gui/GAUSS/image4.gif new file mode 100644 index 0000000000000000000000000000000000000000..87712a2dd2b5730fbbceb04a12091055636affd4 GIT binary patch literal 2849 zcmX9-2|SePAAd29tc(m&tQ@h(GQ45Mt}{Z891XEWc%>p4GOTt-h15U9qBnBilzVdS zs@DC6gpoC3*qqh4wWW8Tng8?o%;!0O-|IK8jji<$hQ4V~IJ6CM2c7q$^Cmjj(divv zOm>v?aR>y0h=_=onApC3`($Kff5QIVy2Ebtmh9LxoP#D5s26X3Lz+jq7a5c zIIj}MAOwR@48kx72WuQcaR|e?hyW6SKm~XL<2(Wwh7lM>VHks9oW}?D2m+%Bj3F@2 zqX*Xr3Zp2Dp)k%<170H-jAAf`!8orH!C@4KF&xHuLV<9g6iDOo15Q8!Pyr0618=!D zzyTO2f?zyLfD&v_6v0pg=Q#ulPz=E^1n0R0YET@(aA1h*40z^>;u;0Efdfzj6alZ? zL;w{q0q_6@kj7hr0u)10oEH`_1Bk&M!%&=;9q|IEqDE27is+&>Nu z;k*gVU8$$NHFgrw=+QaG>uy>-R?nPk7dY}Z})6O+C5rGvR9raHhp}2~*DW(a4XY9e+>0{EQ3~Y%m}BQ?^;gV~kEJoj;Y( zb0`3>h4YTBbyD+wgEToPg_cinGH#m@%<}B*tRE0aaVYycq@9(S?zL*={LFTTOn!Ek z)a35#Lu(ZA`(HpDL;j-nbM?ZXY3@Ca1d?+~KBdN2ecTiNaGaE=DjC7{5}hUy;~R@_ zG3nDYajN!hClr~PXZUUNDWmz3squkVX~PNgou01ebUux_`e=0t4+@ZOM|4~}+sMa` z`ejRFI(N-h#wq_-{+1GoSX025aa-A}x5@pA1If|+jQxRe)Uo}luJnA`u!Ka1025)E zmp}shdT`22g;+S{4O08ZalT4HgGHr4$xx;vLE=lF_+|dScTjNdvBcjWxy2r1HW-^5 zr#FlsmA@xaYgIBB(-ob;O>-GXMw;H0WIb+NVi-%ee(1`QYFitVlWO03Cnwz!`GHa8 z>aSE;UCFlVmATW#q4>Da7WFv~gGPIGoM_sbO8%)VD!mTV9vk;dk7AVgpF!g<_hfda zy+M-Wz6r43>AN-0CrPehg|&tD<^0mG-)(;_v3L*5m{a5FJv5^9bm6J?pKUIf?)xq? z!8*H&h6F_+gS^8;HQDK?nuwPZH}Z1C@R)x)cQs+T7PTw30E zO-MOBxc6zbUK@MG{=q^zKSKlNB2@9x&(Us&&z9lK8+*czLqsfRqxyZ)rr>)%HnxQyikJ28T z@4|CYyXQBB>1J{ZN$`aBb$Iz^RwX&jmbjFf$;s=!q*iw_;F?PY|IxyIM_l+sVnX?| zJd<>0VWPeHw1VZrEcyH1?nF8{i|W=P8PVhzVNtKr5L0TRD?1o90mp8(mHyQK04J?~ zTF-^{Ua%b6{^Q2MjXaUgsck~vQ2a5sm~N^9M_Kb#?5T!=Pc7=!%f+wmbyXI|*XP-k z3l8f)3MqQ6xyW>rM0<-6{bbJrf$Uhl#(cN)LPw>_& z=~MUuVNX05`Vjb~R?g&b^3 zDI88#h|`kH`r!p0VcWS?Bwnxg;neo^?x^(mD*Y!ah8oQwcATr_YMT%EOtmxPZ@R_` zFLajYzgYdpfIzXo-p@xkzvumv7l(F_+WUAIRQ;xFuRFpp*P4IH@=;tZ@E6$P*7m9vWje?^R96ss?1;=gG z+cY07xm&R4AW-}|XKPQHWqY+n+G)2U>#B0g;`9;CgR1SS{Uw=Sk|sZdFj7B13eb;{ zoEsj|OEfxAW4m7QdL+EAtxHURZtXTs_PTI3>e?M*)@7n?ndu%;Iflxdbgg@I#i)!M z>pUUrYW4VJii5$uZ%Wm!<#w~~6-T5+`7#B0gq~|Mt)GcS}H2P*L313U{qEcWp<-H8b3`(s0de!!)z9 zLbI~6!X?XAwQR4imaSLU<=yYUxaa9Sn3>mSUNgt>o?|>Y9uD@=7T_%K8USF5p->)X zsS`#axC4UYFla-4T_FY?ha<4Gb!#EGAA)Jxx&*S}D+mt45waA~9g65I9HCYbEmTBL zL$D#)uoi=+>FW|GhC%9tEDRbpvp5OC+i-*+ZQUafJOsfj5R4`pRzR>1jxheWOA&3M zty_UX`)KRBs1tPcb)zuo-SY6LJlr7<3vq-vbplIYw^knRmxn(>@JU7VZXDr=BDz8m z{S<;N$c9HSXcv85U5a6pI$<{keNrCYrcO8_4-d)1fBud|F|3e>ebfotFlY;XT^DU# zU9w>mj<8!14g7!BEdFmk|5pn@VO5~6E??j(?^>WIONc+*I@*^h>ced7+HJ&_O+1lULap-JU(TS>~=LT65jJ6!U+1paz zcBP`>e&4mTRsHuKKAl$QUb;5he0%Z9;6mS-M>B7RYi3S$ADVq=G2Ykxd+F|n2PdY= z?_Nq&QXSs(v|cUlJbL4e!#F_ear23W^_oWXNBpRJG4`+o3?$h zv^rsU@U(^E?{x!%p;ztHP$=Ce<O^olUV_`yb`7@|!1n_joRpQ!f9C9m?qZ zo{{XZ#pA*B+2;WVF?)F8mb-{}laDX|7fJpUfH|Z0HTB1`wSrn=!@ObL2FDclgQ0Q< z`n>5EiwwAh$N9MV*f*r&ki=^T`kKNt56!f4D-FNT2^9aEZshO(^!?~=m*MP?KvaIW z*T&~}3&+#HfCdj)uSN|wTJ0*UM~6?8nuM+LkH3NrS6F<1y+6jEREydhn%{ABZ@{lm z{yy-%-E7%rZHLDj6ViXwhVM(Z(@(Uo4Du>^{_zpcHHSQYiKiqL^ZiIKC{PE5VW*hw$xdt?rp)C};sGhT?)l zx4JVUZm#JxvZcKX4ypT~lY1{*E$B>S!t1Dve&zbG!)9u)O4;Q<4)t4*-g{$a7-`lH)XNl{Dq5F z?WtSTv6(5!CsK~5JXrU2IK?_Jt$*(6)Ysg(fh{v$fu}-OvhTH?(B7&~VOupRACqst zt#kU%;}Vf$h{1T$za6%1vijdk$GEl440%`DlH2UI^PdKuXwgIrd{XAlJ|m~Y6y%FR90+*xaWJi5=H2n_ z_e-KaT2!C+s!0F5@ju!3pq<}sUvvM9IJ$b^m1R;}e}X*`iO@!hNAXTXh7?i~Ql$_g zNWA*rpAXv${#}ifuF7Mf-%WG-NNm1>?-Fcm!a%qHddoP_GELgSs?$PykGC7N5l?Lu zerT!H&&GF{__42ya3vRm&P8*_Jx6V%hXzWtOSJx{8Xw7o6vZ$WNrG3`G30Wnf`5## zr3w~pDETz0k)1WHXA-0EKJhAS(_5x+Qi|K3=Zb|H2(-iKxb_Xx1&5BPi{aYo@+BQq zOW%#$!W#Fk8+v)Y+dTBHdG5EP47zv}1PAWKL^?4_w@sV^<>(OpoC%A9lL*{lF)ByO zw*0+ze<&>mGMBQ5`pc{32S(TYi+jX|TUce zU7orqXq(ZhC+lBjDfrIE*h>z1 z+Y;(6wa7O8w{{MuNR&%r*5TGhc2sG|D}}l-TSw;tFej%^HsZ)l^O&Bx?6Zn7J#!HPHo1@i6b3x?Bf@%|JM|J=)w4F1Lv|)J;48T zl_4GX_!cz5KxbUid=XUZ%zk-M9W1wEymw*Y}a6Zh`7|=MYu6Q7|AE6Z*fcGpF=r zC{t&)Cw#&B+cR#?tJ}k@g^MhM!%4~Xc4-^|si2Sk2NdPvB zUYOQaU(=U;%IK3P{o&3B?XeGH>`rJs-oL58)2+o2uSb-Uius3q`WXuSny>c9WbX4d zMz4#Y=*w4X$b{c~G?Q<8S5qCH>Z1frz~JFNTsVpK#tEKA-Tc|G(m>fIXoCU@D5P@SQtR9ozR3)Q>qB{p7)F zb8c;W1e~4f==9ELr*pLzjiHdV1Z<1n)*IgBFX3uFQwMidKC+IuH`xB{PT*-t*Hw#4 zn^0@qG{5M8#BAF;mjTtNUDf}4p2BI;EqJCq{MZ8^ z8T&is*(ny!HT;)z=@mrV+U;H$FTOu%Idft2r9uqyVOM-RQT_*w=Hy7ZR-6CL_02X9 zR{Xz}##b6F8{XHRtP5Xg&469#@Yk2@r*IV4Fs`F3mevsRUte-*an6CPhSy}~C5=2_Z@ccwrNuR{QcN*kZQ+=Pup(4SDdm^ zx2a_;R?{dY{n4&X4|b{1-9L1duTFt8xdB7j0n9Gp|2(+A@S88&$32=!R+1&(yHWnL zlf|LC6!nK8gM)?wh_Rrj<5@j!yvDCL-q2#9u+!8mPz8Ru-G%~s30x0$uWoYCU^yJi z552)<*6y#+D9^9Y)r@zKe6{IEXXc`iTVO}8n#nXC4Csu{xL2I4kd^U|`sSZ6lYe@I zD0+l?u>cwtu>47JW#dY}Ss71Os3fj6_{y*j3mOS9-2@SxRTB=10IVQBV2lL?C2{TC zIdO<75C4fos3nX=)r#kg#-d&&g@+__`l}bhK;j&m1*bC9ldBTlj}3BP=LY;JJoq5a z^@$<GpBsqZP&!D-kuB&xhS%od!>0Anj*ch+QPVR_H z9Zm|hd6&nu+xxg<|7*jnf&qXd*-}cjv~5k?(h;56Z#3R+H|80P3#*s%cI4gXGH^yN%`e*WYX#4&97Uk2Fn! z~|Vd5?vZ?`erJ!{EcW+u%{Ftre%Byiz9k+@^b^+XW38e z>26(lA;~FUjl5go<~4%kgHEmt`ZN(#G8>9yq>q$|0LJvn&{OdHmc*-UP_2LTP7~ZQi_^@eXwxg zXlz)}=0^i5Z)bwNgc0%GEoKdyCgtNpyK`O3GCr0i2RSw_3bV{i>Ez&eD={>jR+F~HU2h4v*|~QTG~MvCLd|-sUX$%9Df0aE-gLv( z%;Gg;HqpnYVO!Z|L?na)#egb5* z#Gy6By$=SB6;kSHo5Am?QMAqP9aCHKR*#|LU^`J$lRST+F^=i!+c*F#OZKXC_K*vA zn%8!YBXo<>H#(FuQ&-lWEk2M_K;`g&wYIDa#{62s?ib^Vgf6Jv8G`_*BkO{;{dJ2BGN?xz90o z(j!A@fKTs_92)C=BFy9Vx7_Qp4u2c;F=TZD|F5H857&vGykoSXB+dKz-BE{Y=;wG zeYF~WwXR?ZU`vaRbw-|xkJHl3Fh9%@qCzQ1`U-x>Idk8lof*P1AR;FV0fVj)TQ0jd zn!aVTS@GLVvc^6{Os-@^bsS90<%6#|-$PggSsf6oW1`xn;JK4;W_8%SGvek2{7t_) zIpVU|M_vS)i)x;6>SoVZe!dYga+Ceglwa-XTIE$UF}nX(ET6iVYU+J3w7=EAAJE}* zuz$5u5nz;v@GA9(`bGZogGY)}%xBBFAuZRNSV`>SMKAwhV?HXYxyNX`k_X4?RtL0H zcPKH@$YbNRNiz?FRb!6_f#)29`Z;cI=GL~3z<&IIiTcPI#jJ~^4IUm`C&yi3f8|2Q zsg_#4S#qYE&=nxKQ?bC0KyWFR04^p2q1D?Q1Y_hSH78ta<-_9vnIPhqJFK{Xq{ z?ODuqUp!xieB0`$>#OjZ9hJmNGZVdw+sj&l%X1+@T8bJGa0F7HM{KeFy_>1g+xUHW zy>rwtWV!ojGtD%aOdNUlJLld^@X4`iV@9&2qXZ8)&qEP z#;|_zKcnfH-ERgbmiXg0xiTouO{thNEWubCW<>f zl#MD9^Z%j(cE_(`G576yG-N&|8dW{Bf2l7Tg2Ae!c{s-Ys z6hmF)D|Z7E&%84$4?qnjSYOFWnAKHr!wbZ6CAtv<{FKNX^NP`uW9NR3#eTc*JWzRM zY-qZFHFJ3J)VC@B!vxq*=1-XefA6OIh{4df{7;A?r-#YRra%{%&)d==1}DJ zhh=c>(S4s<0z$?=|8mtU$}jW)+5*|d-xN=Q=1{IfY@5Tl0R^+uhrdHnZeUQ}*^0JzH%&vJi4dE2)=wF{kf9O7oV$q<_;+Pj9Tq4%0bXb%B)# z8~a54&{EHWeMC1x8uK2hU!`(3uPZwqS9iMMP!86I%RCa__n;4-NdBkECmO=m2+6g3PlG1qH_dk1|uv+`SqD}o(~TMiZrFUy7A|EE~NaKhX?3dxTD zux-C%$qgvs*pJL3&9!BQp8l1b(-bkxkd>)P0nIe`S3SOIW|f6{+{f>SZ5irX}!}hfc$q0Ac74#ZLzU)EBrJqi}pjUu8Io+8Bn+m(JYQot@FW&JHVLdgD=c8q0Z$~llK4naz8N4!FC#jR(Jr#on?k#~HX z(}Fq9O`K}OjIk%pT5nIrN8R|1i2u6S*O$Uo6Cet6rM>cc6Wx-Vfsze{qs(}&L3*G91^(RfwbnRUtigp ztS7H}?E|jcw-}caUXm4BiA8Z2a~JoBzo(A9OXBQcnV-lF*Gw`x=K5*z-TLqB0_DJ; zcihj$w+|;BHS#&G27qg~LsT9xRrcv?;I2{a$2KLtYUaD2zjl3Ln)ga^HL4M_XX*xf z;ASu4WbEXt8(~SC2Q)SxF@%wHssa>V$V}|*U>FBo!#pljqddJ82Wm;-|DKJyx14_z zcNBT4EcZ$3;80u?>uR@cl=k&Ka^9&UpV)K0vid}}tpaDHK1gl^;=r4PWh^B(|;v_w0E34>it6|SV$Ui(&}oJxy|3Jv8q zUHz_gXjK_aho8~{9KH`pQx6KLl9yC0Zh;tJJ;#s3wGA5BNO+{PfvuV`u{0__#y~43 zAUbAJbJEeIXHa~hPxd=Gz~r}~gA#LHQgs@kBdj;j;Zk4hqj`r_evPA6Yb8)^1&_V^X*hwx4Fb0)IUn2ES(|LxI&``eeMROVFn0Y8*2 z#_mHSh2W3*U61_cuN7cS7u@oe*RYCK|7@%sJHx>%BiIKXN5?i9s#3b@a7L$PhHlNw z!H!>N1DzZDbTtd@ZwV1Pw_JjI1X~zhZr#XfNluYuuX~P~pjn`WpmZIMrs5Qvw>YsUb2`uxiH~cmRu9`hMpwN*ZB}6B+S7wl(kkGJ>*Rrv5AMW;ijYm+(uPas}ZZ! z?VIqs|N3%UiJnUXvc19Sd1*n2pJlHKVRawWQb+-O-`TJPPPHQVX$ zaNGb*i5LmIXL*pH`NC$Y>{uy6sM+pIZIhPV!-pr2+}c;+FsTGhH;ScOs|8pk(`UrY zQe`{KjH5=6bQdaAowKMx4PA=a%1-yEJ>t1e{}$t%XT_tB`5jpT7Ovcg@YW4u*Kt2z zyIH4Is1(g^EvR&lYi-unl8qwnH#*!Vne@JDA&-emLP9>hr5)XEb?U*Uj9UjF4O3V$ z<+Xi3;Y;~ON|u3tU3&3 zNOiH4GP23&Hf7U5cITF%yFtWe?GS;O`>E|E%90Ng)Pcv-E>URG+^|3 zZd7rHor<7BHEKgmg4f5aSZ=Bs;^QX!cVUHx4d9`O^G+}7j$K2ovy{Nf?#c@Lxk}Ut zDZ*)jnaqKGHr%0Et=F2mwxwZo(ss6j$$i`RK5ol|O!V9+HK_hA(v+&3u2KwZnV2LD ztnT1n`ev1s?G6TeSe3l?TFJticdgT*jEwD;IJ5tKQ>ko_cn=fcsOB~vIVYEUv-?jRb+66lS<2KJ@bikM@UIo7cPdu?ftz|!xbH(}E!VbHUQyV=t$uUcFcxJ7b!J;h91h#gE(edbVM9TVNJ_f~)m*QSH@ zX?g}nIGP@BU*KB?1S1Zu-q!_EyQlN`I>tv73p*;|sUB>(-ff~?c<^pOP5F<}Lfpe$ z{vR(6m$iyMR~(ESe-t#vl;4v^t66^bzlEY>r&ZSqvBM4PAtJi?*IGQo?Ea><{L10E zVn^tu@1ZX1lY9MR!e)SRv(hD{bI(MUIVS;h#8LxD6oXWNFUy)Cd>XtKcl;v&Uj%EI zbKBKnzVwcyVZ8oiiHptZj^}ly3#jDd26q3%_?g@JS8hAWEWLIlK(1B>>^8O8qU%H| z0KT#BzQyG2xEK-7YIH6RvoRz#hB$l8%jkm3Rud^yXQgL^xxCVUmH zmX?2MT6Y$al&|2ka7Gd4LrmTcA9;}2IzA$=W0G%RGJJxG6(Hr<)WxTaneo{oJw_W{ z9^zMnNz}OBXOD0JPPK{zBKR;(il;8!Z-q;A)bar65pUvn-_%ekJ{N-L$g~la7|ZU=#6@D6gb|jD~#yrGO(+fx9LN zz7Qb*18%$G$KBE!O#t!rbv(Tz)gnE2NUfa-xJ{4u0;57htMi1_9D=R=1#2&F{kIx= z`Zr2aq7NGx&<^E}Y+d(OyQQ*bm*0tIN%PO{W;q+)Y{q27+AS&F+Yi-ToP9MJ;jAqH zkBCr^jK5PQte}3=?=}p~HzDxPd}q@0hXqm;#FoH<@uY9w0`GTMhQF5zKAlW_Tp83Ein%t5*uoc z5CsYr;g=k%ymOmo-+PWc9zL~$x^UO%v?~h&pTCOR`69OQTS5G(tlI44rI}6KmNZll zmh_^MU4X}w6d1=XpqR4aSBgDwOLe3nmlqW<={CAGX_bi3x4Ld+DKf`nhf$quX2OGZ zZ-nN@^j_b`CIqR)x*{oRy!Uz0HIq^+k9D|7Z8X=cPT%Y8Dd@+Jp6{jB3u0xm?#J0O z6kP(JdN$Znx4U7%e&MNy$0!+_k@)YYVZ*IeoZ({X2cGXOhW#}bcSeNlrfM((l^2(g zY&v)bp>&A^If;2T3`Er%)WRg}1?YFf`fJ^gQ)1W?3*2gjwfKOi4bYmP<|~5Z9)jQM zxNACH~E$(%#aRB@@~3*)AmIG z!jI^-JqSnRt38^=DH{=}g4EbAHh=m+o^jZ}HJGkokj4jcdlC9+uwcy9PvA}wgW6K0 z1&Gj2!#LAnt^j066y4nmkp0kNM?xqQL1@R&=!jB@wVY^uZ+uDevc{oFqbaOwav~y2 zejCN6qAD2FpDWO#*GBtF;zX?9b^1ER``XK}Kd5PD=?kDj!@OSe2OjcEap%I?( za^B{`1ZH-f5|tNzecAL{0O&^rUn*>X1>t9g6Ovmk{#sk_v}iRf3}E4kIY5ERSDS;i zsYsz1xc6!m<3-=~$6bjLi$~HC>lcxKjkilT%+S!i1A$k15l9}i9jrc(qkKmOvP5wU zM6*51m7JS|^}V@jvLgLAk+lrsZw1wN3$Y20_6>b4I^bUn_^bTII3+U~+f-4_ZH{n> z*Be2Sf?MUW(ZH<()Y{Blh(h6>Oq3rzV{{^#i%q?!u4z}T%i(9fM>tZAkw_rPnTSYj zR8$i{j-ry~hPBB!h}vjmDFMk?n3}jADTA+5;A6-1uY=y%Rhl|f21)=QH}YjxDc6`f z*w-rBs%~gS`ERhs)5IVqM`hSH*gw-YB%U}krkP#6FRIA+0HKizqR}t6UjZke|;xz&Cw-s|CpnSV4*|bUfIM1!78c7L2X5c=>kz35#lg3ZR0gLI>g@D-p<* zCKdsXL4@)WYemupG=i#P!HbvH6T%_zqZGgsoxwCO_cl|jD%gpq3CU8#5@0@_kjV5l z!yS4GuVJ5Edse2OYp-N1$`fj6#UMk-aqOOuU}Uvb^)U9E3?PUEN67o@HJk>P*XUr$ zqs#G&j3XMc$OA^`c~bcJfNm{9=`VNHn?(`mU~QN3@=bsqk@V3$ajh-j0U)?^;JO&W zT|)exM4@Cb2>~K`8c(pH1H%Bhs_A;wj?Z)e;;#lO0dO7B0x2s!uw=uKRKH4ubg10< z8tvdw8_&kL*$(|``;9s0DeNyuB7H61zF0NX?>`Myoj0lts?7g1a3wbqYUz6yJw1n_ zab514I0EmzH_8pEnayH2C@Ah)b<+`+qDCWk`--I<@$U|7XqR{su_zL@OAFX}R1{=O z1!n>g5FhEA2LB2Jk3WK&va{{p04%EEgI4&dHQ)uf&0Lwg3n;3#kCZrNV zueK_|GQbC`Up4{j3zWWNv&jn}4l#l3Nz98F5ihZm2>UJH)Rk2!GuD`R7Pu=@@byIkHE zlHx2@gSLDO{91gZ4Ph~N#K=USkOn$YtqVkaJ8NXG0O)x`B`o=o3?MH7f4HigwE`2* zg88JxQ$&XET=SaDh{4BaT^@m45hy1?u!#ugt#}o2U&J)%O%0h;N57EQyB!BK897V= zYVUi&g*U5*B@DPcu!c&_tPrPVALb6Jq8`e6no4vypw|sP1kbg-gd{7T>HmbL>y>Od z6K;I1(@I?i#GL2;7i&56KKbv{{)XEAGuDbabntXiJhK(wVSsyxz5kq(;Ls*VZ4%7gG*J#9i$Y;5M01%!^}5 zU{-kWb-YPpY4>bWlpnhG&m8HE7IEVV0XCDetq;i8S>LQ+-N+p5Y*U_Okef1Aujz>Z z=P(Q?2F0QDOVi%ZGOQ7^jjhKJOnH@m^4H$(Lm>X(=m7cbLmw?_CJmc49tU~JyiYB; zf2Z<|f5ID;0p`-C{4dZ#lWccz=K-< z_v=s$7YYUo^Lo%iD(@-;&4@d$Mfai;e9ZVry%KWN>Oj|AM5CA$nguWEmXb&(1 zXeBW``?nG!87{GUahweaY%S#y25fPRwBN26t7j|FR=fWzeB z&KGXu_ZEQJXyDnP^@#~k@7A8=dHC*4o$=Qw0@l&9#(cMDVRZtIAkn8T*>JEix?E@d zw6o`jOH6j!UB1!trVl}&N@Cgj`pf*AAPX1;&d@5Df{_$sSKsMf8SpQ#tL0b!1p(k0K~ zvoC8c`QD5YR0G0_AI)F$BXr)nRNow`AFT8`+PQ6&Wka&Gy?HOXnezEe1SCf|r#*DjYOCd@GlG|RdFn813 z$nhZ-FmZ?RbU0&5iX=i{S+))zW)gFnmL3`DK3hJoazIY$S4hb2XasWZ?EX^%v>4PV z-Cf7Noo)-*P{CqZLEZjayW3aoUD7p&WrBXG;zK~Gfrm;A#IQsNm8BQ=&keYh-BGaG zw`PL)e2BZ zfaTIQ0v2RRWfs2`8(sng3G_1)dfqrjF4aB_MLGe1Z5YjbX6SP(dX$&A;Q*~&z~$E2 zJ5xcg{|;p^4_xS*T!IhlOw|4(0#hI1(&A#Qs)pV!k$aTXSB&8B-s>m&(lU&x$G*jv z%7czF7Lc`SfaD>rgCLbk!1DnrA1MY9BNqWI5vRA*f)#-yP7EDkq8D$ZPeyw-rlDS@ zg5@hYbi#O^;WpKWzPI2on@;p)1XTujrd20C_CNq2o(|M?z8{Jn9cLn*73mK#_m*l^ zuM&@IH7_l2 zmBDUyU~w!`k*{JGtXSMrzwt}6C-xL)9`+_`ABZpG5YadyxYoFaf(URHts;8t6{$-f z>-g}#z_O?-J!m&z_@3#Ks)|dUKtDd0^th)NN2J$+fyGSY*ACQgj+C}(z1>HL z-Zm4RLisGQy|~~&!N;5+IN10+dtz^v6O|^RTEuWl3=A?XwDj7u%h0`U)1}KXnTDxF z|0w12UN}SQngmi3`4|#E;^rV&9X1pq$y_wDTh_|S$Glw02_&}wZ|~wt9AuloeYfBO zIqF9VUE#uPTeUgfrs{=?ADk#aV=BJ0IkW1_LOWS& z7%U%j2k^*>#exb%2_vjbJgaZmoK%V~s%)HN;Fxa#H+uwuIC}7ZRH@LJKzvk=!fDPu z0XP=vQw9#J{<7G}FGbi`d7nprEhsvV$%4|BHOpY9q^~Rszf$?l72dmX0%ebnL<`WU zaV{7+abvN}d5JL@01_V2VYws2d{i}?Xf2f=&pS(omRu$PeC3d_0Kap`0;gr=WBq-u z62U--g)B&Ptb)s2AWpATz1Fs$1g&wAD$gNe3IB#y=adD+J#%}Y<%G);{3jYcwZn?v zYHr3AtJr+TR*lLxP;$Kd2p<&@HjKqUNLh(JMju#G?H$F@f^Go9KgUNxoaumw&O`c0 z@@ZrXA{|H2v<8$^OeTaFa+XY>(7clCFYj1eRuhJCzk3jC{ahC+vN00C`~F>RyiLv% zy?x5vg(0RzAWiGa5OEehG|RD4Nqr5F&MC!u2v;`m5d z*^th_$vc25GG{=3O&Vx@K*}t#iKxn=sd%a0zK7SYZZ)-^mcoBDU#T;)anT2>N(af0 zhjg$H?r&FU63sX~>+eGpEzM5nV+e%#Y6UYsc2s^uB9)&T(cN#-f|$N)Tr zy_BS)j9!Pw$h?bm=Hy9yD(SY!7}iNDu^$VhpdCARuUU1*J0a<$x-7tmsWftP$Q~7! z7r)W0m*)yhyDP)7{_7BBS<@zcZ@3D)XUY1R7Id8)5_yA^Q4Q7pt>=)Ti4zaPW5pWa z1*I^09~Z=a(OIJ!BdW;<5tZ0>WnBU4&b$3`l>$M(%N()?fb8i&gQ1Br0=YDSsU6nU zBSM5_oX_)M`Gi>{zhxCm*q5IoW|ziN!KvaB7+6w>t71d#o76t(Yjp(}i5rW+Xl<8|B_q^m<*NUbBQ&)m$NeIv^zSwdH=<#U0 zY_YSTO^dFiW)PXTk_a(B8f1tIjkig?KK+XH&lVRFsbUae0EHZ)lUhhDzm1~_zy6yj zH`+NMr-c-ZC9F;gy8ExQDRibufs_{J3mB^j+!2R*1?rEOi3w3m=c1YouZd!SqbtC~ z2v23K+$1S?-{JD0#)Q*bbr}wj4=H^-;8q7hFX(mjr%}Mj1eDXEf-o?L=x)LR-i^Q+ z2hJ##CpOD5Ybn_9`U?A*FtKF41#15rl%`A!SdXyj|CFg797OLVB+q8~>Kb;2@Fg&5 zb2`8J@PfZUj#K;g46`3FvdGu$(|TM4LC=(d8v9pyidFm(+SCpyR5|A%=OW5){&Saz zS(2)<&HR;h83@vWiH9u`T;a*2)L%SfC1GtT)G-5X&VZ1A90V9ALo2NVfKOO?-!Cl zr0sO|ib)NiILI+$dx#Xr4m(DGhk!~Va1Xlxa76O!BhmoXx4<~*X9tGYX3BCI1~!!+ zkjLHu^i@Z-Wq-^nej@CaRHZ0UbwUH$FhFsu3hqmI--o%?2&aK7-{SoKyk~Y^ zqxj-fisj=D)7O#;thWdh_5A_zA1BMF^u*}vfdNK5I#S=g7$-~wHV#Vgyn9QEr$_`|7h-mxe@0@##~3L(fL`OV z1qhi0h2m=~$5f4a8j=u_%Zn3gCNOF=Mnio}DxV|CSCs+U%3}gxj&bSmh5O*rm$x^M zfJgkkx$Pc_yFWiRQKk_)Xn9Pw-dBLFP)`2-pti2v^=NL)USCh2{JZT!>MLfpG;YEf z1*r@~xkUJkWz7H)yLP`c{iP}pJsz1FZys zoCY7W2GVZAb8&!)1V@u;sJ3f=ng}*rx7W7-2WBWEMZg9SQ6hkEGXUIKyrP`W+IpS; z@pOk4m8r`riqV;OOETA3^CUSj_d(p2EcL~&=`IO@N<3{Z0CV{Vb?x7Dq!{K9!ObRk zuetEtek(+)v9~7VC@a3u3d>QMpL3a)hZToZVJv?P9{s5Fz@Je~-^uM)tL(kyAeacp)$Tt(iQ5tLH^vH!B(SCc@S6kAEPAC_qrhmV z12vw_0Q9?>u*24_Za)0r5-=8Hyd;1vs9G2*+s+?rC((TL9rz3OEU}mtCIWt_Z^_8h z5`+D7Z~{VOrOjJi0N&R0Ru`LUXJ|8tXzL6#1q)lGA^#>3yNGx;9r{qMZdq0MH8AAD z@G4*-E&cQpniO;_3JpX&i;qsgMW60`7 zrQ{eRyRG{3STGK#oG~?-P;_V&U0>cn4-D853%N`FFNdlvR@9QfWms69h;-A~-StxE z^N2sf2GfkwWCX!mODIZW6nR$1hp&m3Lf@8kE)OcEXVAALKu5@H6nG8{Eabt1w^D?Z zr3g=6DM`S&@)jWQ%B-2X?_{7a5k^UY6AN}G68NEja3w#=sXj_{0rB#$7s!XbcxD<6 zz?rYfl}jph(N>DkUQP}2r!inN3)6w%ukE}QqVBzEJSI&;^k8-Ot%d`d!v}f?!V5oOl39nxSoAH1a5kgy*j$cBT)L|}FZP&w+&VR}1mcY0)HWnLl zOaKkf0viBpHGY+P8uGN1o*Czc5FH+`0&=Q1{;ljGZc0kRzf&=kS* zhPr!KDmcSo>X2IW8&v(vtoBk3?Ge~Q0F?9vUCvc=aZ}pTRG$uST^p#U%P1Pp2giab z!XorYRW|<@hO_{)=?E%d!H(I$@LxroB_rbtTCd|9(@3D72*3$|zge)ybD*TIoFawg z`HC9ahMr>Rm1<2dAHefqFB$z;kft82YSpQjNhr0d+i8@fj^?-5#;L=GLOtH!?}J1dZ?_ zY+0MM>8oov#?7=ibboed{f?`hX1-?^-lP{8pMzR3`yP$Z^I2n^t(7{ zuY$*1Cf?G>(=?|ZV_syDx%&Z#<6=W#5=3e{_;F%GCS=A0py?2hxpa8p;kJ7)q#%YD z&8$oWkhTb6;=bv#NkXO>-NpTq{Cuo3;42*9^k)I4rl)-*(4jf)hO!fXiTk4o*l-Es zK-%IW0{2gEO&G=MVS$hWwO@L_f!9Xr5~wi+1zfr*@9gTDZU939Vy^H& zs#Hx8Z~SR;E9$}4>==JM0BsO~fDC3(2^aeSn%Ejg2EB-QZ+Dd|iTWHi@qHOiJFS1^ z7Z&wl_tx-rKTzw|-BS4yxZ$NFs7AEy8QyjW+5akNwcmfsoB%0k?WAk?p8gBDB&J9r z@a_^6x#+!ctAa!Y&&L5wehS}H-%gBGq0?$rm0xRDQFuV#WJ`vsFPv3#m(pvO_V=I_ z_w#BnH01BJCPiY>fOV$TR)br`>5fW?=vn}hoP~(sVYuP*6pFgk{AnKfxIpDALElUq zR}9Y4buqGl=yV6N#KHwfe#ryb5^W_Qy@tB!ISBw3 zT7AXV|9hj+NI@&F0N#az&NAPpOGqUVpfAlph}X)iMmzC3E>0?2iV(^9tgu3zfeClN zB|w|1vXN$dFK*<&KbV|=UH9S;M6s^YKZA|7;SGzs*O%xWUNmW&Uw>4m%G(S-1EBu! zjs6IbG#TUzXbe4uAv(yCtb*@k-Pa3wU#231N)$D6qL0ex^eypm6|j05W50qoq8%h& zr(ubJalL-q zw3l~M9*ROglmItHi1s{NNJ76j4X4e6)VcUW2!y$0uT@peD}O8~R=)fld0&(eU#xcS z0q&nirgz_>2m;XTEYHUUfJEr4SXQqik4$eK(n= zHx0I^6*pIOQh#FWEu*pXhMRC<1xs6WnOMqeMH*Ic;_u^lZmx1xpKwGd!SuMvI{CjVl9 z&QeGBaoxs}9pl4iUtPy)F9c|bAqP=T3m@Bdr=l&|X+(96z8rzMXUq6tB_mxe{G?89eU-?p%X2}MCwV^YZ(%mWxk5aoc3p#d3POB zJOPfT3)ju8XHmgJa|t#iE9IaO3SHw5&s<$*U1(Q+BhHqABOy8rpNUnyut3`rsOaUX zD{U8=)&UUlue#gL7y%UNH`LNBFTFPX3*$paaqT07W0yfaH&|r}mLt^=Xsck4nITeg z?p0l%HZ@dEa7=ebAJ(oaq(922&YnQ}{m&!lGua>R7*^b>YSNrJ;9)ZE<(fDWIe540 z8|!amTEi76U*V=L+?@S?6rFce6WRO5?-W83k}zp>a1ufUL=9D%Itih-P()-!LkC3- zh*;N6Xo8}KVnbI$QBhGtv9G(KsMyv3>Y}c0K&-246x;5)Uw-+Wlav2)PUg&=JMa6v zpXa%AF1KvAItFWCFRkxSuYXlmAH68I{BxW-P`AgcuF2nxQ#rCZq&YE60|AX4E}vE0 z3eC1!Ix8A@2SaQn>%)K6%FZZ{AX_$oe&^&z8s@%NPwSIA=Z~W^M9|>|OM8Gu%K=%2 zhBTk^)102&3^^MXD)w_iG9ZqY6{G-h#O&t|&PUTY?r&Jy!r;kCbn!K^lVMN125$;3 zIjFIur>DC91?&|)9ga^EBL1wdUu4UiqC%z1{^Cr&k@Y!lW_Q)SS}5R&^l8L);gTA` z$|72jvMNrqi}Hha+f~#?R`9UcKLNq)acK7&@Yi0($)@gbO~5gcsD^+d@IOcZ5y{{% z7A(=)to7?zY1(qlK86{cB)BS84KH}NhzF1_D%f)&{JX!PwaC3dg4zJnXJsji8l(0J z(%q|@E8_H>%Dx0<7!v1c?Hy$>-nH?fJipb6f4p?Q@Wr5KqUrLxJX@d{M%C7X+amqP zgV~`IH*KcXZE{&*B}i!>@}#}OuxH;E@fXKI_{gm9gEiwcKMl_$bI-m1Z3T0D{@zc zda+id88#By2K|6up!bwPPlHW}Zg*DME74;cz7$BX@fq47W|^ng4V^k!^E6^ba*=pL9evlmM8?M>=JL!M1rY*D`FY4p@AzKcA2DUd zr>WBh4b6Hb!?MXIQn`FLTin{@gEh^LB!xnDYf{6a5*lC&t9((=vKrF)22RGyi3KFH z(`~d0g{CzUWAaMm8g15dIBlMjtD^0x>H=dl76Ez@~wkFT`AHs^i(6}asu5nob;x{wZ>|6Mbgur=Sy4O{5G z&ddV&HDz_6q7EBsAZ)#fxb(8yzGTOmv8le$BiS)|dTT+VXFU>mAqs zb~hQoycqQW^dSJS%n6(B)uN0xm5zhi?#+g1JYIx=0G~>@&LNc zD@{E}awF@8U0n%LY_bp9*`IeZw@k{@{WrxQ2JvT`|+9;J6<52w}`Uv_SlM219^^%8v3qKT-dB0iB`SxlA%J+G-dXxdX zHp9*)_rs6QK{grX5Z!|(rY_6TO5w263w5X^5KEU^4iW>tKNCcRvyYA1Zo_?FzH%Ea zxK_suoRG|*axk4KOW>P9;=GBXjDASR#tN2F!@|Z{$S46N#>y1bA8D8jqJQt(DY+LZ z!cnGAp%Jkld*EeE$J$~a@}mi<_;$yTu7Yag;n@q59Yji&l_sqb+@Icvpr>AN= zJuNVJWMCwia7Qff-rbyjb9%FwA(+wfL$*FMgYsiF3b%+6N7v?(D-v+TRSwaW z@cM@QK2+4)fnqvHsIFMZ(9HW%zOT19C71Y>C&bhBU( z*hWZr5@UrKcCsk?>ww4ea#(ie4wGxTBXMGti)ee*kXPNpz>gZ5L$9c1gT%jLH~sPB z3cJ8{@h~Ri^4s5K{NBC=u2!^%eMI9N1Ex{`VObMnZkvWX*&!((yIy~Vt<#={O+|iO z?HIlnv2W?LoZ--W2ot;{Ycfh$Cb--gKcR1Kz4c z^D1z6$=C1V-HjD=IiKytOCeVZdR?Nv`P3DB0vfv zOAs$y>99$+D%R8#P(Jb#Q68lruq;UFMwx~II3^+%A{#YAQS&Su?~`meuVn5+DIxXK zW=+)5B9pH>AxdbWts&^HqiV@wTj{L!Io$7RvLF!_Wp34lk_w~D0|7-Ccofl(Dm}m5 zg_r_m*&q5BfRjIMy(?kD=QJIZWiG*zz-@_M@&2RoGN)->{Bn>T=oU2i_29^!j(b-G zD_C(?HlG@@*X50<)A)W$f|G3!!m?f2iB9`k! zNF82DT?ar+8aU&1Lq$0#S50x-3z`tUj^%3HPr;Aw@eQE7(A-1q@}D`(<_(~6nxHKO zIC#;ao4;(LVxy0QLVl?udFhmgb||5^r`haAksEDq3u2erKsU8-0*~F~pB_|^ZCcy3 z0z>BH@c~xcK$-BPn&kEWdbY_n71Zj(Rj8Kv5gA*!5@!u|_0~aN*|n%Y12*)${PCZj z%f|OLcqJ>m{B`QiO|@-;n4awp7UyWY7eC8C(DbCzCVP1J_bjhp5EbU2Rh{yK5Q|=7 z2l=U~mVZT#8Io0(PTAndg!q5E|I=F1}|Iw^6zzI zkp#_`iQ}b9)=*Co;Hy8dokjBYQBDM8Gm{fXG%9Kt12# zE-@cxNNf`LF~%|`H=8ojDo$w^XEi=T>*u4l6Y514jAgH(=wTK6AfK(rRg|f}6t%Sn z181Ff;6Y}-;0a>^Ys=?dB;l0^>6|{iG?E{1`S!~_7iiCS`$ABqnl!jIZ`y&kN^-PG zk@LUcwAf*l{Y;tYd$I^R?sA~cuFmV#nf|bh#jUv(N+my8<{dLQkfG@vod5T^)%Y59 z{l}(MN=`||bh!l5Ws}Zi|98G^mN-KqtW{r#wb`>SCoj0R+1pQ2ZdYiSTOsEk&n=>F z{kw`3g_pgt(+1+%_OT?J-{A`4u|!Y~#mFSs^ZPAU1#%>6R7n~i6rXH~__@w~MT-kp zDcG*2`Swl!P&HkZy{htPf@hzt-Tk#szIawirt7bvVkK&7@b@p6Qm!eYgvk)C5)xzR zJe|oBh(_IYd^xe|j?D5mLl7cg{zHS~Q5?j`E&nB;nP_sHVg`Q?ZMqdhD&t3rQdUDb zj&hG;9zZcrJOn$cB`@pA5gNpz(yYS38lZf;~AGXjc z)860Q!cOLU+YIdb%{fxz0}SZv5D?WJ@JHJcQ-2a=1Q)$6!*}I466k*C@RK~x4l%p7 zLbZ3UtJz|a2rrOS?Vw>I zi3XW}m@KKJ`zXQTeoKEzTmM;hgKoaV?-_zC{UeTk7V;gMD>Y!x<@!zVLABOB0 z&aB53F)mLXeqcEs{OaI>M89yh8_~HooCkjso}ASnP6p^nLf*aLA~WQd2u~lv9x|Z! z)Ra&S94SM6WjlSf=w^RejoQSHpr)K8Gk~<{Q6~b47Qt2`SJZ%jPT@CV{e>jRPrqx~ zaDEt=f?wCcVHjNX6giXu!bY~wl~Ch!$#I8M7yxO&qhDvir!!qXxx(=VmPK(~vLDx0 zTm3d9-=3H|Lx-}AK_)$qtqUm+m0A}JU0`nxITWaKUe^m&?uJQ9bYcvsMfqI< zxTg#C#bL3Uv2YARj7gD7n60qZeOwySwH!90OU^@w!~iC!H|wYH*!5W=t#z$%1y}B2 z>i;`OX#e1A=o$zQf&R>gaSd{~YhH&j|7I1u84aA(35hi^;j$$oNuGb}rmgeyKX7IL z7@!?BK(BBR-zPlEO8nBiq38iSU<|e!pZn`jjc+mLeIY#9C)WCdY;S69EC8Bh*|9gMQKn>oBku%BQ;@?a{C||dNmX5T9aH-2HL`^8nr(P zTA=ANhJ>Gv8iC>hh)^dlgdm>I|Dl2ABBHv7ACJ7U)(&eO)u27hMGJw|BCv0PMn#zF}2hgM36)%#kcQEHl z457nS?(tgG40ye&p#)~Ie;#&EV<(FBOBh2rLu22$^&c31&nh0xy<^P$UzvCG`|m#* z$U8|EiY`Q=ah%}6MP}h%>^+BgmYVk=KP%Cni`YG;buQoQAw#wkz+PWIZ!bl$8V(yt z;Eb&MR7asc7hcOa5pkdS35Opv$g2`7FQZhahbF#&T6JIZWr28})-On&KSMp+2`5`= zL*vva@ZB090xTW8J-3~tg|2u*@dSNu89!3zoBk5AF1EaY$93RdtEF^DjY%VziIt#s zGIX*Y-LaN^Wx>>JKMY-zr2;pm?NOq?SFQTtUxy9jHJe*fqP@;NFxvgDD8C$FA@GO( z7jE4lVufieOnh3T4tjYFr2czsRhD~nv!LO8a5@{#>O_5r;9nxL&a7?FyF?dz@eny` zPLQ7y2&*~8Y@0vF8&n*j-R;ZN8p>J7K0}SbVRqG={p6M zA2s<67S1yL5Zmbz4!w4XTkW&a##1~Y?)XiAkRsdQQpbKN2#2#P%dcmsNDDX)16WEBXkFK5$HfZ8`&Xs_Gaso0nj zEbU2KlAyyUwcGb7eo8W}Ebv_kmpXD5k(nSJ!S4N2K-lW(hWq7|TeMRaIebnyXLU_v7lLAFNc{mjF%qd>^r}BBA`uE|bGXg4{&0Ny z53KW>OVIJ|G{>Reft`|u%Z?JujTGgqJIvHgE@n3I|TrLU2kYCqCyz|B&VPhY>rg z$gZxuBVDwa{SKUa;TO!DvmSzRsl)QHhyUZVcXzv{K}#MPa-|wDZlI?Ky}g@bb3c>o zN~ef|ZYydQ1a~+sUx4h)wc37)p1zJY&fFQTUIYcgFD@ZIQtHtI$(X)!=VTED`_<~{ zrf4I;@ma9|N=TmZ3jq*qp2oC;K>i;NHJ_x=HR$Kzhx{$*p62?ansllGJVuvo zSm44`1WabmC`MU_d-wXuI{wky{d?)hUyKU_7CiENV)w~2tVR;iw1u61Sy%PtKu!2{ zznL2YF1SBVs86-3p(Z2$$rAq?iVX0v6&_=*bbsABiLx)LR%}fB?P@lUz@ydhBLRF< z+soCg*wBo+eYA;7F~nlDj6qKxRzmwqiO@oSjFE30h5u1F+#=|f3csb2spCJm1&;Xw zgDdbM{dVvtD;ova*c!sLA(u;RH{w%8bpUEUEWXIyNE9l_z@lPLv-H}X5uIT|EA6BZd3n_;#- z1ZryAFN4|wQsrB2@`eKYbt85j?;YADTLf|nHkxUhmh%3 z^jJ%FoO5h+yigcPieO;T(Yzp@55(hgu~<5X!JP_1gj`{HkR~k12a$5(V(c9q5iVjE zYlpXA5F(e3M1@!T)Ezs1oW~pJIKoHtNEnY4OPc@qvDK6Lrs&*>iRWW~OgwoxKSqND z9S;g(9KXaZx8PaKYVwOI(S>`YRWrV&Eb{KXa}~sR1-mW+<+~_bhCf6)?|z-;&VN*| zj7p{PJeH6=d)wvxzV7;&9n4?p@ zPp|f*3R*wg+_?Hv&vjKSPfmnPNy>F_-l?Vsqs_}@g6}P6c<4ocIb2-*{OYciEx(o& z6g{_lX{bK8sO`}t$u0M66slrn1?+gUEfQhJTqg~;pQ-3OmQD#^oiOOS-5skN@6ND_ z9ATtdY|C&x-Vgn8Gjg|ReP)yl>hG|3$Y@zDRyjZO(8^k#ib<&Ut^CPMjjPVXEEE{$~W~z z1^06M?}#1gk|{LG>f{F&BNeER#}EM%m_~Zc%HcgAyZgLvum~(f zaKw!)iety*8`&zKmE9W4R@(Ur_`(5^GR0Y-t?@jTEVr%EyfqH|;GS=gvcybWCAaa| z5M^d5YDQ^dA7upF9fc}D>^kiYx78|ad&AuYtKTu;80C$eFKEer@`*y-v%cqTyBW(< zkGD2$MutU}uF>ufm}?`Kln=!5(H`U=n}(UhnCe91)C-?{$)v1rV*qn5z&v30yD)vaXv*AtZtuM+l7nf7=e3fbBK}> z?|MbQuGL3ej!5wj;QrJibuS|M$u5QrflfNI=WS*=!zWV-!J1p;TiqiLJWgQESG4we z#mVKVhvN#*g73bqWCbjTHEILdUU_w=yUERVeeV8{5fy{%krnInwfF_$S#IAK8#LZH zX}9d>ynTmGIi4?o`%XFh(jt^R@w=3B|0Q;tQQgv^f&z_Q_C6Mi&sws`Z+(<-{HDHo zW~7Nj#3XMFVlQ{HA8r||->Wh==bYJYg1SYjV0|rZf66t#2O*-zzM{?f!e9YLKLO(-xDmg~~dLT6^Z82!bej z9j{DYM%TuIU)u>Ng;3qhej6XEdVmKK-YzoDI!jN~EEutS?pr>)pUjRTiY)J-6EW*~ zAoDPPBxwl7K`6F)L&N02Zrl(9?*Hj1G6H;Lo`J3|FEUrvcK z4v@$LfM@Kl^N7%?f12`CX9h#_N%||`Yga|TKTak^l!Z!mD{1+fX^4K$tdC3-!ZM&O zF}Ae&UT}tEp$fwK*etB#(S;V2lm^2d-4H~pHoH6I^hb%}%Tnzg)$RE2nFb!~x0q(pf<4xR^4vYDNR0$){ml(nk39`;G*r-2 z!`P!8*XBw!)^|#F&b-%UX-1aSCUc)r5abYEOZ1JdS;amcrNsUjup$$N86;U*PE`qx zdEk`GZwT;lqynTNa5Zos)9}7@SK)HoQ9@8FQ#HAWDUsUW*~^p_h<}E}9_xi0)yk;_ zn5K!XuPBKjBE zWmZgR+7+ZUFRZk!-^U_7H7J#RD^{7yWk0LjFY~%oaiE61#tu9cJ;!P;fl_=mI|?i^wt(FK$2M~Nk&xHCyaATU8dX;)isD$8~b zy)1-xh*S&6d={iDn7<7w%azCn9eK*<7xQ74+E(|}p}IzMpBhB1n zHnlD_(l6OE@USX!?;7d0xn}BL(Od1%RNbE^)f0k37f~-IsWz9qctKeR9@z3YVAcHN z{qzp>@KcqMd?N{G!lbH^3gHQnU9R`O-p%!zP4T9}#H%8IsB4 zQU6!lD3|?T?b~(9wHs_=xKL;Gz_J5ZM~*Wc{*H8Z_T_yS;@P^fcp}`fCSy^_qNdpW z+G;wCq3O7spjX#01W%Mv=){D5yNWJV1EkghiP3r( z;DOnkdU$x{CuHjW^R-)4H6yNbwaWl|VveS_Y1zWVHr?=0Pp7zQ*CPTBGr^>sGrbPOou048KKiz|@{`-b5X^ zIjug>hvTo@7V@apZ=S5+_n{`rCy&|JE9>_?bDa<^@{17~&@LVG&T9IyYq?}25U{W< zIbe$w?CDME{SC#nwn-t#rU47?z`O?vGDQScitw(5e&ux#rE5K8bVrIMY6Oqb&sC)a zijC7cdSRrF(~%8-x4@mQfT2`QwASJ1C%0WmIQKaom4%COn{Z`DQfsML2c-CvAa8i? zhe5gNhpd%BpTM0~W6lt}v4$CBi_I%;NLx#E~?6S0YxJ!t^0 zAJ!c1UE@zGO_MO9jTv8*R{NO3V|pk)yR@g({#>h9`3uxWSXdaorRj>bN!ZF7^rbOT zc|zce@|34}aA6is$lOYuaZ_OU)elw$S?-oP3rl0fgAlN70zn|ORfG76AXYs@Ohi?6 zvLbY8v3R7==oAg$4w<+Xg}FMh1q{Etk`}Iy%?fiqr-8!tQ34qG!)$Z+VV}fFN<$CZ zk)R^o05^KB7bEZL`TnD5(AXl62FufC*&!`T)Mo1Yc742ONOoIg8udjXlBw<;*-|^P zpsd{XxVJSANAsN1>7{``X-Z8>u2>13{22ddc+fPapd3)C22&mjl64k!(oo!W&nQxK7}+{ zNAfXvrUAFnP%R9oz7liP&W}}log$D(1Er!AeV=0~kj!0NZpD|QoB7!mIEYmEc{ziI zE_6jn(Abx#6JJoNJ`RDQ=lzMZp9560ZU84=QYwD!^*oBh>)V5`bR(u$@8v90rj^TL zFAvjJbanNb)oqKGe43)@3CG#11Fd*aG;RuinBAea-6{_HZ_qwBF?c8f5i7_fIf%o7 zPs=oCK3XeJ?U2ow5U-cW$!s;f+86;(U%!I@zL7;%N>nPs!%c1r(YAj_OuQi2ehoDN zENF4c+B0+;0>ZKV_qu_v4t(vcJ*JGIW2nSbKWLEqjZFhM%r~*7n%U*+LDM;ift!Ra z@LxC8Ld&gEfu#K1o5#_(`X>KZoW3^fZU%zumu>aT{N33y@2Z!360IY|(YSZocMHRQ zsZTrFxsTm~@{+K7^#V^)?B8oWyUdy=b1@ILMW~b&^}+UBR=W9EGTkrab$xS`VoEK| zga5LnhiO4g3yO*C-%8@_Wiu>gz%2y1$O0CkG${q$nvsKPz#Tp>R=$@f+E!%8H{sVq zW_E2u09I$C`gL(4=;(8JA!kmGP{@!Y5`}-2Bs{Pj9CZdH&Bh&g!^d^0WU!b}VxI{R zu8BFNvCOM)KOuKwgW9VQYPm~r<*cRT1I2kHK5Dq_3t`7;P-jo92_%`avKI#Rd46}k z6fb5Dg;z%5XrWj5qi|@`MH-b!VKi4>^Gm<@%+}eBUO!!2%Rg=pa@b-Ts)fU`nB=W6 zBnleR&a{-JF9}$Jt=oO(dIwVPmDj&CTERR$3%W z6JQOV_)njjPPfiFd4<@Q8=f))%wUe#k=Exes?S1(p)Uq-%2;LNTo_tbeH?e^X^>F? zR#Lq*Zn%=xj35b)JPh@OR~;3dIald@FCqM>EQY6W`dy6X741Z1D6P$LWZWw(XlaYx z_SWzKJ&|-evDK`zoTG0n%}Ol~hkVA-1D-KqN<~fqqYp(IS~d)`Lt>35FUuh{7Gkr( z(h^^;Q8$DR#hU)BJ(y~ksaPx|P-I=vfBKrq_~wx}VgBFMTA>F)y(de}x5VWH-LVk=yI@M>hal@2Za zeH~q|c*ie$WJID3NcTB9St|zstvd=itKp>|gU!_Idg_ox`=H{|++*Dqj%TZBML}Bt zxHZS(a`sK00-Vz<4;DjReAEZPDc?5LfuF+N*KA*}rrir-jO?4VF6E4%j+*Y?QhOmt z`gDHtta9rSG4kD2i}AG>w`g&YU6w~Z^Gpr6E;trgf3Y)!wrk-O#~q`I6{xLF5u^LD z)N`Ym+OOP~2b=FC0aS0;mEErFv*-%SIKSCybI*$-Epqo55!vPLirf1b`g?=iTJST` z*s6hC)ErqiB+)>WkKe1C?5#Vg5**lQptl9{?q;Aqnu2d-ORdzXyA~yIn+yA^?UnFj zDb0k#dori1Oh&`7plp|f(Uu=R{oXz6^%{};?er}tsC(9aEuQ_AU)abM9&BEI+i+yX zKCOl9!oE8DKiAqvRqa334W(V$eCl7cm=z~2z^iH@zd0LE!1*;@?5PE~TP~~&RS}^@ z{7&R(E@UA`E73|VM#=*PI)Zk}|ZYKOgA}BMK?T6^`8Wd6OBYn6d#b?{7!P9GA$Nq$unQQisEs*E# z@L$$cc$7NR|A+mQo}qqUbXW$f8P*PO>a z%U;mT6Vl5y>lcinO)t^ny^*atkk?5a{9qOQ{q`~@$|pE^C?}j|nw%uZy^unf0eo3?CVQcH^jF!pfYNWS|^zni&pzn@Wz$Hw-Uxynku45>c|EGI;9~WVIioH+}6c&hnQ~u_=)TblpkMqhv<5 zWIz>xWVdTRx4}-^`r0~V!PwIX8uknkhw$R(R;e!>n*{cz(U=|%FmVAI@q%v@M*|v< zqjdnWF+hE<$nv7?b&5+-&Fo1n)9aJJtgZvj+Fg33XvmPvP=Jxowlj&MZB>4Sa~59gM^{9KM2akF zvMFwP1pjOVwfIV8J8&rZpN?Jkh6fhkPu}zP!AB7eEalWb2R1y0+7aLYgdfd=wr7{c zD&f0K+f8pfEDX>#?a-U;eyb?4%^L~M{1@!~yJJ5ZgF|*oc%BisYTyn~rqpJO6B5Q`y*Ms_M|3_S z&^I8N&}wDX6@)hHX=8#sF(do$Y-Va)ngO#o`$=38wb$k zLo$Q5)%k#+O{KDJ%)T(u-k~!jZxYEo)iTM)bX^%cvrESB>7KlcO$idkN`1CmEzOeL zEy>npYp#>1y^PUOPkcaWCf+OX9Ey8VW{NBm(1uji6m!SGz32UP6%>1ZXyDgW^4K{l zKcp%ZzNxcJ@7z4-BhSc<+t<0_Lyzr=>-Erwur7}W8DdESHMT+)D8Ck75~QcU#C8el zj_jRRO4KWeRvO8v-43fL8=~?={tsozae6n_u6xI2tooF zXjQnH2r=Is8M;QNBTgdJ`%8MUMXEB0erT#ZbyPE;V@?;kR=Ah2Sb}4`Qk#H4P}abZ z*y#K>6szv3TixYeJwnI~b&QHJL2{zV*C3riw^=Q)# z=O-|nL)cZJifqK9O@c&ogHq#ev&mBb;@XwE^Jka)rxn{!~l4O=S&u+V(OC4O6 z6e+G}9t{fg1+2db)_D2pV(JRs>CMveoVWv`e6!F(g>FX}#sE=(d=J3a$XfRd*zbJ>!jn}+va-#j<#dsaUWZKMc8_RKU84@Z3022LM0Om@!mfVI zQr6qnYGArOEvt-SJ#J)wOwU&nNHw^8O*xJD?`*tJ1BD9VAEtsS4 zuEYaB(|08?2K%QCas3m1>iipBm=TSgL{W~{F1b1XYc)NttA4UNd%?oaLz0fL-klzA z?M-X=%$v`6b@fpf{c%J2Xz{MNW@qy9KERZ#fe@81K*?35)G3T>PJY7+GwS}lFQ}lt zjGoym7Zc}OE5@0Cbb8bj;Zj7~=KqRoM}}IO)Jld->3w<9!one=oLZ=A52=IAPukl#IAxMnc8wGQ^*<&9Jaq zB$-}2i%D6}!h_J)Ern)27___|7gnzlkli99-&8UGign?ky4IEBM-kW`GTZ(zA$8n& z=JLm$dG1kLk|vU(RKCs86OV>mK2H}}23Ll|dl~d%wUQ)&AiMQthdE)&TV~JZ#v5wG zdpK&6Om04VIn17=igY`JJNg$WCl2CZisMlOZgncn%P?SP;&fvaOvt0X+;kqv0vlB| zU7`dbCts^5&AsqenNsKqRX#rk;>p<-asmqm75n%;V^krr@-n_3k~pcOJpKHO6sf(Maw?ha>m*-1Cvf|)yNNH(I3xT zkG-E}c0vfgaElE%5KuU1VIo^lKT2i&@u;+M)CBp{Uoyzgw_i z{L*C!jFL}Ogm7WV1x@j4sdyKBtES?Z*$Ma#M*JlgsVX?*6gv$F{I#!wMkXjWFH=c7 z6cwm+D|r;^jei8yhi!ItM{LOO%i-izqR=!Rvv;#0=of53GC*6dm(j>KW%1!~Qh#1*mPw)fP0oPw+!&N+R*O_@t(i0ThV`>W|z{(3;?^*4z^UCc^O*H(s(!jOR2~yO@%PjH@ zYwF{oqF`+u#vz>jw7phL5f}5n|I0;sAz^zHaOzfh(+vB<{db`z$n!7*uW=ofR8R&j zDS=95vrojXxW+atd1zTes6zkm0%u|R|Lo%TZ6roMel)k)yA*j4bK_x|9dBYqczD~b zj^*Ztk+>RrR+N6upP7mU#2TuZF{WaAYI*kme2-#%uDgIo28D@F!7)3uW%7Llg;ssU z?61k^GtGGDQ28{->lXOmt*2b8jJ_B(Z>t$9KqzF1MOY^S0Xb!#{qw8Va+K-e*?oTX zkf}OYcFA`pWZQKELC329{;!cdQv!aC>vMyH0TMGBwQIXxb+sqvYN6Xevj3;o=8GQG z3!SV^7-m%TKIv)jQ&oDF^o`6~dw~)dQR6m5n;(30y7ZNqZ|>}NkE)$U`zXrJ1xX%T&f z#+F9dL2ULa)iRn9sGKeUq_Y+FB%ni!u7{M|)PIpV##RqZvhv@s_5Efku8qFV<|r7nauH9nVS>;#%vE_@ zRwfcCvfa%>rNGY!R~I$Ylh&z43?#3CP&=7?M0g;iXR9)YkQ{X*9O*u64ZVR z*mcw`Uh6b72Z=Hfy#O)gpQDk=yo+@<_=&Sn}yAp1RG#klExo0Iu* zo9LCvhYz_b8IjuHKMZ-IF=Vkde8@%{t4?_HQS<-|X|W{{ z8Y-%TV=!dlHH(R-bRXb#$k#W%4)q{1jwFiX48hAwCFJ*ceRXvKdWa1$UzsF!(B=Rx zA?xYS&Tzi3OMk0a-&$Fh80rz=pBhwIbGgs9&)S93SJT2{9V^TIa<;6Q<#sBOTZ*i_ zeId*1r63&{Ub`fvsR`pe^3ekbvf6;HxpzQac4cD3;Wz;afW3W<)Iw zvfsVI`ey|*nF-MQdGp3m9VPA>u}rGpvo|2<^i^8FGW{MIyf-OwvWnGUz1)d;K6X*fZ?_s;Vx_N&0=Wa0+zh}GOA1m*#+e#V zxE&Al>OB(q-fQe7;4)bzb?~uLu90Mjl@AfjK$p{>cA`yQ@N(L@V~X&+wdBBMdUHD|BT9|X)pMT z`)5!D_0khf?{br}yU_cG`7fAOGwKTX67juaj^p`00XqLjprClJ_}m>4$18Mpoh?dg zz5*lAGPXSdTri@e*Dj8Lf(e1eEy+baP-l8SET2l|95BUx_@C}ZQ|mTasi95py-w@H zSN0-(TJ*zxH~imDHIjuliAHqWz< z^7+Lvx$fp&DjzqJlgoi&in%_{dl2XI=&} zKwU~EOL)CG2_KZvzemOv;!(A>&Ylg%HQJ$@-;wq*0wb3w=0F^Rd|Yz%dn9Ebb0j(p zeb-`DHyk5YKv#@yg}rlU$z5hxZ%-I9r z`xwg5UhBuFL5>?Qs<=2F|NVzuwpzG9;X-zX3+)`z%7VSuZF$F@HW~;=i_WyWOYvne zj9r{KCgvD+t`C_L{gCr%h%0Me9xih5+g>iH^Sv0{i1kj}=+N4feJl2^^xcujBV%i0 z_0aw2)9oXtyhSg$d*_^4SC{_EkaqEUgDl~StJvFXpVMB^zQ%rZo>rJ^!B49&#l-)( z*_O3F56WEzAH3v_%Md>-w!(q+)x(Zn2Vn-jg_UYcp=TFV?Wd|Q)Clpt6 zj+bcpADKUEZa2?7Tl?7e=i^DY4&!sVc*M+tdg=aT$0I4G2VTX!lGqmgKK@?hddq9k z7dM?;@>{71Y!Ash^WEJbV-m169RDrs7{^GkuPsa~zxc;JbXf-X-QFWvHSiv7ttT%w zqiD*LrjH8!qQK>R1fAaV+NUr`wJDGAp~&J zn9iP@{`zpjx!cDf18ToE_=)!CqIxv#*;0pRTD> zSTAPMQ>`TbSJ9cjHF3Ucd?qsqSz)qa2wM_j0w|DRz{r|l*a-$%ifA=Z5Kz>}qPTo@ z0;m+X0E#F`Ls+yH5mYL++HY6|TpCc^Tf?GKB>1B@>KaD@`?tU>q^0>z`$ABTA(?z}XvEWCGw==#ZF^^|PI`5g^M> zU$HpfH6(`mL^%T2EXcG+;##P$!`?FU%jNdvW8R)?(f9MmdytX+XAFm@f-gL#y_}1F z&Sm}=$oJj82wFM4t|~ru&7zfsWW%DMQOEbs{COYZgJE@85Xs|D@{Y1&KF`cNk%gr) zV|Od<_HbR^#H;Q0dfNPX&_)LwcEWs`0cgC1zkfN~}Zw$YHB@CYMC6xx| zv_gG(>-<$FGO~cYx0q{Oi)lu#a8674D_^v@M{-(Uu)VMcoJpJ&giU`P6B1)J%M5L= z9raN2-6;M{#GW|97ne)NYYwV!MDWV<>0r_-dN~t~TsM&sv6)RRy$90PZyUbdT;N&W&ZSAnD8us(jVB&gbgX^lKoW02UgZCA814P30! zU2>#`7e+b{G3#3^TkDz3)?UHTbt|RqV%w*|xZtO@I9v1N*o)^AlM~ayEbguPO2O=% z+JT`CsDV3YIDfqqMLI5o;4!d+o4rX3R#M=qPeib1kVm(6M-XEXLAQ_sOJ9qIMqwh? zc6Oq-v8w{hRKeo;tRjqsOk1UELG{{Ba`-7pVcLM9Q$RR2JaB(90!MnprzDqm$tndE zA+C0l&_Ji)M2rdlm@^Qxvj!KCrBZ7Ns#zQ&(lsV}SjqWoF3KTUQ3;f?_O`x(K8Tf6 zUv3h1wWg1m${)J-@D${Tq{C~mF8-n?A~}3Ux@GK|cKP|ur#tVy=s$mdJ$D+Q zTHF4O3?F>(qI2{EH9qM)|AJ%pa^3U-cYuy#OkZE98BDea$N&!B5YVM}w%InDVlDw` zR_`3R^&0b8?E4xY-$K93CkSw2jc5musC{zvQF@zv3rmuU((tlAMG8ZtyG?@+8H%;@ z%5+U4T@ulAH<9H!yuybh+FD}en;?U!MDEg6Seld?g0)7#35>I&hOicc*NpnQ>&;b! zg`Y8%a<8GDqg#$F)-*)joW1)*W1T>!g!%GSqsz|jbFoiI?*EWdg*$W?!2Z?ObSU8T zVV<%gw63W(%FEBY&L!JZBnSPFvB{u8*Nh@08fllUAe3ef6yOl51AWD&nKVh1t}g?! zD#_K+8>_0CTBepNBx;rvMS^KjMMF;3(YIrJuL6c*2C&HqkKnhO_)X zGd5H`JPKWHO8;9oXYM}=g+*MIXBV?6w(Hu$~6Cxh!2w@UyX zsoqsZa5T-h1kCFG0b=^D8fXG{X0^iQT8p6qTJ|x$YmZDeYH`VT8eo#U1NJptF^$#& zqEfx$;++6Z22>eH9bR3xHUkJaEt~7L7U6Gs^gn19f!@_QIuLreQrD&W_?RP4w8I-W zNg@k5uc*N}h=Lxak5JGT-kRu240oXZA&6SzGZY}0GNEa?OS@~ittO!7OZ=*v7vul~^L2?jyR8y#=K83?zT?9h(ji@l>!7(O zQbT;}R*Q)USWMi^-ePFLzW=ID#l$8|sUZ5ag-T#2e_b$)$VF|Xrz&6#5-GV!kx?H`3ZfjY}ks?J7wkl zIn^i>g%+3}R#g2WZYwBl&3}>=(jB8N$&$7&K`zx-jEo#ik%lq+#YK3GrbD_cn_l(# zv_~BvjGG-Nn06*${WQ#ZQjQwJ$+|=q>08^zfucGOBofhbp{UD}t(0NUB`gTf;@GRS zD1nH;fBxr)oA)^*ZhEPhSUyNyo!#B}nQEB;BNlsbiy&J)a3Nh^PST^EpXDHQyBse> z$E+?dEwgd}`B4b?8E4nD*0hiBQ&LHXNWg^k61j*vqg6QYkJO45qoFf!+5-${R1aJdBq8TpJGvuEMfRw zlze)->&>(bqpz^wIqD%?eI?*+gy$C$d;`A-%NmFVNQRA_ z66?Ko(>|96jrY!#6S}e4&NZ5Yfzd_3l@DhFo_77UqHurop)M97^}!Vy_#bf(RiaV( zw!LbMW^oCN(7~W%syoXAv4p-KQ6U9E!AYZJ=fbhXSPrE&8HsXdPpoJasXdW1{kb2$tz7kz0ucqes@hH ztUaE-Cm$FmGmajM0go?2hvC$d=Lqq6TmQcyuGSj8oV0^#K`u4UJ+i3}B|Nj1=>STM zWbK9`_Yf;JxjF%F(hiwZqQ20?zRog)q08&nZVTCP$F{!wsdw zV6~5V0B7h(u-<~tY5t6Ol}=6GNoj1PzGKa=u&P7hFRIU}5AG=jlDa$0cv&%gHJreX z>vX{{Vv{05=2+w8^g})bidp2JdeO3z%KaXa0rB3KL7Zec_^R;K@78MWm6JojiHH}i zWTVGbemOW^43NtvFk2;h(Z6^KjGAF&^Zs2m!&*}51VD|^yYKrEMHD5It_3*@>!~QN zh?5+xLEzzBX-Rbo%_E`c^95Go(7Zgl#Ik z7xK~4Br=PE<$76(>vcQ!$7wOA8YhUN)fPLb86VSe;O_OUNQ>FZPaaJx8@&2dvHEy# zV(gmImqdXpSL%qCf%ChsLF|C8E^nnQ(mN8g>b+oz*^n?{`nh!PE*bry6|})O?{15? zr$s`BT>sPdMYS31QN^CiQUma{_$7rq0sL?ymB~^QBF`o-`Wphs0a}bcc|T?5Mctd zUSi2RksTI`+MNOuLV}N8N{xE)Brue{_fk7O@j)n1!VUbyP;FiI{`aqyV5nPVtjO|3 zO!0}=A5&s^&uG$BC^cVy%MzV__k)&|Z3J+R9HXlpE1B}oG!Whf_##{!U#Kvu{EQCy z>*oP7O32!Z*y~}NQF~FkW@En36?$@qiRE;ky!kEfsvP(^)bC)Jx>T~0b>N#ZlrbY= zm(UkDj}TKCTG~wD2*+taZz17;XZytJ67kL|zGe(RQ12j=YoO^!~2K|%1g{u$c~?_9*W%!oD{8x$;) zurqJKd}50hb>L&h1MhNCP4UYubO!x_muq$VKwvR1)#+GhDaCHcNLV0fz)_*Rc zUT=pyBeLgAG1WKheNkr!_s!t?tmXqd&%Dff15g_3k*T+_Fn8XIIb%7(&gMm$4VvP# zK8YO$)V9Y)akNG*MImD@vNUd#09NKmuP&kEdpi#m=Gp^UUZJxMs@j|iN9llt4ANlD<(T4fl4%`M$5XVcB>N;f9c-PMGbU@ zZ7k-$@pzuMGz!rGQ92ZwfhlI+>uRVzPP(LV*KnK0vdLnY(=(bgf79{U-coDS`RsPK zZKmSK;;n9_TbEIV)8puzS?izf*&!5u0^ET(RnBtKU!cI!}YXq3;=*{sI zjG4YMEN|49am&T!tL3%nEsr`VJzC)T5v6{5CqcsDzJU#M3P^4OBTW1Dr{SfcV2IBC z_{iZX)u!*uxvX+1Wz8W_W zQz4$()5$l9WQyC;QSn67aCvJHW?KXJ9T<&(qLJt_eCqX7=lhK{@jRQlhlCgu7PaNQ zD)#JroW3)WVjzBY` zc=kfwUdY0{n1NpQgn4><`y*~X6L{l{6Mv#~*u1=1Wsxqn1@Zg{qvNk}AW?5KdNtkB z63}Br`kLX@`y4D?MwUNA@oMnyKb=16kAtx}hM26;^%Dbx!S&@k=3o*#6;$ z1(o-+%Tu zO>s|fN25?L+Kp43gl`d4WkI0IMF*@!^~)>-(M(LwyJ@U#W`Ks78 z{r~`vW#jIxxNZD?coO~6X8&Kg(qH4aX5=Tym!E#wd5QRrUnf@{sV8J5?iko=ORTJL z(1TC3gs)O!6>Z^ASFkb*pIWZsno_W0;J^t&G`P0XG8J|20c8j!OhZTKc(745gapNV zgPxV3%)Ae`ecS7osTr=4R^OzlIG@k$Nn91@hs*BlHhX?L^PfCh_x<9>E=0U)*^nIb zjt3VFk*3OP=qPnyxM54ZgT3)+{zV9DgjX~$t=cxl+)MJD<-3iA=;i)Z;ljPow@G(3 JXaT_g{{YdnnGXN} literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image41.gif b/doc/salome/gui/GAUSS/image41.gif new file mode 100644 index 0000000000000000000000000000000000000000..7bd333a5ac170cdeaf2318defe69ab52dd747b45 GIT binary patch literal 54854 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

KgpRNjf17L{09rV>h^7`gkKWRkJxdk`o&A+ls z@&*4PHdO7Q{N_3D4IVcz2rZ`uZM((e+!#b)Z1Jf*>4QU`sLc(T&@> z#c`QnDO#ZYjrs(E^aTEB=A%u9q+!~6OXD4&|5ab-DP=j%H>~bf4yna9M#DyZ*Q^~* zJG*Kn3^ zk0kk-b3I(9U-u;QCc5LswqY3 z;V`X17>rkt*HX#d;C1|7J!|7J5P>b&k>^)928M?fzxiZufCAN8dag}XY8FW3Kuh=w zf?912C6YjjQLM@K;Pw*Z+(;X{AzI;LsMnd;t{lDhypSSA!IN@<^qkNCx56%bOeJIh z^#st|!Xfe~$ZZr1jfINfL=G9Sm#pFqa-{)7LCp<$P|c|_Q|L;=}!nc zRdc%mYPGhdn<$wn3W`tjQyjO#38NV%B365tok#5qF4;*GLwYwyG>Wle@4;yZJ*R@o zISPswq*51z-U_K%qtNQ;D*o(Dz7*AXIu*ELdDJ7}$5@z*6~iSU_%4H|)xTPp3_L{9 zbKq+4&fj;i)ctt`S|dqM$kGR+irko4nM1&DWG{d+Bp^+Q)5KFh?`!^z)zwodP#zX4 zrww++NgGYq4RWEsP^UKm05|5@Hs4%V?1pU=2wt^z&h-mTJ)v?rvZ}d}a<$a`7THGa z7?wQ(6vf{+J%agrfeu*Uh$G;^DBCSO{Xq4Nz#eNPB>&C{)g9rE_YqmO4Dd5=5L=PT zU%B?Xvh8;oSUB+XXXhX_3~#m#cm;74L1K}&h9Qo)lE+mx<$xPQ5KE#fsUBEGYHRX! zA3`$%@^ka@ko-8rO-qL7)7?s4taX6&n?zHt={u~Jg1dbLrX-sPINL}_DBpLrf)(?) zsS0qPOIO4d6%XepnCt0X{_4k8=_3~=A0Q@Vd%Ia%+_7+x>D9QA*Cr!d*Hu*Hz>X

yPW{NOU4j{?Zn{q^ik_`0S}P1EF#y& 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�L4-f+d5Q9h% zgC~AsC>BsE7SJr7;z*FVlYl)FCOD6wqi40<10Sn zFK%Nx-r_R`<0$51D#qe2hGHrHVmY?rFkWLnwqr2n;w_$HKX&6io?|O^f)i-uJI-P{ zzGO8XWHv_RImZ9uFvf=gNP`g|<3fhxLf!{5U}EmLgfqZ^!%|gvQmdt58d|nxnn}l7 z*5zGRnq21PU#8_;=;e}R0y=O5!&%~vqNNSl8n3yL0=bcoWad|`5b{~(ys;Z;zSOQU zo3O!VkA!As{>W&)S^W^_a1Lj4)}?8FW^&$-#|j%=`etnAX8DlkWuE3<@@93GW_vbg zc=|CW=)wFAIxMuOij>MobGzeWsEE|ixcu0Ma~&s3u&?`^*5M~my0~b3Fh4Y&`I0Ze z%rR3_BAaBORjbC2K1PgPX$s6WYE)>$Wo3Er0uv~OaadVHgQxcKSZF*-Xk^-_d^j^J zIFXJ_hYLhhF#$@Tke9THk9-cnPqPjyS`on6}K$@+AONfUO{zfDy zv?{b!rNqEllxRO}NC|A}o~FpBmOz8+AW+LlGc!97M54JyyW6|YhZbtK1}mDRSv)kj zx+H1}Vv8O$0%y2{EYKE~9fcD*k}?^iv-q$!DNQnhlFV*s%>nJuCbnqfoYEGP)IROY zW~kQI6Wnp_HEQT+bEh$iwh?=r(#&l&k~NJbBh@bLGOCYfiwxq4$#Mj3H~BHs6Yb3Q zn{xbZ)^={$PVF+$ZQefZeX<<3Acg&v2PS}pCqQPwAwVQp2Midw&>xiB<>cZ&xU5I;m21}#v65I6%RX!0}Af+u%!Cx3D%fAT1& z@-xtKDSz@1pz<%*@+`MbzIl=UdQ!c z-*sIFc3}_pVJCKA=XGI6_FyM=Uw3w6zx83~^<|g#Vt;mKpLT11c4N=>ZEyBoclL1a zc5QF=Y_E23KlgE8_HxhlV-I(6zja?g0Wa8w1jvC=@PaBx0A6Uq$I4KjfeP*xA=+2c#kLfk>_}m zKY5d%c##MBj<0x?fBBU^`H!#oj2HQtFL{~=gH5;x33!K{hk=3zgC}SMIzKA|ZfFAl rQ2M23`lfgKr-%Bem-?xv`l`43tH=7R*ZQsJ`mXo-uLpYo2nYZ>yHDgp literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image42.gif b/doc/salome/gui/GAUSS/image42.gif new file mode 100644 index 0000000000000000000000000000000000000000..79395f6c47a3d622a9110d7d245abd12f2a492bb GIT binary patch literal 25675 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 CWHdkk literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image45.gif b/doc/salome/gui/GAUSS/image45.gif new file mode 100644 index 0000000000000000000000000000000000000000..d96fcb102410fbd804c04a9cd29f8d61d9d77f5b GIT binary patch literal 2196 zcmX9+2{=`0A3sU9)R!fdPh~APuF9b-Et8@v#MGD~!{9p7GD%|zU#@J$Fmmf&#~v;& zV>hVqS+bvzQmCQjlggG*BFj7fd%pL1&hxJS-}XO8EiH`px^l2W>?I??M-rnBE#>ULd%-Gl%1#^&{T`$I^ z#?fSN%lr4eg~E6o!w3u`F^mFm9K&&pz%dfXC>%rd9Zp~bfsq785g4MM;v`0p7)fFj zi6OcYr!a!TND8AU48a;(Uk874oX29%@3SF0;m83b?{bX0}f!2 z1VPc3fD$$&Nl+w#XosMHqzH;45bYM!kcglV7!o-H&mvJGqhK2xKn*AYucAbN3QPbV zV1P7w2?ZoYl86oq%m6X$DT+jNcHj-T;hI7uqN9ZDA!&#fvV_yh%z+ya z4P_t`)Y1Gjs0bBcL_L7#a1RGC5Zw}p3>*S0>=DFAHxs%CZGk30>JT&J3Ryz)AT3A; zB7quk54{A7;7L?3k|}B}$N_#J1Vn&@Qg{xRu!CX%`2PemtOS^vi;IiDzkg(8B#+1I z?CdNnE9>j)8yp-Q8X6iM9i5t*nwy(L3!gGFvN;@%=*K}Aq9>SP1w$7O;h!(WFex~Z zR$-N7G=xbh>~Lx;x!V-APUBb#t2DDYW+Q%X;D%jjYv`8s9NCduD;j=RJRGMu|2x|< zRMt$7b+gRFhA(5?^25Dd*~ioNxMmKt`(!=}IkIZ4xr6>Y>zhZpJ3Q|7Yzxbm$r7t= zPhguDTF3ONczqT;%{aL_ZvTg8=N+?U(xRPKmogs-Y$e@d&+-epYrJFpC}aPf$GL2; zmJ2t(l)Oms*r1>^CSPjP5axbv_TO`w@9u~1^%s~ZX}{{`DojqK_(!){g`e{r?q9J(Kp+W)rV5gO6!&u=4QrTxuhG12$1i?^pKSjXV-69K;HvPbD&rI|vZP^ktQU1ar znMpeSX!@G>@>r*C)obE!W_9TvgNyh6GGSb-5?&j7%bVzECkkdeOm%A)lT6n>!!s2vOGTaWC(X>?uZE3btzTTUZ|zpw+LAt|^3L+1`MY z9Tg95zgS~f!_jd18qd=E#i)KXN2e+)?CTG6LkUB_1++(;S{@!wOfT^NkP-CDr(sRc z1A(I%mliXJl5GpFzAV9Co*(n;JPhg2^YeAEyJr0Y-KW7zrO-A(U z&hY*mT2TAk?`ivf@`eAa+7a!boprN0rw%U9SGL|*{?>A)b9o`C;9qFbwbK?Y;gg;R zmitfD9Yk&ATd@^J)o9JSfN!Q5VkGh1Dw9ix)~cwk)L_+%pI8^7Q1g08Kd)i_a!J_a zf~r)XWQ9arH+zlAUCFE2W^;$Aa3FGK)v(C8E~sb#%q_WB-6f4b@?z)@kW7yFLZYxyG-p=K53N zG3@Nk8jN&wca*6ukjUCc1T(j zdaN1e{gEQjYi4QmKP%(ir-pUMG_9TM)^hX2b9V8C+XSK0iK$sydKWiY`%Fxe-M5FC zQI>x>1#**I-kve25+1YNbLCF4Q5iU@rKy39>idQqny)^=Z_d`_%FPI`KH4%} zo^Gz7#vYza*rlgHr|Og2-h=bd<#(MDHET{);{K$>z&VNeO!@a^=nRY*UG2Pn}m5R XoBR{}j;A>$UxaqCqX)&rFw=hkU(Zi7 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image46.gif b/doc/salome/gui/GAUSS/image46.gif new file mode 100644 index 0000000000000000000000000000000000000000..0fe311c45b832744d1c056ca10f163407741e0e5 GIT binary patch literal 981 zcmX9+TS!z<6y1o#1QrgKXlUh#ACvVFTga&>n4(k|Gh+IXYKrI}MW7P+Q*xm)!idrs z+aWQ%sR(rbGDz)3>8T*f`KXCfN|YcaLLq3k?&-kgJokF-yS;W>^|}L0RWwKb@Z9IQ z$-~a`hA=)2-5#0A&CLx20(p6P!ClQV z{h>d{UQAAoJ-B;;i42htS%5P!lVK7j%cSm(4H-jX$Qn}jl!c6t2w5R@m2Ama5=+*S zVyz@fR((W38bSr0usQ-}Hq63onbq-OZw!lJYgipUu8pt=TVZu-@Y+}w%hs~GN~0{w zR#}};2!~QgbNt{02~YupI=uC5-~dC6vCa}Gu@Ny=j5>!&ovX>LtD@Uq>h-8 zE3!oMkQNd`B&dOV^b!`~$*=ci`mKc=@PiPDfJ7;t;}Sa*1K|IJ8LL}VmPjPp+S)og zI+Drc=;&xVoz7%3*=%-VVq$uFdUkepetus6%%oB`J#ga({=Bn@|L#f!Z{(aWt!&RNZXK`bs#tM#t8{&> zORgz+e5&}@mys)rc8uFs7r)ob=JRN)x;1I0XE8=s_MEB4ZGy$n2 zX5@-2(LAJugb)d8;2yn%MR@Y-eVKl1AqV^*1R@|&is!h*4#fcYKVin|F70e+Xhj!clgZ4^&d$xvEiNu*v)PrE6L$!sVHD#K|AZ(} zAVs<^zj`?NrY*3g=-9+?|J%;Bx%+Pgj)dP`-jI8AY@$0keq~2RYp`Z{SM~L+v4OEu z%k#CJCC5kX=kuoaW^v1j-XU)K&{cUU94tx~ejF(1KJ!PK=MUdl-!B(mgKDEVV)5iLi)9Jy63k3&?noH`R*M5n%*Y`fEd$BM3b@!f3)BBOu{x#=T6MGw< gbZq`{J5rW?{j@7o(fV@R$?vav`0Tft(n6~E2P-Go1ONa4 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image48.gif b/doc/salome/gui/GAUSS/image48.gif new file mode 100644 index 0000000000000000000000000000000000000000..4733090caa32b787fd66dc3e8f181f9ab303410c GIT binary patch literal 1004 zcmX9-T}YEr7=DEXt1Pf^7!4sMVk#BB7di|>Yi7bqkXex+Q5-{sk|-}S`5;(Wg8jL9 zypr+&Ch;%X3i?3fTx7VvHh%LL=zy`A!GM`F)?i_uH}K6~#s83aOCR$sLaU zId*cebDU|6Pt${MRy`h%*XvDBPtVB6@cDdxzdt7@ClClkB9U-7TwY!t3NTbL&}gg zWDE(`LR!d(iwHcV(*UGRqYz&L7 zRKi-=2#Xa8;ZO=`mLHrT0V-fnhqtZ`9AIdrjI{(xY_wKJE3potKpSO@66+Rfv?wDm z=FgqXe~A@m;o{N#%QtG!5g@7ZA6QW64@hZ zM2jpD8$v=VhylLg73SauqEQB!P-poqsEZ01w+DERdmLbhZ3!ZSL$G2mh|e|?-9uZ@ z1f-6bkt?!9^Nh=4>Xp5qcb6a(P@gc+*=+EZU& z-`d(5jYea!*xcOQ#KgqH!a^dENG6l1RBCN)ZDV6Y{;c-(^*fH^emFv6C(Kx36yOm5 zghC?kJCe=*%JIGzH@!Ra>So86$~JA!t@3+Y9)+Tr2O8UY4kjyZWpB&N`hEGr?45m~ z-hzvT14rWpXJ39O=0VftY5LgQQPX##JOBD$Pt}fQZ`xEXqlTp+*~Lq2m*s7e=Nq5B6|(p zED*~|AuBC}2+<@H=RnY7G;kmoLXsj~Wwbbb|LwwXpXYm>fA;LH+PbAFOkw&>{_xz- zbCZXi=Z#{_jy{}P$jHbD1Oi!ESvfg5xw*NaP$(}iub`lyzP`Surlzv8vb?-pTRe?M zlXOFV=&$6&++6ZWUndh8B1>)XHqhBZcE=pvNq!BH$ zL~IBNsUQaUhF6$_8;C|3WI~Omq)zK@*TV zVn(jW63s(eNC=Uj2JX>IScE6P-k0gO7IMH3LLdSXrFf1@>`)AV{}X1cdTCu_V`Fo3 zb1W8%$K#1aVsLP9dU`sQN~P23`T6<9#l@wiCH=e5-TlDxJpaQ{Qa5473Zn>z_$P#k z0*^^ELy>3QW9I`a3Xh(NE*o#p4sN>~xz^KmDaa+SFV^0F*A}Yi2u(guN3P@_>?k@` zm%l4s+z^|c{Lnjkv-HHkr$1#I-nZ{;J-PBu*{0eHRaaN%!dSI;j+pEJpGxst}&uuv&9E6C+WoWSZC68a-AM4%_27<~ Z(l4#C2qI3PefmPYG{U1^C(8&M* literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image5.gif b/doc/salome/gui/GAUSS/image5.gif new file mode 100644 index 0000000000000000000000000000000000000000..55cb8f4384ddba0843877ba83e3e2c7993c2af53 GIT binary patch literal 2339 zcmX9-2{=@H8$aEYC0RyMkwTyBEhmH!x*(l^7g?l@4Hro#X2~zy zCm%m@Z{18q5d=dJ96<;GM-dc7FciU2gg_CJxqrznnKID+E{fg>bU zi4q7#AUJ^#1VX}^L~s%zNFE|UVhB{g6O^O~P!z>b6h~14MM;Ve_85lZ7)oF$NzubK zhNC!+5;#gyYTz|Spg4gN1WHns7>VK}N{}c?2?gPx6r@r7zzHOP3NTOyZ+SN000xd> z1Z4>*VT0osfny})5ES49Mi3ZDxdk;ii4i0i;yDA)JW)KOU>h7j4JZPyyhMNsOaLBW zfHZ0e1vr7@Bo!8z0ba;|@C{zU9Jm3| zPzEwV9mP+9@=yVW*8_MC_izA%q*?-zfkR-0Jqhtq&4lhjTc8P$I>ZdQLYB}xNDC5z zNT3GXLodN1c;eObWb#@Ia)2KQ0TCdf6rRH+?4TF`{y)JCD>fqM;^Gn#5)u;=lbM;> z-Q8VRS2r*)FfuYSHa0drJ^l6T*QKQ;^2c0ZVJVBn;(a(ILQ)gVu!5lmhY0V#fC#{e zpp02f;lnEe5-O*j))YOC6;rUtHLERdPuzt13_qXn=IL!kvz%?rp5e~(g;53DBQI^}s^Rn|o2HyST5+e0e#5XNI7uZ)!LC>U*J>*d zI@4bLGe5y2EXapZ=_wKH)S{*Ex;DVtxjmezF_I9xQOQ?Ttm+-d|HsODHHS09m%}7f zorxxuQNU}*vedYV$(%mX6vIAQJ0m?cjx1u=b3sMTwJ!AX-+>ZoS1XZb9V1TZF0jl ziPpt|k0E-CX0n{H4^v}}v0cu3e=o&;m3A@gUorU=uxhFAqPlooYNWd#|2sc{ioVlE zqMYx}A;R+=$Np5Z49#J^WO!Y_EW%vMh&$lwl@?!P7y2&hc99t^LF2FT?a}Jt`=#T` zYM1h^vOhRvBI6I6xi|rBHxY{7nv@iX)V-2i>Rx5lHm(67}*qP*h zKT$5u6Iqv$uNq~cWSp&0v-1y|-#p6eo9c$V%km|KDviAR zr)La<_Re`USj%qt+%#$-q-H|@W0}J~5!LB^^R?hmNo3a^mP+xmh2}2KFWVm)wL=R7 zN_W4fg=c2RO=`|X{`G5W>b^Zqb*@Bkbmm3-<)P`%Y(Z)1sYbDRZpFQ0DnB*s9~%q5 z%w>GWt2-QoX5H(ziaM}=FYXx*=plP#_C6SFsTzOC*UwPx6{b&otDmTlrnP7uZu1~E ze$$;!&G^uH$N0G0C)Kj%6&)=v4?T-{PvPf7dou1hXKOXtKJ)u-=KFa`^LOKAvQaBd zu1+iS{ThW1?UW$bQ=@_S#K2N$cVm3$%d%zjNw4-Z=C&wY(HnP@ zE&sS`zWr>9o0Y-t$Eg(>c}_Wo$#WdV$-L_`K37DXiuojBi^^3BtS;2FOAQr1ZkBl4 zI@+w?p*#Ml(FpWAcahIcBW&Wj_`_kVsVm(vdzwxTx&PHkNs{%huf=sTOCjz&?k z=xG$=`)wg_`)?L8Et(?iiAtlib(7k}ySIxc_hL_O1}(jjojk#EpV+NXD|yLKt#@0LbX#MZ|{HeHHCCO1?T zL})~#`-)$w*=sL&)C5RX6p46hA99VT@{fJB>08n!&f-lq*UafxPga6=M+PxnSGoqD zg|88p>Wy}kE0yo7el2m*BgIyA!>Ei=)=rhHy{A%=Qhcm*nA6QN6(c?*7C)yr-+Mw`l zEa5YjO)sMTdt=Qw{z<6rIQ!gLO}kI2=69v+ZszY|y0Cq0BXqg(Vo&xv9jSC=^5-_R z{CkV8PS}xqvhL70)zx~cmfl_5m)|#5F|W^9C#KmYWCY#bv0g23LwA2Qt+Xa4y6TWf zqQms=##-wjXNRCIY5As&b%p9vHZeZ0USu!Sms{TQInh1DZCPljxq8dj^T?YafuV)Q LCJ(EF2%`5tf2fD} literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image50.gif b/doc/salome/gui/GAUSS/image50.gif new file mode 100644 index 0000000000000000000000000000000000000000..d86bc15fd637095adcbca0db04eaceff4550e669 GIT binary patch literal 21965 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

}5VSG)nu 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image51.gif b/doc/salome/gui/GAUSS/image51.gif new file mode 100644 index 0000000000000000000000000000000000000000..e568a49dff3a24109da44cadac2e5bdc6e40b045 GIT binary patch literal 8122 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image52.gif b/doc/salome/gui/GAUSS/image52.gif new file mode 100644 index 0000000000000000000000000000000000000000..d3764072363bb4be4073f0f8cf1861643a083509 GIT binary patch literal 8982 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 F{|DW#&Yu7P literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image54.gif b/doc/salome/gui/GAUSS/image54.gif new file mode 100644 index 0000000000000000000000000000000000000000..7391fddd6eac67e542eb4c51de189c18a4d91b97 GIT binary patch literal 8557 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 eJU=e^DzwTqiJcB{J0`YyY++!)Ffh~5 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 TZQHkT=hnTOcW>Xn0|Ed$W&*yM literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image76.gif b/doc/salome/gui/GAUSS/image76.gif new file mode 100644 index 0000000000000000000000000000000000000000..79395f6c47a3d622a9110d7d245abd12f2a492bb GIT binary patch literal 25675 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 CWHdkk literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image77.gif b/doc/salome/gui/GAUSS/image77.gif new file mode 100644 index 0000000000000000000000000000000000000000..f9a9eb65490f6112b6fb155db10f72ec1dbf0de2 GIT binary patch literal 1894 zcmX9-3pkZ$9Dg;N%cQJLR;120Mpou6m-Hyw%%zKMwG$CiU&2~tIc4Nv;m{cB@JTv# z+$-e7iIB3~&X-FTxpjGtSZr}-6Hc9X|MTsAp7Xrd|L^wy&R6cP_I82Y$OOGY>cMA! ze0Ji)j?Zs|G1OStKBcLtsjaQ8r>AFNU|?uyXl!iE;czT0EOzbMwQbur7Z(=?2L}?x zCthB?D3ke8TkF^wo1 z(KKRcMA%BqAc{dWgBS)8SQA7O#1J(iKvD=Q;0Y!y0mhiZn8ujFn6P}XrzlKQn4vIX z>EW89F->EJ#)MS^uPFx83}zTi*h-3EnqY=t!U_f9pcJIB{J;q$fC?~B2XECj-~a|q zQ4DJdC}Bg>6hl*lbqES*hGH0sux>#OO(=$dA+a;|@C{zU9Jm3| zPzEwV9m~&xs!;((-2-?I_izA%uq}bez#*{0oz^(t?B_ z5~u<9&`Yogp49bfnd;Vp9N-5+KmTGaX~M z3elZ-?Io7JtreG=5*L5uk!yc6?p}%!4jF2_E^bL%xh2`yy)wTo)0~v}wpA9$vaEyJ zbKNC{_s`phj}O&k=5=1&9ItEQaih3f?3QWi*M6gTqQBIJ4)2 z3R#heH`$T#vc9QwQ2N8uyWtY7S{^a=%r^xe8||rnTxT0CO1~bh~|n+ z;|<>XCxHL={^G`;{(3ISTQIfN%|GGe!%0sPSGC)51XgkOmx9)m&g!SEYhMx+EUwx8 zG%YLu0vzwtJhMJvq}n_@j%^D42JI<1NqG zH1BOLavm)|8y7#B~YgI+&XESSsFAC1D@hCl;YFQh6F~e*=|ENwGc@c8n z$+onlw9wUZAjeaf6Ivv7a+hBdJJkjkTjyDZr4&)M6Bn-xM2=iJlPv5k>v>QbC{8^! zzd9^qCV4`7Ia2qtnzm(*R+aZ69m6D=g|${$NpXMp9Qb{iU2%QITX%B$gZF6Q?uqmqu9`L=oSlJbJS zl`!9j?|x-9{qxs*gjEm9P7kl|4&a$r_4#C7t9}$F&$7L$Y`pg4ZNub&j&Ln6@(XY8 zE8A-6k?7Ec6_2CD7knPanU~o=*0b9_D}RgQRMUB!yQXIUStZxbF+N;X#mjxun|kDO z=hped^mxR4NVey@8^%v7>o%Mz>)HNKqEzbS_-C**H|S;KpepA@tyauNMTx|>oVVJs zd~Ia+;NHouThpiNd-^vmiXQ4s^oyPvOfyvtj>=xAeq6rZc1AGaDC`{QZ&?zfoSZyG zLgywrom5Yo`c+;%n>18uF&aCcXy{~beqASDk&z_Q{OE+kzs}ZibJ+oJ3uYR1LMl$q z-x6t=a5pIhUGdBHo@rZXyXfal#aGGpYH_n&Uh9pZ^tMa-pNJP5k6N2LZrr@ZGwNoO zv2OROFRVC=Of!DttT>wFv5vDud^5-58-?Kgw#$an)_ZFr6)6FFVxtzfW}6(vnc%JB cWqqy9wj9k*j+_x2kGZvM7%)iH&_Is=0Zhix&j0`b literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image78.gif b/doc/salome/gui/GAUSS/image78.gif new file mode 100644 index 0000000000000000000000000000000000000000..2b6438185254dfb07e161780fd59c3d51f5a5d8c GIT binary patch literal 11375 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 W{r$%s_)n(X&uXpIKWGtv)&Bvvk2JCX literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image79.gif b/doc/salome/gui/GAUSS/image79.gif new file mode 100644 index 0000000000000000000000000000000000000000..23fc83b059db5eb29aaa3b8e00730403a642d446 GIT binary patch literal 21595 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 |nA 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 a1&{HC1Me0**A~1WZ@m@Y?nlFbeg6YPUCh$} literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image80.gif b/doc/salome/gui/GAUSS/image80.gif new file mode 100644 index 0000000000000000000000000000000000000000..441197f212aee43028b2f7c7f45dc393a4710f17 GIT binary patch literal 22677 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

6PC>%k3QBR&bS>gidy(jJ%dmy*xR6;SP#0 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image93.gif b/doc/salome/gui/GAUSS/image93.gif new file mode 100644 index 0000000000000000000000000000000000000000..861d8ff28887817d7fff58fb4dd06e51ae3aff16 GIT binary patch literal 92157 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image94.gif b/doc/salome/gui/GAUSS/image94.gif new file mode 100644 index 0000000000000000000000000000000000000000..302283574d0ffb60d35b952bb75425f9eb809061 GIT binary patch literal 73241 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¶>=!yK(hfMlL_nB`P8`G( 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 D1ZVF{ literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image95.gif b/doc/salome/gui/GAUSS/image95.gif new file mode 100644 index 0000000000000000000000000000000000000000..56bf92a9c9dc8db17e7298119d409875861e4aef GIT binary patch literal 85677 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%0AlszVq4q0*Dj?TlBs@=Ba&g^Tq|@#5Ei6kYvM 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 z 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 R6q?mD)InNJK?DK<06Xv7^uz!F literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image96.gif b/doc/salome/gui/GAUSS/image96.gif new file mode 100644 index 0000000000000000000000000000000000000000..181a21ae111125a6699d2a9c02c1ada62430c91e GIT binary patch literal 55451 zcmWifcRUpSAIEQV=Wwz&rMeJ@OAd9WOc({o$P&9M#h=hotbDH*%@af zvncgdkzc>hU!VUz@6Y4&{=7f0&-?v+Uo+HKyXfoyqyzs003aYpWF$mS2hu<2=jRP` zBWFhzH_7Oj8@dEWMp9PS!ra_l`A*8~8Jd(9=kc9WOMIHz+1t}UHg0||-tXSs(z4Rh zhR(obn*2>ac_r-J@={uQs-Cs4+as!;Yj{&rvwxng3Hnq0}#uf012xE=y`iEc3 z8#_kE$H|-$(K9tKZGRJ%Q9C|6Z5NVST2+a)2@H%#jLfOg(A3b=mvqvvGj;{0ZIp|o*u_0wuvPL_Ud;?Ci5 zyTA;;kVuVNo+j=Qfss$;mF4*)ky>I)+=G+1!`S|(GZ9KQPxAbl}`rYvh z3lB4QzwbxM>FoB4B%7yYXv{4nn%vY24AgLQ(O6$keDf~xX$oZjo1eyIiM(PxI|uCc zZlZ|^#LfZY=a1FUfP_UrWR$L$IQWTaS)~Ny1J8R=nEFZ;!pC&okEB8qJt+->|* zWwgvAqZ4IL%jjLzJ^Y)PS77Dm;U;$Sw26^Pbwj<0wU=K=;{Nw<8u})A#l=`H-MnY5 zVe$DIw)c@p4y+2=+(K>tTcV%;KPM4OEN;rHYR@YuHF0<-uV*eMd-=`Sm|ajp7_|s% zem60r+Ri7;&c?R0vr|k=RO7nso40Qg6BA8LuUB`x@{1}HQ_wj4`zI`=y0g3g&AV|E zQ>^?|yXuzyy!JEVYE9=*SR@Xh$-T;PMSv}gT!Ii-Q|)$-T< z#^+Y;Li0*%n<5K3HMI0h{1fwXAggQJGV12?fPdrvcLBhD3^2?vr@V^{47VJ|ZWz=sNSm7oJbnSa6BNm-*t7|-x@CyJdOpQwHEJk9{V~<)jDz(!c+)l zC_bh;AM744Ow~y~etZb{mbpkQ>-xM%1T18-BG^@1orp1IKUpNCEW2~mF+A8YJmLtY zhvMp7#>Mih(Gnf&0Q4sqaX=3n#2-S5N$jcE)xki~W;hJ*ZdOV1-rY{??nsL+roQ#wss929vuhg2D zcC)>*6d{dgB%#e{s2)|7YO_J5D>RaRs58ABUA$5MYQ2Q2FS}8iVCu6`mZi0cF3$DX z+$hiS0rav>v1mvxo;*Somnefcc%g0Ln0boLR|ejn2DLML4Z%Tpkpd5Q^pNU zmjkIf^|h?+Hh-rAhXMTo7R=tzgZtQX;y+r?lT>C4Pog++_q%+H;|ZSai!%GeC5^ml zf80BHo3!PhXbOlXvh_{}44iPnHOe>rC$hEGRh{)qU-fLPvyykSnhN zJ?}>kak+3=UNWMBwQRP_lD2uKlWEpCaMRn z_8+7%@~j^F_pc&?c08O?!OxGKK-jnAG!V)cW%l5S1QyIGrC0j>?Fm7Ei_RngRNM<` z0GxO$azUqKP-IY6+JsXp?1L(bXre?yR8G+$O{1kndSllpk0_Gbw0Yo_T3iu=ivi(A zB8DM1!uAHZ>;BDDt{i@6s@w?Me{X#E@W%u=Rb%hNzm4De8vb)K^ySgP z=W_19KQ?oZBffv5*>fI0$662A)+2XL}W?BdwZ&>?CJXSf8hPadBF z=LWb0=orx0l#3u7+aOLdB^t90q}+X@1Ge@8!aaDR0*4r&KQ=mN6j~z{`hg;vzqR=o zMNlN;jsSBA1V8>s<8a2Uhzjm9Gzm4j5i$i)MG-sf&8wqY>rNco}O5ivoLaeR&<_ZNG-`kUl-VcqUu34{_2L^5nSqW6TEg8ojT)Y2yDgqI^uA(7 z{+3$zo1sa?akv3+VrL0JK0FO^1pp8buaHue%3>fwSe*9_N_kGRvvW>63ps%G)VBfs zJfYO*w2HH@(qCGi#T0aX6q~QZD5kxv@4wW=P4{k z`pVkag?gkx3LKZ*APX9IzX{w*bY07_}BAUml9fXzFXID3fE{Oc%$6OqE@$N=*EL_wt< z{5#TEkoYnV^f(M$p9Q!kWRBtBLY9F2=Ab<0PTZHhSSR$wV3(DodKHfMk+J?X3R^Ti z0mEW(W=qKn*o^8qX9+-*X?^lG^$Gl8D-u7QbU4}pdU9x>h}Cqo0?Vo28VTk#p@GE% zM-l3Cx?udwpgegL6L38iT1Y8Ij}ctGI+ zJyzGm6)1Yp!x7C^r69HhebL&>H;9QkZ{o^+QEiA#{~MeLBypoD&?X%8yn!}FtCa-_ zBJ?Oy0;UDUzSHk!4T#Pvv0+AVU~iTl{4RiuW&w{y)LMHawh3l$TZsIu1MLgX@D%$d z5YV|B=<^&E@6+kr7|MWPwo&mq7GM!yD-w)2%5?_2f)Jwur5Xs_>if+cRm8#5RnFX8 z8aDhBG>X6%C8$vK63ir)O^P;|U_xVn#J#i?Wqo{3)%J+quO1Y^3B{aa0`D9}Qp$S{ zVRywckeoyvkQz1aqEjC~s)B;`!ckoHSVCvj^j~y|lkVmInOiq~(LQmWGjMVLBTp=- zZR+~hkn)cCpQbN5cUU{<(vMufYX9q;I^qm^-?6xwOjgd=BcY`z!yGgy#12Pdcl$*Q z+#TeoVs7_^w2Rzt?J2rTj1hJ!Mh+ae_DEvPz;gXXA_G}KsmPxA2Y~=y-wN_@IWf*9 zc1kpGeLz)>VCDG&%$Z@ryy}3suB-Ta?8)DKNvZI4Z+ggBZo!Z8 znD7m6>hH0Rh@UkVyLQ~`{%|u2{%iT#_4WGua>q<{T#TDWAF{&W3RsBxS0im+bfE$!+>VNGcyWrayJ8Ty zfFgqr$jIo)$KCh`7jdv6DtOm3u!tJ)HX~pH@8y1*vzx`qvCjF+lXUFl_1|qy2>WAb zYtU;zpc@q|?L~^pKwd=_4vQc0BHcl{Tf^MF1Psl0|~T) z(^(H!I-C>0(Le(Q;^A<>scHf=kjQzGz{!ONYU6>HSy8uJqpYW+Zcj&92}RopMOz(2 z*&awc4MjN`M7ys?`Bg;SMMo3VqJ3hc1GA#*5I8r2Ik$(BwV-y9iE2Wc&cHYe#otDGJUc$eSc-f3ugtr&Wt{neJ7hUHajz;4LE|&4r0EB(B~Yt%ZjE7Xb2eN1uiO{Ea@)Og zs~_dI2x4=MT)})@J8U{K{$d2A2?#6PG|GyZNncIg7`YoU7Ia zvqY{n?}GL0g3pEpTdxatg$p;~gTA=zRPA6apu zVu|=7+09}_A6fOuVnri!bbK*p_||D7=S$5+n4DsT5Rh+KF&*I9ri}s7eT_NK>yOi&Q!js$z<(Dyx7IvsHD&RZ%(U80CuE zkmt`up4a9)Z_jz&jdMQ=GE&@y3((9G#$>KSJbV$YFmfmpnu7!wB%?2 zb<{(R8;pF>XhJiGab09?ZScoB>5?X{P;SkSb*okN4?|lDY+F-ATfP3YS&zIZ@vTcX zZby&2xY<#UFm51p)Ntb)FZwpAJ+D9O+hOp$@k(g(wXLQf@pXctO>63OZ`%&!RufXR z$)2M%*0%Yn?~5wA7PpR$525Xnwq4U5U7p4*cm8zb9owQYavchEHb38bhs$lm%Waf| z`joAPNYQ%lt?uGKZAG>%|NZHTa%pc3?U)K}`7zQ3s&0tQX)pQn(u<>hE0q2h@#5a) zMn0#;s4e=wEgk>7W9c&eTIh>b-;Qw6Zn@_j5*F(u`fFMerh{FHtxBWSGn-9B_MHlC*+0n_u*Qx5xT}mzAt^@&x_pLI_tc? zGO>|%dF8gl9%$%LjY<6%qc=T%Z)&PvT$CHGl<(9O?NGklapJIU(WZ8o#yN;XoFt%~ z0pM^1xH5!$XHR)?uHQ@Q9fnoD?9`pxz~;hYGm&a0I=|Z`y>sBG`;|C!CT!?Ptk(DW zd&Zyle15&uL$H0dvOr@S{HO<*Kg3?s*>-u<++>vJ&hXTB*YyNCU-+x#&C$V;mYBQ_ zyN^vTOh!-HkNVi6A9jxZ?i_=KHz;-WdmUrCBTRtWV)W%|Nf7{d6a(UgLoiru1`LoF z9he}btj<7k(2ychh)+y55dzYI4k#rcMV-KJXhjB0fC3Fzia|s; zQI6hH!l&v?`T|!188@k8NWom_z>QeYSq4&yhP;Xz=Oe=ScOhsh08f3( zgMu(v00$yWfsTAdM4Ua|MN|?&rL6HOJewE(ktp+@xu8-i*C%{bB?_j*`WL0xUFdB5 zxVe4ITyOr9{`};_`Ncm+i$~|@jx|}(f+xM#x%;oPfCb5%3ya5^OMNxTknTlT!4h`? zOKf3D;_nhFdFil*OR9h+^MwWfyD0N_i6?nkx_jw##IlRjij=|%&$}g=?&T8>EP)74 zQKu!L2u`Y8x0YDZr_dp16a-E{nwWx5svtaZ2z5GJYd-`|hdWRa1^{pb1E~N2E8rpV zXb_eT2(#h3!aypPAo-k-SLsM?;)k;g5SmGo!m|(WLe!i-!2zJf2gr*9t7L_BlGgf) z>U!+)mpgG>>oMKy$$!^P9M;JT>r{u0e=j&zY9q6IBk$eDGyujaA|>fX1eflD55V9z1mrGq{?)E!6>2<43dXy6Cx``I$k}RJ zK*+N|UJMW%4=e|8zDk1S;EPI$uw??W1^~UaFm)Ut6qFZ?`w>##YNbC%d`+1;Ppz#1xGguaQWQF6#t7W^>4ulvJX@`pfU zi}2CD;QiM(3rB_een{#5aC-kkzJ%!_`O{JHho$2W>p~@V&YwQqKLWY`^SGhxP{P*`^G1o?a)03*&It-wvOTuImVSOdP zOz+U2BJ0qs@&b+Kl*_H&iLdxZUSjiKA@eHh3STK4wr}OWG&T9t{P@pq=$~NZpJ$RU z%N&0xz`LLf{ zU!~aJ;*k+W`O%n1YP>#=skhEk(0?V(JT#x#qCvpLOv%(@>?)e!PI8>|0YW)UUnvH&X&$T(c@6G>nq3%|j`C}TfUK)hV6VHyap7};f$OZR7 zD(^SS^pc~_eLpYE_ZgR*8Y2+YYT$Y*Ts{5^1%OYZYgxm{=R#@iQU|{rhCqX<9szj zjCrM&e;mQ1!dj@0vNO|&>zupSH z-){4i#;Z;Ip8j7C6L#Ead13126}B=XU)@@l?}j}<;YidC-Q&d*ceJ}i+{~C7 za(>u4jz6h41J{Bs%{UFl@p)&R9p zoz$kOh5VdU%gt|*vTp{N+mix2f6}(ndVoIa&H!ib!p=L2>KALU+1)QAO2@4H3wdwT z8XxUv%(`$CTMN6lu9;BU|1-!^Nj7E5kW$P?WbHRXuC7FCsb0+9tPDa?0uwOZO7?Ce z_6K$atD0+$Wc@dSoo}5g4BwVKu_k6{6yQI(^I;DFanKXg>;7b#YNZQS_RMK5`-;7gq~EMWjc@x3*V6eA~Sb&O3C$(&0tWb0#iGfu>@s&|NTxc|GYKj_C0!I7;~^ z0VWu`3Qibjz)kT$u{`2+FTmQ$(?>~4#mCyh)JwWTMAAvu&SicBH4@tuyapDqA`*li zf_u>oQuBy8V~rL*8p}n6&Z`*OO`Q{_JgLb{8Rca-82WFkotf!7>yKmPy>r(C?N!?I;FQtU-SNEvhn$y3WN&C0ARCDJ@yw+q&|^TpskPi z{>bk|vpn@C`hKq!o$j5=!6>N=Re-TJ+W0e=C8^eN{Y&~qZ*0c3k+bYzl@mBH)*MjB za2n*s@{hTB&`IevNW)-7ev|tHi4eBaJg`LQQ~ZfB0;?Wj_qUJ=e!(&;#P+ z(?(Wdz=%#3z-xa=#03Y!CfCE;cUIUucXc7EdqDBsi|lVIL{*Zdqp=$X1pS*I8!TNF z9>8Ugmn&od0LG%Fxd%5K)g#gJ8ksy;$6jSMC`TJ5@-~s7W&~{z&5WdiSz?b@1BYjvub8{d|B90S=5&0JC}Q>L%y5AU!&ZxeWBRFGVn1UY%JL ziLqD7^EspZl^Z)t2mh zR8WKhj`a9p;%#gv8TzaS>mU&+z1wygd5;L-*H2+{UvIg0)&a)bOCYCBt25Dr9vF@W zcfvUTlV~KcO#ml?$Vl`E@4YC%Ama+1zUL$|A6us*kfQ@gp?3F^)ZM^ zf+6A{SI~Xk;TW(;JP~%=4+j=S>4K~VCj7mzE54{r_5xKZSoc67BS$+mnVT1 z@AlYE?1I_pPT*34Bwv=);vqj!2t@#Lo&X^8!Ia@O{k}7HxU7J-TFuY0_aBkC6uuhK zLAf*=p}>&`jcW~DBkQM;8B1g|rjA?P3o4MQWUuH)gu8fEjNBed>rodI%ie#*Hot^6->i(!y_Y1zJjXv{PbN+jONeT}fjznk-r1OGFlvZak(HBYQ;5sM4Oa;PLkc44IeREQGOB;WyY$^=mvTpvWpDrW zaXl{IrxBojL%mFV>Ax7;w86xe^5a!Jjv z*b2#YfEqmOTys+iIXxyg>%z-l!b<^U{6c5;0-`5-ggSrmkJCCXFI61`XK@%NEUR&I zxQdT#U@oWSzqA%z3WZ)Vkjg7!JlyABHS6qNK^GObv>N_j38x#xiA4x?pXB4@A>>Qy*-BjQH{%n(>DS_zdUM26>ZDZL zwxOp@NxuPld&|0(J{_5>dRbwa&j1-tz+z3M%AH;VwM(xn4uDaIBAsz3J`s`_D0pbE z&Ooq=!hU8NB>Y*xh^cF(7bWU zOJ$&CnN=TCcVi^6WF`1zCSe1tYvN24w;NJ^1Var z8Q#%&QsrhmA%&Stj7Un;r0vC#He4K6aw7-k`n)+tl zaD(ru@yDdMrN({OO1Gl;(a!5j+a`@@3GUVHHs%u6O3{##~rJ159R* zX8>lN6MsWBUhD!pUwG_mt3rwVM8PC88H+I)_pwm)s6`4p-;P-fI-6M<+txYOh#Spz zGyB63IHL)tRoq+@x{(=|66z9neBvBGoSb+gSGaiy$)AJcw~3dCFStApSAY9qqw<61 z#I3mcTREd2)>AmrZTQvs$MbPFjqDJbJ4I^w5`4qMuxy-$dm6ilx&G+*^-s4_Q*w+o zE4!C&>F==fhupd(Zg$IJTqAv4bH{xA-h_!oW$JkLpEgM{Eq~$ipvogS$|_c~0ssmW zd1V$YFJEb@=5tQd1H0c&T>1_dXOSf#jWcjMz@=lVaSJI@%yroZ&m}`*b zU3bg-1Cs$3Q$g;xT~6QjKbrJ;YZ;t=JEVEin>O_T3M+qf`&G|vG4`qZ*Qb2vEs5ci z#PrEK;ZqSwx9?d@K5Dj%yfb+man%;7;&kh>(;w*`^VPP*40rqFVBB`*=0jJZP(0CGT4D*InxKG z1xvl6aMhxyiaASm-Qj$@k!HI$HKK2R*bPt2y=k@^-LZSi+0XnmH^Qm=KFEH|-hSAA z9vr=Pom?me8)s! z%y02)hXaej%*DT5i+}SMUjkXbJ~AsnEH2p6VUi<{#1j9r#RGdMfiH^~Bj+hJq<^TFAwS|{QYN`4 zmeFLiCoAZAn7fyA_FY9rFwW)g(Hm$PUg^i!2J*dx_wsJu^63^AKpg+y#F3Ov7qv>$ zxpC9MZI_9hH_C==#}4^5qS+!><@+!OZ0n?)ivqMu3cBj1Y>#QK7yVZ>P1%6)E2>)A zSDv{(rpdRP>DeX~=uOqB9_~V?NkKV;!Abw0Yxhj2JnrS) zl{g(Bar!Bpld<8_dAMr)?DMzIzFni!#cBLjmp&PBr3L1dhpVb&V?Mn{8h;6x12J{X ze;I~20q{id@gqP~+_UxgXX|qG^~9ESRpxr~PcJ-!;(+p23kCyl(Pp@fG|P>2j}39B zjm+qc^amShlQ1_Yr2QklN6%d3%083-8r2nDuB5v3OTQDT>4Vx|S;ZpWudfz(#GX4} zY$2e($qqcb`%k|`R{Mj)7%|m9H|t$LoDj%U z4b<$w29Sa(27_FK$=yGi%HQW0w!SiUy zrEt*CIq?bYZ%#?@$oo}4LN@;ZgionS-Yko{-))FeoSP%?9SKI zlgqjCbt!4_&sq$RCf_GbPhcnVBidoNnK2?L=-Fu~!7JLsiDE^F_F_VLW23nrlD#k_ z)J0%8`<|Bp81)2p)*!~?07k%&LU4Ot)Bxcpu<+PDtN|PEE=lw(8TC1u|Cr$UkCCAf z%QnFQ%xJTUC@7$3V+$-ujk#qUb$yqjMFc&vs=7t_re)wANVq3I^$mUH!m-S?Z^i$7 zbj{naL-fO-Up=z!u|RIeYC*faG2n3}UPACU%MbF^?`xa5XmZUx-a&>z^rKjqKL$vk zl0yCk#@Ogb!2tvVurMHoJ7&)#mW{v!@wS2qLu9^-K;GCG5kmCk*eEO@CUl7GMTcFU z{s$z1IH#ePrzw|Xqdfp@1Uk$bzi)PyECK*%8nniQXrfVU0w^FNOA*bg778XqoT7yc zh&N(^9z)-5pdkSUYBEAmk;c$K1EN+e@FoF>7LvbdpoX@3$fE|9VU<^)%h8V9}I;ONxm$~@k0YJ&vcZc0R>B^gfcb_n#(dU>zt+ia9z49UJV zhWaG>93bXyR*bzAS-IlC$Po;%BD&+`5KLGZ$ok5^uLcux1rvR4Hc~5?Y)%B-RD<3` zM?zxDphDJynC9Z)ypvW$Z%3HhG(^z=z?Wd%0vEOzJCvP9nBP>Gq) zc$xK2+n;+$soN|JuJUGxGcL|^9`w+}r{ zHiw8%2fVf#oyIR%iT2aG2SfCsGT}eNuoWq;8k9EZmxXgE=aFO$&fogCIuHC;+T&CN zTN@9ImqwMeUTD&P?j#IL3xpkXl-y5ZzA)x15WDo~8&g$M{}<<{hg+n71%`m!{L9D7{R}6rs~$_Kd$phsPaC6 zvS>fv;vRU__dKq`@^Szo#+PuYO)M3`arJ-)a*mU)H$m{~zEZp(o(|CVF7^73P_OFz zW`q)*b}~s0?<{@`lAp$FAH$~1cirXr|G}%`3Q|Cwd!j`tV}>o7FPNb-&6Owe?<>pj z=maioFaz$32#y6~+L~_W&o!T$!#zR_n+RcN_5si)>G2P+m48xK{efQ3yC}2i0B4o4 z!&jy%W+<@mj8;X!m9l@BRIEBXj)_?Zc!nNXEC=yGK8@WVN!`y-6;M3%UmG3&dWS|&df zpf2_u*!oJ30OB-xjOrPy!i)E?VfA+Qm5e39U)Ut+-?0SQy)e+ z^g9&Ydu9Jwv)lRbAHpac=2;X{=Vm+aBjV?280Ycgg-+t|e_p0{zW{+8!&ZIR_H57G zOP}*Y|Ni>CS^KB$LMM(#gmVl6#6dU0_IWT8MVL?x*3e%tMw0Yh9ntdgOUkvj66y&= z8`yPjo6svfc)@__al-gy5zvl+qu0p%)*Dmz}e9TIE#x^lRO4Vy3&o9YH z!{dgu{Tb9au|#R^HjyByo0xbFnbS~RZuce^ZmEOPv(CG(%_183%l2htwWW;kWU2I$ zW9(^mC&OXur#Ca`o$lvty@yR(?r|5mxyw=FjBfo^P7h_3VJL7$Qk= z@6mhB?OTPvSI=HK62=pMrqUos<=V%Uz~J805M(%7Z{<=~ka}7^|D8D9GQrWL*{x#U zPiQ?A%PxKKyJp`*`JgO)YRDk`%>7i}6_MhL@dtQQ^TYY;qZcoWb)R*3_iLlm|DuK% zh`ao%g@IAQe+pO&8aQEm|S-n^`;zd~8T!FkT$Mt!hk94@`m9s2y( z{H2dY&k+~F-tCq}w(L|CiuP>jOzGIWIIAj_BR(lphQXxiFE;+eN8QlF0}V zF_d?E%$$yfkJ2N%L?7xDn{7qDS3hZAu3wg^v=yM*^wWr|xES0$-ut8>m;bz{ZHLVk z9N{wlXWPe^Lu<_81~@`(;g`@=(l6ZRqj!~_4|{K`b$EZp4_hd7!XBU%v;7P_MaiL1Zemf^k#9@9NlhF3dAg8|(bFPIi*jcae2jTZZ^MlbEOU><|HDkx(Ztqiu zr?YJ9R&0BEUYQjH>tDLid-Lk0(PqV@?d6k)xtW9J3Bc$L*K=X58)=z+%i!~dR>#I> zD988Vbw~6f#){^2Jl`3JR)FUY)OKgWyG3TQCNMA6s{50Lut3{2M`=&H74{aj_x1`; zC(2i~&uz9%Clva7+vJuvWYWDjUGoy#d3QkkG3w`KAN;2}xkURBZy#QmUX!zSx%q|W z4&3F&=N!ulCMk zu&De1|K7x(Z9>LH@*n0iKDP&b|L_O)b71t$M^&&&!_ya`x(6=S&$it+Gw-fg92Yv+ zHh$VtygvGBcCSBs@|s0K>&3Z^FK5(89&h@Wyqek|t)@@9`tb!EZ(m%!sV4m+5?G=# zGW+@jPaJh^x8!q9ewTXtVrx)g(iIaIj~JoBhq)D&cW-HagLY~*URQ|a)_n0OQ>|a^ zr)u!yj?bwJ{aOt8w$o*Ms=D1NcGjLDs+YAU+4>K3UN;0K*E6rh%&qc2ym#60&bI@y zr^`jotPj6_JbQS(=2#+R`jhqk-c&ZpcS{FC0XM z$R!Wv^T8dK>55Zzg!q6ETptKRk`w~7$C6bK8A?=;2(_0R)2F%J!`n#~Y)VlQ19Ob` zV5uN3T92~YlCs7U@0v4c)mcKzS@KJf#P1?5$VtiH&XOW0`MyX?s}@V2S(ZYaU;2xJxvWhy;bp4~N1NVTs3NB|aT6ngThcO!LgosHa_yvy z-dc%{PU%%uH+_)qRTnpdZ>NltSG9hwXq&F;$-3#vmKqqjnJmkg`n&0A$(T6E;1^a+ zmRC(8+^!|d;9FL2gt%QXl`+^{frSAU&lfoezZ0srJHlC{{Q4-z#K}PnBt`)$M8GvK zfOtzU$ebvN1MsQ=IMySDl^u{Q0DHeQhRzW60dSZD5NgCHpUl*~i7>=7CnG6m&>0ty zhcn1SJyP3M;EZ!I$;E@^tZ>E+_RP)UnLF3wP#6Q&*((u7lw<%9dA;0uI_fe+;om)M z+awOgzwSl`uNPVJFfAiss;&N-Rafq=vqNsaZL@HCsCN37{0YnO8H>^M$CkNUniUVl z*SUl%*5HNTh6)yYa`6+lAMd@3fUTRFrEK*GMrEuA?0&Xax)G++PrRz9yc`)|XhHu4 zLt1@yoYz<4(o<)OS|K89q3j~9rV`L&%axr9NQ6MbKt@v8d~CXyf0B)7O5WJ0K>4Q( zZ)Y*zw^sMeDxWs&p5e#QLAQ$$R0wGe~BxFGg^d;BlY!2L{{BGDB(d~o-6$$)KkwwJrT@Rs{%!l<<~ zPkIP6y=B6h-}>Xsc`m+l0=cA_hdYKAA4#b-H!|XdF1LA)@ryPVoHIt5{=|r8lOx~U5lQ2*b?p(!B5y3AYVlj>~Sb7A|(T?0S>-OyS+L+S@swGBb~!_sLs)AX)UaTi$o# z37uOH3dz4W46j?7uMLTGQnEY&dVaJm*D5PefJ)T081K6(mMSsxcG&Ws#q$@*a$~P& z)6{+AIG-nKpUbG7{1s?cFKsk#B$k_O)n!uCoP4c)SUlNivXEtSV!&$^VA2)cBL~?U zpvDw8aTmH(ZKN;IK#qO+3q$b>MMl--Ir7b@$XH z3;Ht_Dre>U9ISh?WW#oPE|eb2cWq8|*|`^X$-fbPSJzS@XqMQEwdq8i@5Xp%)V}Wz z-v|<}(OnWgz}t+z6P>%0qHDh6X|dCgF?X%Zd-rMN?Mm;sJ2wcs@>>#jnac{#qc;kB zHv(Y)$8`f%Hx*0yo}XK~#@tLuUw^ zHiYd+bxo74ndo=+b_Iu-yIjbJ?f&1AD-SfphT<~jeo>aM>*bYhG=EF-xn#0u%7-f8 zZYuLdDCW-$k9suMSQs5YX;Au_*^8qV2u+{R)4=)oaQa@Qdh`F#TSLqSjBa!^UL4)ZsFSd0Q!KFe}b%@5OT%c`D^W%=;9s(J4q6j zdnHHJkzj&U>?m8zT%kOm%4#`o_XF-tJuLRAx&l}YFjsoeBdpPLL1yU;hld=xkB!Dq z#`Ku7Zc#zUcXz975{qVWXfU4__ z-&aY`JK!_Z8D%$=YE3cn(x@VEB@GcfTVV-TzjYUFk849^7#C?o)jS=D#)_>RMHUA{gfSeh;e?nt@qGm5fTT*56tSbQH}Uk@AAig_ zFFW+^orFB#eArn8m3(W|7NpU0F&3!e2ILy=QDznf_yOjlfbFq3@luL1ouTY>9pr`M zNgLlL5^d!Ac!z$#WdKJ-45ig(aBT1UBppe}&jk&I;OeS-M2d(|pVBYVCHe&`VO`Mr zgW3rayO=IfOcylXqd7?uVv0A05k+tW~;4KUQxr* zjkqIpbQ@?v$;;Oy$AQ?+US0-(W1sY}1o#hkRNmMAS2dQ;BQqA{zwfy3&sSoYc!$sKO zg>g!RZY>o6st^dJkvXYEo4F7_35um>{LW|KP=O7<21d!2%#vHfK})k zPJa>QagsO_aZ`eXEP$69zn2xKA=b@Dp!12vv!_dz-8>FvfE?9vOgTNMO1vb7h%TfU z@`{P#&#A8jsR3N^33p54%EY?km)MYm%&s)v$;kp<4S(0u+#=@%x-)?Rz zn{Knw0C+0#L^2tj9>=&klQ99fE}t;-;nFKkx0SDb8L(hu(`)E-kRqL+e9Q06OTr{u zrvwB@=Q~3GBkSZeDH#zVq_B~@NAf);Qu_M5P6S~UFnp>LBnGbBZj(&z)R>VOgobY0 z@t|^!BrfXlF_qb?jTNLi^P_=yvF_hxCa1Dnl;R10rjP$Vg2$0Ht`JB_00Kdy_YGnN zb85g{oqX~`LnS162NSffjw_Q)S@!CbgpMchr*!!a+{c(5!OLp6T3i@Z^-C2c$70hn z8|#!jYvDA*>AZj3b8POJP=)mMzYg$T30cWQ8kKF1)zg|ci7cUX&iBOKs=rMoWsx4W zNqSsL@&ko-n>j+PN_yZ6>o`!MY-;*$G-@jiRe^=K;tDcZK7viQ8Hu7COxPb|0i#LCzHYRdu-HS;S7^mQmFikt0Sj4JaB!T$?3e^iN1CuSZeqxl_DIM z3V0_5<@?=3_^R`JjT6O5d!)Gn4Ldk^0GHz+myXOsC?-SV zEUn!5*-flujdItkU-DhZPC?wUtFt0|x(Li^KwJZ)O;kvs86`K?G-d1H=MOKO}X zUPm72llzxSjqIiZ*}OYqf97&9T%F^&au6oD5W99fC3tmz4*brJjG^d}_Q{DD4BSc} z+m=%Xba|XU2X-5eUh;hab5^wP9aH9ieLvsIVjPsc0*1UxSW6GO<5kjfDhog3%jNb= z;PSKkq?u&jNx}FVTz7~_UoNzhwArI%UF|G;e$t9l#q-xT<1*QBO|@68qW2>;-T2Pw z&$Z=#EJF!V5x!eJW)HQBuihDWg}Ji_AYRSYmicid$$98hd4`?sCH;H(QTi%^Ci5O2 z1`M`DVRwYMSY`5kh<}06OGf{0{{5Kv(n4pH2`{|l$dvazuw$BmWiqCzo~`G3Ap z>kJlV?i*U9si3e*XXk~GN+(8s4UQ+X!5Dgcx)#41uijIFBipWJ4`>CuEb5B*!d;8I zG8JUSYpBiWWL)6inp2R^AAv$LXnf)Ewl8A~dCPa)uI8qIcP1CnGdx>Q?cWn9M`7BzGKL5ctx+yXbd z*&b2KhCIwe3{1sP))92vt9fuijY#y3=WQK`t7Zt5;wR;~Y7;p2IPs8iP*orT5DB-*mLjqM9$Klv<&U0X1(yNO)SPkJ%FL%LFUc$DnF+eJ z+!qfe$*H~Qsr5XYFP(^C^L#Xxjs01y_p^-uq1(8hAKpi~{xeRY#?ir_7At-FlF)V^ z%e1RP)^>Z*R7``CR;WwM=6@q|MYN7xS5+D=J(E{UTwQ3 z`@2CdQehnkIZR~8!~ebm@90h?Rxs|n$jw94W=chQHOfV!q<;^zjb}?dE&q5p=E7BD zD?6Y2SU@TVhR?i*V+uZhzO;ThM$}`@1@ipmZfIC6y9aaY1AdTW<8stZkHyNe_MU&C zSIW+N)^lI)cn?*LsyX%fv(melAGFlMV^Z=Dp%%gAX59{41;S4^xb%I(02PimEyGy6 z&tz7nN_2Gp>w0#1^Dfw2(NfTj>Dx!k*T@Jo4NV1I5|aV-(>4>;^nFm1OteT}*jr#{>N>a5vFYvI0v~92rI2~{$z$d1?WRP}5Fe2M*KYMUwEMaq7sT(*^cm+h zC7wI<^m_wl6j$p^v5BN6&)7IDYCCVFy}I^TmH#tikxSe{8i5 zzZXBW=K9Wk;EEuZwJ5b8HdS(ugBkNK_G?7(zo!9)f7}>x5-m@7LRU=wxS=Rt31#a) zS4?egj3-`eDMf?^8u%74iay}W{-7uZX(e3vEGbk%5CNY|JwxS?`6qkRsMofE^)PtBL#LL_C#;9ACP6OqKF~D$@^^``dX;OKKn$W4g@#^v z{OQZy-t$iJ%UAC|{`}=~;#xjVW|{~FMQCLhv7a*92{YB;r-duS-L$*%2i^oJZ+@9c z)%*H7uW{gWqszBT1sR`ZPQV^w78^=XzXyXdh6bYadG>0sPlMhHn+~!CoS(6mz6{n0 zvr_iT4$pbHxTtcbWBB}0_@g@gWxV&_(O|EL+_J*&2H*bCVoYC$UUMb!#QuuRhrOd=IK!BJPXLPk8uakoL`=nLzTPI9rfvWiHT~?3%Ii%T6V}GFm z(Y;?8%=`Cf=FCMowbM-h!+G9XSsqsadoe+}TIz}Hq5&0lU{4vlh&>QQaGc)v|M?~L ziG682g}sLnQf+qg(Vf&lWeeUU4w3}NtR=m*VvbEH1f#XHKi@`F133Ev+!_E-1^}@M z;KF_SPzwCi4V2mh%HcqYVW1PZ&+a8p03Fh&3Kny`_hysfPLk>wmk~E0H3{awq+pOcH1ZL%0I%x>-put#lVP}b+V)jXB#?2SRdunuYpZM}m?iyY6|)b?jt~>~ zE+(S66BYQ?Hy9pXwrDUr>Mn`CsGLBt7=Nw};UgO6=f zE@w{d00pYN0Jg3_b)cw@whT_UPQSo)$N$P}$M0{p`f<_o2n{CKlqB3mUivc1H zKtK;bq?n1ul8wD6pv?@$7yex7bC6dUkh_m?BtS%(Aht)vYfDRtG9iZmko%m-E2^~i z9A_HFB`zMCQ=RrkUIvaTsGA7(xsHQKE7)=h%A8 z#KH&`cryRq2-LmP@>&}IJdpcau+$>O2<>a)XkDs0NFyL%7{E5Q6POJ8w94Evk2p^E zwO9sRJC@C+W?QCKyr11WfgW@&DuHE4Mqr%oOxfsMeA!U@@RQ61W)%k!JEUEY~Axz)B~G z6H)R}Cz><~KQpJ!{avIOBiln3c9lli%|V=`1YF6&N=$(~pludOMvzKPrx=pX@{xYa zj4|uwFO3v0eUpBACo=`9%6}{d5m$Li_%R1gCyKata?Na;n6)^a7U1_T^))AhTRVR^ zz8gG5q@<=&R!_VMYy7ZZ^HWv1tGU-ZJ>#2Qm$#vu_kPmsPF>7F(lzN^b=IMuM>!NE zVG={SdnHpXT7MAF-`eg}0$TR}=Q_kRO^I8q!OatY;jRet5+pvBf4mKmpC?M>`J8Z! z@H+Fr%X!=DG~U}G(pwp)^$2jK1qi_V$k<A!uQ(ZVId3P_me~;{<;b!#~HM~&1K3jgR*!U7XyxwhM-r-zW zylid7t@_N`(Z#TaCC6^9(7llH51->?^cQ*7bdqqcS!p}p&7Y6Sv)JiA-`9N31~~2r z1}$73lg+&}Y+ZDOTyV;G3cLK^>;2aosrAx|@h%?heb{Nd8Y`kt}3hkHFqvKCR#~bX&v($CWTr7VUV3Xae z6L(eumb4AT%4GFQPpZji&W~o0tg53=^FUSZa;|Yd>wOv?ZMkI|`*_fyWerq)EKK0~KGh@hgk^LfgY0m zB77J>Ob$yf%L~JlIxgdMA82)C>&|9t{e5ui?*lX8oRhN;EdE~MRmf%e=Q?-fy8X@d z)Xj4chEdIDZ-3A0H*x>_L*yQ%1Q{nURO#ZYRvz{{9y_mRn$HJ4xkQPdt~$7mb6S5|FmN4j6)v7%XE|(qF7c5TwsI0%=~qx0`mxgI zpi&E)VO>`B-}kCmy=uyh>ckh-vwaz#`|vsaHNU5@XScM3yZ+ot!R#lkz=(>)Sm3Cu7nKcXdykT8LL@F5^*?BVW4wdfkpCz;ru39N1Z`*hv<+TSYtSizXBs_9ixc{?b*W1Y|Y zCNMy>?S~H@%H0V*Z19n8q}+E3gF>82La}7Q3!1dEACg#0*JES;)TZbfe07xz8{EVW-c>c9_v}vi>YEGWZ_j>D2`3meeUAPQn%c@k&Xdx=uj*fO3ReFrYxXm299K+@`&KPImjLXn^huq zuY~jVF9@g`nn~c7FXL9C{=yT~;^Ps5WEe~Rg7ZBoxEKIt4MpdZgsG&EV#rjYFM8Df z(uluXyWml_PKB?6wE7w0157_3f#nrv_jLn(jVyc*C{peNJOn&Xqrzvv9NeXvScphz zH!9iqgeJdvB$J;2Kns!yXUjO#O9&pN7X+Cfgs6%JNuWGn*ZIdtWPBc_6J8GBftB#s zQUFwpe1RPVa!OuHS=L{`;`_e5a$P>#K-2HEhp*^HwJlsT)nATG1d5rE5GFWJN&xkp z4Pz{qSHeXGN*dAG<1orva{?qf(VZwDqQxZ!fKti+w&Fp02~X~c!%xm}IZH_tQ$c&C z%8?}NT%foh**d%nnnzJ%>GeTF%ER9rWUJ_0f6$J>@g4gP1?WEI+$xok+ai!T2WApQ zH}0!80>y7L6;vcX9n~my0ni~tWI2-uiKE(V5KSMMU5Ud^#?NMCzF{QZVyLs6MyI7*n+CEE|D|eg%*@ zs)W0efI(6-Msd()y6Mj?0RX6{F8tL95LN+UrW4_L&0H|J#T8`)Tr zd*mL`h7q8|E*3xvBsCqwKg8s<3TwGx=$5m!)S6P-cXW-x?StqPvbnOTEP#VEmX&Ub zrWaeE$Co%yhXiR$;2gg!$r>$gv`)Z;& zBNu{-47_-Ch_8!f$$WL8l zcG>hLz=%41rCuAE`VNvVsS|jNL7k@XQ#8_ZcX&8;SgxEC-va{y6tK_57jrfjys`6l zYldZc>C*38(o_B-=0Co3VZm5Efgxd&V8bDys+EXY%>MlZiKvh-mF ztBu7Bc!?x`d4ts94MO0&G=5~po1dfa(I8~B$d^(E_kEmYpgc`EYf75$h5;Z4`?2>mL%L~#?%s<}r2g4ue1=9INWNEx#$*NyZ-mGXZar2oV$ zHS#8fWz?{{@_9b8&US^9E{c`Fy-Q8cX|wS6d-!>hul?2IFb$KFJyBz2m1?h4yi>0D zdfM6>Ihj8cSt*~3=I6zL3g_`v(knIaLrl`nKQhu%))$>WU}F`#1$4wueJq%HWcsh! z8&iHhd8nO{rqq=FUwWVkc)xe1DC-VwVF}=nGM@0JAswSTYU;+z=eRLkb2XyY`lrY_ z_E{~{n^8gXb05#W_D{}<8ZGzW7(Ul?xu+(^S%oxtkmb03xjCokC+s9Be%CM6p`zrI zC6dSJ*+1#f{R#g6NX=~TXea6f)=BcGb?6*R4&JDLbxMgpdRvff^^JwqGY4#nEz8Oe zpV}Y*Ldu^Q44wv7>5}QGsQ1fufgP-pzvrUvtbLxg6DphNRkfv^_qR z9NU`5UrBgk^Zq`3|M|^U>%Ufw{Aufnc;g+&&I}#aL!$(Lemc5C)-+iD>8~>!1CDId zEbe72KTaXOi+%$u`CAxZDD?5&)qAXGMeAbUb-4-{PsX-DtNLSm3y5sAlGyLT!7y`rt{ppmRs)veU_}Z z!{f5`q3*vjs&%a%0rK`kg&eRX7&`Lv=Vkbt7j8*tJ4^=OaY=as{zrY}^hTIXS@?qL z^Y+=(8$J)%ea8M?=e4KUv-cFf?aLlT+8bq@k#Z!Ji_^&gfOh>pTa$tJV zrKj}5hMUyF$EIhhZXPO^iaqe;vQ{bEJ@d4fuUba}TD3nb7#5)PcE$54LCPl(^##!F zRGJ+(j^{C_BzpOEO-$b>SLMp*m2!%=w~h&(sFLgQJ!-do3j_3*jJ`z=U6J_R?1u6k z=dN&SKVWnC^P5ZOjeA}obD>#Al>hOKY|0JoJ7ND_knLuWCvcn)%XV`fpz_NvxwnLO zKecTq>RUX>0f!7(P`|bZpL}1EV8?h;2eZQ|u|`efA3s`K!MkST%6+dR!icth4Mq zWRU5Or$vtUI#|c9CF&cL&qbEt!vv&EDB^y{mIEY3>^X;UKI~0wmSHAK&lNFLDG{>R z2os8>p^QpYWE`$KwWFT#t00B(hzA%)ooB=lzgkh-1GER(V zNsCCS?Zin%g232F*adswG?6`u43UgS;kF^in7d&BZ!Dctk0BEf4jK*v+1s_Q3e6L*82gh+N zlXkR6A~)fcRJKWGklR^Pl!H@Ic$8R9O0kpTyG(5n={U^C)Q(P`3pnI4iLMF&Dj_e8A#&MrG0P}Z4R0!be z31lMys6&k#wujW~su?kml0YCAk6a)(IN!WHAPiKsg|zyJtfc{lXb1tCko}8L1`upX zNSUS=Skh6XAynWTn>~PoNCyp+5=WS9V!FEe5s#AND|UGxs&okU__6?CA}trljCvYnhtP7Z9_xqC;KUtr~;0-Xte zPDiy<;YAF@KW>C+q~Y0V;q@h6t2`%np}hSmmsc*l{)m&6JTM{&#rFZpPeYZvK>{`* zJI#O#Va@E^T;)u*5m_}bBa(As!X;4Km`vqZF;jp*9R5LlkLx!4BAMH7#Xd>(c z!|hVwG)AV8fLx&gwbeUf3AzDv;j$W@!AeDJ3kpFIMQ=s$qbHj!(u-eQX9&!df6Ix)>Bkus5rb}48GRmLP-LYpg%Iu*` ziuy&PrtPoX+a~v8V21;`W2L~O)nnMoN}2Dp(yU9xDkwIgMW`I7GTB?{@VB3 zPb3KB8CGPgJ?4ScwFw*1g4Co;*KbM5mfn>RmiQ?1>Nb;2IxJaLgQ^mCr}Y+|9Xk$p zr6ycWj*!Ns&v7Zq5qlFTFM!wnLO88ZqD!Y+TveQ7J5b0Oz?JqG&EcgcDTYM;7oO4gfT4Oyhb43P)(L&){q?=Ju+@5%0!K|DKe&cp$r?{pnzYBRYsKl9TInH-t&wK8j+q_GGzg*WQEb()+- z>+c&w7AJZ+DBrK&?&qM$Bz_i2NE9@^tskG*fBN=2gD=ykPkbo)^6~ZOnG;{eLO;L% z_nCS6%W%;b=D#l=LoI(hvemLfIoQ7;PkiI2g8z9aJlwH=oWL60^i7q}Gb_AmRDqxH z5^%_P<^Zu{_V^oLDECIR&1hCRq`f{v9Ch$cy7ji#bvfX6oWQhLaX4nc6=P_7v1RU@ z*||w=DX){BOS!J%5*7rQC!^Kk(gzzoA?LWq_ctDxS8!N+Yf7h3M6d*CZR;`g!#}*A zse0AoEx$wKiBOB9^Q}vMJ$p0ra!Z{bJc25g?kIQ)YWa^rm;L3>FZOyO8_xUKdAa5; zkL-efGu__%IXmVlS>zK2P|_M9imy}7H(HebSxUWG91$5F+8|@@U7=QY*1@&+JWf5t z$ID;s`ZDyIREpsz6$Rs$4>*r-Zfnoq6}|aU-0)-dq+5w9Yqgwn)fK+F*#D#O-jCe( zs|{nTWtZKW?LODpxiuaA$f@{IBC%H9@MA4tweX%#wS=t*T;zIg$rU-p%4kJ)%FmGa zc9~EQ&pi(}!3AZ?`DZdyO4lvS#b-^ff69i;eH02!FeFart@~*I&;Uw7+}LXE*)}+T z{j&SDW%z5;E2TE<*Php}%?9LOiC;%vDY@8Rzl(qUcYAZUc=NxbU;mCaz*jbrtPQx) zZ_aO?beRPl^v^htQ}6;j@7pvYolEO!0uV^ zUB^4SmT!g5vvzFm?0OxuOn>dTOYVAd?FD-8xo~CsaAmvy0^BIvv48TgQEO56koUID zM+FXR)@yAA3dkLz1n<-Rl)i;||0!fllS_aPxNI{t;WAV~OgIrL+&nrcL=?L^z-bt* zalO!Q_r^@jY}uIu%V{Kr#%8+-wk0Ll0)VE1ar;FPxOAJ#o`5m|=B@Te-qP@kU zye0G|;7Q*?%*dqvgQ}yF>7yUNj(&5owpmBJYOK98EY_b!*57xmAFPu?2=16wx_zY- zPy}zp+tqIF`;IFSskINx;mWHcc zkT5o_p7R^xT6L9QnMC%!ejq6D_1QqAqDUq7Ha{_WxgZ}SdatRPFX_8kh2VG~wWMb0 z93D$hnPG&#)AE&)N&2VvC&0Ppf~PzROcch`DNrtXkC{!Mo)iH!|Iah(K6soqfO;sE z-r0ofepO2B-7tM%2&QX%iwsHI)@D!oWSKC7McJjO|gecXpn$<-itKK?Rrd)zRxR zE)c2PT$31f!sd>!_KsIE2FWc4I{(S{(c662N-jKP+m`~pN2$#1S8CZbMrrCl&3%I{ zOV7KtXUSAZGMurZrzoYa+`VbOFd&n;ms%zJ^3bhDuBz7f0$A->Ir%_xj6~r#T9rvm z43{Q!La$o>NG<1bC3Iprw8={;=v7>@up?$B9x9t*74S&LszfS17_VqC472~}dtZ}4 zUPk!$%r(TJ$ExFDs=cISVgCjP^T*IsOS*w-8owG!&&my8!Jn^a|MVfZ`<00o6WKo- zLwN0b#gGcJawz;BTE&Uw1hk1Vc0TX7``+0%%Gt#=ptaS-zHDO$rwU1imB>{D zhI|6j&V+LyS&^;-d`V9BI$&t}+GbgtOB_KOW#s5XS&&2D@YPHJx}7X+Ny;>{ zqXGPPszF{|6!tD!x)Wv&VH5`Bqx!cb0ZqAiDOj+a{viD0rchZ*9)$3lk7{Na#mnI# z58I63tik`t#g$LVVw@F?UxD6ACghmQ@AkXC*`4^Dxmt!rfX}v=@N$G@C@Pv=vi3ys zd^d%` z_YQDM*lOh@HTBI39`Ea5?bt2UuD+&6LU5yUx_X-*wGqY>y__Gt97r+zBYn1&JxU?y z%S-a_4rjS5mnuHywEQHph1@zZdGSB5eHaYV)741}BZK+(J5}YRLu7wEH!^p$K}gP~ zRD4d#>3J=!UDGSvQfl)Mc%u0QMB{$6OnMFbpO6;_YY_gi$?O~gg`z4@zV za0;8<8Xh67PaV!`Ctb`iHf55Yt?vrOjs{v-fgXdr70&8k{kfg@*i$|3`irk8#^U>f z#pNuX(mba&Qa!fJntF#NPN6>z#duHy22B z>=86vkJ8k4R#K>#9KSgfQ7CP$^5ES2I{&CT&-zulx9%UFeR!1Tx2`EY>281p^f$!* z^TeN6)1!6_|I=^Qp1QOn_wsZ`MgMufCqBC`Ct-~~3x5NptMVq7MzvZq4u85_kM81< z|5KUav7vZf=)Ws`; zQpXMOW!> z_4m-NKT#e!laFXsR$Bq8@&q$I_6_-*%(n~KJ+c+f2phWkm;Sb-X5HT9Z_5A8bbR+*yZP|u$Ht#)L*|AvCT|C3jYaFtUDmQp zwJ~Jt#aEd@3Of&lW9`*U4kjN;>?(379@?r+PP{DMA;!k8y4|@^RC!yao-0T%#QVS5 zvfDe)8x4M@G~O(&{kl_b&9+{|y0v2AeNe*{`y-ci`0Xr*^efHi=321i!R$A~ zz3w}QUxL{nI(HF)^6$5O`5vkfJv4fNpIa9}`1MSFEdM?aeRPbi} zlfmO!gY0>Oh3>B583RZ4x9iUgK0h#66J?*1>E2v3obNXLJZ!vv$^gG%TG?UoctuWOAy|gph9d`NzNSpE=yH7nwDm2hC1dGEY*;Gwo9 zpT^yY=chmQxlfv3Y0)}S*L=CKoWsN-*!E;pq)u25O>SE|%ClS#a(^p0v1&6KujdK=Pr9>R_~pt;GKxq9gCG~+nR`X*lt+?B0QOtVZ}9B{{* zC492X8W|{19!yLyO9ES+yVWjc)jZWzC&NO4L;)GF<>s&~0+ zuVZf(-YR{e-SJSTzfeaZZKNOneDJBxV2kZllnm^YnqX6MKn&7+3U0BgR-$}z)Y?F- zJ!vOduX?RCg1>npRp(k-YsD14rjB0>JRE6bG3GQBWBcN=tj)8h);FB2XH}ZN@DJCe zw`DO;Q>Pk=r))=WS^v0&&_$&mvc}T7r77T*59B0=j`|Xy|4HO?_6h}6D}78K9EkoxBN2Yyz6X}sG3E6 z67o|Q<7&>OsmdjDY+M7}m;tD73UTNFk<~?x>qVopfO)G#KP-e?3XIa4id{MvB>=ty zb-i72H_CZBa%nnl_gv!Abnpy0IM6l0`CRhu^xZG#$e}YS0yD9Rt{LmoiBMO{x@(j( zTUx7YHgq=I%uSu(cHh}8m-WTfBz88*(=E5i?O}ym=ICrr?o9US>4J>eBG1`u=tmA6 z*OI8&9A~z|-5K)hnP4)x%=z3#=h?2#CiC*)(aH3`i)q1`+^4{l7OY?(cl?MC#f2^+ zKO-i%4*(!*UD`F<6VK~EKHrgh-T+K7pq_tKbpB2K`4^*~47#7`*L~7|dA=R$(JkQd zTHK?{^K<+A^YqwHy+xnO-D|D zcERQ9Wj;}k9|kHW=++A&1C7gRRwpSOck)wG0e7L%ac8k;k(tN(I*FwYNzh{gVxW`P zsh3`-PW{+zeU$IDmiu*uW$)z>ad%0iNW4-?rc^{te-hBP-@Js9OqOYs<-YhNeeNXQc1Xx`ssU-NV=wpozl?-uT z(faih{xA9c;BgSUG`?h^IOn8DdzgB4eA%R#)2oqA6`$0yj(m1qg;Qp{%e{#x-Sba7 zgvN$RrgNS-4PqMuLX~F1eIw{fAIUtQ(|<+uGbUsCPLGxuJ$^O37zZ!Ue|xlaQM2iI+A@6ZN8sjPY!R*)SWxYhn9s9llEY7Xzb$ z=Hph{W|r~3BZu}j<{fr+0}e^HK~G17IW2g)&*U&0*T^;i8HeD`tcI-e0w}9`hw|Uc3OK1+^_FP?tv*Pdl1e zAnW=D!Q8S({l6BK+thKj_2tm7^N82&qGL98d+k>^%^QMsLTv_ya=s4?4}K4_$Ns0f z5wv`_EWkPMdtZpoam)L5pN9Rh^f_DgNY4h(=-4P6K5Vji<4QUW)KDlJ8z|K#wT-+% zaff(W@C(RXiSajNxumLJTekD!dDQh9w`qWTdZ~2F;BoP#LJ7ly4;OCXe<%!_67Kn4 zE7vZzQ+(WZsp9e~Zu9P^Q?Dz$UN5fQug1v^Ega*}1I#%V+c{a&@sBqL?J}^OtGVKg?-Y4q~ti8JZg^M2i`e^OV5&5m)Pr7Qz8@r#o zQvv-K=i)gBQ%=Ep_tplrf4)8n9y0v-QZR(xx8}u#54TT`l&*;#Xg62BgGVjD`Rvaf1&pc&c!dGxu943%6Oqx0=dc?K{u^_b zH@=&1oNG@K^1Qsts=SQUp;R4bVU_DtSpW5$zASTam`>ukF!GAv#vwblSouO=HZMamBfFcEo-QmnBu2gs)FD8>&19%At?Ihk9jTn_oOgP5#+*Y2`8 zVy#&Gi2b{D*xV+VVtxKB5zKWr329Giz8Bn6ZX5PHRqE43f;pIrxBB_NF!^Y{K-Z*) zmV#rraJgJk;&NmrQI3fD;qQDn>~{FBV*ei0|HMCf>Lbi0Rs+hA+f8&J9NySf8X-=K(7CgXe-deRH`0X&^kXPd_KPER;PAVW zGO*x{bp2u)RkK!Vj~$ha_or$szpGGPA)II3WPMlOuoD#j%P+^Ok)uC)#8YKZHW z9A}f3_i5IOY$E$WHX1_2I9U_7bKND$kGuNj3|O6t(xRo~!k#2kn{M-ur@U|nJ!5}< zwac1!J?(gw$0jI3C*Bv6yBfxMI$L3##{WM6tUy!0(i*wdjEpllfpmy8k;5RRFqg3~ zwV#RzpZ@@==g9b7XRelSjhV0rVh0y%a`Gbqh977EEzy8u@B#rX8}Fcy2GgAt>l_YH1J1+Ft!K=Ya#dO#`1?V zFcmNG3s_R32zdA+aCV1zf+C;+G(dt>P#E~3hvvAYWe@{qxcoiXjRnx01ZWE=I1**} zfj(e{C%^&t*#H}mqGc!oX87zQ8JyN|6jH!@O^Bh=#}i{9h4P50_h1GW&;VmVgHt&D zqW{kvENC0S%2o})wWWgETU@UO_U=hIquoJF+oc{sF z>{u%o8-f@^BchKoZSZK|AgR$IvmX^`YRefBg|=hqY9(mp<=V1k8#IBq#sUVgJ$}Uf zP=!VlFn{;F;MRmg6)6oU_FO~4WJ3`oVm{R|cI@7s)iuMYQWYj*OcaWpD$@s3#_R!2 zA16$epn?i6C0lbkG}jyi3!I?SUSVuf!5$6t0fGn=pdkht6)^KrA2^w}hd59GLjydi zz!1g>#-Q*@YzaI;9SAO<t!ZBCk3sppWgwZby zc5QIXSb;TqULQfU;s6rXmBRuodz_F*hiJuHP6f&ovWGG(yp+Hutu}OC0y^v$fhuRH z!h#D>Kul9$D712>SIR5{6${!R2u%X$K#*^~`=Jq|zbK%P0GoTEC;t|Ifra4*kz}o| z(FzUBOrcQ} zG&vfm43P21v4+4?JN)(Aa7$ZTcSc>&J zIK8H9;0fB}ULA-SUds3KYvC+~U>T-F<&`vm17x%k05JeZ7>stpJ+aFxX30~V!a#wy z#DxMnv(^IE z>QIvIb*q5cnCV)W! zT>;pqG!c!quw`jzljl{hEJ?PVd@5jlHn2U=MknY2U!KqskIg1lEk|19uf=y(?Pf65GSHjqsAz6$UEc<=WZCHov&7?QU;7Mlsq02wDLGa<_uq z=icO_dEI8&wp*bi7IbdW4BD9Nf&X9N-uJir?d^ZVfC}h7x4F%|hnO{%OahxVPtNjS zwoI)6G#txp@nY|-)hWl19xjI2yfhTp7{neYcBGLT&Ma^D-E87#$4~4PV{bgq+f5#D zwQKX6{`c=Vj-wnZq{fQ#Z5dW9M3 zh&X_4NUMV876zTw?3y|J);?dj&(nUi#@UQuVe_Qu_vUzokv-ZE(_QHEjsgQaLaJ{1qHm^ z(XNriADyjr+jk6lkBhwJY5!)t$&a4&HMbnnwRicPhkah%cNkb89X|1kZ+wuZqhHAn zL-I9>QpU3x`fQgz!P>3+8y-LV+AlstVUP}gZ1nj^D^sn#;_&Uh`oA^g2|@QD%(RGE zX;?mQUG|>z1jnA&d`7RN)BIcC&z`;Y$8Oo#%JtaYK_0N(#WMH-kT{?SJYWPu-~>vb z113NNN?@Wvfig^!0IHna@g166jmp_ciD4Ru^;Xe{00vTE3s#^Dwjc&3zyl_lAIQv~ zpj!ET#eUUAA+!Ymz=9Hx-ay@nu!R9H_(cGs+=RUw!x7C()m>^)n6xz;+yNhm$sO*U zP@r+whV54LRbQl$ME^SY0UE4}KkR`&1RM;Yp+B_Y8&ZK9QUM#L;TpQ3NCgJJuvNg+ z8q0a%71G|FdEm@Z8>ShTv+xTY${`&pq8--Z9JZk&##GP{%&PfV@z8*&4HFck3CcB! zf58QS(Z$si)YVWO447aSCL7)O_YDU!tUte z57l27EP!8aQvc9^Bi@VzN#x?YwO#GOoc+aI7=}|stQw15i7_Tw^-P6yAproa4Mc4~ zg~XXmO^{B!p1+*Q4}oJ~0K+TP#K$F`pFx^j(ae=_kVpch2U!&<0KgOMLD19}nou2M zozPk6So&=O5X_0!*#xjaO&E+_iQR=jU=k_VO}6m_2*k)u?LnAG6A~N)2>fHdeZ{)i zMFKDZ8q@)A!2qL3ga(KuT15d(RDdP~K{jm@3{b!ZD9K&?fLw)^0q%qe0@)Tu8|~pA zq@~Hb9A%a8OM;+5i$Q}(u|PcSKo-DCR<%nQe1HzH%Uw7?{2UD-F~c?JNm;@`9aI1l zD1&yGq5r9YBhV0CoJpa2L4_H5V}isbFla+OF~dRGQ-N__Yqf_>>*_0S!#f3Dm*@d;kpq5CkNEf7F3%(AOv| z17gI)2KYe)I79`AfI7Sk49uWElmjoM0ti6CDd0&usKNrA)kH*Oc~RRnT4Bfa;>+D$ zy8xYHfB-Zc!x^{$Q+UQ1Tmv*fm&*JkDz$H2^8p!4G^uIw-@)km3hq)Cm6ChG`@P{X{$<0ryDHf_M;6P6ZRR z!v8Y7C<~MW!q`(vg+=)EhXy2oI=;}>sh{b!rGUvJndPDectIZ=*7o#}3sk^DqJhdF z0W!bgixbU?_u|AdNUgkQUn5;yE6%y&i_zTLM1XyFf#HF-0H112lZX9yoxL z_(26+&-ARAGMvC(eAiWof=cehF`NJdhy)F!NjX%<9%LCfkOB@ILpfx@28h5l$cGo4 z0i}|{9y~!GEI=Pf5Oi$-Ro+<1k=T+{5Hth^P-Kutwpaux1GGlOE0&?1?8(4P(EsPP z)^mp9`jMh$?S$(2P;G_5y5{LJh`k`>0SnLt2=qZ71wkS7EV{;ke!MD8{R?f0vt<(h>qM;$eQ>Q3y?y#h=VfFfEN(x2HvDLJb^a2 zKp5b_H9$Z)T*E8;1PwfaYVb?oq(!b?+Rtei1&Km}ECW4IPoXVE1c0q`G{*)whrH6t zpS(gQPTPK+5LCtmom7`q;ubEl-vRh{=8^L}V?`{zTVOk4QaKL_vcC_$O%j0~36JfZzoL!hkv~ z!|wEiIJCk&l!_l9K?MNP2K>Y^{B65x0Cy0KE)pZ{rO7l{5Hyeu6M&@q`iyu%)G$HA zGTcL9;?roJUtLI6oU~(k1l(L8mRNm&PV7#1jDc z0SE-lnJAAJYm7e}F|ZtEOejMPIFu;(0TeueI>^B?e846I!3nf05=9yhJ#SHo+v(j?o#*7XevKnZJ2(+2PWepBF7Ez^z!^XwLEJ*-$phP$TpJ*66 z)I|i~Kp3QxDn!uTA}|_!KujD1FdPFo)Q*w{#w*Z+f0X9xsE+S^0DVFL2ST$3aP!yo zfk)85Hqp&Bq{9g$jvb?cwtC?BV&P+!+!g8=7peuDe&`331OGY*2nsxbI4El?P=Kqf zXa~c<2dF_Si2%PKiG_H@G{EQNh{V0w1v~i32cW^RSQHwVr;?h77`SF{32ZPDn=o>y zm4YZT7=tl52?ys(gY3aF#M56skZL7O9|p!g{hroE+z`?hn01(#RVfM7yvY5T-ARi9}i38iy3V=_XYRBe02FPcB8i@iZz8=N{-l z9^l$wAC}gn(6q4{=-EUHKkO)a4eId)uEkqx4M&=Qga7f=nF!j}Y}H(Otrj*Wrsjd5 z%SBt_xtS-j3Cz`90S=q51}B&HOI7eo7%;&r97ANQ-I6eJdRbj|*+niIo;Hpgktv{V z?CWw{2?+Gd9^gRCgh4Clz-T7a2{k9AdF}(q8p66H{4Mie2wKP4W3DM)-DRV8>7PX2 zU+vjgZSUS=@&p0a9NPIaZe6a(rHNT&c5{UR1Q^Q(h{3Tyz%@`v)<|IphS*A;U2mt| z1cUd?`~-O`2+gR&vEc0nbhtUh)V}24L9!5s5%W~m);nJADP}i@RTpU01qr@27-m?4 zM_%I@t}P0qaiJY(1!Aw29c=wTD`@ajuosqN`TtWaMV5cLmNx}^g@Lu6zzJBZnV*0& zBAr4_AzY0YuOSx!LZ6-``GbKem~S~W?0KK}xtK2n3aGi6N5Bcd;%t#gCW08}^2Ck@ zmc6LBf2+T&~evX6P?&; zE^?h;)`?y~xnrdFhd=ZXnU$c2?e~LqyX5_z)W;i+x%^7r`s3g6oc)@WKdsK^e9s%X zsl)x&n;h29-sPjd&DS=`hd$`LzW=J9I2M+0ZZ*wFxX?YIw!~RYN+CTXRe;j)*!77V zU=a7sW4_#XqTBU$op*j>inP90VePRy$=9DvTvtFoU7rYK_Va{5?z)Nfp1RMx2#Pw; zx!JU(bxy)v{Xtm2Yk&NA7my{`$8|k}CA!xw3A49}vv=KU0YsQR@zDH0gCdLrRWMMX zacJ;I#DWIzJ)HQXVMB=qFLH!fkl;p(ArBhVXmMgeH1R&7*cegd$AcGDLdrMmo=&YDt)}Eyk*HCzXut+7nsjEw zhFQ@7+jH#$!;)yihybQRB>%H8E&yy&^1#KOs|7X4H5d=Zs}FlzimW*kMbEBHi%OP! zG%M7{Eor87$aJPfv=Swoe0;g-Qm7_-`h@u!Hq4c;SvIWwgCs$qtD}lO*pTez$!Sf? zR#{efakCFiw?2#!H|~zHWxK3h66jo++ruap>{NpvU}*L7-BjQ~AI7f*%Kj0if~tWk zHS+%GTzhcnUSE6WpA;?M+}q5(sgeUQDw9?laJ1!$8Vjkh9!!qF;Isn}IIS9dEWw}L zLy$p-N?T5>2}_L7L9c$IFQT{NVk!(jsxpWf4a`F?FyIafL#~Nnh;KdpCgV)0*3$ZH zr=(oUFh#F+J2Ix>p#NH{!T=jg4KxKWx{XWdu3Hke>5gOzt>IPQCrSLnDo=FD;F-jM6cVvV-u%SR-VTq>9Rd2rLF0gHle__#oFpK9C-076`yR?DlIuXkVBLzs!ush z4Fu4%qw*8-O3{cMa60Pngo(?Nq5~?kP!9@;NHldUb4nKD6!J+;)vQk6m#E9r%ehKp z@=_FF_?97?>i+^p#X|PF_5li@y$2ye-&2S&uI#h7U<$8NZna%!wlKk$Sw)In40{8S z*quJ}307IdI$A|3n}ylF)Zm3OB9d;3ceHSeHdfvUDGD0IKnG1K#zUR@p}cE<$<|{S zL`qCPqOZJf&0n_@7tV4ObWCQLu~UjUr;kIIsmvPoGCGzFFTC*C@MOt7ZF3qku?M|K0pL#`o;Gzv3v;ugpLfi!3D(W<;aL8vz3W;B8^7;KiI8TsJ?>VnX$8 z+pW%-xc{a_YHYI#4&5`|XHB+fq@DN3W(Nlx++iyZEM8}s?5+Fiu(S^f)raWZOygH* zFwCIv?*Flv?DqpL$&`CSz+(#25%M z=zM5q#hOS}+(a*tOob_j!On2vR<-?D>TV4TA!ooeu0EkjBw>IHv& z4090E)i8k++SRxS1gf)$>w7lYUA}%uybv|$Q=RFQZ<^OVSv>_`3jEnf@+P#K*(OZr z(pnLln6=9>@n@~V$Xm`=74_l8BCRu@di##X;`m};=os- z&~mBqSI$BwLJ`&pI;eUR(>S;^QaL9~cpS=;{uHGhCK8h+yh;h7mO!gP(N(4k5>OH# zw*QT^&o6*s3|MF=wLQE-J}79@o`kiTT=nLT>B7k-|M$b{fMiSk@nT~fXPOMAL?gN4 z+fWG7MJM*LCcHBX!RELUTrSaj7P-?8aAz*9;S6iAnoy^7$2+%GWKwFgNO)dFEo+@8 zJ+Rx2Kt7caN(~cX<+3JIvP8%f1#MTioZB}aNF}qJq?W_cmJq=Nk=tkzqM77nY{J)+ zgT<|%xx>w!h-o<_!EJ)P^bipb8A;+WX>d=;kj4bnF_Wl|S*#n`c^cI+lkn&yhyfA` z>T{>Rk;!d&i`me6*OeWHF+|Jh8GZO?O$7b1NzRlIgs?{v+pS1%*z;mGSB1oJCjUvQ z#}d%c2xO_BdCjIOaUoX922VCRMSd7b$U=xV){A2erhJ0VTBO$CJ0QTMNfMn3=KA+sia8PTC1g!5QZN*WL3c{nAAw(hS{HC3@x66+TDJndz*Mi_C$juN; zEy;aYbmx26$X*tLn>UN7>W$F<%!@O`#*NVm63UYN+lXs=7xwWmL zP^`OE;U){RI$@l`ob|2soJ3kmQR8`%pdM~cBn)A&)W)pQvVU%tfSc9f5dnuFv69ZP zX9<^|Q1q1lMD4#2hG2ye2*~`#NrCx|;@|v6#0%wF&Jy#XQUuEzmVOPcemGQS3?ec` zr7}nLq31@zzzc9C)te`-plgJ(;43TZ%>g!Y1c%j62~&k{HpX%DZe_F4c>1FUq-ySx z__U!EnYh!HV0K;Aq35o)rTRm|TGLosx5CdPFaT{qHWo*H5^#!D@&B|G=ldb_v)ly1zw4H=yHvS)cRwsbDmr zz6kraGz+@u*2Y-U?6=&AsBlmjx<`z5r4sR;&C7B{c0_&@%d3>dx^8waE^mz__8R%U zVGeLOqbF1ijgG}5$FZw{NM{z^uSnvIX|HA7c9HA7?LRTK9sf1wBA3oYv@~HxI${WO zXEB78@QEdT0yeH0>YV7_L~5F`{n&{KRM;;pcdSDnbwjScuZ-3&i&{VUYp!@=?22=s z)f7#><$N{W`C3X??)8}#0PHXd`)VCfhae%DtW13S!Ly0CaGII#Sc7agArsB99v<;w z-P6qk+2a}4S@4AKTle9u`gP1&xH3a~H?$B+!q&>z5% z4ABq^s}KgLPz~Ks3R6oAVc-ny&<@LR5By;c1Cb5`@e1E?3=dHb15pvF5D)S25Z&+# z!O#k$kO~WN3?Y#V%Mb<}QQ7cN6R~g)F%b^M5D*2C4AamQ4RI40krh|b72l8$MKKf$ zF%LiS3z;AY*n$5HVyz@Y|JaDd08S#{0}3iY46XqgH$V(F;2M-s4Cvt)pV1k`fEuSU z8lUkRsF50*@fbJ28NV?bxv?9?@fw?v9+(jtoBuHzp-~yz@f@@98J95`tC1eXKpm(t z9XEg-l`$LJu^#m?9F-9omysa-@f)?#AGHx7n^7RcaU0|DA)Rp`&G8}Gu^aWV8|CpE z^HCwMksd8lAh*#UDY765k{ijfBU4fvNs=FrF&~}LAu*C6NfIA7;1&9ywHkw+^6v;2 zvMG_0DV4G)q0%Xn5-O4MDvwecrgABx(ki>s zE35J;nKCP#5-Z6PEX7hS)sib|KpMjGEY0#L&oVB@vMAX>E~}C%(-JMEk}tRN7yxrE z*)lAnk}LgkED^IR_rQK)WIUomydK~bkpFE*RLdduAQNG65Mgl<6)_bxQw|4lGda@~ ztq>7UlNJ+kG(%H0OY<{9GZ9HsHfK{dA8`&XaSF+BG}X{FW0N;yQx!XNGer|Pb(1!a zlQz|`3d7JfZ}T;cGc@r6EuzdqT<#ZK0OqjF|Dt9GOUMI9Fa*DI21PKDASyh`(*rTd z0bS5LS@1l0YCRJWJ>`=<-P1hBvpykkJ<)SM<5QOYGe29J44X2R?aT?ttV3nZ61Q2E~CU2#%P#mnSQU{s;?_hgTJ=QL^gy(^C-Al zbf981$LI{3WEA9P?L|S2gJ=|hdjFJD{w@l8tVuDKj$v zWiU%49Fr$qCr4am(p=Ogx=wq-Km*PU)GjJG2DK&Ri!MO)hcXJtga(Y1LO1qFU@j`B zW`ZCLWK!8gL{rqMz)Fq|to^Xfu8w3=kK}$(b+CBFdfcq){0`JiL$sixMjj3M*r+Ci z^5H&W4?w^Q6X+gXfCZ%UC1kIVddfy{z#@7z%Z>pG9#7QZ)W87E&-z1hJ`P@VhE2P) z@5HE1v8Ul8DAcqxPPvtG8vpF>s!8RB#Z9RdK=5>0^x~afZZ}fK!Da;t`oINV0a58f z1H#}KSRf1x0tSR43>@NLQLbO5kRvpp6*M6N&T47MLBFknXVL3uj zsmA#7TPGC@h!5DNv9VlP}j=>nLmLopkY{LKtytZf!LKWH;Tro>c z-;|p8#m9_mDi#;c9RF$}FbK1DE+=ryDbD27NG;xiM_k4AO6Me)KG#DK3{K&VTu&%{ zF7z>6uF5P=>?DjR0QL!>Py>u12+&{w7Jvm#pbtjD4^H3=jG+*w;R8nD30?smSbzmm zVF8|i6leeqDBuZLAP8U}0Z3s1M&VF2-~={787fg4M!_6N!3Dw~0T#du761lL0Uf+x zYtaA-K7j=s0F8pSx@xv=WEB1WDpvheEYJ>rm&uFrZbmDPe@PTZbM&iJRJy(=fQ154 zMc0L-%-FC+X@ycKXn+DlAOS=`2hbn_&L9kw0R&ti8<}AmC}07U;R&FjgP|b-{D1}; zKx2zQ8K8j_ApZaw{6GXgfD}$(8At&Qh!_nv0SC~C9+-g?`TzxJfD~Xr1NH$0qM#^A zAp$7C4|-SxPM`>mK^=+!22Q{aMB#%)z=K7=5By+;(b$LCSdB%&hugS~)A)?<7>z$z zkMo$1?YNKec#qTAj(u2=;nM>Fjrq8Z*Z6}88I#r6kR5rE zJDHOI7?k~3lrNc%8Ci|@7?D5OlnwcjKe!KYU|@4K@?@jmegP02&tH8ld47T;KzcU=M(y5YPYy7GNx0TA>lzpcnd}3HqTOI-wgHGfk7B3p%2?kfJj>qWgIcDf*);x}Qbbp(~o7 zP1>S4x}@o_qBHuUQ`(|gnx$RZmlJxTIr^i+pcQCmV8Merz3zhF2S#9ED(EL7G~gIE zfgN7K9G)Ny>RxJ2|z#@ir@$KfEj`S8gzgHe&7jIAqeQ< zc12(VM&MA|q7THN4*DPgjzJR`6Rb%g8)#q$KEMTFp$?d#0)XKO>Yxt903@Uozksi? zTmKL0QkUnb1HUFWUtI072#|9xFtRusz7#b5z80AQ~{%OHR*#NY(N-~%cE20mbFKLBu% zfQ>=MCF;PobwC4tdtjFV4US;}pg?t8;1rNRv60%gRiWt$ZoPx9z2Dot;~T!`8;RDt zj^rD^u{Gs<8f0iy18mj9)&e)&$SK%n?9iZBfAt_Vz*kYOA;JIz{2{lsjGCE^FtiN9 z_W+IjIZZTxSq&nV57xt_kO{088V+{lF!TF_Syg^nQw9Z5^@$IP|k%wx}%*8Z6rY6hV^g`;KyZQf<+r{%czrRSneZ0p7ii|>R*dFsEela`cN-luHA3kex{HKv@ z?~eqmcP@t9q=~7x+}Q&i&!PR_)&FLAR{enq9@X(K zI4tAf4cJyJdftX!BGrX;x=g z_)JSW)p}xze3AxC?Y!o1e%x(d+99I?9ne1=bO3)I=!c%@i{9vu9vB2L=@qp;Ze1sc zjV;tD0}7zZRLjFZrP*M_ z6d)Oq-~R3E-h=PHjO!ln%@~pY-h%-@mH%Fk3xDtpAMpjB@DKm+1OLDA2|w^1-|!`0 z@O2;omcfH9Uk60M1^TsoYDXh9>?1^mFJPg=tSo+l@L4#m>V_yqj!AP7u3cXJ+0x$j z(O#$!LKT)78hYRNe;@dRU-*Zg_>158k01GyU-^^2qCub)e02|6VHsKi>&EUqs1qVM z?6vvS|5z*ElnC_DKzdnpIbJx z|M?&I_a7iyK@&I-TET+^6B<;AaG}G75E)8*II&>Gf@pw+Iacn+4~;s0Xh8D=#hzCm zV4(Pch9nw4z+Adyrojb(O$8qG0fFKk%O7FF{3IFXm8v}+TmQ0bsZ6BDl_*HA^hhdd z$)PM!D6?Af9?7d{P;l+}b*0OpUwM=}(lw8qh zpz)+Zp#&{q?9rflPs>!TL4-x)byF%$*TQJfopcWj5D>00L9yI7P~Bf6C;j17X1wim z!`mG%zI@#<9~>AAQzwjH9Cgq@V_)Y33TSompBQ+o4wd!s4fH{Ndn9Jyfe0o@5Hw7n zrv?BJj)FrNxV6+$QJAeI5=_J?g$7MF;iOY$NudyiO8+iZ=D<-yRhCKxt^9C}M}8PX zg9Z+;@WcsdXcCqSXQ(0+8p<%k1PDTHaK7^I-)k+WvK(Nd*3D5wI4#au%gJm?Rv|Si}#0FYTq&?sQ zPfMAI)LH&qrm9q;J+VxCVYom+1r;a*g)(Azp+N&0P_WD~ESxYB3XCpu0u2eEphKc8 z=&->FE+8S+8R{&q35OugPl2m(KmRW3mD0A0`qQ&~| zs;d43!)v#)6D`pWI-5nN-b!lf(ANQYV!eaDAWRl3qp$V$rH?=z>ILM zB(MwXXJ0(%H_ zf-z6D@=70j_|Zq739!KCf*40Gd0_%66&fGNhX&Cs)S-bgG!zlRHUFDLtbr!<;NSo-BPk;e6MO7Ik0#0_&;S~w z027r6IzSVFkIInpp~^`qb4*xCm6cuF=&xN~cX+Ys!hUtw&6fsGD8rXL`w3LRGJJsm zOdoVx#sa+HhrXO)atKTyVVH1&j&)2G_6x~KV3!h8g@r=M15ao|loP~7r6ut=5xgp6 zvUr>&3_4%|3ko5MFyw<7g}4R^Sa7A_l>-fRc)|jZpt6kIP$M*8h8K)M3J@$q6D)|p z2jq|d7$krcq=3L4m=P1A1i@=&DPQ`ws6I1s1#WDj6W)#?C`FOt10WFGDfqGnW5}s? zd)Sdy!q5k0?4bf-2!aa zQ-wixB$*j(hQgZ@u!BdDIl(bl0*((T0~j9>2@XC`MUQ}wCBQIc6;BWW*_=RHXgG$n zey|m+fa7(k>7p>XIG&%NhfUBh7cvtNh7FVh3C8#UG_FBL!TC!d$9RG<5Qc^Y7^9lY zFh(ET133kn6M<;h!w2#JfE{Q=0||JYieST*R>=f3VW2>)JZK>kp@>%%V9`&^qJe_) z3NkE#%snGR64tPVpT-81O|1`1`aNW z8{UKkRV0e&Bd5Z$(Wq`GH2+o2P{y{Rn6?O#7K}|6ThyW1Sr9ENd&)z>LcWr8^r;(N zRbDLe7lD*hFa%*jRZGfM$?ZWoyMcjnS`m`7Sf+w0a%4={7fB9|D2ukr>C9MER1XOg zUU6w%MpFaHz1B6VP%V>Dd3CU^8uqXWihv(BI zc{|)z1P-{yMecEt8(iWxm$%DZE^>X#T<0>Ey3@68b+yag?vA88-MP>nOn5<*__QUR z$!KV7ssx?TDxyeHOaB-y2LoV!ZZ3FjNo+nPz9a5<`&jw&9t zD0sp0%BzC|EU(!{7{U&Ya9b|?U<_w?Ef$hZOIY(k4As{|nH6wb_xafiq9`jcFfUX{ zV%oao^`bUgD2;&$N%m?|o%rR}cL- z#DEU8ThjK>J_p*+ga-7V|D0$(huFS%R#TP=!t{5zr z4YQ=iE4#~}J^$+G>;#k4Mb5KZvX~ZERoKo4`mXAc9s-feTI^2;V@S|9-TjI6*n*eoNlRT@z>`zHXE~oI8kqy)iTR7mRqP0`A z0%Oab_$OdytF%SLPhL@bzDLnET}r*=;fRT^>fUm>`}^*YpZkM<#X4I-oN-6HyW*1` z3ccy=Z~sIinyq~v^x5_8Xs++OL-*9sn`2B`wAd3og%GpqW<^sJq{GuJp}R_~0&;JM zd(h!kJFnAiWmj3<+?o-#x*817b{UoYWbJ|puJ6`8V-T1^uIPt;4x%i+bzVVT-e9*JnzWjza z+^6qus)xO7gUydD|f zPPcMH7fRl=nKt9kcYBLROd{ttu9j0zmw86DfH22-kko$iQhG4=a>=G(w&rpPm|@B$ zCjW%zS|^8Bz)&)xGh>m_8N4wR%#aQo^b8*KI-zw@a|L*yhc@|@YPE8Lss?HKcNcUP zX|r>D%LjyWHgU{Xgg-chLYRa+#%gTm6;4=h;MZ;%8ZuWNVri1&&g!h(>gtlmihE&lge%!cnE^$#Q0#kkGNZ>7msGBjks0}P9Oq}sS6Qjz7WO1``2>3-rc<>N zhe;QJWjH$yWozLffhGrcdG>hZBNO*$jnKz$->8Gy=ym88lt{^a&DU?jYw1_O%-6t(w&8kc3o#CUCYd-1Y>0m+l?S9}I3ivOQslN`y9 zIF}X`nSUI47LGU-rO20_=a;*ui030zPWO?B2$GdIVFDO$tT>hFbr}(Z_KoM}P^olMvZ-$R>J+nOgj~kz%=# zhBr(yw!U_3XBnfDe5 zI2=&7n!@y&Raa_zh-GX+jsmA|NR^t3m!RRHHVn#VV7H(aYMZfHX#X82Wlu(MqSHts z;D?+=bVmnjD1b9bcblrVS}TKUQ-+qo_l$KZb~%}WQucDCvRXcoqcLZPBV>`IH=Q|m zo%FeZm`J40If|M&q(K^zLi&NBH+masLU=W$F*k_?`g|r)e|+W#;IL3bR~l^yGh(s_ zJw=}fnq_cNa_=@_xCj;)8k*%HniC&Z;cHltO_U*kAbQ8tts0&+WgdZWstG@78?VKXo4 z6Qhb1JNl|WL1Ni~fDAcXR7z|+7?@)*kVIM*LOP{**^%;ctN#%gtUx%V#dfSXr>uYZ zseuTfc2yJ~TA8MUTEE#@NHKpW0*7ZxgRHi7T2^R=x1S}_pZRH;Y1%e-MRjWEnh$EA z(TA=b$C~cSZuT0Z_}!71pYzx`8Hlu?nbU$7*U3377{tkR7QR+WDlB%cLEsx6|pkO*OfV z3#FDDrEvC~XG>^Rx`&G)YG6SfkBNdRcoRyH1RlgbB1B>^IbK0E7l6yBPP@3qXcl`q zwNVSa5jtqj_@eWAw5FN7@us|axV+BWywH2R_O++dyN${QU_07sqZ+WI(;AruNh6vQ z?~)dlDitU?I>RWJduwqj7q7e~s;Zi!ggd{7d!rUhs&*!qc$t{uxvQd^nEorJ0T#gh z%fFxZUYk63a4jPup7m=&OBB~|6sC1w#%pQ@2(pRB zW8i9|5N5xa=fo)YqMsQT#rwim?8093ZT*ykQ%4l2J5cXgS3e7X`n9cQWt_aXYNhFW z=z6(Lg?hIowFBx!bb7^hjKy(0P?Yy$HCPfQLs~KcW){4|?Z{7{WxKqxwoZ$gss*yb zn2lNl#mB~>nCHkWS98fJ#do~Pcx+?dD5FzsO!wK7nT9rF{9dg=hj&CzHOp;cXIJ~> zzAFb{C+C#5Oq9cW%krwbs>#W|+{q{$VgEB`wI6(GmFk;sDmWQU8`@wDl%;fybJt>7;+*fG&$AdSpt%Q}5q&jVQWU|+6 zp(|&{NUzY^YGaYQ0`|%7)_nv9jRDjjQJvQvWv8E`a^O0D z##}bY`~yGR!?hx`9zg{`d|vOm%LArpiD=SCjnoG1zz03l;wR2}z1c;!qQ+K}vl?*S zMt3BFb**wy-4VVlSZ44zLZn^A)C|o*c57yrpL6}qkN9R7>DGXGYaZ>N3mx28EPZ`# zg97MqsGAmoY|*VtqGBR{^c->bl8pQOXjA>q8%o)gU2oPH(9$T};LX{+*2;oQk~&Mv zFVV^uyv#2J)~+#!{%X9M%(S`I)M-i6Bu&@)eWUtKYG+c#;vL>kWxZ1jko3ulu^|~( ziBAXHf@R#j@|Yp?Vw>Lm#{VzNpW2PtR@mKdH_&Tr!U7)PZL_Es8+G{{t&02=%PpyT zmlHiqzA-}-Y37VH&c6M9+3%a%`CZadeB0JJF906mLXJLsZLakCqb6yhZ40Kc=w1L; zpHBgk&Za&_*`|kw!WmxS8-Cf1rmp2Yixx9fvg)^id*u#w8(u8Xjrc286(SUpLr z8upEF?0`EyfjF9h7}z$NeZ?YPV7ABIrjos74KLDqHmH@7u;^AV4q8Hyo3|LeX;*!Y zjCEkK)LFjW9^Q@IjeG$P=F;iN`07**SD?)nR0Y;m$&GmyE1t}fS*a*u7A9tUP|M}0C+j?DcA3u9*Lcv<$LnT! zsGVJap1oQREt6^~(RB8TIxVJLc|m};rGSikbvb`gEL%WXv$lTgdrsR-yvOAc1TK%OR#r$RmPUUmbhNEsf8Me~@jz;#TF;-r<%_=bav*zk6FN zT*n{|eT)3@z>d3r+U&V#$;I8raM74xjLa*x(<3B*@)hZ9U3^m9fuVcP9j$*T{qrgv z^gut%LvMt5`J4(A=n z1UnNg?&Jw;#{Vu6hcqA@1*II2QBWEH_i_&z$}#tNPxo}sPH}o5BZ57`HwI7gKzki5BYb$`HIi^g75i`|M{1n4$49LnlJg6 zKlzw1`hY(YaUb^#W%ztg_<=7QZ=X&PM`t1cJ{BF%O0bo&=Tjzf4PqcZ5pWF19|6ZN z0q_fdFa6D5{nQWr(=YwVpZwY%{oddG;Q#&8FaF`b{mZZY=zsj% zpZ@IM{m$S1+#mkxuS@0+|LiYH>_7hTKmXvL|Lb4>0C6mWz<~pgohW$lm_UXNPb_T6 z&|ty{6(th12vPqc#f2OnGE}DH1B@SN(3A`V1x3kwC($qqLjl010uTCtSa}jf7?Li3 zXi&Cn!_W;7h8is@rYO-3LXSROigf8Rqe87hH3~r~Qm$CNE(P0_Y1px4$4ZsT6vDN# zV#KyBtCeV4u3MFw#Vc3tQ+0XoCXIXdZ`!$A!>Tii_^8{(fEz!p8a1+0x=o3?z56!l zGBjaO;>m&6 z?=Aj)aNYl5UY{&Ur5{>ii5U%Cn5iZg_V}SeGZG9%mF0M+Vwga?CP)veG0n)nrplHqkUQPB`Z@ zlTJJ3bW={BNPE!EInM<2Of$PgGtD~%^^?#%OX3sEG#N$oO+8I2l+rvAtrO5L8)P&L z5r8pirIJod%_at4gD_4!eOh%;4RU&I%vRexbXGiVt+h}^$#ig5RssCgLDz7tlT%3r zwblREOM5L=R$#&0^jQFjrL$L9D}7BgQQ0&w%bF-?ZOSkEELK`K$u&1tOV_3K+-s?& z*4$bZ?GsIUm!0$4GaIG#SbU*%6tw?9Ym-dbFts<|WBKj1;6fcWv{iih?U&KlTJi%_ zG-2}g7jR(>%`;9LBu!LdOlLb)MO3tB?L! zr?9;q8t1iP-8r<3f8{tqQ(1a&4`|ZagC{Cr;EC`ss3;r;#0MW-al#)LoTtLW2pszK92p?T^!AY0g@zf9J9P-LD-yDX(OQ$_?%Xympal|X19rws< zm)-QzA0J(D%6$hO_24!4J^11)SN(SAkw<;_=6jcZa@jQp{&UA0XTI_G>sWqr8E6>@EJF+r+@Aug0>KK3u!EB^p#zID!V_xnf-RIF2r1aX6`s&C z5oDqMW{ATRHn4{XEMWp`NWlIXa4H4V-v$=o8WgnT9)<7+YBr$+kAXm4z)=6i2R@KR z8e~z6S@dEUx2VN2igAovRD~G9NX9ghk&S0GV;sLYM>x)Ljd!FY9?ST~I_?pTTdac} z1zE;5`caK}{9_^2n8iBiQI3Z^BO(bo$v{qWk#%gNA|+`?K|->VnhYcu@pwm39^)kN z8m(W&Uo2r6hIGU-46~f&_;P7WUha~Yy0m32Y57ZH7Sou=M5ZxoDNJGh z(wELmrZ1bx%V`p`n#Y`GHj7zHSUwY(*GwigfjLZZlJlFl45uw|*~?zesapy9g$r;3 ztfP@EXmMj=+|-7(n6-^lMlpHkCk(?S}LiT?9ySL>%j35o)ari`Rwi&{Uq2GgO5R9IyD=+{ujGpfbP zL8MwGYY3G~4K#C|x72{)(234w;^QcvYYF4jm)uldlsl}`+H-QPu zWy*4VR2^qm*=bI#u634T#VS|7T2*gu)vIR3t6bx%&ZGj9nRxYTHT-S58Q6}zAT?c8koZHRj`E7yWR1Ucf;eQ zFo(N~U2@Ufwr_1AM&w9T6oiStQIN!Msn!B@~ z_;3e3w-HaA-wc8{(>cs_wsU@bgJ<)6dCY#c4WIYy(aw1^ zpbhP4JEuoK-Pwb37TsmxTsqE?hDHUB0Rt(eGP*ZGRTzR01Q`6NLm&kP%wklHCuNuP;_v0cRLX?rNw&t@sLH}ujO z!AwZN;I_1p9c&f>BMcij#*|@Ih?Jz}86N{s80t`ma5-yLfr411{#7x5_4{FuIu@Yv z%`1ofyImK17=Z}%pqB9KT1`Zks?x=9X)z2^!RnI}G5%a=E!^VdLO8*5<*0rCXW`i5 z_k&;{hGVn_l`m0cO@vAyRnyzv5_^_U@4@k$Kdk>@5?9yH?LDoYbKIw@3Oby8`lq17 z%jXlnx6^+Pb!XLT=n`sr(H*w*hM{5Mw_;V+V}*h}pgTf~o!_{2Qh^|RX-#O*0Hx$U zce>Zz?r@iTzAg3jk^AXfdRh~qFhwkpH>*}BFBjj$r1-uwUEl~yJeUw~_=p(_;FJ

yRA3a?cht$-c%d#-J1T?eD4i*?<18vM=_a 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 Ia100lJDih_GXMYp literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image99.gif b/doc/salome/gui/GAUSS/image99.gif new file mode 100644 index 0000000000000000000000000000000000000000..d72c52763cf0885a335e542a485d0f5f26f690f3 GIT binary patch literal 5169 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 M;M1& literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/index.htm b/doc/salome/gui/GAUSS/index.htm new file mode 100644 index 00000000..bc365dfb --- /dev/null +++ b/doc/salome/gui/GAUSS/index.htm @@ -0,0 +1,86 @@ + + + + + +Introduction + + + + + + + + + + + +

Introduction

+ +

This documentation describes the graphical user interface + – GUI – for each functionality concerned by the Code_Aster data viewer + at Gauss points in Salome.

+ + + + diff --git a/doc/salome/gui/GAUSS/info_blue.jpg b/doc/salome/gui/GAUSS/info_blue.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5a58a705553b73f922c4b94493dc4492e7b50f72 GIT binary patch literal 1903 zcmaKoc{mjM8pnUL8HR(g4V8?-m3^%&gDiDq>@lI!Aw!+ev6Il~P+79245KW^k|C92 z%g!-}NHoUUj4-%YW5~%GHFtEM+jIZApWp9!pZ9s+@B2RA-;X!Jn*riyPurdb5GVjd z{sFwNK;jhf*Gqm_+aRCIelC7K#Ou6efVPhC4Y&><01f~+$Cs@D(Qh(9?BrJ3WLM;fg|AGKp+J6K?r_Bcps7PK=^t%430z~kivpU!T;%em;C>P z*9p*qKp9|R5Hx_IAuu$A*8{QufWjbrm){W-0&pY*0w8cG?0XRaK>!m#LJ<(SkT?Jc z7?f}NzkU9b;0Uw;l0T^^A*p-nh?I1Q3!W0i=KmfX!M`xXf0jYeP{5Zf>PiS8 zPf0oZBuIu7cO4OYF)N*==Ms99Hw8raexPU=8kmEd1*%T)_^tz$qtkioq<$|ORC0~- zqUXb^!8G)>;ze>i!>dS$ejW9< zGIBNLRPO6Ze8?5mAK?j{%rw`HIpzuX9WlZ8S647*TxNLSZ_tU*ahFRu9J*G1MQonn zCG=&@EOEy&U-w%++D_X7?8i?jG4G=STTCbw7L2hbnOhY~1G5}iuS)8md5d8>-9Z#v zvC)4(Ga+kvxljP}L(azx&kdBnk&zJou;pPZnxZ^eXe)*}j$NAaSNJjC&YGy#HgoQ* z8%2qrM#HYp-489vBGL5A1}~CyoXR#ba>ZFgO)4%AM@Etg_F5AqVx@be8W-(bSgaBj zzHFkrcDU3hMMPTvoOr9AO~UVkD*m~dH^}q5ZwUHDlLd_GIP#_uOn1i`wPf)1qVtl> zxfvTELhN?|j50|;NFM9ni)mR=IsRmjHjw`NaPik+2V|d^;Pk3?e@cwShl85!c&dBc zQ*CeMPVdq~rfa=46ixl8UXxr+YyDMQCVy@gBJ*~0E-8yNY$O9Phq8Rqae*GWBbOOlc-Xis}M1a)h{^_VL znpyrsXHEVoSiyncc_u2Z$VDaX#!^*7jB_o{Jj z1brZ&FOcqOp)7XcOpnDsq8`dC_I6_koS@`KegwMv+N-fq7JW1dXNFC?p{H8$^Y#V_ z$%wum?~aQSKP;k9RZNlPfsAUoDORfQ?GvAS2)Dw!!O{VW@+a|6%&vrmLWOfi5Y9#~qku*9+!r;!^0xYFRIm5yGp^j4W_Lzr zWC81$n~omUk%i4cL1joUi{U0zh4aPD4>qc~?BHzjnQJ{CJ8H zz^&JZ%4?#oT9r))MOw$=yl=iENCxcs+U;rGbNK808hQGc+3_YughAT9KJpD8Y_@!r zOxH? z=d>iuXipn<l zHHiKf%Iul|PJQZA + + + + +Loading of previously saved data + + + + + + + + + + + +

Loading previously saved data

+ +

Mutually, Salome provides an open command from:

+ +

 

+ +
    + +
  • The menu bar: + File ► Open

  • +
+ +

 

+ +

It opens up a dialog to browse the directory structure and to select + an HDF Study file.

+ +

 

+ +

+ +

 

+ +

Fig. 63 : Salome ‘Open’ dialog

+ +

 

+ +

Once selected, user presses the ‘Open’ button to load the Study in the + Salome session.

+ +

A new document is created and the Study is loaded within this clear + document.

+ +

 

+ + + + diff --git a/doc/salome/gui/GAUSS/making_an_avi_clip.htm b/doc/salome/gui/GAUSS/making_an_avi_clip.htm new file mode 100644 index 00000000..c30992f6 --- /dev/null +++ b/doc/salome/gui/GAUSS/making_an_avi_clip.htm @@ -0,0 +1,213 @@ + + + + + +Making an AVI clip + + + + + + + + + + + +

Making an AVI clip

+ +

In order to satisfy all possible requests for video recording, + the functionality should be implemented as a background task. In this + case, user can start the video recording and manage it as he want. The + functionality will be available at any time for all contents of the 3D + scene. So, video recording of animation or segmentation will be performed + in the same way.

+ +

 

+ +

User can manage the video recording by using the following GUI controls:

+ +

 

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

+

Start button – starts the video recording session into the defined output + file. Corresponding file dialog will be proposed first in order to define + the output file.

+

+

Play button  – + continue the video recording into previously defined output file.

+

+

Pause button – pause the video recording.

+

+

Stop button – stop the video recording.

+ +

 

+ +

Fig. 32 : Video recording GUI controls

+ +

 

+ +

Those video recording buttons will be grouped into one corresponding + toolbar. The toolbar will have three following sates.

+ +

 

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

+

Disable video recording state. The animation is not active.

+

In order to start the video recording, button should + be pressed.

+

+

Play video recording state. The animation is activated and all content + of the VTK view is recorded into defined video file.

+

It is possible to pause the video recording by pushing the button .

+

Button stops the session of the video recording.

+

+

Pause animation state. The animation is active but the video recording + is paused.

+

In order to continue the video recording button should + be pushed.

+

Button stops the session of the video recording.

+ +

 

+ +

Fig. 33 : Video recording toolbar states.

+ +

 

+ +

Each VTK view will have its own video recording toolbar. So, in segmentation + mode video recording of main view and segmented view will be managed separately.

+ + + + diff --git a/doc/salome/gui/GAUSS/managing_configurations.htm b/doc/salome/gui/GAUSS/managing_configurations.htm new file mode 100644 index 00000000..1f4e1b95 --- /dev/null +++ b/doc/salome/gui/GAUSS/managing_configurations.htm @@ -0,0 +1,257 @@ + + + + + +Managing configurations + + + + + + + + + + + +

Managing configurations

+ +

A new command is introduced, in the frame of this project, + to allow the user to memorize the current configuration and to be able + to restore it later on, even in another session.

+ +

 

+ +
    + +
  • From a 3D view, the popup menu proposes to ‘Store current configuration’.

  • +
+ +

 

+ +

+ +

 

+ +

Fig. 39 : 3D View popup menu

+ +

 

+ +

If not already existing, this action creates a new entry ‘Configurations’, + as a child of root ‘Post-Pro’ + node, in the tree browser of the study to store all current parameters.

+ +

 

+ +

Then a new child is added, with an automatic name in the form of ‘Config:X’ where X is an incremental + integer. All parameters of the current configuration are stored at this + node

+ +

 

+ +
+ +

 

+ +

+ +

 

+ +

Fig. 40 : Study browser with ‘Configurations’ node

+ +

 

+ +

This new ‘Configurations’ node will be stored (resp. retrieved) within + (from) the Study document by the use of standard SALOMEDS attribute. Persistence + will be managed in the same way as for Cameras.

+ +

 

+ +

Note:

+ +

Configurations are independent + from Segmentation cursors and Cameras. Therefore, applying a registered + configuration will apply configuration parameters in terms of Camera, + Segmentation cursor and Gauss point presentation. From this time, user + can freely navigate within the browser to display another timestamp or + variable. The view will be updated accordingly without changing the Camera + and the Segmentation cursor. This navigation within the tree will also + not affect the registered parameters of the configuration until user decides + to store them.

+ +

 

+ +

Edition of this last item – ‘Config:X’ + – through a right-mouse button click opens the following popup menu:

+ +

 

+ +

+ +

 

+ +

Fig. 41 : ‘Config’ entry popup menu

+ +

 

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

Command

+

Purpose

+

Rename

+

Allows the user to redefine the name of the element. A standard dialog + in Salome is opened to realize the input.

+

Edit / Apply

+

Restore all registered parameters: camera and presentations in the current + main 3D view.

+

If a cursor is stored, then the ‘Segmentation’ command (see Segmentation) + is activated with the cursor parameters defined in the configuration (open + a segmentation viewer and display the segmentation dialog box for edition).

+

If a selection is active, then the ‘Picking’ command (see Picking) + is activated and the selected point defined in the configuration is highlighted.

+

Erase

+

Erase the elements from the 3D view.

+

Delete

+

Erase the elements from the 3D view and remove it from the study browser.

+ +

 

+ + + + diff --git a/doc/salome/gui/GAUSS/navigation_using_the_keyboard.htm b/doc/salome/gui/GAUSS/navigation_using_the_keyboard.htm new file mode 100644 index 00000000..c6e990a6 --- /dev/null +++ b/doc/salome/gui/GAUSS/navigation_using_the_keyboard.htm @@ -0,0 +1,177 @@ + + + + + +Navigation using the keyboard + + + + + + + + + + + +

Navigation using the keyboard

+ +

Salome does not provide any + way to navigate within the scene using certain keys of the keyboard. Thus + the following actions will be created.

+ +

 

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

Action

+

Key

+

Movement

+

Dynamic rotation

+

[CTRL] key +

+

[ ], [ ],

+

[ ], [ ]

+

Rotation centred on the focal point

+

Dynamic panning

+

[ ], [ ],

+

[ ], [ ]

+

+

Translation in any direction

+

Dynamic zoom

+

[PageUp],

+

[PageDn]

+

  Increase + or decrease the zoom ratio

+

Speed increment

+

[ + ],

+

[ - ]

+

Increase (resp. decrease) by 1 the speed increment used for the movement + previously defined

+ +

 

+ +
    + +
  • This support will be active at any time during + a VISU session.

  • +
+ +

 

+ + + + diff --git a/doc/salome/gui/GAUSS/navigation_using_the_mouse.htm b/doc/salome/gui/GAUSS/navigation_using_the_mouse.htm new file mode 100644 index 00000000..7a1d35a9 --- /dev/null +++ b/doc/salome/gui/GAUSS/navigation_using_the_mouse.htm @@ -0,0 +1,230 @@ + + + + + +Navigation using the mouse + + + + + + + + + + + +

Navigation using the mouse

+ +

To simplify the explanation of actions connected to the + mouse, we define the following conventions:

+ +

 

+ +

+ +

 

+ +

Fig. 34 : Mouse buttons convention

+ +

 

+ +

Salome standard

+ +

The mouse is supported as a standard pointer in Salome. Default actions, + for a 3 mouse buttons are connected as follows:

+ +

 

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

Action

+

Command

+

Movement

+

Dynamic rotation

+

[CTRL] key + MB3

+

Rotation centred on the focal point

+

Dynamic panning

+

[CTRL] key + MB2

+

+

Translation in any direction

+

Dynamic zoom

+

[CTRL] key + MB1

+

 Increase + or decrease the zoom ratio

+ +

 

+ +

New capability

+ +

A new connectivity free + of extra keyboard keys is introduced in the frame of this project + and will be defined as ‘Mouse only’ convention:

+ +

 

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

Action

+

Command

+

Movement

+

Dynamic rotation

+

MB1

+

Rotation centred on the focal point

+

Dynamic panning

+

MB2

+

+

Translation in any direction

+

Dynamic zoom

+

MB1 + MB2

+

 Increase + or decrease the zoom ratio

+ +

 

+ +

 

+ +

 

+ + + + diff --git a/doc/salome/gui/GAUSS/navigation_using_the_spacemouse.htm b/doc/salome/gui/GAUSS/navigation_using_the_spacemouse.htm new file mode 100644 index 00000000..27d05366 --- /dev/null +++ b/doc/salome/gui/GAUSS/navigation_using_the_spacemouse.htm @@ -0,0 +1,272 @@ + + + + + +Navigation using the spacemouse + + + + + + + + + + + +

Navigation using the spacemouse

+ +

Salome does not provide any way to navigate within the + scene using a spacemouse. Thus the support of this new pointer will be + added and managed as defined below.

+ +

 

+ +

The spacemouse introduces a local coordinate system, and 6 degrees of + freedom, which are independent from the 3D view coordinate system. They + are defined as follows:

+ +

 

+ +

+ +

 

+ +

Fig. 35 : Spacemouse local co-ordinate system

+ +

 

+ +

Move 3D models and scenes on screen based on the corresponding direction + the user moves the cap on the controller.

+ +

The commands available using the spacemouse are then defined as follows:

+ +

 

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

Action

+

Move

+

Description

+

Dynamic rotation

+

+

Tilt the controller head left + and right or forward and backward to rotate accordingly (X-Z axis).

+

 

+

Note: + Left/right capability will be disabled.

+

+

Twist clockwise and counterclockwise + to rotate the model accordingly (Y-axis)

+

Dynamic panning

+

+

Pull up and + push down to move the model up and down.

+

Move left and right + to move the model left and right.

+

Dynamic zoom

+

+

Push forward or pull + backwards to respectively decrease or increase the zoom ratio.

+ +

 

+ +
    + +
  • This support will be active at any time during + a VISU session.

  • +
+ +

 

+ +

Buttons of the spacemouse are also used to change the magnification + for Gauss points:

+ +

 

+ +

+ +

 

+ +

Fig. 36 : Spacemouse buttons control

+ +

 

+ +

By default, buttons are defined as follow, but user can change them + in the preferences:

+ +

 

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

Button

+

Description

+

Button 1

+

Decrease by 1 the speed increment used for the keyboard (same as [-] + key)

+

Button 2

+

Increase by 1 the speed increment used for the keyboard (same as [+] + key)

+

Button 10

+

Divide the current magnification by the magnification ratio

+

Button 11

+

Multiply the current magnification by the magnification ratio

+

Button Star

+

Toggle button to switch to dominant or combined movements

+ +

 

+ +

 

+ + + + diff --git a/doc/salome/gui/GAUSS/picking_general.htm b/doc/salome/gui/GAUSS/picking_general.htm new file mode 100644 index 00000000..0c699630 --- /dev/null +++ b/doc/salome/gui/GAUSS/picking_general.htm @@ -0,0 +1,166 @@ + + + + + +Picking General + + + + + + + + + + + +

General

+ +

The existing picking functionality + in Salome is available on both meshes element and time stamps. It can + be activated either from:

+ +

 

+ +
    + +
  • The menu bar: Selection + ► Selection Info

  • + +
  • The popup menu opened on a time stamp of the browser + (see Gauss + Points – Geometry (new presentation)), item ‘Selection + Info’

  • + +
  • The popup menu opened on a presentation in the + 3D view, item ‘Selection Info’

  • +
+ +

 

+ +

All these actions open a dialog box that drives the functionality.

+ +

 

+ +

+ +

 

+ +

Fig. 44 : Standard Salome picking on a field

+ +

 

+ +

The dialog allows user to graphically select an element and displays + its corresponding information.

+ +

 

+ +

+ +

 

+ +

Fig. 45 : Standard Salome picking on a mesh

+ +

 

+ +

Selection is possible on:

+ +

 

+ +
    + +
  • Mesh element: node, edge, face and volume

  • + +
  • Fields elements: cell, edge of cell

  • + +
  • Graphic presentation of an object (actor)

  • +
+ +

 

+ +

When moving the mouse in the graphic area, any suitable element – that + is, corresponding to the defined ‘filter’ – is pre-highlighted (or detected) + and displayed in shading for more convenience to the end user. When user + presses the left-mouse button to select the detected element, it is redisplayed + in another color, and the information related to the selection is refreshed + in the dialog box, in the form of an array of data.

+ +

 

+ +

Since this behaviour does not fully correspond to EDF expectation, the + picking function for results at Gauss + point and Gauss point (geometry) + will be redefined as described in the following paragraphs.

+ +

 

+ + + + diff --git a/doc/salome/gui/GAUSS/purple_right_sm.jpg b/doc/salome/gui/GAUSS/purple_right_sm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cef046c9258ad47225a9c5730c8b24fe16075f43 GIT binary patch literal 439 zcmex=?vmvA^3c^Ut<8 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/robohhre.lng b/doc/salome/gui/GAUSS/robohhre.lng new file mode 100644 index 00000000..297538b0 --- /dev/null +++ b/doc/salome/gui/GAUSS/robohhre.lng @@ -0,0 +1,101 @@ +[GlossaryTab] +TabCaption=&Glossary +TermCaption=&Term +DefinitionCaption=&Definition For: + +[BrowseSequence] +PreCaption=Previous +PreTooltip=Previous Topic +NextCaption=Next +NextTooltip=Next Topic +BlockTooltip=Select Block + +[Common] +Contents=Contents +Index=Index +Search=Search +Glossary=Glossary +Logo/Author=Powered By +Show=Show +Hide=Hide +SyncToc=SyncToc +Prev=<< +Next=>> +Disabled Prev=<< +Disabled Next=>> +Seperate = | + +[WebHelp] +Cancel=Cancel +CantOpenURLorFile=Can't open URL or file +CompletingContents=Completing Contents... +Display=Display +Term=Term: +Definition=Definition: +Done=Done +Find=Find +IndexInputPrompt=Type in the keyword to find: +RelateTopicListPrompt=Click a topic, then click Display. +LoadingData=Loading data, please wait... +LoadingContents=Loading contents, please wait... +LoadingContentsData=Loading, click here to cancel... +LoadingFTS=Reading Search Data... +LoadingIndex=Loading Index... +LoadingTOCItem=Loading Table of Contents: +Searching=Searching... +FtsInputPrompt=Type in the word(s) to search for: +TopicsFound=Topics Found +BrowserLimitedMessage=Your browser does not support frames. We recommend that you update your browser to a version that supports frames. +SuggestViewNoFrameMessage=To view the Help system without frames click on this +SuggestViewNoFrameMsg2=hyperlink. +TopicsNotFound=No Topics Found. +CantSearch=Cannot search for that phrase. +JS_alert_appletNotLoad = Unable to load applet. If you are using an old version of Netscape, the prefs.js file needs to be edited. +JS_alert_colorlimitation=WebHelp has detected that your display is set to 16 colors. For full WebHelp support, please set your display to use 256 or more colors. +Blank_topic_text=This topic was created by WinHelp Project Conversion Wizard, and is the destination of a missing topic or broken hyperlink. +JS_alert_ProjectLoadingFail=Could not load correctly, please click Refresh. +JS_alert_cantLoadProject=Can't load project: +JS_alert_ErrorInLoading=Error in Loading navigation component. Please regenerate WebHelp. +IndexBtnText=Go +FtsBtnText=Go +ToolBarSearchBtnText=Go +InTopicSearchBtnText=Go +SearchLabel=Search +SearchPrompt=- Search - +PreTooltip=Previous Topic +NextTooltip=Next Topic +WebSearch=WebSearch +SyncTocTooltip=Sync TOC +Book=Book +Page=Page +Remote_Page=Remote Page +Show_Navigation_Component=Show Navigation Component +Hide_Navigation_Component=Hide Navigation Component +nls_edit_label=Type in your question: +nls_button_go_hint=Go Search +nls_button_go_text=Go +nls_body_instruction=Enter your question in the text box above, then click GO. +nls_body_empty=Sorry, we were unable to find a good answer for your question. +IndexSelectTopicTitle=Select a Topic +IndexSelectTopicLabel=Select a topic, then click Display +IndexSelectTopicError=Please select a topic. +IndexAlphabetBookmarks=ABCDEFGHIJKLMNOPQRSTUVWXYZ +MergeError1=The merged Help system +MergeError2=is using a different language from the master Help system, which will cause the index and full-text search functionality to be disabled in the merged Help system. +PoweredBy=Powered by +GeneratedBy=Generated by +Author=Author +About=About +Print=Print + +[PrintedDoc] +TableOfContents=Table Of Contents +TitlePage=Title Page +ChapterFileNamePrefix=Chapter_ +TitlePageFileName=Chapter__Title_Page.doc +CrossReferencePrefix=See +GlossaryHeadingStyleName=Glossary Heading +GlossaryTermStyleName=Glossary Term +GlossaryDefinitionStyleName=Glossary Definition +TitlePageTitleStyleName=Title Page Title +TocPageTitleStyleName=Table of Contents Page Title diff --git a/doc/salome/gui/GAUSS/salome-visu_preferences_display_results.htm b/doc/salome/gui/GAUSS/salome-visu_preferences_display_results.htm new file mode 100644 index 00000000..d4cbfc9a --- /dev/null +++ b/doc/salome/gui/GAUSS/salome-visu_preferences_display_results.htm @@ -0,0 +1,135 @@ + + + + + +SALOME-VISU preferences display results + + + + + + + + + + + +

SALOME-VISU preferences

+ +

VISU defines a few additional parameters to define default + display modes.

+ +

 

+ +

Commands are defined in the ‘Preferences + ► Post-pro’ menu of the + VISU module:

+ +

 

+ +
    + +
  • Post-pro ► + Scalar Bar    Displays + a dialog to customize default scalar bar presentation

  • + +
  • Post-pro ► + Sweeping     Displays + a dialog to customize default sweeping parameters

  • +
+ +

 

+ +

New options will be added to refine default mode applicable for results + at Gauss points:

+ +

 

+ + + +

 

+ +
    + +
  • Post-pro ► + Gauss Points ► Scalar Bar  Displays a dialog + to customize default parameters for scalar bars used for display of results + at Gauss points. It is the same dialog as the one defined on Fig. + 18 : Scalar bar configuration

  • +
+ + + + diff --git a/doc/salome/gui/GAUSS/salome_visu_preferences.htm b/doc/salome/gui/GAUSS/salome_visu_preferences.htm new file mode 100644 index 00000000..63b35208 --- /dev/null +++ b/doc/salome/gui/GAUSS/salome_visu_preferences.htm @@ -0,0 +1,109 @@ + + + + + +SALOME-VISU preferences + + + + + + + + + + + +

Salome-Visu preferences

+ +

VISU defines a few additional parameters to define default + parameters.

+ +

 

+ +

The command is defined in the ‘Preferences + ► Post-pro’ menu of VISU module:

+ +

 

+ +

Click Post-pro ► Full MED loading + Toggle option: load + MED file at once or when needed

+ +

 

+ +

When this option is checked, the MED file is fully loaded in the study, + so that no additional physical access to the MED file are needed to go + on the session.

+ +

 

+ +

Reversibly, when unchecked, the MED file is loaded on demand. This is + the default behaviour in SALOME and recommended for big files to optimize + memory usage.

+ + + + diff --git a/doc/salome/gui/GAUSS/salome_visu_preferences_navigation_within_the_scene.htm b/doc/salome/gui/GAUSS/salome_visu_preferences_navigation_within_the_scene.htm new file mode 100644 index 00000000..f559c04c --- /dev/null +++ b/doc/salome/gui/GAUSS/salome_visu_preferences_navigation_within_the_scene.htm @@ -0,0 +1,191 @@ + + + + + +Salome-Visu preferences Navigation within the scene + + + + + + + + + + + +

Salome-Visu preferences

+ +

The VISU preferences are modified as follow:

+ +

 

+ +
    + +
  • Post-pro ► + Navigation ► Pointer    Displays + a dialog to configure the pointer to use.

  • +
+ +

 

+ +

+ +

 

+ +

Fig. 42 : Navigation pointers configuration dialog

+ +

 

+ +
    + +
  • Mouse: + allows defining type of navigation provided by the mouse.

  • + +
      + +
    • Salome Standard (default)

    • + +
    • Keyboard free

    • +
    +
+ +

 

+ +
    + +
  • Keyboard: + defines the value of the increment applied when user uses keyboard keys + to navigate within the 3D scene. Only one value is defined for all kind + of movement.

  • + +
      + +
    • Translation (panning): value understood in + millimetres.

    • + +
    • Rotation: value understood in degrees.

    • + +
    • Zoom: value understood in millimetres (focal + distance).

    • +
    +
+ +

 

+ +
    + +
  • Spacemouse: + defines buttons for:

  • + +
      + +
    • Changing the speed increment when keyboard + navigation is used

    • + +
    • Changing the Gauss points magnification

    • + +
    • Filter the spacemouse movement (dominant or + combined)

    • +
    +
+ +

 

+ +

Choose Post-pro ► Navigation + ► Camera movement    Displays + a dialog to customize the displacement between 2 cameras.

+ +

 

+ +

+ +

 

+ +

Fig. 43 : Camera movement configuration dialog

+ +

 

+ +
    + +
  • Angular step: + allows user to define the angular step (in degree – 2 by default) used + to compute the number of intermediary positions for the camera during + a move (this number of intermediary positions corresponds to the parameter + to give to vtkRenderWindowInteractor::FlyTo() VTK function).

  • +
+ +

 

+ + + + diff --git a/doc/salome/gui/GAUSS/salome_visu_preferences_picking.htm b/doc/salome/gui/GAUSS/salome_visu_preferences_picking.htm new file mode 100644 index 00000000..52b718d3 --- /dev/null +++ b/doc/salome/gui/GAUSS/salome_visu_preferences_picking.htm @@ -0,0 +1,178 @@ + + + + + +Salome-Visu preferences picking + + + + + + + + + + + +

Salome-Visu preferences

+ +

The ‘Preferences‘ + menu of VISU is modified as follow:

+ +

 

+ +

Choose Post-pro ► Gauss Points + ► Picking    Displays + a dialog to customize the picking parameters.

+ +

 

+ +

Description + of the dialog and associated parameters:

+ +

 

+ +
    + +
  • Height of the + pyramid: define the length of each of the 6 pyramids of the cursor. + The cursor is dynamically generated so that apexes of each pyramid touch + the point sprite boundary, and height of pyramid is fixed.

  • +
+ +

 

+ +

+ +

 

+ +

Fig. 49 : Definition of the picking cursor ‘height’ parameter

+ +

 

+ +

+ +

 

+ +

Fig. 50 : Picking configuration dialog

+ +

 

+ +
    + +
  • Information window: + allows defining the transparency + (from 0% = opaque to 100% = transparent) and position + of the windows. Possible values for position are:

  • + +
      + +
    • Centred below the point

    • + +
    • Top-left corner of the 3D view

    • +
    +
+ +

 

+ +
    + +
  • Zoom at first + selected point: This value is used to define the focal distance + at the first selected point (at the end of the movement of the camera). + This value is a ratio that will be multiplied by the current zoom value.

  • +
+ +

 

+ +
    + +
  • Picking + optimisation: This section will be implemented only if the implementation + of the picking function is based on vtkPointLocator + functions. No parameters are needed if implementation is based on vtkPointPicker. (see Picking + for more details).

  • +
+ +

 

+ +

Both parameters are used + to customize the data structure of the searching underlying functionality.

+ +

 

+ + + + diff --git a/doc/salome/gui/GAUSS/segmentation_general.htm b/doc/salome/gui/GAUSS/segmentation_general.htm new file mode 100644 index 00000000..8398b6a3 --- /dev/null +++ b/doc/salome/gui/GAUSS/segmentation_general.htm @@ -0,0 +1,109 @@ + + + + + +Segmentation General + + + + + + + + + + + +

General

+ +

In Salome, the SMESH module defines a function to inspect + the mesh quality by cutting the mesh by a plane that cuts the space in + 2 half-spaces.

+ +

 

+ +

Besides, VISU does not define such a function so that the segmentation + for results at Gauss points consists in defining a new behaviour.

+ +

 

+ +

Naming convention

+ +

 

+ +

The following naming convention for segmentation cursors has been established:

+ +

 

+ +

Simple segmentation (box) is named: ‘Plane + Segmentation’

+ +

 

+ +

Advanced segmentation (sphere) is named: ‘Sphere + Segmentation’

+ + + + diff --git a/doc/salome/gui/GAUSS/specific_additional_commands_for_fields_items.htm b/doc/salome/gui/GAUSS/specific_additional_commands_for_fields_items.htm new file mode 100644 index 00000000..cc5c6968 --- /dev/null +++ b/doc/salome/gui/GAUSS/specific_additional_commands_for_fields_items.htm @@ -0,0 +1,232 @@ + + + + + +Specific additional commands for Fields items + + + + + + + + + + + +

Specific additional commands for Fields items

+ +

In Description of commands, + we introduced a number of possible actions applicable on Families + or Groups items of the tree. When + applied to a Fields presentation, 4 additional options are possible.

+ +

 

+ +

+ +

 

+ +

Fig. 27 : VISU standard fields presentation popup menu

+ +

 

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

Command

+

Purpose

+

Edit

+

Edition of presentation display mode.

+

This option will be extended to the + new Gauss point mode.

+

Sweep

+

Displays a pseudo-animation of field presentation at a given time.

+

This option will not + be extended to the new Gauss point mode.

+

Selection Info

+

Display a dialog to analyse the value of certain data picked in the + 3D view.

+

This option will be extended to the new + Gauss point mode but in a different way.

+

Same As

+

Duplicate the presentation of the selected field at the same level of + the tree

+

This option will not + be extended to the new Gauss point mode.

+ +

 

+ +

In case of results at Gauss points fields, + the popup will have the following items:

+ +

 

+ +

+ +

 

+ +

Fig. 28 : Results at Gauss point popup menu

+ +

 

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

Command

+

Purpose

+

Edit

+

Activate the dialog corresponding to the results at Gauss points presentation + and allows user to modify current parameters.

+

Same As

+

This option will be disabled + in the case of results at Gauss points.

+ +

 

+ +
    + +
  • The ‘Selection Info’ + equivalent function will be described in the Picking + chapter.

  • +
+ +

 

+ + + + diff --git a/doc/salome/gui/GAUSS/webhelp.cab b/doc/salome/gui/GAUSS/webhelp.cab new file mode 100644 index 0000000000000000000000000000000000000000..b942f642f9b003eeb7959f3378d4681fd302ed68 GIT binary patch literal 89619 zcmaf)Wmp_o(zbDT5AN<3+}+)SySrO(cbDJ}!QEW~1lQp1u7U9N>}KYjoiEwt2iJ(hGtg^5e5a0_{7x<3{AliR@2Lb{G1_sjk`5YYy2nY%Y7)TrB=L>b$YNUbw5Iu=_KT1Xv&-Yt`T43I>i&f7Kof8VKlz{%=_oJ1Y}g3(vpsIRJ@a z`TygRKg;)LVSZ*w1`x>cf5HDOija$iweeq0=mA!U*1vc1rPPoKaSeZBO+*Q zVDJ1_G)91Ewgdi)m6D0Eg`r^%ms0yxmf{%^E`f$e`fV1ok!^2zz1CO;kA0QRe{;y1L4iMz9)qlv*!mJJY0 zQQfat7iVWXTLl*JtRb#xT9b$0al$x#5h+U3J9I57h&6G>+i zn|}%UCrtJZ(5GI01v@+a!~YM!zVo01bo{f4|8+3LoSps_<}qMDxX6ExDO>&3f3?7Y zfJo_nfr?w({lj@UVCQ_9e~mgh88~|U5dkUF&#ZO_6t-}(CCk5u54jz^>fu70O}(CD^%Fr#n#HiSj52jPgTwXSPhB)!Tv*I3;>)? z^1s+f+M51(U@2jMfOMpO#r|==g$<0%O@2l_47gf?RDMO;8k@NPV@omsMV9{8Jn`>K z{VzR8{sI3@5lR3-?%Dos)qm9ZkN*DN=~u9vi_QOEyLAL0AU2m@;4%ibW-fsAer5&< z&<|?RuehIw?C%|Jf(Qr*JLJE>KNr0LAO|JC;QnZ7$|lav7Pe+T(KkS6UMc$p3b?4O z|9L3Q0hL{@{Uz*V=i+E&B4c6rb6pP%>SDISI7Pt04zG7*{%MHvord8qfw*+%vzVf=Kdip9zgoU*nkcDXQNTE zGy0pX=m0a5F7@xRza891fUYC|X#W3PQB_Gs%);740x;iN|CM?m01V{+742kV{KsDX zxu<}M6GG^}aDR@!RsfNLi~R!phxWq({m@?Jmz<-si-GmuySy3TP(5k>AM5OBV&V#D zS33W?v;pG#8RQTkX?@-Q!YThtQ9tQ^fK18tenBf+7+M3=ENl*#`cwd}e)0}RKtM;P zzu^C1{>bhh(dYnBt+9Xee~j{gG5*i_Q|HeoKbIy4>{-+JuTj8_^OJ%{1_Jsv|6A(s z6$=4SNBh4;rA<5}{~Fhf0d=rD`Yo&Sx9)8V=&rMuzeUymhWY|h68!#a6maGJ>mK`= z*E|621_KBTpxA#F>QD4ih*FDzZj3#~sp|Fq#H zo5}i$E+w5u5!5cLMGu|_B7~Tm(X@nNc|~b)T@YO;DXWCwGRYaj?Ht-3B-?v*im)$Y zp>GjNmn6(j}@3!2LltuTa;uvtvahKcGV^@e$ z1*a#vUc1nV^xXAD#os2{_-!G%1G6$#KEPeGgZ1}5lEY`kU4TKNVQrFJ>6;JIgT)Xg z2vLmZRvOxQt|x1}Ds1?wmO<3#QW9L}rU_a^zwcb9DHAJUKr)9u687ZyEJ!s@KIbIj zq*dEqyIIu+v8Nz5iXK$d=t_+b@zf?#3m&f`j4t@Kf9{juJPLOU5)Q@?wwc&n-iU7} znWiB!Z6QkJJ9A#oH&dPGB5bx$v%ONvk6%C zRtcog#07&T_>V#6WeIUYr}<%ExU0H{A2{5%P<{bp4J{(KuYs&w>%vY@y)XK~ zWMJ(e4I5>M=97LX3IrLO8a1-4hydgSW-wbCXi<;_ec&?6)O#M>nH`#@FvPxnxVtCT zQh&!jjnU2P3>o{z^&0%xC!hXjn6c<^`l^;T8p%`*6M075Fx)A9d=-|`HVxoHB?`Gy zZwPQf?A0?*dws@pe^Iy;t>qFLeE1N^&*LM|>^|KLg}q7|LZvANkjg_s=!3ms;>H@n z%;iPBmpW}J`yȲ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

oXOQ}Ge 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

3mV47(J-nnng03vOv>=_>hgK# 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

jXOi6?t#$#G}IAv2Hl%J5%3!6tRS8@BUs?+ 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 S;Xri<|BOHhBg2fJ@%{&*t^2zG literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/whcsh_home.htm b/doc/salome/gui/GAUSS/whcsh_home.htm new file mode 100644 index 00000000..7a1ac9d2 --- /dev/null +++ b/doc/salome/gui/GAUSS/whcsh_home.htm @@ -0,0 +1,600 @@ + + + + + + \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whcshdata.htm b/doc/salome/gui/GAUSS/whcshdata.htm new file mode 100644 index 00000000..c50f91ce --- /dev/null +++ b/doc/salome/gui/GAUSS/whcshdata.htm @@ -0,0 +1,88 @@ + + +Gauss Points Viewer + + + + + + + + + + diff --git a/doc/salome/gui/GAUSS/whdata/whftdata.js b/doc/salome/gui/GAUSS/whdata/whftdata.js new file mode 100644 index 00000000..071ae6fc --- /dev/null +++ b/doc/salome/gui/GAUSS/whdata/whftdata.js @@ -0,0 +1,25 @@ +// WebHelp 5.10.001 +var gTEA = new Array(); +function aTE(sTopicTitle, sTopicURL) +{ + var len = gTEA.length; + gTEA[len] = new topicEntry(sTopicTitle, sTopicURL); +} + +function topicEntry(sTopicTitle, sTopicURL) +{ + this.sTopicTitle = sTopicTitle; + this.sTopicURL = sTopicURL; +} + +function window_OnLoad() +{ + if (parent && parent != this) { + if (parent.putFtsTData) + { + parent.putFtsTData(gTEA); + } + } +} + +window.onload = window_OnLoad; \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whdata/whftdata0.htm b/doc/salome/gui/GAUSS/whdata/whftdata0.htm new file mode 100644 index 00000000..47a03180 --- /dev/null +++ b/doc/salome/gui/GAUSS/whdata/whftdata0.htm @@ -0,0 +1,53 @@ + + + + + + + + + + + diff --git a/doc/salome/gui/GAUSS/whdata/whfts.htm b/doc/salome/gui/GAUSS/whdata/whfts.htm new file mode 100644 index 00000000..d89f173d --- /dev/null +++ b/doc/salome/gui/GAUSS/whdata/whfts.htm @@ -0,0 +1,21 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whdata/whfts.js b/doc/salome/gui/GAUSS/whdata/whfts.js new file mode 100644 index 00000000..2b667869 --- /dev/null +++ b/doc/salome/gui/GAUSS/whdata/whfts.js @@ -0,0 +1,40 @@ +// WebHelp 5.10.001 +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/GAUSS/whdata/whfwdata.js b/doc/salome/gui/GAUSS/whdata/whfwdata.js new file mode 100644 index 00000000..e9e8bc6c --- /dev/null +++ b/doc/salome/gui/GAUSS/whdata/whfwdata.js @@ -0,0 +1,37 @@ +// WebHelp 5.10.001 +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/GAUSS/whdata/whfwdata0.htm b/doc/salome/gui/GAUSS/whdata/whfwdata0.htm new file mode 100644 index 00000000..a4f6334f --- /dev/null +++ b/doc/salome/gui/GAUSS/whdata/whfwdata0.htm @@ -0,0 +1,267 @@ + + + + + + + + + + + diff --git a/doc/salome/gui/GAUSS/whdata/whfwdata1.htm b/doc/salome/gui/GAUSS/whdata/whfwdata1.htm new file mode 100644 index 00000000..c843a0ac --- /dev/null +++ b/doc/salome/gui/GAUSS/whdata/whfwdata1.htm @@ -0,0 +1,259 @@ + + + + + + + + + + + diff --git a/doc/salome/gui/GAUSS/whdata/whfwdata2.htm b/doc/salome/gui/GAUSS/whdata/whfwdata2.htm new file mode 100644 index 00000000..fbb15f84 --- /dev/null +++ b/doc/salome/gui/GAUSS/whdata/whfwdata2.htm @@ -0,0 +1,258 @@ + + + + + + + + + + + diff --git a/doc/salome/gui/GAUSS/whdata/whfwdata3.htm b/doc/salome/gui/GAUSS/whdata/whfwdata3.htm new file mode 100644 index 00000000..2cb202a7 --- /dev/null +++ b/doc/salome/gui/GAUSS/whdata/whfwdata3.htm @@ -0,0 +1,102 @@ + + + + + + + + + + + diff --git a/doc/salome/gui/GAUSS/whdata/whgdata.js b/doc/salome/gui/GAUSS/whdata/whgdata.js new file mode 100644 index 00000000..77e0107f --- /dev/null +++ b/doc/salome/gui/GAUSS/whdata/whgdata.js @@ -0,0 +1,26 @@ +// WebHelp 5.10.001 +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/GAUSS/whdata/whglo.htm b/doc/salome/gui/GAUSS/whdata/whglo.htm new file mode 100644 index 00000000..62e94498 --- /dev/null +++ b/doc/salome/gui/GAUSS/whdata/whglo.htm @@ -0,0 +1,15 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whdata/whglo.js b/doc/salome/gui/GAUSS/whdata/whglo.js new file mode 100644 index 00000000..e0519afc --- /dev/null +++ b/doc/salome/gui/GAUSS/whdata/whglo.js @@ -0,0 +1,34 @@ +// WebHelp 5.10.001 +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/GAUSS/whdata/whidata.js b/doc/salome/gui/GAUSS/whdata/whidata.js new file mode 100644 index 00000000..9f0eb15e --- /dev/null +++ b/doc/salome/gui/GAUSS/whdata/whidata.js @@ -0,0 +1,89 @@ +// WebHelp 5.10.001 +// 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/GAUSS/whdata/whidx.htm b/doc/salome/gui/GAUSS/whdata/whidx.htm new file mode 100644 index 00000000..0a0deedd --- /dev/null +++ b/doc/salome/gui/GAUSS/whdata/whidx.htm @@ -0,0 +1,15 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whdata/whidx.js b/doc/salome/gui/GAUSS/whdata/whidx.js new file mode 100644 index 00000000..e0519afc --- /dev/null +++ b/doc/salome/gui/GAUSS/whdata/whidx.js @@ -0,0 +1,34 @@ +// WebHelp 5.10.001 +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/GAUSS/whdata/whtdata.js b/doc/salome/gui/GAUSS/whdata/whtdata.js new file mode 100644 index 00000000..d5428a7d --- /dev/null +++ b/doc/salome/gui/GAUSS/whdata/whtdata.js @@ -0,0 +1,64 @@ +// WebHelp 5.10.001 +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 (this.nType == 4) + { + if(this.sRefURL.lastIndexOf("/")!=this.sRefURL.length-1) + this.sRefURL+="/"; + } + 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/GAUSS/whdata/whtdata0.htm b/doc/salome/gui/GAUSS/whdata/whtdata0.htm new file mode 100644 index 00000000..5a5c4c66 --- /dev/null +++ b/doc/salome/gui/GAUSS/whdata/whtdata0.htm @@ -0,0 +1,61 @@ + + + + + + + + + + + diff --git a/doc/salome/gui/GAUSS/whdata/whtoc.htm b/doc/salome/gui/GAUSS/whdata/whtoc.htm new file mode 100644 index 00000000..54e0cbf2 --- /dev/null +++ b/doc/salome/gui/GAUSS/whdata/whtoc.htm @@ -0,0 +1,16 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whdata/whtoc.js b/doc/salome/gui/GAUSS/whdata/whtoc.js new file mode 100644 index 00000000..163d8cc9 --- /dev/null +++ b/doc/salome/gui/GAUSS/whdata/whtoc.js @@ -0,0 +1,31 @@ +// WebHelp 5.10.001 +// 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) +{ + if(sProjPath.lastIndexOf("/")!=sProjPath.length-1) + sProjPath+="/"; + 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/GAUSS/whestart.ico b/doc/salome/gui/GAUSS/whestart.ico new file mode 100644 index 0000000000000000000000000000000000000000..110f18356d05f6e8631200b7482a694591a61c61 GIT binary patch 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/GAUSS/whfdhtml.htm b/doc/salome/gui/GAUSS/whfdhtml.htm new file mode 100644 index 00000000..236beec7 --- /dev/null +++ b/doc/salome/gui/GAUSS/whfdhtml.htm @@ -0,0 +1,30 @@ + + +Search Frame + + + + + + + + + diff --git a/doc/salome/gui/GAUSS/whfform.htm b/doc/salome/gui/GAUSS/whfform.htm new file mode 100644 index 00000000..f592a738 --- /dev/null +++ b/doc/salome/gui/GAUSS/whfform.htm @@ -0,0 +1,136 @@ + + +Search Form + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whfhost.js b/doc/salome/gui/GAUSS/whfhost.js new file mode 100644 index 00000000..167acc45 --- /dev/null +++ b/doc/salome/gui/GAUSS/whfhost.js @@ -0,0 +1,945 @@ +// WebHelp 5.10.003 +var gsSK2=null; +var gsSK=null; +var gsFtsBreakChars="\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=\x85\x92\x93\x94\x95\x96\x97\x99\xA9\xAE\xB7"; +var gnCLF=0; +var gsHelpCannotSearch="Cannot search for that phrase."; +var gsNoTopics="No Topics Found."; +var gsLoadingDivID="LoadingDiv"; +var gsLoadingMsg="Loading data, please wait..."; +var gsSearchMsg="Searching..."; +var gsResultDivID="ResultDiv"; +var gaaFCD=new Array(); +var gaaFTCD=new Array(); +var goCF=null; +var goCTF=null; +var gaTI=null; +var gnCurrentOp=0; +var gbNot=false; +var gbReady=false; +var gnLoadFts=1; +var gnCacheLimits=5; +var gaCCD=new Array(); +var gbXML=false; +var gaData=new Array(); +var gsBgColor="#ffffff"; +var gsBgImage=""; +var gsMargin="0pt"; +var gsIndent="0pt"; +var gsCheckKey=null; +var gnIndexNum=0; +var gaFtsContentsCon=null; +var gaTopicCheckInfo=null; +var gnTopicCheck=0; +var goFont=null; +var goErrFont=null; +var goHoverFont=null; +var gsABgColor="#cccccc"; +var gbWhFHost=false; +var gbFirst=false; + +function setBackground(sBgImage) +{ + gsBgImage=sBgImage; +} + +function setBackgroundcolor(sBgColor) +{ + gsBgColor=sBgColor; +} + +function setFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration) +{ + var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration); + if(sType=="Normal") + goFont=vFont; + else if(sType=="Error") + goErrFont=vFont; + else if(sType=="Hover") + goHoverFont=vFont; +} + +function setActiveBgColor(sBgColor) +{ + gsABgColor=sBgColor; +} + +function setMargin(sMargin) +{ + gsMargin=sMargin; +} + +function setIndent(sIndent) +{ + gsIndent=sIndent; +} + +function updateCache(oCF) +{ + var len=gaCCD.length; + if(len0&&sURL) + { + var topic=new Object(); + topic.sTopicTitle=name; + topic.sTopicURL=sURL; + aTopics[aTopics.length]=topic; + } + } + oChild=oChild.nextSibling; + } + putFtsTData(aTopics); + } + } + else if(gnLoadFts==2) + { + var node=xmlDoc.lastChild; + if(node) + { + var oChild=node.firstChild; + var aFtsContents=new Array(); + while(oChild) + { + if(oChild.nodeName=="key") + { + var name=oChild.getAttribute("name"); + if(name&&name.length>0) + { + var item=new Object(); + item.sItemName=name; + aFtsContents[aFtsContents.length]=item; + var oChildChild=oChild.firstChild; + while(oChildChild) + { + if(oChildChild.nodeName=="#text") + { + var sIDs=oChildChild.nodeValue; + if(sIDs) + { + var nBPos=0; + do + { + var nPos=sIDs.indexOf(",",nBPos); + var sID=null; + if(nPos!=-1) + sID=sIDs.substring(nBPos,nPos); + else + sID=sIDs.substring(nBPos); + + if(sID) + { + var id=parseInt(sID); + if(!isNaN(id)) + { + if(!item.aTopics) + item.aTopics=new Array(); + item.aTopics[item.aTopics.length]=id; + } + } + nBPos=nPos+1; + }while(nBPos!=0&&nBPos0) + { + document.body.background=gsBgImage; + } + if(gsBgColor&&gsBgColor.length>0) + { + document.body.bgColor=gsBgColor; + } + writeResultDiv(); + loadFts(); + var oMsg=new whMessage(WH_MSG_SHOWFTS,this,1,null) + SendMessage(oMsg); +} + +function writeResultDiv() +{ + var sHTML="

"; + document.body.insertAdjacentHTML("beforeEnd",sHTML); +} + +function loadFts() +{ + if(!gbReady) + { + var oResMsg=new whMessage(WH_MSG_GETPROJINFO,this,1,null); + if(SendMessage(oResMsg)&&oResMsg.oParam) + { + gbReady=true; + var oProj=oResMsg.oParam; + var aProj=oProj.aProj; + gbXML=oProj.bXML; + if(aProj.length>0) + { + var sLangId=aProj[0].sLangId; + for(var i=0;i=0)&&(gsFtsBreakChars.charAt(nSep)=="|"))){ + gnCurrentOp=0; + gbNot=false; + }else if((sCW=="and")||((nSep>=0)&&(gsFtsBreakChars.charAt(nSep)=="&"))){ + gnCurrentOp=1; + gbNot=false; + }else if((sCW=="not")|| + ((nSep>=0)&&(gsFtsBreakChars.charAt(nSep)=="~"))){ + gbNot=!gbNot; + }else if(sCW!=""&&!IsStopWord(sCW,gaFtsStop)){ + var sCurrentStem=GetStem(sCW); + gsCW=sCurrentStem; + ftsFindKeyword(); + return; + } + findOneKey(); + } + else{ + displayTopics(); + checkAgain(); + } +} + +function checkAgain() +{ + gsCheckKey = ""; + gnIndexNum = 0; + gsSK=gsSK2; + gsSK2=null; + if(gsSK!=null) + setTimeout("findFTSKey();",1); +} + +function displayTopics() +{ + var sHTML=""; + var sLine=""; + for(var i=0;i"+_textToHtml(gaTI[i].sTopicTitle)+"

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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image81.gif b/doc/salome/gui/GAUSS/image81.gif new file mode 100644 index 0000000000000000000000000000000000000000..ae508b4218eff7fdf24c7adf9cb631719259a011 GIT binary patch literal 3819 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 A0RR91 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image82.gif b/doc/salome/gui/GAUSS/image82.gif new file mode 100644 index 0000000000000000000000000000000000000000..e9a0d679750e86e615b705d32d236a5a471a297b GIT binary patch literal 3241 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%0AC9{acky2^U#3SK6E{sia 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®h;)mMd*zmpBB`cCV|4N%#A3|t*$N1 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image85.gif b/doc/salome/gui/GAUSS/image85.gif new file mode 100644 index 0000000000000000000000000000000000000000..2675bcb8bbc306f96eacdb8eae3ea93960082065 GIT binary patch literal 6262 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 RikG2d6rrb{G&G<~{{xFtp8fy; literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image86.gif b/doc/salome/gui/GAUSS/image86.gif new file mode 100644 index 0000000000000000000000000000000000000000..76080ca257b4bebf60fa5c80bf25a7ca383c409a GIT binary patch literal 51893 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image87.gif b/doc/salome/gui/GAUSS/image87.gif new file mode 100644 index 0000000000000000000000000000000000000000..61e26b233d097a3590d13e90b317f0e983375cf2 GIT binary patch literal 5161 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image88.gif b/doc/salome/gui/GAUSS/image88.gif new file mode 100644 index 0000000000000000000000000000000000000000..16cdbf7306dfea2d5965e0c0378fd820d056b693 GIT binary patch literal 4314 zcmX9-2RxMjA3q$9q&p)rJ9~t9BAYW0i9|w@(izFmCWFhqwTgrNq!Ceb074$fpDM{NMrB=PCx=s0Su@EZ+C5g z12A9`iO#SDD8UAXNpzTmFdPB}Fr7rFlMsempaw=rbOadMbp|}|irO^_Yy$_N1}Fkv zcM}0rzy!bp7(g0h2?}633?q!NfEhpx_H;UoFtP*Q05`a%BQU~<5@ZjO2GN2nL2Mu- zkP3(a_y%5qIp79}24z4dP{-hBfbOCKnB5+L=inY3fPpYt0wMzr0V~)eAU;MjLH9sg zKodafAZCy&$PzRUqy-WJk$@WD9`q7e1fF*5cV+Ij7RUkofDj-8NKgu%gG;aj#Q@;{ z6PUrO3Waxba|;U#OGrq_%gcNI{CQhj+xYnS)YR1M?Cj#=;>ya(#>NKn_veipm1Ht` z_rpO@2x9^>Sb=c}9HMsr3n&aY;SeFV+;|v^;Z-;@&{Fm&5i4m~L~Jd8k}3%KydP+- z=+8K4oFZb;R{1Pj?quDWXKhu_^ABGbEV5{?eo?3ywD|s6`^{IShOwNYmK`-iH#V{q zTn9U9hi}?e%;+ozxxR`1)^^LA1zOOq({9`;boQ@z%5`jy>8uS^&=27pedZub=o`50 z(H`Y09Q4CJ6p=A(&?)mb?~P&F{Qrh#$4p&Kg?X+5U%RcFDIPAUlUGz z%E_NllZSb`-t#iGHAdrZ?!k$1X3207p0cB8%pU%4PhEezeV@SJ-QP8}`H+a&SFR&h z^Hysi)<0bmsd=yQ@Fkb6Hsaq)X4;^%aFBjH5Se=s%-q4k-oId-yRQ48B~G zD@~N`ykMKy>|H}Whs~nBPU5>h{vlrZ{QLzAJ)WFT2FiUjZ2D8!t0If-`dnEWVNmV@ zk-(Yko^w*jWWw;6U*ZMAK5Fj8oKtqm)C5lZXXlMvl*g(rOyK#ZSjY#ou&`oGB?&fp zK$9k1=H&B?jNQL3923nc#Zh`Gv|}Dd>n+L}!L{aIWh|m8_#_sK$@vVCE6%TTvZPYn z%X7J<#(il!vxU^6P-IZ9=0LKxPi5(YaO$PJrcNJ1cY1_-L(0p7ded9e3iY+C|DL%J zdW3#`H0;_tz7(?ON`YKER=VD|wf{J01EF!tUVu=)kn-K=kD!&J>38KL7rWjIUHWb~ z$EN<>V1ZLu+<4_dp{FU6;*lS{t0ayh!r$c_6`xv8Sh^L>PxtNS!q;-RmLY}|13oo>yjNc!#d?G$5X8{FihVdw3cv_02`exD3| zWyktA;Z@`M!pUfA8heAA?aCMN$D=umUL_W4P|eTo>ru!+>A&TC!!!>I%0wzrm}_I- z9g`&~G<`T{C$5)G`KKwC&y`>_(3^af)w*u0pOyVIVeevNtkhDeA@{*YJlt_{qd@~_ zZROniOgGP4E|?Ri3V;5X&QlS+FolR?#R>R@h zBgzBAFJ{R{4caT*BXUXd7%4w^o;r{%T%ml#Oy0;V)-7n3YqsWzisj|FXpgDkBli7j zPi3q$Bd3hV=CLY)D-;S}>GZrDR_*%Zv?TiioNyoUxYX*ZGG@u*+`H%L77e+UpVj4(JLofpF`E{%d)GYK?@BA*hcu}_+d_-# z@T#h2^wTkcd89`Us<2a*=Op#CTG3adI`0?GS?w1;PJT5kSjdc&w=m=TJEiF=PYv4N zUi8~u{P~6)A`}{k_Ta=?!+9FI;jf2pOf*Ovx!Ra1qTV3RvXE_ zu}vf`YUvl$WH_7ON-I#P5Hc0FjI1X16;p#Hm}-2NW%bfvKD=UgwdI@)eY~5m`k)gn zfg4@_S?O~%+cR&=A$e?7s9$z7FR!h^`QkmeUv6gBL|y7_2ln#jdfN)I_Udwc!{y4l zOaf77ec({bgXfJ~*^Y#d5hex-c6G?%OJ=XN3p^HALi~$)TxXqMJ`{VL`6bTAsdloa z{`W%jC(c6zF2%mSh}Dt{u9;_5)kMQ(+N-SiF|O(+6N8if2dkzePlk=bomVQ`Pj{cR z2}yBwMV?7Yc^x78tic*2rFrpd!x&%Wf>n*oy7+BThrobHXUd^J2fIQF{%hoWpT-sD z%3RCi!T$RUSI8g9=&j+f42yS%c5dAhxT_pG+A*bjEv!q7qnYsW+sN0KKTgdz62oO= zTq1-z@2`3_pGjAr-WpqeaEdd-Z0kbXP862(s+iqNE2cjt?Pw=^UL}>U2*)PSWE0w% z6vwJ|o@w9dbCM-XzceJsh|+w%i~)~g1= z4F)P7GLS}}+|?XuqkT~9f6}Yl?0RpxzQ)UCH*zN#vdY}xe%ewYnnmo8T7Ebm*)=;v zjp}ETv0h;LIrFBAoLKz{mvOw`SnNh#zpj~HhIZlBNX_xiI>#4_r*0RFtYJEJbwx9* zAF&MQHU(GWr{*K&oO!;V>(`#_?cy{v42e@pDw-3)>HHPA?NkSa|I_tY*V6PBmj6|_ zvMul3?}-1tv9{IM)%rURrg-_m2`~R$?o4qye^z~A$7(^Zk4rcY3XA`Z4bge^_i=>7H%$O*FXrkT4czIzKqa zneQ>>jIeRsE#_Kfb7@bARoaa07WyQK$P*9!@NeqXTB9_q--mUz$gt~Kyw0`}wmB&x zIlFu33*S6`Y#`E8cv7KJt;Z7Kd*$h8Q)3`3$yCxDkY8857HZPnI+v)s!Q-Uytr{;EjxG8ogDZwsOyD5W)Ok3X;%bMgEGbMa6Bei+?pRNPT0V@x|crzcqH;%6Qb+ zei8jnna!KgVtvtjhfZ)Zkzf3Y{^D`Y-dv=*je8%fonRk%$<7!nNa6Zqzv^hkQ6?xr zqeuj(h|sVZJjcn76r|V1iO2P4wR?4+*v@0zw1?v)4{j#-%vy)@5u#0FJodc_kIua1 z(wA5jV#ttsEN><;E+|g&q1EaazZ2$I15DiOczxpCms%WzBZ6pkm;iMCbD zBx(L+NfO8+DAMU8bjc6rv zRG=Pq>f}gbc~G{H6M4tccy3lx#3I_q7<({CTNW?Kb68V8%U9i7b7??MODmvM%8SCp zd%RZLZ(Wva6T4)tVUeuG0ZFQ@fY-sZnTZkMeES)VM#9k6I`eIVD~8#!5l3 z#B6q6EL^flD4l=}C5h^%u~?Rz9Bg15OYWah!B(5ji?|$SN+CyU zLC)I(jXR1SIV#5Zq5xiPJ(`kDsPpuyO3$!xp1ramPU)_@MHz?uF!C%$*gXO9FCNb< ze(|~3oFe~m!cIV~gq>0%V4=9~6b;=rH_$$%Vkbp8YSQBRZtPVc(c6469Mai++(A478d*~0Hs?#Z8X}WrQxzohnNUjE( zj-#b-KXSL6tdK4j;XPca%2RSIEb#e&INyxHW>VFZYGKHESvyYXSEg9LWA*7p89ga; z8#VFSo8sXGHzRzc{Cu!hLN|}9-SixA-=^qf|G~vYNStA=;p-_AX?!EXJ%KFlh}DL9<5qy+obR1N5At5bsWCdNnea`N&D+TC4a9M1T)w@qxW zZ|Z8>wKNS-f?H?_WtQgdqfbX$np$F_D6`YEc?F|>KJF`DR!od_d+$#$(r9+JmW<3^ zbq&jys60O(n)5|JKc773iw-SKv%*5c1O2l#Rqg6(3N=*|?yi2l_y56Ip#(D~#uv&; z^8WnZG%I#ulvVVOK3#~3rOi(NLt@!`f0mJ!$H*M;3#d_7GbyX6!Jsh%g9GlK&NX#q?w&R6 zZ38uR1C+45iOJcrl6H5`7>DzIn_HW@`pzw_1GI#emZsjal2N|^%F4GDJ9~$is2V>X zhVvDMUqGIugk(+K#KPiwOl&VLnPzEa>F!z9-qF6WxS*h<>u}zV5=PP0*PWQ0Xz$?a z>O17+wCClFSX%ixUyR8s7*N-6D65#Yv!^i9{sCyQv~nID8*OQAiHVJweK+eD;AdiL z())0fk;$;LxAO~#alY~o(%XT-1$7N|cTY<1!`_L>m9mPmKY#z2n7YTr{z z|7d&1EF-h5_u(uQ4pmT6$ScTmzTzh=B1{Qm)YP?5!fM<-84l-TT3RP)$qY(Z%;?y{ z?7I~c(|>&BscV>EuoznMKNvNB0SrlLNm>GJp#L8WmhP_ZHC6xOU)J8%PD>tG_^{w` z#*Pw9si_*()z+m1mracSqmt%uhO)W-M_2nF(W8{$c3MJBOw_;oPWbuwt$g`Ms|h2G zVP|U>6IJHtQ|5fpd7yuxrm9z6O}(aS*4>rTd;g#1&57}qvXZhtzyHKUwU<>)SeiRH zoN;b%Td=eDW2E)Q#4>vCFO*fZ3=EFCd%D-u)zs9DQo_p0N_yQrX%6Qpn_GWcT1U%D zCRV;}`URBL)Xk~`|JMI=0YL5n$6lUIWUxvSk*^4NZ~saOUzqHEzX+VTr48ngPs}z~ zR>rhRL~HJ&i^#nk#l}YGk>J|n`O+7kmZ5U%o|hViOiqmCO5CgF7x`_1qT&YF41=pW|S(D8e?tHZyyzfX-6YC4!^$oV(g5T0(#7uH;5Fg|H1$(`CW z30aUOOY0-O?Wl6R&+ij<^@isXu~x`=n$UTh`6Llf`h2oP*zkOcbn=o+T=@dYRc&!0 zknc#AU57)ml>zOFd1~)9=8_XG%&x#>>fx{%+lq<4$ z*SyN9)2iMq8rH|Vk}lokUB%G&;$6)&Rl8P`XYZrRqSU#@$L%@=QspHnoEcYN!(bv} zlzC^cNyNmJUuTrEM|~pwk_UOJFi$#Nj(-KXoN6VFW)JFAFwN6UHHze5NDU6rR{f66 z%S6FLsybA1U2(8;0+E2QA)2dygZ_ts;NM2^>1~bC&Yj|L5C? z&$oWQ3)0!!XD02lqg8L@<7b{_sto`f)xlAVEJ7?Y@tBMzNsg)_Il+9Ys$PGWPctPV zI@EZ2DmN1!yp%Yi*FFWnl<}jd`HV=!_^}rwOCJX$%O-L*#!|~R5JeZS@|(-`#$+dm z+2Dho9r9-pMiMP1KGm|gx#a6q&T++d(DT}S<~^p>O50XPv9zDY$BBCKEyff=#L{sZ^6os0rW z7!|H7{54e(`}8G*Z=fGuXNXX3AlB(lL9kaNsM_;9;3NYOm-T)OQ4>VL7g&N3OZ@_9 zqJUpO6@2c`qSD~;vEY)8vL(BEQw$h%fv<6?NnYpH{_8aj zA^l%+%z6)FKJq^%Q0-D)Vzg!f85=f)0Onz1yj}U)=tR|7Vxm2TDrR$pcqZExQ>*=| z@ziCXv$ahQ4fgqs7c!d8-%2~z8kOHfe$aGwNMiDK*tr(3TVKw+N}KG+d3DR>xzD)+ zX8a~KAKd!8zFLJi|;H^CPkk!W0nqn(CUwuw?< z;Bm7$=}ofd&0TeGFRP0$3buT#RKQ-xO5p)wb69r9s#FsT8MDV=9SEZ%q>{0nYbkZl|3*Dm`t(4LeZ@-v!-XFaj5LOxe_M83Bo;m*O5%>7s zuH|(0emHqMsg8R7Pa`Ja!*D zQJy)EjvFYFXk4NhQF=cfxIAxVg4JfG%zl*H*dDS{YGbA|7UXvvM@aT*#PLWJXi>E)(0-#zP(EHxwlo~#~1O~c9zWBbh}{=I`8~oZ67G}iVEZahy4Vg zf*7YuOC}oZ?=_t``Q`N8-xJN5dQGQJe!cMQ;$-VsXmj}UFIT=!zwT+h$M!$6auIT1 z>al4@Yeu>6Y3mPfAQ52-R6&#9Jp6~%m3QZQpn<*vpVZE0yNi`vt(*;|MjhJ zVTu2}U5V}N{qN*j$jqg8KgT*1zjM}NcXr+b0$m)0Jul(FpE=~Iu71%mUh+n%SOm3e zK;Hg){3+)TU^Y}1#HI!r^n-tkGl#A1*KVA4*Y`vi8&nH4w_o$csM&91% zMey$zBS8U-5W_0Lew+awI@L-S-(9jfb$`5YY_sn0?lLLs{zSd~kETnzUmRcDpS<}k zMUMnos$VkH?ZAW06sh*!r+TJek8O4I?5+l8^~`>@|9O9A_ghGu@VnL6h6fu`XTA5% zmiJ;QfTX;L2aZ+QF}6K;`0saSR_}uH`v^N!8gCOB4I8`?X8cC=GjjdZlBnhH(v*j0 zA#;&&!ka9?;wzgCUbwHvsCcOA(iT=|H(~p1H0pB0=DpWPR*iI{apFhK8$UaIIbgX1 zOj(kbn?#%nWzlb;~fco;bq5j8 z9}$P~j#JSN|Cw%cUM*!WTPg4xYckVgOdPjNI2A$u!cCdf=IMEm#F7R zb$=48D;DRoKhbd5!LY%BXn5{eLxQFu?O+$}7@cY$7B9RM=bUuT+=d2Uaxg(A@#@c? zH%$DQl5||`oLN_r)o^TuL4>SI0GAaJnu8GhjFMxk`I14wjwzvHDPct^QAH^cT`95K zDZbp4D0)f)k{+i*r*)~NiqX@&>EV0cDd~=Mh9N!EF*T+uC1;yn*p-^mkh058xhY0B zCPAFIk>1EKJ`za5J8ck0lmoO@!EoCP6f5QQyJA}HOO$SJ$}#Ko2Mv^tE=muQ(MzZF z7%~_sjO?H3TjLDp3+ZRQ()%JP!wrl2eJe8d+2fjsu_>u}0uH}?khkaB5tBvHu8zA}# z0vlw0sXZL{?>qv9qpu>1<%;npIU#}9$~LG7cbt|SS8Wg|ibEC4%^{f_j0h9W!~^c+ zvJXSW0mX>ez?;6*urV*??QXTfIRr{uKo6JlE&|&)$5(Y6qld@i3zZ?}neoH&zC`!{ z6;tI}hHkmy?%$*3L~$)Wzv?IFQ72S|33mh9&doJCaGnY&fyR#Zzo0=uQNI<-(8xRj@k=GC{!q{)L>t zsg1JT+?gzk=}2qwh=SCxNa{&K%SeC;YXpD+E=pvN346#y-!4X% z;y@u>6qpIic!j)0B{$;10F%EQmz6um7mEi3nf#GLpimC74*(YN;7|a_{wqy>!-9+02?(& zLM)O|zGUn}JmAYkh7vJZWUQVX@UL9+B>|aCSk}bJH(aD$2`QHejN(CQ6#iCyfI&lTn_0z$6O@WdV6q{&Q+>Hvp6)7j#(^^OVTnfJZlTkaBZ;K;XX$ z9Wl-Ad_zEQ^1xC&a5; zTL3#n2I&Q&p`ksROqe@>s^=h@@fb~_Ko9{HRoZYS4gH3SW}XnpT0qvb_&G$B2pjd} zD_>Ax$MD_>fo5)Fu?2rK5&qVeznIuFTnhQf2W$Y|1zdz6m#?3V-UvkN;Skdt(EDag z3>k4ZuvMOj+TbE?2_a&9LDvrpjF+N}U-2`k{GrT$QV$5-LrXFFRzKgYV)8L@Y=8?2 zP2@q6|M$?%@>61sbk7K@!nfa!g45 zzpqpo{D6wlB=g?@pdtXM9*-&@gRAHGE&$j*0w4nbSwPnV;)T2!#CJYa@f<3a45B^* zX%hL-KyfJm$Z#-WWW-ZEI-4lDe}S)=j3sh9$*k&n4l)mbJ`Ehs-ovBk02G>vc|Znr zlOLp|W12~jVJ50HhcAOUqCSKCOvTKx;VLocOfKI9^R|0nLszKe;#brnlTVJxr*~jT zj@kQ=1w>L|6M^W5T)v0@WOfeu`2cE;jB21_-uIw?^9H*)7!D4j#{)BQh=DTxwpqT= zIaJmk@W32u5CBz@5yd#n4X%LmH55P?bmSp9T>gf@);a3%By;ouVN`RDuid0x1dk5m zAs_ajE0}0Bng1ynljKK!iUVG>@OMXdOh!MQz~|^+%d+*kxAZyEsWeT&5OJ-$ylGiO zj*JEH;Bo*6;elhQFh(9kj@O}Nftn-o%kELpZ*i#WJD_5MKoF6iguzS`%_g~gOJ1NG zcr-W={Yo950Sux6)FzkjEf*m#)ePoABUnV<33&B05C@NLAoGWNBBt1=H{{+BzlIC~ zDkBixPaNYj?jNS22U!iD$-T#K^y!iG>q)Hu2@*B>PZapO+3@{&2!M+oW&yXrKsoPO z7QPuEv<^^Nk$58+GB$|W112FJ2BK?55%nC5=PYvj03wHk7>#~55s1B$4$B}x2L8Qj zJO)ihVFNRbNXh`QtDilLW}+vU!`b9h_AyvmIqdE~@wyN1PDePh$CITH8%)&IQOp#x z=il&$0bq!GI84N7?*Q3x)1~;k3Nt?C)Z6W>*r*69DZzjHo_Mjctxu248@@;Y+epO} zP`hu7A;1KIx4fAG0Kl&1)a$U!`$@-G!4ZsAZvME+bBW+xtjk_Ocz z^Xmmp5XnOuIMgT+)dyfsJ_R*%FjZuJei-Hr6_L&5FQC3ne+%lPcB$B)@>u-4-@C!g zw^jJq7!r4S4gq(bM01gmID}->1e1(q_O^AeN`H zI^;A2&yfN5BZphVmJEu=HSiSI;z8DGRND&Dr+8ytB(s;b(}#R5y*h=>^`f&93V~0p zGJ9g*Hnn8dGS_yIv5QvOcX(e^ybABb&O}ojLSic z28Kx$XET_9bb0<_dHt8S^>YygDvbqxs^JDsd4|8@$xvJ$8-7jB@H{hS=+FL8PMQq+ZE_35rv4&dN@zhdVwV%%7DaX9hmP|^);>8S< z3g2|TO=ro07aQyEl4F+(Q`U+ZM%z!{6gH!NY6@)25Y|_xWPV-yxs>|rfzf+|)a`bs zUq`dD37Q38Z@pB#9((ZAfbj07Yy@$N(8^I{^3px2Xo4n70HB2sg(#u-Q3*M`aZ#`L6OTm>Tmc@shP-uce$Xj z4>uO*wUMOO4=HL25-RTsv*E!z9$sbeoRS}peyRE3f$#G#5rT4zU&q->SsXn%Xqw}O zY}TFB$fYAu?Vg!;j`yoOj#>qsOb{59K3&@G`CQ%&ttg@6%{_I(O~!W7DfOEyug2cU)lMxCp-5kh)B2lB0x@s%dj>^{c5`Fvi z!_Oi-V}eo4n5SiQ`$kiRh`jpWP9_ohPB>;$wpLWEPuZIAOj&mh_R(L{_pbKEAB;vg^qLwAmwO*}qRK4gk z%vZY`Mm458)#e(~%$`W>Q(CqXKGExZEZ5F*1SW7*$*i{YO8aq-e21t=^JFAIRlr86 zF9Cr2`MyEyiHqF95*xYG90}Oo;z-Q_b=PO$^hn_%S`L}Y8c2|^N7W^s`?6GJ@s1Adlw7GX9~E;M6nX@7-GW70By zpZo73OJU8PJMQ}}k4458=|mSFI}oVi0UQuu7c1tP6fMJwtZMvd5?8M*EeN0fy##xS z{Xp>AZ=zlll7nriRLYFBKb|Du=MJ;Q7q}04FP6ZXQdzZ@HaSBLbr)G+B0Ehh>z16) z3ne8Ttwmw$D~2i3z@AcMpQx=cQxP&s%AzDgU zACv59F<8v;WAOn~Ks`2uBuf@PYTxLVpV|hH`vXXKph$;xHa^qd@ZOv-`1SC*r0bQy zfk5?(^KQcAmOi(9@^sj5*p2hL$%3}*WeefM9Fb^#H{1)z{;ND-E<09I?188aM+;81 z*S=G`&(nUM^~`kf+p+O;KI;~FHXN57LBNMFDCSO8)hqNc8lD8Zk-jROK3s%~-rx3I z--V*4mugvR!!$|~ms&x>!@tO-T9ix3HhePj5>h{Gtrq+}`?zJ*#cnE9irt3*sFkYr zedN(Hu>79n{CvWx)Tdbq4sbce<8pdkxiYQ;@)kjy;Q9s(KtG*wi;`d;#kNF@24Tp7 zcu|Zai{e;|u^BihHa83bknW6g+j2g@@MASO0xFQ6AcSSXWjHT0Y}i=>jztz=C;*rM z7Q#vW=fLaua^nFrD8QPNz}9v-vA5*XpVi4oIywMr?{pTjEM1n!7 zqUy=vkxR!MqP#$X-X8%$V&0a-%XrsUeL8pKKNy|QwzwL@0T&NDXy$xM@ym`E2#T=O zNORMD=P$=sN~*;kt1R|@zzSX@S}Cj$QBl2fj$r^?TJla!NckB;T?;lq(N}f5k~hITM0g5G#Ys`NtAe3o&de^c`DJCC#p1q>2dF%ljTLO2G>;mlA<8 zQ3k3aQ6dZgE37jSS0_%1C;SFPp!ftUmab?9U_~IwUN{|b54$%L5UYqqFQq}-eR#0<1?e`tKt&@{ zd=P*@7nv}uBNH-89()WX3wa`St!7|}CyOfk{RmY4X@b>_7d!D4G5F)(_iG|V*5i!= z=kQ?O2;zPZ*^_FfGCDR9+5Z1C#ZAlmAY$BrNVrK zK#n99_*|u>A@OES`xFP!ks9-22MNM0s3XVr5&#pyG#ff6A(pNg?J-JEB3M8V$37#j z_gt3HsTzToRkIlEB!SglvuJZDQ^_Gy=LSk^RCFFcl}x zV@7bn2mEzXd5Q?7>ZY&I(fSb23)C!D(BkK^P|a)BpfrA0&zurMl!m{?@ml|hBj#>V zFB7r%7`@u^5rD0euM%GRcQj59>^k!g>Ue5Pblyo{-)DG9G;vn{ zXWf(4ysCRT6^rnny(1adZ&OR(efstjy|=fz7Wi?e`>Qkk{`(_=#g+G8!@|RBKWEIw z$alWIGQt`wTA!6ZeoM{bppfZ%lkdkMGjGHnIXzFSTK7D>^Nu%Y*lqpbdVYH8tB;;x z#vv86DK8q{Go(94^JkV=khe<*>{?&^S8f(r@4UDM*MI6ew&__v`{kJC#mq3uXF+>| z8I^V_I%)i?*(0Yfmg3RV7YxIaZvI)&kA@!iw5tA!wEVV^eERu1_Gd4jHYodN2uwK_ADNRTrzo3YSMK{ z`O#g2Kh=-&XF828rQPCt(1btoWm>;(A92QwxcltUe2@71#E0*qO$tIfn{~{@EQ$OS ziWk6C`s~YDKUgAfR?@B0 zQ3)}ZTIi2BYbG(<|D@EAu+T|)W+r84UT}%Cx6q~|YiAbkZ2@X|fG;zfNEh4}Wr6bR zMYo%zJvP7p*nIeKZ}WeK72;_EE!5^Bh~TWT+a-}ClI;F*<+9R&m}hsQOHno1mXO?H z$!^o^_^e45&w=0wIYZI+a1W14+CiRb7^G z2hz^B7}^gQ2t7uw34zLO`(5t#E#}@+a@T!(u>ae}<0^VbM2WsCv|DZEZsJ`agbP2s ztwv|j6Ko9m#OPU$iLt!YCq(O16{N|XM8-BUflAMDgivCjd~7L(4K=o5D0DQDh69!H zU?++YE_g_W%5bs@y?7fi9Zs~FqV0u{>B)0|b%PF{4RDl1j~UH;vV_Rtq*^1Z^Hu0Z z!}J8l#NDZb{VFzm!)QUkCWe7bRw(t`22MJTbP|UW{8IA?=zLzP5s4nYV1359fWa=0 zWuv5uXe7gA;>X8z&5w*0da2cBhemBf#|>5T&@W5-$M?m5alL2aopf#r8p4AewQ0WJ zkchN_36kNyENwk+s5=|(xkNk8gV=Z%KFmw9V#~Tk6y7d@S`R1dH8e(&;Z|(8%`iBZ z47DjrA#MORhQRSangg9`bb8dG2x{Y~;zCSTO`|?xL&U*=6AwUHz)h!Ub`c=N-Q=~o z#N0c{>T@;LOuIe7C8|e1zdJ9{I1u`2KJg$A)+h)Q#8E|wRY)rBc*GqC>OZd#S2o;~ zFbZZROAwO`IS@Dt(VGeos5F5FNYrq`u$_*{u-s8PRnpPkouzHVPL|*#suNO>WT-oj z+AE3lWkWre;4tLjj=NnTcdLMOD@3iymuFpw+HPNy0ToP+tkxr8TMa%o&CW1|LFYRR zqy!q{;f)0n5%K5fb|hCQfCIEidHvsE4s#F~wQhu!+*q0WpF-6URl4O!a-^6v6%D95 z!E87Q5+wL(UcNOa0mP;?8YN{Hrx=oHXK|wXxMbuK#KRCCIE;l+p^@~&b4$s4#@s|4 zwU%p`LM8$G^rS=B$!Ck8ieKst1EDG0($sF@5S*$w816EhWKT+tBqo`%p&snSU@+AQ zp!ziw44kIQKZTzjhVqe2buQxe2t=JLXX6OdV}h`A5Zfh~(=Z&yrdbnVI$(GaiQ4@giZ8NO z52P8gsY*|iP-c0@c{JyxGY*c4my8gk$ZB<5Vf=J$q!?_k*bbI2e(+x=C>)b=HAGnB ztJ;^71eSze3CSRc$yex%vuN&Fe4^+u9J#D?imZ4P0OLu?NJ5Gw2y8W1cEu4g7GG*Z zbns{Wb4j=2z-svboJ$HJ9e@?K}y__A+deNcNxAHH4KYwlZB5!&Oe90dhnmZ^h*IlVby+=1DBQ> z2^EQF4$LRYyn&JdFtZ5)V^?SeXMX5Q$8KMa6og-$Itb7KpKU(;T)F)cB(R94HC}xk z&9Yy*Wd|Ta@FF2LhHvFLL;H-uqbC2D%8pjPwj+LL;;!3jTH>WdNp3QTg#dAr-B`2} zH)w)WG;1EzAtGLH38=b(NlBxr;}Zpr!L2!vOJw*BR5Fwc{aT5z=8C>Efgh$*Q;{x` zo-{XHlAkv%=uV=87;v-*aTS+j@0bW$qS~`)P_ZQEjYPLD@L?Qa-F33+$UoIcl$e{d zp;k(8;dlb4~0Hym%X4V9_SNH8f`eK_-h#IRdzTBI1DU9{+KH3Frlx)&_gZF^o{^h~e;^79r;95Df&i>2hn z2UT2}o zYf;hH0(YJ`)-0E_E|(1&l`EmKyhPZ{wVTpDg^Sm!wvLsXeu)=L@6qu&x`aYX4m1uD zf86zH8uT%|ODY{66r9$PU)IT~FkYE6hhVPVvHIGc`DpU&*N(8S?XCCzY@~_Ae7)cC zwItd+Grd1+!}u0as0O~m5n1U|TIttcd2F>ZaDL^9r(fSYpCz!6te_{`G$okkm0FRQ zkheH`MI=JQrhIxOK^Hl;xZM_6Kj#+i{Tpj=G_k7at#k=MSPyb1M`q&kbXJh_* zvk(2JCRe9SSI6!BpC$Xh=vW#3>pvl~I(FsTr$ztQ6{~Lg@cAwO*+IY0nf|X9{oe$v ze#i`%8w@zWTymfAb7NDjhV>p))U)0U`puxw%f6` z_xJkWt?PU6z+DX3Z^0U({F(wGgcrek(l^(o zmDiOFHe{8PHLq`I8EnWIgeYGK(S5P5*tsElVO?uz<4|1iA(?gg!VQzo5T#QaCgJP9 zz5yN^;xd)>Fsy;#+)#`|>haD^+j@%aBg)AkO6=yQ-OwiKGbMj+^OV7lGuELFHz{YX zhMo=&C58VufAq(R>!FUFKh6z>p1<(p^n1$17nG}eKgc(KTweP@(%f>`qnx>bY70wi zjh(r%k?38xb*+BOr*q5q(UwelnE&f7|Dmnxh;ZMvEt|5fAcJt9wXLANtq{#{N?}-l zz|V-npON)HqYyu3eb(!2%P7qm5z+a~i`%zQq9Tfmi7Jcv^`uMO>yf^NiIoer-F}HSuL3l# z(V9A=8i%5q-~Vn|`+fU$)a^&V?;lX`IYcW?b~w)IZ$>z($!ohE}ncaHw)xEg)WVCSA_%$*A{9f;^o>z#YnI|G{0 z18eC;zlhCKce@)BFWtwye8dA<%37OrAt2ZW7cBcw&ygIu3`udIkI&bWO z*t-hRyC9 zagBg)Yko^tyx+iAUq4(~yS}>d+V6|!w^h%$udS=s3%q|8?oD;9{+_ud;2u} zwh12w(nLi~zZQLa)06#a{hn{+Epl(@>o2dK{S29Ht2|0yqI$KAlKpr1>=GFlul zaOTQa$8Vk;_s$+T$Y=1~^JUrfy}`>S_w0_2WE?!T+Yotf=~?-SxQGA!TKzIz98$mX zKzqCXrq;~2%QIbTn+clLH+^>uBHlfG+w)n{Fl+ht`Lmw>{NB$l$Sjh$|bo`wk;t7gob$Bzxp>|m_$+S6Hx>VZs{J+q#-^oiQG|bawbGmTWa*poV z$OjL+CTV>qlP|}(e^L_9ik+W$6UmBSEJEIzVBPdl0|hcpNDa_(k#{Q>KhhS?B^T~x zOcfi<#w^Z9$Oc?Bw!U&B=9dea6(7PgU zAyv656rDCy5cU93SiJdWyE?nb$W|tbnORtUqaWoh;j`lsYU_I&W=M`#K)rFhax8PG zHh`KTDn>?sn<@PeN#`{fd^7rN=A-u}||8Ay71*vI{5 z(EN{v`Wx$tU)^rOmmMz^n5k4EH`N<`au53d$cfc`dH#)m?zq>@ns=WXW{SO~yH$g( zl(egBH%0^#`cVga36J>?V?c`C7cH_L@4pnI)$c@VBX_y-ClM1 zWVlG|+4-<@ajkC@UQ^pwi)OBb#$%S<-Om->y7m6sdD&LaWr=uYL65v43EOnTs__$E zc{mF<#pXJgtaJ9}gngXK#|e!b8>{~=^R>furm4&RBLS%gFLHWP4|moVR2*-8WL$sA zqG8o^S%|88sZlegC%<>Oz-n=-Hq+U)^KRC&_4rM5Upo2M>!RGQWLRNtP&dq%S?Ri1 z>uY*`VEC3+7NNq=(RgXFVJXyFL1+S`Bf`w=hA|vVKRs}Nb?A@VM&lokkN&>s=^C@b ziQxByT(u1wa_w(3@b#?J@aDyfVqclej~RwV&EGt9we!LUvMpp{x%~P!=yK+J1_dTU zshYm*HOdaT2!K1cO`={$`pfyw0U-648OXp)KRG-EdW;OxUdjyFHvyNnD$GtLWC$L( z>oC-&D5))lAiOur4gWpR@hv{(YU7(rKP*3Kv_i)e&XrsUY8&Xyd#+3t>VG{lp4cd} zPIu0+C`n>e4w$fxrM6i-lTgX#`>&UEAe#syXv#je@Q=m7Y`Bamk=m$oC-v$Apjc#ZP+BcBXh&%3 zseOTxZ73hzH0nz1mBE|K#kPU^(fL7+!?%UcSka6vX2XYJx~t`0{L6bAw0&nMo;X!0 z3dBZ$aO;7YxE6D906-ufI@)OJpDwt!nWztR73k4e02@;+w2!1nrn3rU$TZD_?4)xz zh?o=|s%1EbILw7GOAIsAy;Kil|6pUXFfyD8^P06!{@J@=*)&?XsaoT~sODcYCtT(6 z;D5bSpG9$$#;aP}GulDfw9g8PltuwZaxgo_63l8m?KXSnfG^jY?*lhQv_%f=&SuIQ ze6c)QM0E19bGzQZjTD?9iVxzDHeet%63IGH!5&bzoJa8m;`hCoOC+e94J&!-*3os- zi%k?&D^9k@Y?|lF9}ewoQKH0fLl~QXKJG6`@=&jp{In-9zkIt-tkq6q!X+jE+FKn7 zHa9Y}x3?r`oVCR7@8()6<^3C&+qs$@iV+Y$co*(#xRH}rNmJ2xDG3;rJ234{ld>dG z4_a33i{L>Nr&3FI@NS=pxA{izjOnvatPSpSqg&65{d3w|J^qFq^qA_G zG!bv=Id`x5Q>DMay|mgH>}l(%AjR>`R59x*kk}*{E~D;(u_np!z1FsKJ$rX*@_45L ziU-k4&=PRYWLK98TgjnVzcUNDSt0wpOlL8!H!uB>B+Pcd%#7Wv4q|+^_V&AUO<%S}`kW>-T{Xsd=3V^} z{x7GWS@x6P*2H;w9)V=M=(xWuHe$Ekam)0~bor-6)a{Y#HVTlbnrd7a-SBp)(9b9;~3&KAmr%m4S_ zQ%)f3z%&cm`|;3P;+jl#nD<;3QI_mYvHS;VzH24E;eE z%lv+Ey<+pG=#kIiIZ@o|cbnC5N0!#2S{&lkC$&gu=QrGKWyZ-aj&eZme4W_j_vX;nt(uH`YSp{>*D0745uv z<45An-No>@-%n)XHZR3hKT%is>xMpA=bE?k;esjvX8~C9-?umaYMuKf$O5b3g+l=? zyQ$e!r-k`=0@4CyXRc44Qy`P|^N7&EIk=|>59iPo zEWS28ri9El$l@O(V?WIC`;g%UWE{8>hjr0s?%`3%c%+0ZPG5GPY2`jESz&l3PH2AL z85d!-d0|^wQBxNv4}>Ta(J6y8b;CDnC*#B+R$?@3-2n-E+JO#Pi(%OVV=j`@^O7H2 zq}t}C)?K83&rA2u%b;EH#xz;`=OsC^a z8OBx{7RVb_e0=6Ht0-G-68YlRp?9y!_ecfhskLuQW&*`h{iQCqfV3PFkW(Po-{%wM zNE4A7GiilOLGrj&?g0P0nIrBq$J{Mqr(;O7WoE(;#6+y_pCe?ZmhjvNCSW~FFw8zn zuZ_>LuEw&p#^)}gyqecjbXDh*h9+u_LZl}EwXpt877+x!pjDxGvCiYn zO3mx}feMhsO5-Q)JwOqlqUFCJGO7HR348*KNPa1#kDwg@ByAerkfBuceY zOX*6K7-EqU=;j*?G7oo|Pd zUt67DTE8^gOo0u02uf6$>eHen1WaauVP3mHy<$5@s~zx=`y8aC9HLPlqNYsI_oA5o z>jS;q(-N+yfe9<|QWyZYq(qo9Gr%ZEs*xfy>m%!wqgp>lcGO2xCKC+HBZ|~afG3y0V-rGe9S(g`)@Xl> zjR7;^jZCa+wupaYwzO)FQe%#WYOemZ+;3E{WrBA5V;DJG8xKYgQ>CV6dK(jSV^xbJ zuH}Ot=U+5avg}uBPn32CKMraveW+SCsM=fJ4*=Bicd8YOjTPTiZ*Dc-{Hw}>H?gp4 Wl_E`*(rQ&oO;s9Ss^C!I@c#gdJ=Q<~ literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image9.gif b/doc/salome/gui/GAUSS/image9.gif new file mode 100644 index 0000000000000000000000000000000000000000..80a7fd8d65518b5b7f92c911d973feaa09ee0393 GIT binary patch literal 4593 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 Av;Y7A literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image92.gif b/doc/salome/gui/GAUSS/image92.gif new file mode 100644 index 0000000000000000000000000000000000000000..fc4dc5278e9048ded75fca5228ff38d6aa4ff085 GIT binary patch literal 82375 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%0D=e0>h^^IysJ$s`T?ChnEd%1>dz`U^ovo3T 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

"; + 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

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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image56.gif b/doc/salome/gui/GAUSS/image56.gif new file mode 100644 index 0000000000000000000000000000000000000000..3249022f4bb2a64ff8a6925b3b4db37c9a8cff4d GIT binary patch literal 15380 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image57.gif b/doc/salome/gui/GAUSS/image57.gif new file mode 100644 index 0000000000000000000000000000000000000000..8feab1b23cbf5b0f9ddc9de48e6ccd8abb6ad1ea GIT binary patch literal 2023 zcmX9-3pkYN9{;M@7CW^mgofLjq0#4Z z8X1@2$Zb%oR&vtd<5*fEx=`*V62j>{|M|}QJoCKQ|L^wy#+mE1Yv+j(EDKw}6hlD& z1oR|;oj`CO#=!l;)^`jBLrF=A$z-aks%mIxuvjcMn{8}t?C$Q)VF=a;BN0X+1tLHa7*xO$9MJ?gjuSXe;y8ulh~|SmLEt2T zQv{A^dblP?oFs9I#1X9qUK12fQaDB7h^{0MP9mH_IHHAua8L@;Xnx=X5vZjcvgr~7zNwl0BS%HcvU0< zRA2(|00X4aODG^Il0TWM85t=Q z3PmDOTU%RIRaI|q@8ICz@bK`&#Kg?Z%;MrAT7D-MO9TRe;=@50q9>SP1;Y#uF~xrY zQ-Tv^7N-C7vx+ z1#OvM`?ltAs|(w+cb(Th%;&E)akDUNh~#<^SBk?CI6FN2RuX-hQRlWdo9+WnEcz*tB}3w*H5d72(+?WAtJ#05j+kI{Klg61TaH;wYbn|g%Y1WM9NjfDaw9Hb zmF97$xxX?yf4=9cvkt(o>;w6E$)1*uXHWhR}5;4H`*JWl-*3S zEM)j5Z|Er==I)%W9{$bk!`QY|$02=vXEP0{#L?kF!mBjCNBAozu2aC@zWc^5>a}Ry z$1(lP!(sIPm%u5-2Jl7ddrCHP?tF(CtUcwVaDlaQbSS9{P^gN-R;W7p;3wY zW8yS*?XJ9pEUOVtvUT9&{4|fi@q+8;q(&0bAj?gX+bT0I%5&Nqz!i&1CQANQwcCU% ztwo7lrIJ>cO=UIx(d=8oiHXVb`%5inD(u&1n^xL3tBpqus4J;Pc0LO* z3(c!k+`s6HP&bfoiK&12$n5spKW)rw*5_V+A!HiJeSYtb&>a1JU(K12n4#G%AyHbN zJ|C5uT;x3dW%j$u2*k--v^GBUs~V0FD!de`1qh_N8k?@LT3DA_8qOX z<~NR&w3RU0X$NFhUz0zFci5d;f zb8Zcvd35GPJqb^`Trl$CSdJ^vcj~;2Ww`U+&9a&+F8Kx@&geC@Yd?v%`geEVmVz>C zGAIPiNAwi8^X3DXgJtJmHns3r1Ev4v?R@bgieD%{XxQ6NL>)~zI -t8QO(>4ghj zYZrW%#`S--SQ>Mi4PTlpY?IB8?fSGPW~#(DV~<1i|%M^LSxBRyQMXEklo6w z%@6HX7DwZxE2e|nP0?ic)^5g_4pMz5&|9UqI;{47y-`KnNQ@rip<$!4HQ!|I-HewO z{u%4e@eNgqpMUPV(Lvjq#TdKQ>gQYTD?t z&2P&0&Qr%zl6m^ycgeX9j^7%Zw$%R2$x9WNrgnDme-&(Vc`p$9i1%L);@9Se88hvZ zn6FKy@z$i+*=v^$YsEE3v_|%sinP{fns@u@cscz&T|fV|oO7j(cWjpIOfIx6;_`AC I3~bN;0AghI=>Px# literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image58.gif b/doc/salome/gui/GAUSS/image58.gif new file mode 100644 index 0000000000000000000000000000000000000000..0acbd99dc997153c2398d550c159bc13df3ff88d GIT binary patch literal 2649 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�}P6eHKI;4Ov9N1powTL2wC(wg!MiLwogojL;%M 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image6.gif b/doc/salome/gui/GAUSS/image6.gif new file mode 100644 index 0000000000000000000000000000000000000000..79395f6c47a3d622a9110d7d245abd12f2a492bb GIT binary patch literal 25675 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 CWHdkk literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image60.gif b/doc/salome/gui/GAUSS/image60.gif new file mode 100644 index 0000000000000000000000000000000000000000..e5d60d7052b53c43894a635dd241fe2da2858848 GIT binary patch literal 1963 zcmX9-2~<;88ooe;fG7e5TyUcn2w1>#&$zH01GE?{p&$iYw1CAvgt2E_kciUG>p`Lw z6$%PmL?dfN=y+$5uu1u#KD?FghQ0mAp#_WpaPy?jwiqvGZ+($DaIVn2YZIWgu#@- z98V9|48eq8N-)Q(f!7ShgknlD$5%2OCLE?5=6InX9F&4Io*y`Y1W*A6>fo);1{}a3 z3`2QKKnWW{7)lt9cL)jyWhiAh-Yuvh978!Uq;m$Ib)s}e!8SO68c+mYb%_8Km;gM$ z0BQUZ3J4{HRJnOfFB3}5g?%yp2H>VpcnxDnqY=iDcTqr87Y&=A?)6a*d-N9+YDUt8lndLPRu2(arH_0&eZ-KR}f_V zThy&7y8uPYAAijKykc}@>CXHu3q{Xl$95`EWYY_E#leUp_06gwuW5gy;V-2xVk~9a zZw((CSSk`)Vho0ohdr7q3rfjaL;WKeid zl`k;y><$!YHlE#(!~`FSzGQN6YfgrL{jYYxfqsbv$$P?#t*(SI7J7tJd zdOxv{l!%;OmaN~>Szi2>rnT?=l8ak|V=v2BD@)($_~zw%CXye_W3^4m%Iig~T&`o~ ze2%-Sc)sMkxvLfGuhgHfZWFJmwN7=Ys&~n)R9ZipYjK~WbCcIw!=9`1OIM#)mKk*? z4}0D^mFs+?KWm?;{!ZLg=Q^vJF>%>LJ&&9B<`d4`xPL$Vwrztpz~djyC^~+&axy~j zp;8+#>}s$W@E^a2^PW>~|I)MZP*;(-PFt@T`S@&-(n);y=G&?JYiewqPis5dimo1( zG}LaMD{{H+G52U)kNdCx_FSB*EBN@7DE_0U`?2#q5{Ih!-qCko%{>X)_2_uF?_Mv< zzOa~Si~exgHH)VarE3kemZe1QhIk^LU9Qa%(fg4k2_{1G>f}B7#cMq_uY|IR=SM2dyHzz165DV53L<1 zIHloPgtUC!X@|jLn=x&VL&Rvs-T8X9p>gkUx}(OrJ1`B_MoQ=eauR1>?8{OD=(E$Y;Zsc7kQF||t z6_K_f*^MaeOnOgOwP3H$n?6^+FQUXR+>f&xA61Ln?-j;q7kwJ5lHJOd()9ESoHx4R z?78x~NVAY$xe;{;m|odyIXRXu8oG3L{SD(Y_Gj#t2!!wWI^~Zx+4@sC_#5lDy-b45QuPLw=|5MCwJC-tzly&UH)A33RNhPu)2_EmD{6m#RCVFf r1-eJ>+p#-bn~_6H?6-Av1fJ4nDoji5{eQTt9(D=}6 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image61.gif b/doc/salome/gui/GAUSS/image61.gif new file mode 100644 index 0000000000000000000000000000000000000000..a6ae4a1ed2719d3257e5bf7c10cec0f198e702fe GIT binary patch literal 34441 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image64.gif b/doc/salome/gui/GAUSS/image64.gif new file mode 100644 index 0000000000000000000000000000000000000000..6725916ba970449386fd396302b4b151105617d9 GIT binary patch literal 37728 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%0D|i9{cn6xw+P*jg+M%qPxmb}&gSD_Mp2>hu zvF6;B8Q%Tf4FJzO2=5*qud2z+5-11JgA-EniUN(9Z>Wa#hI0j#bF&+u_$j(@5!$0S zdM7bjO-9-VPW;B7C(R95ej=kfFoRttLMxC3F1Q99_=+pQ2LdnwKyehjJcE+a3_96@ z-Ib!4aXoTe4X7r~+GrNj6NCG-k<-~^shO@2=>pu?UR zh(vbdkmsj1=!gCy|8M~klMg;bj`#C8|9^l`HA9s^RssheJcw}MjD`vmHe^U};lzpp zEmFKVFouj&9zDufC342989!L9V)Ft3%a$%*wsdjC<(Vb`7QmVCh=!sR#~pKvH{+cD=-fuhB;+1b?ViwU&C$z8sPco7jhe)X z&zMjX7C;671PWtS+84l`d1@-uS!pJ&S}RBDSP2gRDS#Ingr0fvf;V8T@_rNIYx^5Mmj6{eg~K?yg&)6yL#m{8MD0}4QZa~moanTH=r7J?s^wKfAQ z=g6Q+iUhGpP>M3Zm?CjA(paO7H{zJ1jyv+$qmMrV8KjUr8kbpe%dN!WOVw@l0z79t z(LqZA`fx^EM+CLr9Y@gfLLD~E#~pfPS<%EwH8o)ebXab+#d`4pwbTY;0pNojR+wjH zOI~at{~uTL9VZf*Pu* zqmnvgkt3ayQj(3blt)Wi;Nij^F0IAVS$4d1LEzzaSAh--UX z05EKY2(0(i3-B#fhg{0qkwKpUVk;rGCm)gEgYTTo9e}o`bp{XS28@`xLpvrZiItus z|L<(|?%TA}PeX0*sU@YVLvsNevp@q^l%O8~Tx4lQd~xYl;T>RBa7F@8VB-b?cwVIz zQbfha9eMNBp$1S-g_Y(VWWlvE7glzc7zYC6r?=Suq1fHa&7^7_`tt zbIz_GMaTv(W~gB*66vea8@1}Iv)+1*Q=5cj(1kof6U1Vtv8vZ{1$f4E09{C{$NhSbWAbRHuX`G!TbVF6h>{|8pIge5{@qkwoTSET=7dI?ZB~mr2>4SwH|?+a2$62QdZ;1$r)7{{|@p z@CyX2#d!J&%21k+72a`0e7>Vo$mC;{pa_U1P4I%1g5m?Z0Ol=LXu}QAK(?jGrwI;Q z2@vBSx-FrVqvBq__n64?MS4?k5UL5fq079uyL z{8Z>IE!l$)fB2Fh#*Z>b>rMSu)S^pXat1NlBquxR$xnhZl%gCZDNAX}Q=&4JF-k>8 zTFJ^+!U&eKbR{io$;wvN(qFRsp%rP60iL9f3mFhw4sG>4`G{#iU^!t}|DdBYGi)I$ zY+06>TwsD|(rH;>kwtr&w0#Rud9Xj%6I`Kv)V?m>lU6NUCdyvcZBTRcX(A z;xnK6+$TT#=}#%{(vf+{L;Gs=rrg<%B|ex36Cd>eJtp?l`mw zs%nVJ8>3R~2Q#pmOm8B94s=bNX8_yZAU4rDWuQt#X^DW$<1F+nk30a{<_p}kEbiP% zTRK#hQ0}x8#I z+TE@tU!+|aeK)+`<*tj$D+AfYPP5LvLN?|=6RsZNkBO_5fCMyEmT-X&Am9QnRx(X1 z?G2f`yOUogv=+9`BPem})fj#^qVIbRLeh%!bKFSoj(FH6Kuj}CtgBY==p_(&F zY~mB6*c8rCF^gC1;ug0U#WGg0X^xXwDmu3%7I?w}NZ2Gb|2@#4WI=?fNjJo5UNf6@dYUva zAx0bU28|t+)Uz!}=YdOxn2M(q)E*tejkwyQubM_{szzA26kYg z>Q-R~$=o*TI(o_>gO2a-(_D9{OQL%WkfEgSbAU3!>b zf*Th#ECXntHH;{d5f^==1_p@;(HY{9g-GNgs_->Y(~IMUzoZEy zXh7GdBQ`vturAD6lf&&cIJ6vLPEEL49jxSn4CqNM)#JfjRyEEFT{9Z_fn0=47~~tS zp~q&XdCl*w^S=Xrurr8*zf*(|i)iE=E7n1`G|5U8c?9SyIy~Z4Q3FBa<_AjEfv};@ zk`i?G49f_uP38)eCJA^xV9AfE&B6nvROn4;|6K|KG=1PYHO^0UVz6E2v4sqPK;?R~ z581%|Gg$YP?~RcZ6MAs-z(YU!sM~c&B67d{HRMa@u*EqBRf8Yc!Vf0tfh{mqiyp+F z=<07szne~I&nG5${2;U4R5+}y8dFPR!~fhWF>pY&;9&Yeab^o#o4k1G5C0O-I#$N)K*z&SJlpmfVTEWr=Z z(VfHr_LW2p;t#^vm;rSj{I$dtn2SLP$Q>-%!zlflN^B;m86fab-)ZRi?m^oHgw)eaV7OH_jZPyiZ`Tef`#E4m_Ol%Xu@BlPjy9MZ-N z^gtTbK^?e&6)=IgZ2>u?fhqXF{}L?0f|vqI*oGix9w9d4VH^W5SO8b$l^vKuH)WyN z`~_F#jtLaxuT01;3J61PnMl>l?Lw8sWy0sS#o7GNR0wc;z5$Vm8P4FV-*2<1-> zWl$33Q5t1Z7UfbRWd`nJaGVD9Ar))H0U5GF4EzA6C`VN?K~~N{48&O+Oyy${-sw;c zN^ssqa!3haLpJo7Mp?l`F^M;PeSH&>RT^*1RDZkc53H#=FhKHq;hT;%u6`L0Mm{34ioa z8t})moPi*XlYD@{F!WKa^vOCA%qsqnJu)BYP-lVKS`C=O5{SlvGH8Q3=!15KDM*$K zjNuGCU3hW`0SLfzz5o`Q01v1EAE;-=)qx#&jDo<4$h8EvAcbI1j&Q9<0(3!6iW8P7 zj28yzPU0gh8fcG(*x-={gbL}9Iw&$;iVXa~5s2l5V(5lYTL)BwQ6R;`s72t^=7F$; zB(j=(Zc~1clv{|@{~f?k3H$>ZXvKkq30ZX^fVz)>?x<7xXq@sCC#lFkjnZ)-sWY&G zMK-B(fSwS@LMgfwVEo4uHb;DD+7Vn8AIV227NJmZOoA-HIc*V^K#cgvMFzkDn`(}m z(wdxts&zFMV{Hm)a*C;z>Zz(~s$SNS{(vdW01@zMpKgdESil1L05Iu?iN3^iaK&M^ znoyWPaRJ7l9GEHW769CU{*Jf&KWtt9>!m19CLkxf? ztu~4UKq*$38+1U$d3udWX-n~?t6#dwaC*g5yZ{a147BZxDJmO|wyBPiA&>fKY7`~5 z@ll=z1>cf^O=H?&@AH>$-01!tU$J zZtT+T|Lods<#Mhq*uoN!pYHN5<^pf<3h(d|Z}A3iE$9H|5`iD+faNYJGs>-#n(GxT z3m2%t)hLCYuw6^dhqxG2$T-VV)aU2zMXgW|&m`M27(=uMj6F^PWyC-n#6bMcul&+) z{m$?G>aYFoZ~pS{|N3tLrcYDzN_MZv#8<14D2GOYj6!a0Od%{rW)< z)PT?afCh8022-BFiSP)QS9qyN4KQi+28;k0gA33@PELnVM3hj-(f43mZAJy$@j=Yc zofbN3{QWnC9y3maT6o)6Du(kGqDsqaTHte6kl-_V{z{4uI~13 z|L=CL@rv;nlW`fF@fjB{_mN*M?Cu(?F%#6npULqY)A5|eF&yLZ9iIdAsxXHvfHXwy zb|^@R(q#-KSPe(270`ng`~y6kjG3HhfLJd*;6OESEf~fFxDvr8b8;tp@+X6GD2wta zlX59{@(vIIIjFKKZ?Y+ju*#tHYDn^$P8MMy1$ zIYkJo`R(uY7CXQ5MB8ILufqM(OFgf`5zvc1|MN$KbV$EMTarR49$Qs_MNJ&rRwNG) Tw?R2Hbp6@zsyv}g1q1*)@*Fz* literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image65.gif b/doc/salome/gui/GAUSS/image65.gif new file mode 100644 index 0000000000000000000000000000000000000000..e32c3ba2260c06ba8e22afcc3f46235dba22fed2 GIT binary patch literal 316 zcmV-C0mJ@BNk%v~VHp4y0E8a^0001lhJ>7&oTa9vt*))LvbDXsz24s5;Nall;o;)q z;^gGy<>lq(=H}?==;`U{>gww3?CkCB?e6aG@bK{Q@$vHV^7Qod_4W1k_V)Pr`1$$y z`uh6({QUj>{r~^}EC2ui02u%m000HS;OBMRre)Y=Rn#O!(Bm}Bq9n*6k|wIME|`pF z!|6t)Q)<R)I2gcLbtJKd5*zf1#11 zKe25xiJ7ykE4gEEkbNj%dS`N8N}Xd`#;e1nZOnzcKCT4P!N@+g1=xJrDZU2Y$A^(8G*fB*jdPbHuO@&U*% z3~c`#uAB@}>UB}PaQyPa923biM}rpns0f~L_ApVJ>Z2awwKZw$okxZ{bL4YCbYIr?rlmnMXLB8k%aJ=XCus4}t;a83 zn-H{i?~Mxy_gW`!S$LsoUgy+??1QZ}ug|~hoA7bvgKUM%T;HF)jo+sGft@R1QXwzL zrsz`bo^}4*^)EYF3*($if1G=n?Hm}luUpnwYR-=fi`^!ux*GMgeZ22AiA#6W69$E6 z?$eqAc1}65aaq~9CjIJLHkOyuEf?4vmRMUM%+k1=g~4I&uMoA+l_3kG&UBe-H&({& z4if#Kqcd*}(}|?dr=~gFV%&GDsy16;-JO*s;u6UP2@bdRH~i-_*l^(BJr*`0?YK2R l93FP4${0jA?A-M96pxI;S+>vWPYPs$-#wA3$`D|%1^~-7TAKg> literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image67.gif b/doc/salome/gui/GAUSS/image67.gif new file mode 100644 index 0000000000000000000000000000000000000000..78aa93fbc93da2d9f99ae65241566428c0569dde GIT binary patch literal 3591 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 L`@H`^KmY(c(bbAD literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image69.gif b/doc/salome/gui/GAUSS/image69.gif new file mode 100644 index 0000000000000000000000000000000000000000..36f57602fa99fcb98ba2bd877a13e573fb28e6bd GIT binary patch literal 2498 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 RT*{HcSSP}RE-H-d`X8wK>Zbqz literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image7.gif b/doc/salome/gui/GAUSS/image7.gif new file mode 100644 index 0000000000000000000000000000000000000000..918e9fd28b3357d7940a3a50b84189af6c535173 GIT binary patch literal 14013 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�a!j6#UX-F#R?r!IU>gp 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image72.gif b/doc/salome/gui/GAUSS/image72.gif new file mode 100644 index 0000000000000000000000000000000000000000..aa84120ecea3f5562888f4c382ee54d3aa95724e GIT binary patch literal 44353 zcmWiddpy(c`^WG1&YO+R`7q3R4l#0=V;gcxtWrsmQ-w}*D3a4*CuN3W37ssR@u6 zoFBfV6pigwCvGTF$gNxDt3*JY3P$3Ca+UCLs)98bEM24c0Rbmc3yLQN6`jP2&Y|y} zN5{qV5%D9XsMT}=CT|DYZ#5nf6&4dVveFby59X{tmY<)0oUR+-x5^5s9Xzap7ey35 z5O6LjSye%)cueVj2(EwM+&C#e_a2yHu=XK8a@;soU=)QIF56|CnE7;B#v=(BkE@jV_z9VbipBbGcHXXTTzXx zP!HN4-`(F;%*70kpu|?{YsB??OB713;P8Wy*c+G9GY&kU>p$kAHim`bPHx5B(6G9+ zrF2`yUM`lDUW*RhWTi!1eJRo&xdxpUKPD&*L^LHbR2*zVY)-1~2#;Crq>FtY#o2od z+qMP!=+o$2znFtwyCY%GW&EYfP0C2iiv<;EC;Pn|JX*^V6KZ3hx*g-Q{J2%fB@HD; zsxsETn5&^2q(v&^{)#j zvA_H=;${>P|D9WM^4BQpS2ODSB1-%l_3IdFU!!o(A5>~s!PTDIjY+7M9dXHVC3ADF zLnA{!>F7NZ-KZb(wy>Rc4^)x{iS{S@cB29;{-79_hIiX;*_WMS)4SDut=6X92P zudUzTJ~uZv@-Q}KEEb*d1N|quX;Es6zcAorQce!Lg@rr(V98DA!Uh2rpgx?9SzGS+^gJ7II^bHu%5xj8CcOM$Z}Id>WY_0z zi|b9}R}F91Zh3Hh_u3oWsrx2c$(LW=itc~&^1=6p=XYSF#$(Gianz|JN|q5F#~4$+ z0@ppy$n7oLijUjud{td$_ijk2uw8NW&#$wiqGe};9#$nHhAzeEM=ZOwf9vz>$uD{? z-MaDO=^cLW+hrYTp>Nb534y^o0oD2b8qKpoD(zktA*`aSr87Cy^tZ1^ zqgHf$>ABa&HD~(iYwo$jQZ(Py$Cm2dJ|cLcW{kj6`)rGmTPL^z(to6~NM=%2a*x{5 zdQs^lFTls%AJ*d&YMIg3;-Nyp!LlvGa+#qQe=os%)iWBtVf7p)^TN>h=^qZUtf7 zY-g$!^!_k?!j|rBgj%!Gg+*s%0;4Po7P&Sd1$lT#S}Lm-o?gOB_%9C3L%xJ8ZErFd zhH6sjn1K{LYz{spTl^lVSO zYMIq6UiT3BaLp)=Fh>xxnb&cdTIm{Di$2|F)35jhd#3f2-5CjWA}p5Qh&~V>e*4Xd zy6W1u-iXeg8}mw0&U{&U5p9 znY3;GuFQlM+WqTkO`vJ!_trcl%HP0m$#{l+bf6|`%6y3UpoI-mhBw1r<^6iI?Ur=E zJVU6ud#;}HyX}H&>E_yygg&W`Y4_G#f~J=@$mFe&YQ@FnkGNc;J48%x8)%khb;p&P zdL$aOYj03c@Vv|uMiR&In^x6|mK|j_9hjYD{SS2vkpg>0pltb67c(!RU?hKgO5RA& zJ~zJ1EbnTIj+EY}T&ETcXx+G@yF#26>ZM7}Zzhz7*`(@CpOa_f3iQ1;QF?Zl(&D^K z*v}T*f{J4kRo6Y9Vu9{ALP^pXM}QlaosLkBRT&c~;yT*Pg8x#CM!d>LWHdHf4~5>9 z681C9^UBWB1c6d>Sk{1SX`mf7&jBP63wyJRHvv?KSiQ=`oBg+zt&2DnN?(_g-%~(r z)OyG{@5uygi>wjjx~d9Yo22t4QO9gr{Tc!`-XA@2S#|5G&`u3e6rWemJ2}bfdl!_h znru;5s@L3WSO2sjBLecQsNHcJj&Q<2|?OP&(P^)GI)Xe;W7-w#tn-{i6O_`9$F3K8+%-i#-<{i^gAy z`wBtdf%Beqd{?U6shU6k>RcL3`>+o}O(zVN{FO3-)Z2d-^A-d+?lRz+cHWWU*~iL9$;2|2w7-+ z+Fqm~P4N7mr~P$VuA8EVb^qfxh9AjNDF4C+{BHVMmzeS=Y3Cg7dS~AO+R6O7N6*)-N#F9`|JJXUa`pe}mv0fQ-k4T=VLn9d zdQ`&NlxT>x+VegV2)6rwq=b&Yb3CC-u%7l0NVEyhB6$;jlfdovThBEfapKrxmjr z5FNfj^QDh;;OZquzuR-+pA;FHl=^3#c5>_rMPbdGq_h`mF3m;S;p`ck|FN*wYd&Od zpWZy$nD??Xx4VqFi_a&KzLfs=II_=S2P5Y5pvj-18}j*t zyT+-|h9Ui2OrjIt%rA8>c18H3%`()(jEMAd1($*AwEu?RL@A*e?5Y| z6i0qvAEX2Y50oZPs;R77JhHkc%Sf1o#KA!eN7jVGd3M-EI}@W=SH`_;`w?jSVzzj( z;L2il%Ob9%LM;SVxHU@D6%$Vn1pQYdy{7_6dg?EJD44H ze1>;hJe&b9TSzKIPbR4IcD8II*Uo1B@hv`$0~}nzdwTYniu|4~ToY`3SHq`?sj@Ik zTC6Df*;ewqq9ln2kuD^#1&Z&5q=%784)R0MUlWsh4e!S}?h~bN6zlHgr>5uX53c8r zq@lH)j~+~QsFLks`=%7Ejn=G*zSX%>vDvV^&1|1E>pZT&Uo-nJ7Cz5}S1;uiJ2+#1 z$k8wU349*TCzt$}H(YQlQKQE}NpL0iNjM}(6=>4lVZX84Gs zR`zU~*(Xufs?g(0SkNv&oM9*q36Wa`N=$rqD@^dN%&<%>@q1s!$uHrISFUN`b(pX= zI13EO2wp{Qbc3L$FV&oLBAlOk1zUPKKeO#X=3b4w4`v4kg!t2u30@kgf|f+}^%*#W zf-^YqL4cT&>yW!`6><+Hf(xg|TlmG6}|aPboO%$oc& za}8ymD$mIA#DW`Yqh@4mo8^Um>~aQ@JAAe$uIM`caC3hum7MI@cZg`dn>&8$pG=R% zC2tV}gva;)%sTysedS5$jdOKYQRp=XL|=ZK`P?p&EJfC%O2Mo{K*F|i1MyiZz=o^j zUEJXqYo2<9nd<12hpH_d={prCIZ>aQ_fq2o*KBv|jXd}%_e<{i{h9mOEO@H#LM|S- z3@gRUsO`f_h5`jgIdLiy(=I#h;*78l+moC{W?GQ5ZYsa~QTHVM(zEnS#R1AA=@I@3 z<^ORS!rN14Q~ink$%@WLqbhUz>8TMHPp#1wX3@`YmK^pn6L=jshJXp@o?ZBRq2hi3 zc9x--!Z8epGh4dBeC`;{zgTIJ2%Ti%JuI5X6E3M*HY>ZH4O?>-fQGMc1Ac5T&mbd4 zF?=(o&~ZoUZS$kcM2Ca-<=t$^-IQ=q-(PrXsQ|NkM*@6u_oQdzqB_b((&Vg#d9tY@ z$X@Z;feRuA!e%&)9JL2ydr4_?bI7SnFD%IT;Y-*=`o;4J<9*m|g7QDkLfN}?YuBS; zgcIZ+ArtR}7JV%V`Fyj`^eRE>wT&l(4yI^zU171bs`4sknTmO26%icHIY=3~Nu5$x z)?nd_f3*p8+K>He+xVjS-T@!y`uc$T^>kN*1K3hR*v0;~a}9(W+s#Wi5l&=jp4Zo? ze!4+n|8?88=wNSGgbpKHM~-l$HFkS7-rTlfSFB1FqrH1`NBJtu8f;?8<7>BS&;BP1 zKP||8iM=;)1%-C)!ouitB(=9>ubi`gbr26>{f4LKbSfLL1x3MxtL^^6a{;-p6%Jb|*PQ<^ zXMYY|dB?JEAy)g|P)4-x+9yKC8Tc}Cr*UAXQFy0eb*E8ANB;{--5b>3TbA#|XE_%e zUSm&IUOcgX_K;3Pdi{fz_df;E%lT8T2{onyjf6Fec8Z@LkmU-9PMuC8w;qe|o{*-_ z?>p6~g&hWo*d+OmDjk%OEAr}(BKgfz?OG=xm&$4m{y6PHuG<3xs|T$a4~`3Z)=Qh8 z4|nQL>h9=eb|1Gzm>K`o8Yz7ghfgD}wrh2qxKjVJ-8nDpuOpV@xX(S<{rrarE_4jBqO})0ruyvhQtf$&K;+S4VlEE zQ=|Zi8})?pc;=YZ?kbS%Q@uM^fhBH*mcA1iQ~AN7Vh+8)7I{fx*=NtjeF}f@xq8rm zIJ9o^!LOZ^Aw#m()Q-HQD)w+acj?{jY>{Bu&fF&tgf15jr>7MW4jpz5z3L+3p5K6e z$f|B1&H9sTQP|)8zO8YZcpUrj;j(Gz@)6X>j>m0HgAuzQ(3h#rQ^X_8sb<=H;p&PRe?3dlVH>-&Zv?@?Cym)nS7D#Vq!4zHQV< zKwO2c_G3r$`@{&qP|{3Z zwxJ>6zepuUUIXf8?yipmR1kV{8XvE4?mjcM-r|0|>kZ^FrHulGA1uO;VMruLsFN|u zby>YXpG{?m*SNR3Zqhipq&r$J8LWOeUak8inDSgF5gRRhbum&=6@X|OWWYcJF3{q< z{>H%S!R7TyZlGfMY;ePps*1^$(=s#Ta5Avi94PgUg8X4Hr zVuB4vVU*O$B4eh6NUUr2-k&%02n80;k0i_QSLnW)yfi-TK6PgItDwmTU+2h*EJr^f zq|Jc7eL`o$s8j}etC+}&fV8+smItIQgLaZ$h%zh&Zdq>1*Plw@n=?yK7#X8IuHeFD zqd5)1Mw47J=7#{G_7_3X!;nAE{16kU5ojARY1J=c9?R`Pf3aixo4+pEPCrM)#Hp-^ z*_=JI!%O?rHFl80iIjaZ^tVF*u%^{$7{EX~!N`4FtSSTX9|Kx>7>nhCePG%z@_qeb z>^H7Y?)mzQ_v$Zh8XhAO#BWQ2s>u=p zF8-&nUq<_oqnoyT4%j+Nxa!|#v|N_r{HM#=AzL+Gu&(IL z6k>7;u%N~}NV3_gNsy5u}z3?ZkTBa9J)4f>LGJ!vOrcgpKV&I!TbR z%WYn#mp8nx-#E2!Qbm7XUsvDaK$s$SxnOQ1>y6WjIjS7tBANRWiRnJ0^ni@IA(->w z;@Ty|C^7b+Ka`NEHF{k{+x|1Vy(K=U zG$XFFDcU}FO0;<}l=Gb%_P6Xl0ihP+=}9^ZM|*a*N_tdr@4+zw*p5cJMZ2xb3BELeB(I>f2* zbZ=ELPGcivEHwB&v)F)@;ee*%g!C7r1S8!6;R<;QAlA_cnW$!YMKIYXCUT9+$;_^D z%ec#28SIl1H+t56ug@VD`)bQS%!LPLZ?c#2GF;YXQ7EPZEj0a~4-el9=v6R@nomq? z-le4weyuu$H<4x(fL`l+BDU&K{DaDux1P@BAx;Mu)0yXm`+KHHDUSEnEWfhl@9&cB zXNt$v-wdKisdO+*v%VxC*A+wWt2&YHeN~3bY(7^+Q`E?{S&?dj>!$+M;n^&TPeP)#9Sv16SSJYTEcS4AeKY9l z8b6OiTMR-yMiwI5{yLKr0F-$wz4I((+UvKJYIY|UL4wor%a6kj$9(-n?AYJKxl z6@OFErpm^;F(Rw0J}(-c_Mqk&hGMA9S_=%2ebd#8_|*3p9F|Lvin<{3nK5YlW<+tU znIVVXlNs6d>8&!$GFmDf8|X`DemmehEJ9!UU^&l2mRnp_WoLPbWUQ+r)$2D740Rhn z8VGws@&q*P#%Fa*{lVhbhwo11SFHw%2vyHV0IgfU;CL}HVXe${zIZOCEV}G>#fOWH z9eu3JI^DFwqtM~LH#y4_1od^4rmt_XIE<)EK~dqBgCeM1ymm3lQuG0p8GKWEcGdqt z1>v+d_AS}tNs(1czh_01*7g#}O+WSs-c#4HG1G`MlT{`cR_rt%X)487o3&Kb>ZDndrTY3G;h8zw{)^yqaLCz4+p zXtmeui$wQxqWKbOY!W!hkuwWiq+XdoAxZoa03kRyA>=E{eFLbRTonKmverZmP{oE5 z-zKqH5ZE;K23Ah-Mme&2(~6Q5Q}Vpr4Gt7N%9P}ipYiQoqtCX&#^*=lMiNf@ONkdb z$RW)u>FhB5k|rPRv5Fk6dd4HixDoqX`6zI(P#CcIbVUXH4l@Z>G6(pXCcC2XIdz>H zj-_`kt)LwTyhFO(TA&B!Z!wl_NIeG1?Y5N+L*@cxk+@u^6=1gJb&d^&{yOgX^iRswr?z@9{XvF6iJZ;xNdy-F-Cuksaw+y|d|{WJ#(w zc`K7NEy&SpHbe(-I_-{j_k2wB+3ojX&9du>rUxGG#Qfk-`+tbVog992rd+tg{agM} zfScW!rL1R%+@jf^e#2RAT#5KeGR)b(XP@qfE)hfaG9NQQI$6F%$ZPJGj>YKt=WUAc zu!D7&kr1FuNeeWT3&)81gf`>vLq0aspI5N_*}%f}r#=b!4ZF?duk7yS}evz!SRS~B<=19=#1@pEMB zr?|owuB4qOCW#bzl%3s0wB_J^<-^4eXJZcayZ_kqd5mY|4uIPp zxuUDR4CnMr0r_DPuF+-J=vVSprwa_m!?qZN=zN-H?Ks2_x$AjC0JH?VVH zgB@aK3)+6CYmr-E>H&y z87|(>#AA<-y48dM2-Repf0hjqGDe|P!It$@317dJNI1C-?ZDl{GglZ|A5aT^dS^2&q&oq zZ7ZujXyF(LmNu98#1vHaUQx7bI<*srQyy=M*Nxk+>sV|*5vBJl5?1}p$nBjeI#IYu zIY>E@TI8UEY?CpG?{1gXd#}M{`)5vEMc)$fDQ*9->X@D2dKaV*SS~+VW z)^KD>(97bar*_Qvwi~M|P{q3j!_j>GGK5vSyfb2LKm7eL%7-<4mGAoyXOU8Y)b&^( z>KQ0(CmK=j2)30ZT{`2KRTRwJVE*( zt&Od`2L_sXz~jpNCXgmvg8a_?#Ufz{bR1Mx{mlmZl{~T4wn+a6nHr6=J{<=siqYf= zS@s4`hh4V(C_%c9IvG|OU4ubP>;d$)*M68CAMYx?`osI4HffamvDlb~Td28TPmL9> zeq5s$JE;nuVX+ned|~B55pW-dRTdFPM+-R@`N4!M>Y8BJFWmSeApFPVrMdcfS0N@} zXV%6|j_8pU)@tQPE|#~+@~T)63IMYuHLlH$7e>bE8v(Ha%xmt$;em!0>Uui zFPXp87Kg+Rg9mj5huVV^Bm~{?8RTaPMU(7rnW(3X-ONOEyS3^?tWSZ z74eln!7!zuYy)Yu}AywsT#{v>esE zTP;^}-47PYRbYEA3cx5;m^Xh*P2P60RM=^7i-%>PR&nlai@mqKH7j=4y~PKfxz29C zHW#D|bW6+?fDm?p$wec`D}qABfUclQfE9u98rYSLw2|}i{|IrPm1-7!8GsRsydZ-r z=`7#o*~&CcU4wwaP$6cLo&WWX8tGY~I)K$9)poe@bQ2(~=E|jmbmW@f2vu>W&NIIQ zX-M=U@Vh|aIZuKv%~n|Xt+;2HNd-OMX~r^ z$!v+vqAGT=?06%v6&JYnmHm+;8sXLZ`v^-#?{m}R1ie#tmASAwt-F+CV8BF}`}q=` zp$tFd0i1S8Um?h=4115W@55|4u>59I?q55KavX%34Ma@kxkmarUhS=JD8Tvg6~su* zwtp!PxcVVI0kCGl>S6>W&g~N+F1G-WG$f6V^aH?`1u(-lrvme%e&VV~J73 z#~jkbVMS8bzk96c!ZNDpS0lkjScoTA;^}NcTUpSL0*C2)tNqs`&t?+kN(z0dpbtv8 zg{+X4;{>^b#Cuf?xFi}BA}UU~HuU%*_??0wKH^vs<%NP_-A)Ri=?N2gf7}|Db3r}= zPHlr+S@7Cu$`Z-o%=tn%dJzg}gHpMuBdvUOA&QpAw-X~h$RJ3NONqconQz9IG+cK>5`01gyPY*wS8t}00v3Cbe(-AOW!Z3`nRd|>TN_Y?d2pbRK43}(% zJ0iXy$eirHH^{I8{+;Af=e7dl+3JUeXR0EbQfF<38~AJEc)DD$FpU$|th&}_w73XW zp#Xw8XwU5$`td;fIbGJ=tD*^~SG3s6$p1>~=+C#4K?ZTq%DjFIE%(GEA_nF!*CYmP z!FykOTCyB{_#x`Zr>D)2H(o|Ro1@<^k;95>A#5L5?JsBsaPUJy$YXd(Shl$$w^)W0 zP9j1K8w_tgCQ1;hT$daw{!M?=^|yKYE(o$W&lo-p3EF#RsepC!+wADt3WE+q1=T!& zje{w(CPWe6hEp@@#dGq)tFm}l77vJ6oB}>N4f(=3^GQMVQu?R7gYJ!DlNXbpp0++d zTf5L%JS^Zp?r4#@Z*+Ow2*WNi-e?pSck^zsW|ehcq4_!k*>P-Kp|=tfVRP_Y&8DJK z23>oYuT1BW^1@Ltg2?6FPb#gL;`wFN>#%tCaF(oD;L*m{#SPd2e*m-9zrfBSKs1N5 zlph$!L8jyfMjS-o?3QZO<`#z+is~<}I=uQ($9ysnQI1m+taSFbg&Razo8`Ky0<3SO zjiNbUhx`NxO&nSIC(j97hW|~$!jtd$KTLQ@Iz-_nh}8F5D#LXoVd-3;48Xln{_RlU z3P7q1Z~9~{kYiKhwwA^53U_H~u;@$0{gN{=VB8X>#KFd#q9dHFznvo~$B*X{R&O@q z1|;lqYeOoD2^bkq?b)hH6)cgw%7(d)$csT}f&;ia>I;`q(@<;3 zYaIzTjSI}56+mJ#B`f$vr4}g?sVe91qd&Pss-nmc2ji9lv9D$y68M?8`iYJ+fs%}; z+r~o-7uNVA9Fs@&?`NiPq3@Z%-VgIV$ps~WKh!I|ev6YiSgymxu29U{`(I3}?sPeA zfyG;l{9t_c8 zi*1s_|Ld4 zb1QRY&@LF$233SGKKZ@7@;D}OCWbAKIr}$;O@EhbewJW&|A(e7W|nFT-WzG=8tT2= zxqY(=1z9?eQ*+_92WGm^CR{Z^mQo<$~vf^`KzHL?kik*egJqCmU` zix-4}M|rUMa>~7Mx7NL(yQns9J80BrwRF-U zq(pXlbd!yG)H(Dbf<7y$w52%8GxI$kRk4r>qWot(U=_;Sz=Eu~xi*XZnalYd!_xF#VXgH@CKRv9evv^WpTYKCsR^xHbbmQcs4T2Jb!L6fbGIhH!c%pU z2;=Q9eq|EL+auzGH^xI>;|BEew0?9VY;aTZ!OR;Ut_!o9%}l{ye`7n>@T>H!3(}sqO?-r;T?& z4lrB@JBv8Gsifqxfdd!Vz_$l$&guJ|tC5OviA5eUt3tIllEDMb6sDSxz43Q zM^xtUgm0C$sl#qY@2Lq!oYFP8^S_&Fug#GtO`a1s&=kNHEP#EsGNvt4XLtxl1FCU| ze-6bOPQuDEkEg@>k?u*B-o=t6AloiB9EGyXRp^L>8UG}*)zkMULgH43OAz9Xjr z$<-zGA(69MO0$~@g2b_}xbHtdT9$tazR6=QA{=#g8Xq42+p@KUA@Ydh>Cg?!RQS4} zVZSh?w&on+#J|+c)4LIDa3R+w4M}7{f2K3RrKf*of|E}nR}I+1_N9Y%~402ab= zHq(ezWW0!YtpzNdo^86R#@s8_A%9F=%+w#A6g46*9Yx*^MI|hr+_)wN|4v{VW1}pC zdXA-x=HK=+o>|e>=hU~s>hL}kE6Mm>CZ}(FFk~McmbT|)MtpdNgRh5#!8qC5qlh0D z_d@2E`8j7hOLk(dw;o^wXZPm*?h8hrJaWKi9NxMWFKhsUc&{KH*`I~*XCpjdg+x_8 zF>NHLr}6C0_^M`+PC<=z_OLPpr$@%tp3+*Pvu@VjSWS=l=Pmj9t^Q#YWQLV4O~VF_ zgMciH!UCp?2*mK48)h{0zFZ4gk9r=6_2WfkVuK5ih?di-z$I=oeCI;H%!p_ELgCob z-p!WTy-#yPhI2IqOCjPT{ZEe^(oDX8_o*|;L$LwbDo#!VBqwTMo7ZG<#Xnt-leZ|M zSLU!yCx*Ky{REQgo%mw>*^)Gw{LZ(K>G+7)b^xISLrz3Rs>Kfa%s`bBGS19z>&4+(-{YpFs^uTX zE^fSfCxhFSbHCE;;0TC(eH8iaLmTZu0`5*jublpm@uBknFbPNNSQ$7)o6xA!7+JiV2&;5uCJH#Y78<(QSLx-t|sPj@?ZND)eceU~m7(fPi;o_XO{y?piS189WfQAE_4|DP?IKivAE3pFurJ)*+AA_NWXbb_XvZ;31_$Z8A{5iwO@= zFsA2J*iM|QKGmD#GPXPRrKGFxvoVncZYJ;y!TTTa!@B8_Y)|(>)`)Xt-Mz_T^!W+K z8|8w@ze-fkbtMSTdka zhV~E45myX*{nBh(9%ruP(5byaUS!r0rL`)@;djmU6X)w&FMZsp3Ln?>GjwQz0N%FB z)7@T1-S?wLF*Q#A)nPK)>#ddF*S-MtJ;T|qeuEa*=ld}NhS@R(NW>(<>X&PConv9` zU`B|794bMb*oDJ7Jy|?5Cbhys@(&uY*p3V2(>uN> zf>WS&`yRSm%@;wL8_LAOxvRrKIjiW-QbQHCgOM!*5`_(4gZG{n=2{|H8h_|{$iH$I zY@0PcV4NU4CV}l$KhWYY<|0?o%9t+!It(w->Xv||GL{luqQn*@W@iSTN4ttlV!?^! znr&#$@-gGHR0)jk;L=A*&vqgN-hbpgYy`8D+CAB2@WmQE6=>q=-QJb0w^N8iza8zQ z!2_BS2rGw?=|(;Kew;_ZNPwdE7F(kF5vT?roX8$IDf3?0lHRM}en028tOiY37-U-v z=PENIk*ET`8<|6Q3a?Q-&Km&599!4heY$QOntJrwtLRpM4%ZCyo#7(w^kj-|lFlOt zv3RrC47rt_wZsV@w|X@W&`R!ko?7>ZZ;W0`z4C>JaP+#j4}C#VdlmtH49a@eKcRscQHFid?~~Z9>>T;Uni?;%WWTX^s;jq* zWVncMUdi2(6?fy7V)o@LWIOD(X$OamDU$tmF$ycGH3m$25Iv~@|xxSoqD638qVgzRufCZ>TVkwZ| zxD`TPyFEVbc4=()&GVW6Af*qdi)6=9g331<1+5DBbqvHkS2lqY#S0X@UpCG6CKVhCBYz$q^;iOoZ0#pve}&qc z{r}Lf!X6(#cL{gJftDTTBVbi^Ih?P(Tc2nA%*;P3o`fXgKNC!YO z^4Qy2%$W15=J1bSvy(YInlRLp?Z{KqSNg6rA%1>2_$f!G3YKOE{!01KL@%Elb5Fs|TtZdf z_qD*i?^x*tAEn=3yt!Q_|3-VDW{L3Iik>*vdp$0Cv>x~p%K|SjhpR14WgT97QFkg* z5?prRt`3W~qj_V3rrO{qEmBW=axQb9(y>g51`0i)e_vU|dnx7rzMQjn13|{gbq*9l zuq>}tQF(Xf*A}z&{z#=Za`F+9#AHi092=Q~l*6H`Vcl zO=DS(=LjQx2CLcntaazsOEw5_sx($?UmkK%O3Ert$y@i+TQ9R*qN^#{Rt{?}B6VVe zWb*tY_Jq3My_j}|*qX?^^&4E>)Rj<>+$4}`ER~$rLNVaG{l`OhhbiL-FHUcQWW0LS ztcg#w|CWUu60#PTRkF#I7MKAIPM4Yaq_TQe-)a4wV{G>{i3e3;9w;>r1j-_b>KqRj z>feFpYeY&3k!<&hO$c*k3Ae`nrh+PIq+HSEQXi|s z^rDC)5LH5@@i1du*Qr1+vTOncl>AP~1e>+9a&^?Y-TY7}T+d&tVNZ#KnsDN zHK#4HDH&ZTKd?g1S8j!{LgN*}X;dIfW6n!Ajr~isiV^WJTMKA?D?v&CrfeX_R-*Q& zUq%;Hy;c1e5+74v03u7fX<*N{ex+ErdioSO96hruTcQh{!%YC74~kFQRi0K^T&3R1 zGSF0UTN|KE(=@SzTTQk-e#v@D>!v%_dzr2}y3(|m5$snLgVvOI^huyOzBPBoHV}|z zJ5dq{ErCeGEK;CEZCZ-rNLAaW&F7-gR9N$&mpcdOfdCE-rAJ@yHT+=O`wWu%L?bjC zLzC&YNw{G>obHXnIq#mhQ6Q9n`rg$n7McO%=8s%m;Q8`*Iyp;^xeupEv0j5f|5Zng zTVk|u7aH?q?Zo=6qHo(;G=pD$5*+$jOr?^xb)I-6GF5JsLc;n0#aW0hRTWB63leR4 zms%i;B$4ti8fPX+vgVP>zYUdB*oMs2(_&v8gV0saeDJ8A>jvI~Zso`nDarob5f0K$ z#&@lLbcnKY1`XCTI6ZBECx*P;WM{I3+0L(Z{>F5g@IbXhiS-0W?>w^p#F0O++&#Xt z2Y1z=8yBeR8LDr-$Nay?J5FBA!G%!$_E%ya0gSSV3ixXb?3I((&_DcY`!lrGfjGq^p&)^@zQnp|EXujN7h2K^o99Ip<)A zcYt{&*8oy1rLqX8nNtXqAP7`p=7!Exm#`Ulr93to)@*N%tT(IqL0HfE z(o<*X_Y-h%^B;@i(l;3&hF_{#ih-rdPe4n9RScxo*QKz!6rO=jMX)J!h(w)5O|vy< zyi@aDq;5}UAgoM>PV2!?xYQ~f!j4JQ<^UDfrQ*$|;2`Dj)w^S1to>FA^HjAQ&iIpi zH+&S~cdr9ToM&0OOisw^*ByaApon$cGvKSi*(lBXh&5Wud2G-PbAUcljFsbAFF>Sr zUYG0Nr+1?u;p9@t{pW^Y*y_ZfSqr&wAPHmHYRDer>o2lMRM_S^&q7physPn45-YBg zech0!Y){u#{iGHMQE6+PbZ@(BG|MI~g(p6#%N`LYITl9-3{m0;LnHq*L^ zMUY$bMp=}4_zXDW87Ea^!OC2z78husnvMMsxJMH6GJr~9YYgvw zGvE(0c(#@Jug%LO^y2rXYM==9BX+z{h(<60(okncz61!Mz`a5DtFt8M1Ef*`>2Qu} z&`o!^oj`W8)^xtRub1`iPPv$7XJlq?)F^GH**p5#iO2Ya6o^vY=``y}uI}y>A$%GD!(?$@$$mG?j(&JLRgzNkl6< z!{zpl^@x}iNyc8S>@hFK+NI?VDs01NU3Nm=yoC+%ABWk6g{Oj+HpM@zkj-aM_C3S>!Y;=hODFtO9lEy$(!q@;Q0SD6h)e!>Hf&q#+N|ACX zDq;;q1VkhiG4}BM1N-Idyw3UD_jSFGuQ~NvNxAxntGoP2>wBt+8Ba8mh6wfEzuR8n z4`8SX#AT$)bBFL$Cn5hhz1~S zcU)SysXR_!HloML@K|jxZ3P1&*G!R`-Mec5(UN)_$_}l=;Ei)}7+nB)1+Z+Op?Pdc zCQk-M6QP2#EE=qedUMAyJaKEGYbaI&pmyksrOptf*$c~P#R=YUh7a@K^9P5{pK^aR z=w)EgXuysrcQ{G-cCQ)-`+^qBP!4(o{UleSt*`I zTC-FCp|b5(rRs``+dU55+;)RzLu6M+n~TP8WF^IA>}V!(*^+!JzZKNzbH%KIhJsre zPkWG>G|9EK46KPP&)BjPD(l`XS^&t(H)F3*J-6Lnab+2Pg`5lrB+0UubZPo1&iQic z(~hTQ)a)6ExME<9WlSH;$X7hi>Da_G`?ouPPS{}$?Unz$w4bHjfdP`vG=R<%jk^>@ zGEUZs4^nJ>`_$^)tG{oZHd8JB(9~D}(1QEO6=)IbHN+f80R2RR1HLy)H~OFsKbIFk0!r%62HdQMQ$z4d(b3M z@=6cpO0RPJ7x@TYrRBn-0VuADCSMS-uaPz0XXX?!V)}}PaCh;Q&nrr>7f%=`O{9q4 zdP+Ln16vv=k*H$s-GDnF*+P@>N<9SL$w6C&D4y(o^WgVGo8C_u@8#?v0DCHu7xY9e z>{Pcbv74E0O6Age!JKLx@1hK;dbAlw>W z0-V|9WOy_jAjxN#30M#SFMc$%(U8UyN6PjMlqRdYbl#G9`Cd~Q!Gl>QwySh_)?D@M zO@n8f9ySdu>%XY%RAec`l096kAO5maW)(kpjg~HHwMo$ty(o^NFKy&Pq5DtQnF5zl zq695uMMuw+abdXD?lTi(s^_a^{FpVh?6AklvJ$5DEb;wM&|xv5pZ5aWM9PX?^O?2a zHuaSPdD|a+gY)~!k2w&QQUsqBM7GAf!(Ua>AXjnz`77FrK;Kdi8x7O~nO(PRi4Agt zD=H~BT6$C!R3MB>h}p*&UJ8y3|3jxiHd69byu&MWry8PCRU_bHZf_Pr=l{FOW_61<>@+V0#*jPi6y|q zjpk8{59a=wA)WPQq<~O^k}nxzH#5Rn=y_hR4hC^w8>)Y_UE2YuuB~)HedjZ>R5f@N zY|G8b7L@%#NNNg1^$EZRzMK~qiSKbY;*l;vcc(6e;&lZ)A>@N0p90T0HQ+Y26`ds~BM2=5 zhUD9$mltt_KT}lfSpfr@D`sRqm9?8H3KDz^IIN64U0MP_21j8iR?g7#l2xlsxjx7> z`j0vcG4S>dpk)ct1N@T%&`8+8!8*C=0qzb5i^g~LBwUj_nyD*K z8W@RreAMu{YL8sG$6Ubg&9q7%K<%#GEG7)%#fEN zjW?};)M>QTDPkV@)9Wy$j7 z$P;~v7PCj5jZ619t-tu5_jmpEsdE|3r_DBx+eMx`0?%dua<-@?6MJoA`sjYX+ymz+ zlf)A)?pOJJQ%1|6-j!gyI5kBqLac^Ffhu}Zp)gZ&s^uDpRni136Unf5!>MGgTBrp< z8DZL>>=E4#u@o>N+J8R5J`j7(wJ-qPKLSKT3Gx-swj37^ijbTka06tmy_8Nb4&(&WMZBz2O3b#lry$P7 z#E;q|E7@YM;_h@lyd8yX2jIKx?a|uqphPVPVyYSH@tJK01h%AMyywxy^AK3#5+U9c zfE+KOA`lcf%6ST?eAb)A@=@{sDVN_M28>cGG-Ot?LxZ+d853Cil_Vp1}^#ww2eUH9A|jqE7LA3DoReq{pZ04!F_I zUImO@scF$g%)e}R%O5g+XP!N6JOQurgxxE#mtEneuPM>QUpqfE76S%(ee#ynROeBR zV**=0fT*b|8s*%zxbs1lZbXut3_`(DHShRVSvib-H&YlAc`R6a zlzMNPN0G26Gc^kwM(I$MP*$+(1`^hE38LKck;vsfI)AZSBt{J+IMOp+1xo}1r3q#W zq>wyxLFFre`1khlcSiJ!iIxV~{nQ=|KeiBRdIU1GVfz%5*Cw~HL2$b4)Dl~;zn6c! z6Ij|F|9LWWvB-}D^HF0+LX|#2%1-WTHBNY$(@m^)*)`h3 z6Au8izJ#`j{rRL+K~3LY+btedLX~XIu*0LW_JYGCjf=1DKYYLb_5l-R|s@wg81&Zl#`7K$F?xfh=3gt86{=(fEY0tV8z#S>t? z4X-BCI_!q-F|%H~ljNf}s8DZ9rW42p%Eh9Zrw23@mzswe@B?=1D{1)xo;W4T?c)Md zGJ|lHEKOBb^v9A2Ak1I{o+wCJ;UXZcV1WQPya-bP5aBB7*$lXV0Vx2`x*3ot04`eLM0DD4jy1ulY3Z-?DE2-@>LHWVL&x=>$Nj1qA{->p1u|!w zzDPpLKVpX_qF)OE9&}#$;nJgRyx_u;MKP@HB{jB$+7wZ83T@mCo8DrDW{ktwh$aTo zd;uEq5kuKhmjp0*&td}}ion3HFfd^Zr2?|Z28g#`#<)g7HrNP_tz$|#!m<&I35FO6 zqB{k^rY-a+Pb6R0^;Z4oTg-o^t*TZls$ZI=&Um`8mYs*`4<_iKeKR06*i1eMBiXe$ za#im0fC#`X^dOwTdh5lKuw+X}c8g2nx1<)atL4&(EDU7pzDE?C6yQ{-=oMY$syj}t z0%n`1^pXW>;-VtRq$vTwVJIcBP+3%RWXoeOE^6yMi)AbIJp(vY+#*A1k%tv}S78|% zMq3S-Nk9!Wq&UQ?lLs4B}I+5I;s}hx8ITA7Z<>dy z=AkWVXh{di1b9e8K&l4N-Yo42bo0Ngq0sFH2(l860nZS)63EE+>LPF_1w}Y1jK}_$RuFI3N9Go_ zFq8>Y^8I{-@mK+YA#TP(WU;EYlhA;d?ay*VXRC}bj4ZPF2sP0yp2Z_&a!&S%8Ef#M z{#A;S_E23hgB)9RWhnMtlxp{?MgMV2Cp*~5?Oa4=U>8@?Q2>Vt;PhaS%>vh>0J*_Q zS&lw>9+4}+J|m;W=D@GPv(-1TKf>@~ELjxEy|c=cHx1nk##d9t3s{~%*if$msB6@B zQ?kjiOHglR71OxyFaw>{TL^mwB8p*(Rfcnf%F`QJaSPDyJ{Y$Kyok^$e)iIG1^A}g7LdD5$J7SDwZXdtn`F)}V55Q%%?3}fcC zuI`MBeV9R&D&nCA^T>bP+=bQ*ERH(=k_yqJiVF-pdh# zn|bIJhEh)}Q5!{&{A^OlQX=oP?wUH9&yfHb@IhxdcT6Sbmc@k}CkF{Nm)qVppS&|k zE{@bSNj^8W8zI{wgU@vFR7MrW5sY~<_=CU<3z;i`=kgqbXMD>?j$&%}GghHQN1kGa ziPy(q(pP9Tqfmo^*dG1e+}m`Dr(-fk+ZDNc)C;mzOp}}e#tS{|V{C%zuzWJqgC=oc zisW-_{T>f085;cu5X~}Dz3^=Z)R%%T3dH@O7*kzb?DUhlR&4UjpU1dI?yjGXzb3kZ zk`xqu3KaITz?ERY-1p$+Z~9%h(6&7z6L4cqwEXmSH`6SWIOrii>U;#*BPh$RhAe{1 zhlX+y<~Icd0ey@rQ9yP7k9E>LQ$dYt`<-258fRQUMYv}oUIOSWF4jBPYp*B#4-aT) z45FB}I&kYxOm7q=JrAAXxxkIQjY`1?MFonl|T2qKA#X!w(4XbY;8> zgD{)5R_3YUwnOF%l@P~<_#9(paMw2;Jv4BA+czCtAOH^2ZGAxU6dWBTI5EYo+Mu0V zFGj3zF>7n2A_n9m3_Ve3=fj4kzGO?_(AEOa-5`3@Z~f(UMW8(1VN|l?LbNdHr|R4` z{4@`-`5p79J5}iuww6lp5}ZnTr70%Z^C{9d`~);&yY+D&@g8NIWw}xpPrPV(Qoaq| zP6D!lJQx-5jn$W&oBZL`a&J6A4o#Y75azp~MvQe`4r(J!#7E_l0bRj*>p%bFDA0;M zS)`;!_Go4pr>{AqoYePCnf&(!K5a+{qQX{a z$Z7KMFx7fB7*+jEX1R-4)i6T%nEu`fTL1gJ2}_9l(ee7jhEDoa-WQ~roJytaD@2PG8&@RBrH z#LGtKgtW{4JFj}bo*z0w1MqQskuc(E>>QS?0`DOMN2~C(my`Z75*bnwRYv7TPX|%; zMz!VT855JC*%0&qc8Cq~@ryJT9fejHh{6 z(CoHe8AQ%a^Z*Yqb{5@iv1h>A%hN|##qap9|2zg~c)NN8Nbf{>%q^ujZfPTF7yuGd zxW1R-0E_SED3X8|OZMui(<0D)WEW$N%zQ5fUb@!w**+5^kPy}_?#;3v^JJThDc<3o z5MjtOsgdg@x?^O~lXl9|_z=@5^2txexG))Wknr!9ve{UQSlCWlfu_)}shUyvsvLcOOjL)z_;0LuZE3#4F6gZF)}#Js-}_=%4WkU ztfMA7`~m<-4^r)FVgB0z1V;MI5c=Idp}yrZL%Nh%cZcmnIfu&&n-UEyf)XrQ|twp1{-+U zG=k652Ut-1f3I$^)xd()r%qNKU?$Hvyua3PE-9N#ZvvY2H~ zAn&c{NKWfTsu=miJ&9PRT8W$>YZC!a0p5&uLDnkEXpVQLa`IN>#R^59f=N zwKu1eCEhX#61y-9+8gy!<=quWi)!{u)btQwV#$^5CKW3tCk8lZ@_6^H#K=Of57UERI`W{ca6X~jeyP1Q; z#XajAs=j6fmnyHw42Ip2$Xl!ffDLZxMc@f|%-*nIdd5^CKG@frO@c@|+WcbiOG@Y|`Y%6^iFlj0 zn_;9OH7+$I@%pW`mE)m8?<wmcYVcEt(fl(`|I@haW@q zz^))`<7w6OG6&C+@U!qV&)ZLMTI0Hdh!=r}gRlAA>6Sn1Ozo>YS{&8(U*y+Ud+!n7 zMHqP*boRu5%C#XRY}q&jN-QL<6=!0sxeOmWAcQY4h|$MRF0!F2!^E>IF7}Dihla+U zN_A`=GPggTwoHD9JlA;WUDYwx-Jq+rZHabwp5^`-ks9^!ep(=P-F5oe?(e@=Uv7hc zNt$aRBT>w%r5(KQyZ#FooG;w1)D-T40+8ce!99(LHN&!AqS??L2yaJcQd)GSQrb0G z8m4d6{g>n;PDG@;8=RJ#^YVlhdw`)tYT&|mWOQR3nJL#U%PN_7%F&9)PH? z8LJt)pCL4iUpKBzJ~P0$5V%kw^{~BPC>G1iraid|9~9uuX0lS>vM(LVhuT^H7fp^_ zRX7vcPH8bEhjchY8^nt4bWG)L4HnBqT*8z=#Z=a#%WsNw$EBn(eM~6rE#iB*gPsTF zlK6t!HXALdK~}5I00>c<1t7%KUX8%~(i)y8e$`RUw!r7(&R)Ga6J__NS*G-vyl_Ed+yJT)jrF(;!^@D82cd& zZ;6`Gq*dPL#&SPB!S9=Qo1(rft%_Oe#U0lUy5-2zFnvHq)oxXkM9lC6XCo)uGXm-3 z%p4xV7oM!wz(6NW@LW&a43G)Z3lz=$-gn*tj3yGh3Mejm&km!GmroMCEXpSUSO?ek z=DccyS>rCSmg@ykFn8*b?N5*!21D>k_`Z3`yKMNjgEDe0*Wws5emi@lTnFXZGPlkr zO}gVpj5(Ya;k$(~;xqCqG3P1q5SWSP+`wk5@hkHI@nK!Bpcm_Y6166G=Z_pqI-WGK zF81T@+Ka)U`4yxiFXZ^=>kGWaXFJt$Sr{(oLRiE=Y0*EpVQ@Rmnh%g0RaQI@qS`_2 zG|c@OhdXYc1(;aiBk@9fA4@%ka5~__rplLXw;7Loo-?6U9(CIj&@D15Cz}4qA3k4J zs!6jxh)`IwBfvKyqmp8<^j%QG$^Dx2d&l4R?q5sHr08eVAO0*_6F(G?C#Lj|g79a2 z#E2YGB_bqilCx7HB=YIUzlC4BJAyoWXPkCY!OZU|GbMgHB!X8a{+Z1;PWCrm-q~6yIA!%>nMhLutv|{QV3DzLBiGcJ^6EX)bNByRz3@^ zTs`wg+S@{2-fFttc+4u=@oQooq}EnuAqM5%(3TTN?%!Yg=ytRE=VK>jv#+SgAU4Xq zkf&SZ#PbFo=H_s@%#|3=19%oK=&4Bi_PZUYa*j5#yn%zx>Zr}Hg>rN|YE$RX0hQ;6 zyJ@#hWOTj=FA8Q;Sd5UW6CvkYzj22SZ)ghcsFjc4V*+ZDKDypmFb-?MnN4sB^iLSf z%#r)7^3tPE6AM>b@#BB_V#=_u>4Zni*=8j!AJla|x_n92VP1HXm^0h)RD5cci#;=| zSsi~*7_g2UFmD`o$uqIIV9<5#v^i5a^i%xT8E3xQYjT*hlXQ>gWMJnn!&&SIYBsC* zyvgZ7OJN6}P59{u>|Z=;a_?PX><(}|L}pk}{4jTAxuz295$>39S&L+#YJBN~B!!5% zN-NQsr6S*Q{ckSCwHB!NJ+U1(+u3Zg#=l@aduoT(`v8e#JLiu{4bw6M9V$EPrW{89 zB2?TyXZ%vz27`ZcelO4GVCANJ#Lap9kK*m@wrdIDUW%V)ui3;scT-9#ItVi~dYmN} z+CS&?`-v@HsqsvZf>C&l&nvmT_eiL{&3Oh<>`|Q3Ol5IOPKN!{Zx@A|Uu}dx9-jMK zBO+uu=UG8Ggdb$&)RNUWKW4If-=gxiH2c^;ca&^>$UDNfFFF}s-GWgl35o)ZK=pG@ zc?dGa@$aj1wx^P{YR_3ovGg)X*GaH;Dsr5R)S|~Z$Lz(o>LSLE%^VB{xX_QF10tV( z_9p%fh0wHwJg|&28Q889kxXwt=b3SCd&Kz#RiK?ABC`$sRn6jum&_8Iz86A;#YRz0 z2~*pYeGJu)>q9iRPy;g3j~wq53>{dv%;Tmf4WysRICoYW?WdXHupBcYpfw4OHa=EZ zDo;tbw=Z_05JXS6^;i;~X}|Z~z4!>@5)9qCAGc2~po5^3to-yb({= z#K*WP2Gp2|q@pElWsU)if++zyRN2Q3oka}J8>bdu+P%FTZ%p~)(8&O=O%8TC5{ZIP-EZ=~~N&^@KuA5r_=xcPom z{Gk~mNN`>_9K&T4HD+q1?p1re2R;HE{$5)cenZ0PV?iucvh#KJWlpiuU2R&PhWcmg zxh=z>13mtP)@-Id4TH54_vUl1rp8~E2ZWG@rJNP5V`?a1(BHC%f;{IVA5a?2HzR~gV!Ms%&P zw!7wV+zTSWR64+~zcvh7Qcy9_!aiUfDPmt_d8Bb4l0Iu6k-% zereBM8Wpo$i@;^F>?&$3ECuNR;GWxdN4&n1?GXlw6uH9NN~Zg~TE zu2u4v2V&#lu7i#g*RW6xGUxSwv98*Fvb38&T{Gru#hq&8jiiQZF1moE#pT*kbH^-m z*P`b+h%gHX6K)UGu3g1<{+;2KSo5p+oXO zb6f{{NuvdQ{}362`NAvSsB00ue@F{}{7bCv)x0Tl-`|9XcVpcALQj#^X;pN9>kd{M zZB(h&w@#7tdo&BnI$HI0+6>*=Mm7{oF0`4|w^{t&dMj+()!SzMyUo(=mP5cT>iss` z=v!`Xx18(STraeF3<+=TvA9LM-{$3ZdvCxk`sFtN`rAPl+5)k69Ph&pMc)a(a3>6l ziM)R&^6Q;rzwaEu-aYPi_eAvFsH8iwNq3V1?j#P~J%?>Si)}xy)1HjIn`Y5|xW4^p zKznBNohh&*Pp2cV-Zej<<5K>SYP zBz)~03Ftg6^Wdq)gU33ZgGmqgL!G>&&PQLHuL+vF-aL3`(fQ{0gO>phCfvHlFLy3p zZhHT_>q~Uk+xo8c3lC;4cWn#_A1=E+{Q33a@2?NOVLLzTJbY>Ka0tumspmbzcEQ~r z^kZ|aEV?BY+NjuDQhzE*+1>J;-QL`8$-r(I%N|ADo~^e)^(#G^@;zz`JsNL&l>YQ= z`_rx8*|W2u$GD-_Y`9nVZLjG_?Gr`x&QOk1RYohI<^N`}nx~;}eG; zpUQrm(C|2E`0<&A$LDYZY~16ow;WU5)4#?IoX_5(O$RP43}oS+Wa>W2k$+NP`Q+m1 zCxzKhiiV$jT?3W)Ps(%$OWg;{1BHW^vj-~=57u89tZ5i*93E`e9cl_3{G2Gc^TLp5 z+)&5x(51Ga2e{$&m7#9;;R=J{{_J71*x@I`!;?3MM{pzimxssPM_lwrUSyBZVn$vM zkGvTknOGS4;65^?JIZ$-{X9JUC3|$BVf3r}@VAB0EfRcrcxcuAY5U=)Ki%7YH9R#K zdiuAsRfyxO>hPhBH{nP4Vi)-6#un@dAM%wi@}OB%Z*0wVOyXUWRL80n1v7_Tr&*J14l`o79bD=Tt%0fs3vokutn0`s) zGTnHJdb9rH3#7E-RU%kb`F#}KA?%>lUf5L*rcb}hr&&MI4%;W6|c#W2m%@| z{1~p={CJ@Iqa7r9e^c`<>dc{|GvT>2Vb(;h3w-6ywT{=t4ta<#0A}jl<@WsX5bF=J zS5=oszCfbE$nCQ!+ex!6FcXdj)|!ZtB{?Rd63g-;L{F@*e69@npkgswnmaT4`q84Q zq9%(Vb*TA6mhk9ww~t+}7WKfjx~%zcb#u)gGZ1CSP-xXSfb_pwL4Rv@5CoJxQnK)K z@&y2mirpP%RCr*=*`^jY;cMvu5>k_R!(}oToUaeL%4HGC6&G&2i}!dp&-nLcA^#(I zVWyluGvhHcyM5N!Yym3zLCaysfVJ7ARr5&G+=5~RCFi}3;-c}UxOc^uvcZKPXJ=+| zzc+pR8X)hE{vg!)@V%*^)Xt<}2tv1RddOD@W>s4j(dI&x^!GVu2I0oi5sV=LP( zu57!ujB>Fap~)Y*0ZLGivP2*CU5!4hm1*L#xe~^*dDZg6s_4U&{U_)4Pi?`U;3+PW z1)vTvg-|2_7(Vm7n$<8(C0t~z`yX2mc)Gs->AKwqiSU~7U4HV;03gAHp5kud3Sf9p zk)i-xWz?VSuCJa1{V)DZ5TcTv{!BWze(vHrLnwh)B5k>`2Lx*#&B*X(kRX5q)YT9= z@&t9&$VNo`pXD~vQb5A`JKoQ$-+!I?@UvWL^CEe}Q)TD=La9^yjfSA219Xv70zj69 zppt*>jX@r{20~+y>%{esee%)Hw-~TP_5c)DV_vc9z>=v#b zV8B>B)VuZz59E*lg6R_dOPVy`ycp4LNT0%soB|F{PmFzX;wU?0$(NHe z0Jy4SQ|RkwpWRBf-v=xAwuRj-H9j)hC-eNvZZ1t62F`<2IG)fM(P_8j@gH$(Ae%5r zq&}1ZWs7$8%>g%_G|GPUGKzv9{pDPd{Om-M>_*hnw8H9N@Ktca)~ z=h2PaO8LROwnbyFdBl=&T`v~NOY&$S|Df|wbMpKYaQvvWptJBS17M9ssYO~%bRNEG z?K)`m+}+@*_i;!4=+2v!PstEKw_m$mRaNE7>7(^eW$W!kdS#yru+*be5D#9db-pM! z3IK{g7nN(t$%Y7!infOht4RCzFrNS2?tk3dYe)^|EtE8wU}@%N9A|3nxcWxZTz{TY z%geA`6_jUa)XlaHb^_BEzx)9hspJED1Zhe~Bg)|k1~``K?OcD|oq(f#q1rlWBQD^z zW~qH(>|?#+z_=H%Q#L+(Pek;7mapZdH1g_H?AhKjCK80_j=Mr@q-UMP{6EoF&%c%fD`gNGHxfbq_it{l>Y z9m@ds%&4l-q{+EACzpb9qX%4?e{=hcSVz8#>CevNe46lW=&0ef#{D^#l=<$=qNEl| z(^b_4Erp##)Jc5h`}JH4;3gEncq@!vC7%`@2BGV@n^P393TYf?KGM9EsE`b1V}=QWLv6c{wy)~(ECI@#0JH} zhqZ`Z{S-*5De2z!X%#(>Hv;qDKkItmjGp{F|cYuy^jm! z`6AXR9w7+IvjE5xO%o z4+lQ;Sm~2V#~EH$WSXj4Bo~2dEqPMJM4Xh+_buLcJ5Q1< zK%C+C0tOVo^6-F>iIDSHWU0K61I#0w1kyhO+l<1>5iYf$+bdi$Bt19-X&yJAEC(Ag z4&Jes%2XMWpL5SPKQ5-w0oh4l6QU0HA;vi=^0l<{7r8(cIzh#BZwRSn!O&9m1{5mY z0GnL z{OQp)0BDEq?8}z@-o*vBX)>6q?1AyVj=b8rC8Ii8p}th)SX0^^F_pj`7u6H++Zilb z-OmF;jUpy0iYvHWA2I~EU$Rq`m?a=rZQ;^Hmc?nd2=3Xd`$a2IOS(PPwr(JHlL>{j zSKjc}tGkV0h-_2SRdYmhAK51>lZfJhs!X?}m+F)JL^XW$?QTDp`MkXM0Ex?}aywHY zsi#lXwQFEW84wlJ;FXF$DA~Dx3ataoSoqZ?D$L5ZV!tCk>e?XKUx3+lV z%2?JeahQfgH=c^YXtTDA2cTPG)6>h06^A}@MC%CKi<8NGt*`&q1`qN?87j9^)khZ7#3F#YH#DF8@Y;Da|L z$5EbgG3)TWooYKs)TL_5HohiS{I_9%?-mvPW8R?fUv-lwHAna(76u!qwEbAH$gg2m zO}gHEMHRhOGGjcA4B==$sNTG-x`EZp6@xzDLqO#o0GwA_a58|DDFwbz{coRWs)*g8 zu)-Cr-MCi-z`FQ1uf~DkoMK5A=q=!}P`&n_XSL5phgr9)dIsE|+>sEg_MWQG&3=75 zU)7NPwi`TK!h%L|)Y9y?X>pfXii=Ar$h@?RQNaL=^|Q9tjA!{-My2bz)UivcRB(xL z(AnS-pd6KIm=+@`|7-PpPHi6=n2oOLq9cHb@&M_x7ge{N{p~6^@N-Y!nZ+Gi#d@t( zg!`L$SDi_IWqN5U>7`K_^SmuOF&iB6bU$S44SDigsH+C$Tp>hWm0iIVS;Ba{LT#G| zxaBvBR20p@tm0F*m&~~hvgeb(`3P95LQ+t?6`2BL?BHz~lqowR*arOVYn0S?0lc?E zR`2%kK3u@IzsaatO1>_Q9i?U!%Uwt?79B?RsK5)C470Zn5FdOkI}hX}y_Rd?6hBDF zRqbFe)~4@ZrcG5+*30ujzzW=w;mEqrg|nzi;zfXSMQ?9rZHiegfK})z*da)+<*PdW zV(ZXyluAhc$*pEgR?xmH9VG<_fMtWazoP{SXr{;s9*Uaw?|F+NZ765}z-!lZZ2+>o zf_2lhW568U%zL>&&D)!$v_Tn#U?RKazxFZF17^8dtc>jf=nINuC8cPbD~8-M!MHZk z?fHPIBG4j5?U70IQDerb`%-<~k1;@L2h#MZRhU+HW&H+)U9v z-M=Rk^6!()b^w4-NQ6u2uHHZbQ?;W7##tMB_{Z%c$(^I-!lf5>Vaj&rUlxnZ-j#&u zow&s(qI$TzD$XT2UWySjS?}gUUl)unSrmLN{$fB{bAv7EoTB6mSv&}+T`6gx-P^r@ zdheo&r(tuKBzJc^?Rs1DnOF3gUtV6H-$1Hpnlkyl2Mco^$OmBFYc@jhAseyVMx25P zH#~{g(;<9|+5!SeB}1OQJw{tXDF?Z*_ktV|!3*5|;R zsDrdt4T!=bGpwgDO_W>_wv~;_#T%l^1}j;O*>`hV8UamRU^bWFlBLEK>s%OhdqNcZ zm93Jm*VuM#UDJjb(^p<0t<}Mv>+Pqmp_qS0d)DH*7piXUe)KKs}15Y7^4 z757e%D(Yl*>Y>}d0JmQpM7t~JO!n1y{)Wtb1QRIFc4%g@NVh#2dl1qf&Urw))4_sQ zlGE;>!7D14)qb65=@f5SSMDZoNwMLvi2gmr@xaeNFM{x?+jBAnc72uHQn9hDuyN>U zhQzD#jJW~MTuH`7YEcgG;6s(zDo;;QxjeY>Tkz&-V3ryrI9)9e06Z$=F;2_%yuzvu+0PwU!!T=vk^q=i< zOOQ5qZ}ezB{48g~;1uy`-#yTx1^KG|<`mEClGWaVU3&`@d`p;G)k3b+!_3PcOT_yG zm`FRK&YaS~9BSobMrm~2RGYbSf`eXP56%p-f4&tYx_+=^3XiA~ zrA_eJ75H{IZi%EkC)*QIBsmM^Z2V`ir1d1OhGcVDRjsTrFdX&o&(mlzz7Vou=p1lcsIfe7nPc5Qn062!_s_q#kOjk1|R zC0DNU!-CNVHi_FomU>mmb6&csrq?d{3e}0hj>L2$f%Ti|j4{@Y*}dqUnC8lMur9P; zl9F);!;bstiQGt0im(y>20f2BypDB~cVMSB*w2rQ21e;@*W?8nkka3d`^kIteDlX~ zT{)&fPDbz_|AlBbh3Hg=Y#zxBIgUeVX9Mp94KJ;unRJS(8&K!S=DSd9g zh2;}vx>)9u;FMt;zGVXxX;IxC0ZP+#l|z6}Lcv{S^PC1!W>!fFb(hs8I%`iaaw~!w z0YY%9B*2pADoM4dP3d^6moWS0o4al^_OtTIbnpNC1aqSPOu$^zU_4B~=XBba~mdN_FFAA`@X*n^H79Y}D=`ZF;@>S%&28%4rz3 zE>T%N(slZy`YLk-mkEr+uC@o>F4<(4{$(%qj2OpWK(!Ca&FXAB-GAQ70Y~Pg_q$24 zKyrV&3fxQOg)OPQUm$b)dzD*kKdVE&Zb1xqv-86>GJD_Eh^*1n%sUYmsv~FV+#Fkk=i@5J5YSnog3>a&m^;C;h=`4Suh(F**@XdZ?eA#3x zFkGnDcb}G4fosaXUh&AC$hY2L+tb*HiLv&;Q5)L_a85dy0fqSo$8(UUO~LvOP(24w z7ofJ!Mp5${XTu<>!W>M>d35Iw%gpz)-m_o7|2X<^CZd~=sn?`e_kx9C)~M#yS+LlL zy4Z&{aQuv6>J(dy>n-1XS4T^;5zPoZT{Lw9I7b#GZB$jGa(X|p?GTxCl8O`+&;Ry3 z1|P(Fu6`P7+9`kA0L7-KOnq2p;p6>D{PzI)fL_6NDe5wu%2F~-LDeEpabGR{_4m|C z(YZg6H?hcZhAaJC{7yJVBd#d_j8PRXt{5K+54ez3i-d}z)W)D6p0P-Ol0$2u@zU1` zx2bPBq;#dr65|QS#qyu>!|EL>Ma+_c_xZpE$lWvcO;1E&bJsKHYsm~?RD2@mkYv_W z_HDP3d?B4BISYWZTVHrewO~Oq22xt9OQdA$kSx9e1PI;$3Q-QpqS(P9F!DFVv^cCvP#e2)+T?d7#~2^qT34*Uy+U^b>5U4PRk~ zU(o&Sbixkn|21^xk5KIm7(cU*nK3i=U1ML%UbZr0U&_8`8C#YlTS(HG8Ozv*5Jh(| z2`Nh|b)}JQs3cS>^^UD1xhP$gn|J<$bH3-7bDr}&pU=Exw-`2(cu=2?A;MH!P+iPd zqSDM;it^p17pHlw{URZ@%@vs|vgLajw_^T41$0yo|H$kIVnH0;%YBHi3Oaa>1Dhp{PsZorW4NjTAeH1iLv|vSlqmu zH_L){RmBcfm2AL-rGd|TzdIj7gwKnjPnz|1G<-aJ!*VFDy3y#T=pG-nSYOy#9V%O} z|7X6=o2pws=^mG*z2V>w>blVR+NDkzhUu>h50gOtAe>=|3QEw;_(X*qf$so|iQF`+hJz zw}e-`4y>=-*L(#5#Nhy!Xa;bpZFp&5a*-P>E3RV#)ckhkI4f#W*w(wr}hXMe>IMs~+H`vkd8)1J;Ci z;%)w(-QBnOH#QSt1hEG#WLc3)+5mv=6|Odrz=zE^)Klx{YK6v{YM0aFCiP@yZeqpuZ&K9D5=#TY)Qn4H;w3fWfm z*@IwQ!SqVsK-FexMWBvUmH^8cetkL}(0>m2XMJ38-FfOis_?C{@_)knd1CL9{@LXN ziihBdgEIOY8kZol!S+^sK!RM& z1oW44A37+}X6k^lyr9ELCBAM(mle;9A{Cz+A$gI-)@z%IBZSfa zny0<`t$zhO>f@TPODlCn?Gx{+8dxF#b$32^Bh&6&jwX)$^2qCIe$dc~1;D)lG{6zb zkpN~zM4^Bwlp8Ab^2C|Y^L79re!K~6!1BJr*WDJXuiU-ALMIEGB)dzNzEiGD&3%`i zF4^(H;@L@`dKvZQVFji4N~V8(jCFtRulMOQBs7>GAIp{5FsOi7%Iq*Y{~)-2g5(?| zi`yyk0u|)u1lUup3%u!ow%mK3z)nvdT|s)I)22vfBXJbw_#U7%0VL!=hs+1r2**RI z!pzf$04*|1a}ES8(fXhL;X`*odW5_Fn}-n_0Fidh5xco=r&9A(>}}lj^9O)M_Xx(^ ze2^+sbH>!(Q`XzP;nd8m9K_F1{D|hdCEWrOshxNoxqv$sVYXK&J!34{pL$K(x0T^P zMJ*cuIU2AQ*rKan#dY2yJapxQh&1~z*ci`GiZ=SJf3er|?7X}A*#Oy9E=;9|jSu@N z3`2r+PtH6_*MbhiY%o~6>pYK16{M~)&QtwY`v}>~vO<^^niasd!K(xau0Fk7T+nSp1gScWsNNhZ$#paJ zlJ}XgR(`0eMwM!1JnG!KGW0$S@#I^XSTXuxXUplt;9BrnzfG6wu7jHnz-?F<>ROf< zQ*raS7~bRA>iJc*F!erV>nc<7GXL~|hPG9P#&M{sGqXd^ zzZ~7|l~Y5!@7rWRn@v$Td~%#qjno262LGYK)qfLeYqpG9nxo?F%wW^@)A`2=hg{`% zS#fFM5{Fxm23d`p66UXvoa(XGyLAkY&op zY7Lb3e#n2GG^Td}rr;#o0@@*Jjel9lJbcvNZVtqc572ZvL zVh#sA1d0-zyueGe*X|B+(jG)_yrApNQ55TAaZvZkB}ueEKvnqchdjIG)~T{v?^XV1 z7lU#G=5(QlzyY(e6m5KnYQK5xSl0H7kLSlBY_;;^9~`$3ak}%5gw&>84KL4RCQgPj z<%+zBcN-Qfn4tu5y?fw2^}-4|U-$z7j|8w||$!dEvbfQS3?((uD z^y64jQ0ZQiQWAMzUHgc}(|%}*7qVXWcLHQ8srcPVVQ6#nk}(~Fs1NY0q%E2N?dhtazXOGbuY9-; zPTW#buEV=LKB9frBAeTP<=r1Ns3zajx$|2?=fg8z#_t?$e!;YVdpE6I+DBDm*;DILzL#H0j)-77F&k2m+OL=Z$H8m$`wr?rQxvtyNW-bDL}ln`W8M zPJ0@D)SC(C`b{J)PKy>HO{3z@GD!+d1FVnJH{lO} zxGFdiJ|M*e913Vskz^lz?`sCfumU_f??o#M{qL~jZY|FH>A;iX5?8YQ0%u$yRq`R) z#bIrw{C#9U$nE_blqTNjdPT z_@jAsmBIBFVS)-n2G%W=GM#jfDwi!DondL>*LD1!J4ht;_+Ah?)=YIvin7j>$e`i-W z<1?HWTT&4yQBEGZg6U!mcoqy zTZjTK`QOxl(41qP@2j59+rVwf3gR|hT(Kjn5dB?14o=o$llQGm1Tf#&A3*?hmC}`% zwPU2I*d~{i`GZI`_k@VA1&d$*Ye>@sfgBK-MYCR|Nt4168z44|B8(&J1c?Lfe7LH+ zudpqM-F4Z3?&dxZHWsIf z?L9Z59^c_L4>@@`exmKnNO1>c_%nnUF8ZhX@ezodza4XzoVf;1#Esk}I?LA~yt1O@ zck*TH1dPW47>JIauL>Rjzb@iJ{}r6>Mh6vE3URph zs7{N8A-8*-(YcKoEj~pn9RC@J`7<^3{CYwn185$kPn8=5ZNZGoC{725n zfb6LiIQp&Fg|Na6tH3xGZ-hlgw{WT|xC)V!V#g|n9J}@n#N{YdS4d8m^2zb5AG=SG zPMV*b&LL-!@_m@JMb1P(%+zUq{M`?^Fax``&QW1`Ag0B~lZ7CB|CE>Gun*0ZDF%IN zP=WD|yXRH)pE-vY`;Y8aqW)lDtQmgI5VaB+F^2@CpSRXvfJ$J0{fL4p1O^vK?;`zn zR?QVC=whx6e^i7I5!*j^(^f2Wrx4dAnNp(*NPi*LH7|s#EQT`{k0dN<>pbZ{e&xVr zC=&!WU>lCn+?I%OmSa|n(_wU>7uEZ@AxBXk$P4lfsziqOR61F{4VI?t$x2hutYx7B zxYIVxk-X;q_2jO}JJ~Z*vubv+L04QgOPk|oCnrUZ?~XJ?0s)Z}(N0QH)@(=6KMiOQ zxbMq=1@q`6GZ`4;JNiH1;>3bf0v8%HVU@WAI!;;?rv_w7$QIexXrct z2b;EB1?cSD#i^91gwj!H3lLdHe4J{ES z4sTjQHSw6+Zvq9Ooj>bz9>?(P<(wL%-S5CneX$e+u@ou41SnS>15k_rS`Q!h$T;_$ z`u$3CZVdr`$chH zhqPN>rF|Q7EgJ1o?7vT<-nn^1F>Q!paO1nP%58cAh!7|Ti@6!3C1h9brU-U%X6!V% zR9X}5>+Oy%=Wz<`UfhIpcDZkTiL)U?&rHca^Hmm0qwnzK9)SyNmlCo)V0EMHq5MCD z8e=E&NQ1Ogcx9e6I3!dvzI_HSrwS2JQYB|-7wQ5#D^!Of!uMt+SpgOy*4i!8$ z4^8>64%<3pnI%iepdsbET!FiL^?XQf6dETkcVw0!TW&vw_Bh@?Ld(+qyCov4GdDoP zhkSz;h#*UDxLST6^{Rs?MncZ`dK3@+AYQOHFD4Ug&~eWl9lgJ|ZW`rGqQjXvKhMWI zDkL~t{5a?EBV2gcE(27C(P3+Ad24H$R?3c52Kk-T!!v{OPX{gC6V*lwb9q69E5i*t z7=QS`MF~^exppB(Rh@dsuu8~E@nox7e5CtxDK;?0t#@BWT%Q>XG94CcoI)#LB&iTs zBt-6LZatB(P;QT{3eT?DzbSq34Telm6f0e|ivw!|hnXEa8y6}^hz61EJ$UaGNCaU( z)3K|{?`PFXv+9Vmd)1@=Uaf}%6OE>io>|F8Stg8m*27Eb!|mxVr1xZx!DA0{V{n5y6cjuJLUc&+67$8zIG8w{I@;qj6p4i0%g zw7^d!^^h%<0cswavihYh_yJf>7llT7TZzPJsXnYbAqj9CF zhwU+Ol0Mhh?=#k={V$n?ZRXNi4Yr`=@3NcJyyj{fWphq-T$ ztzINQyW^y5=?{~YgojJ`_1OUcNeSg zpAPrEH(+E#hyta_Mc(AWxALY2PP?NH>+f2Bce<72Iqv?nODuf&O;vQdg0_USDcO3N z0=G0>q*Xe@seq*>`2}Dr3%~$zV}E^eh0399Q&Tk8rd|#&3tjoPh$bk8$j|ZT!2!_7 zDuIaOQ$guGpkj`w|ClN&=qEtYTv75dr0H3fEgEpEzf2HDDrJ6;>GN=@J$U9>X37J8#c_gzT8Djf2lW29=^-b)yITL);FZY?X!Ryg;g{dgA) zqAVal&U${yxS!;;O4t@SqzZ7AjWF?`WN6DuC;r_`%BsTsbCRv4o#dPCXK~6;6|(B2 zA&6~h9v$*QzZ(sRyZaZkU_j3`RNc;H9_`9+B;<&Ii4>X$VELrM;=>+&Kdh~7?sMr~ypg6s2H>lYeZ)>$)Vd&Q7QM%R%xpy1$6a@WBrAaV1SuEny*gIn~VJ3Qau_XlXo4n#6= zZVE!i1vy=AA^g@hA7>CD{Ft_@$ur!UU)f*@7Pm1ldgS+n=;D6VhJatw=(|G^K8W0b zS&~ZQc(ez|NtMyD6I0k+J;~0oTQ(;8n|O5R4vjtnw`DFX(R^0KAnfABFyYik5G@`?FCA_!359=x)>qgXZGyB<3Z> zUt#-aS2ux`LG@LAVR+!qJpSL2N@Zic>|U2bxgpjSl%?SF7Ebsh%g&MG^fK62^DJ(9 zHFRy6n-|csRxoib13SpnmU5fqGGS+$Y*B01z|v%a_0O08zyauk9rIMBw?b#XI9^4| zuIYDL#9MW=Rip}}IKW3u%~=Q);3C8qCb4A@jwuxT;mB%JZUyG@%fE{c`}^s&Nk^?j zp|qvF?&bBT14VXa=mr9Tv^UAf5<9HPO><3IuH=2nO3iw3kcr8c6$gN@WJ;60X|FMt zJ`2h=da-?bl^=*`g1(bl-mb=x7Prf_V&H7ncX=a`_jAC$JGF&*l8vVK>Vy-mc=UUY zy~KW72qL!&3-C!$$V?bqyY@|DOLvPr< zS7;xEKZmtF{$DEdaTi@TOb9`Nn6yxdBJd5Q3wabO(M$91N`eQAxm$^$OKD?pExYU8AZuyq>y{bY3fyF4!5P4i@479l&QSRd&~xpJ{w*Dmca2_($&4pL zED$hN8NpN_$4)`TXC~$4j@g?ZghGgZTy95m_*lWy!Aqz{G&C~JxRUfqIoe{00jYxCS%fUR&Yk%HVv&e!(gT7L8>mda^-J-smjdz2!bmg7|a_=w#F z)O?+biUtvADc3x~9uYn2KdtnBrkf~EPEb#-G4Cx%H&L>! zZs=KN1XDPXK;-@FYF_hCfEp2~_8SM~eJ|Y=-YQq_>VLOu5N-|LBmsy>5-hz&++hX^ z2B!@vMeV;qNq#ALW0nxEsrHew^XZY%_&la2B^FcjGdHEKsk{1Rsoe6pO4Vy@9LD{r zYcT@U<8m(q{`c8(Yg)wgn3^AiYa==Dya0@+`^x^yao3#XbD^C^Vb!Ze$#H|WuWD&{6j^h ztWns(*RZ0t&Yz*HL_^H~wKQ&OZw410FTMHC4gJ5D>67D%qPB9t#ytN0ehlH8ty6xC zv4nj%E!$DXHD7u)ms*mijHSpTSB&I{wcSvMNt<^9MT`muf>t6AlxF<&C}7?RJj33M zoq1fW7qgNX!e{1Tpc;qUC2rm>*v7&2&h@jF@Y;(CD3>h?uN!si3K58ryhblSqPmR!NNlz$1 z9YCbP$d=iiDg;gg&e`wcg7rv8`mA9cNpE$^|?&5tQ~c%#};TU|rb*q4M=6b{hR&8I7&(R_1=p!Iih^Z^owVJr0im@>MSgPGQD|c zbzotiKzT+mB?$=y6xD5aOEFp;((feYTgV!V4-N1LVj{}GT^Gvd3^o)7oL6YeX&1f3 zM{RUYqCdV5N8ug>LLC{lIgdU1)5J}#9TA|#hn}?8IgFrI`1Ivwk}fL16K*aeE*E2y;klB~`crF`!Eu$5~!^wOT*gT+grN)=$V459=XFIobjBo;Y5yw5@ZbMidxZjd{GiTxZ zPTP^T$j_KYXLWvuI*(ac=!Iiz5{WvI)P0d$iBJ*A2oK3%58*E^U*pQP{{ZN50AHJ^ z?9N6!J$e{Zc=yP&1F6y4TZ0u_i<;jXm9q2F)%mD}0VO0E<_ZurpIa_Hv(y%#`ACND z46lA0p>Zz8tf5+K@gaccw64c-fRu10S7h$`Tj+>anFSfskgKoi_1qTpQL;Lhq2)y~~F25x>_vNFP6877hCQk4khb$hJ+J zcZgZs{$_4)u_Qr6>H}HUsLy-Ymsu$n({(~2dmlU)renlNBWT>6L;N% z5!3%`SJNDi*lq?pst3?YRG&Y~0%G5M3JJ+XkxKD4Nk-fKWh4GqxoH{SR`^&Ilvoni|_uQMZ zw0(ia^HFOJNZUfpA1>eyY}#T>p!m^FnBfg&RCA^CjTz^T9%qZ5l8pU3%5W$v!qNB( z;nkpyMWkoY;12%rQmU=?D~?TMIKasvd4I#Y;}Pw=?bWcba6M*mjKia^0Guol5|3fV zVBu^7xiz&n$`)L_j_AB>yRm0ikF&-Z=R4l1M=DF?fws=(NJUNbmf$^}A+!fwmTrvR zir9wZw9Mm_+a0+-N;3}H!VY4DLYnb-z$D>iLd&%S0RX}f>@_Ae6!NjY^8}U}M-*1n zsUnih4`?z8Y^VwpqXgcR2o!^Oomwr?#H(H{^f`u9hm&SKui4k^>1X29nY<_yq%w=B zqU`=s7Y&VFrE0uw6rL>%WVQ$wGAR#18G9;bo!F5;#dxX+djhaj(AZ@>;HE^lif_2a z!SH)`F89tnfvW+HH~Wv~D>W_KY}wdc)(d-TD2!G)aGE;8N7(QdM`vdyhNvTvY1`v* z&?#+&7(P;y{cSfj`Y;#U#zFG7BW|l`bRgH4VsRmOplOwg_~C8l zz=iE_?-xs2$kGzAheR+^Nh1Fy3Z*Aqc@_KRO9g+=9eNCf*Ni}3Z#;DK6vw!Wgw}qu zi;6X;o0$(!jH@_Hete(d@OkdX{&8)%I60&(5@X4?gOJLHNXqLZ;U8om`KC_kD{WD~ zjQsQrh1WiPDYO~JQg16%z-aI1A8k42oo1^|Ru1e>n@NS6tTyb=PM|Wk?abXyCtXq* zA_F@O-?^$DPjHNFAs<1)4m;+CvU4jvQKcbq`%=cY^b2xIqQ&=ojJM580eni4 zg-Maqt=FWO*Xn&0+UmokKb0~i6YZ-L4-$vd%$3VoYVP0oz=;k0tCQzG(2=MVhnxlc zF9>~AN=trQd*{*xNKM{J{|iyG7ZAOU=sjs2Sr{~CFzFE>XkCn~L*?I0Aug9~;KCKX zeF=26OWtX61wMtL@B`TiBOewrr&jTG*qGC#a(fIp;a`%dR?f2#tUZ7SN&7C_@-%z2 z6Qn^EO6li}(%9M3Z~plu@QCBNC{b(IA2q%pRfavGM}KkPyRw686vz0O=I=7IVyvIC zwU}R8d`+T*tCoV~eyfC!#%Zc9@(XNvD#zALx#bYEJ5s_GrPakK4V9^m2oR)JWqLP` z7umYA_aFN=r+%1vcZ~+aUTwx8DR~*_dA(ts!J&$&-&QO4 zb<(tEBk7JNu1;T=Ulgt4Y8h(Iro$5xjg!7yNM+8+I6`SFopbNOwT{L5!;B?T?~RUd z->Wuo!*Z{=yQfwmZ5Cxz#}0IX$*N~fFZ-9>oMZs!jgqro#1HX+qesi#8SzJPJ)BGq zmGcdASyGo|)FU*6{d~X3?`Zp+6HNu8sz3uk$U& zNet{$%klBiBSj;a;zBb6F{}HX*KA=~gU9N2@RFGvYndiLs>`e_Ao(lv$Ek)gojrT5 zqW}Fah2!;OF3EKr4IOJsjPJH>Sm)FJkZ={Y7VLBN!pg~HKCOBnv9Pf1$1qY(<9~a?~Z1XftLD?XT0JnSl6tx6n z4JXsOdyOD)mkDn)(hZ))@lTk*W_|D`ZjN2wdDc!?rp5~;65l= zp%vrK?(6NVv0lo*c5wP+Vch+SQ7fH^8v&ye(1rlN+}gqWo{Xap4j3da|7CQ-;~^hA zyXOz|Ws#oqx@!7rV#XgC2aUhEL1JgULRL%>=#UBkT6zA>y)^+h^NtRwVU-cM`?uG} z>)#yjjT99=r+m=|>Y7CV?iFz2ti`0B;FAR(z z>hyB^tp91<`U>ZoJ{x@L^NQj1Q}OJsKAeloo+I^~jq3PxV)oZ3d$QE~*>IDfCM0;QDW*sY7x#^#jEMD&5p`Jp0LsWq~%sIOa&zP3aZFpk-!ystMdaE34mu zD#<%j)&YEAs3UrCi;x_cC;1;Q^0-)9_kAxXW#*TpO^Y=Mn)sG-{@o=>*-6-*)OAWQ z`{I>!R}EZH#>T&1N!eC)zem@@sciJ*@CXu&tc!+FG@23r3&mXd^H4NTcPrY1V3@@ckH9D<0ijf?<*}#dH+#ubHXGL4w-V};%FE^GlUdifN&| zQ#WTU9|QUWqFbCNm-HjXbIcZ0SUE;1t8-(wuRs5b?4(U30gjVRju+LngU7{J&xOgaRVc zATJ6cDk93~cmKWj+Mqo;$Ok*;s7zqqzSUNJ~KWVONwr&ZeWa$3P}hB2l?+F?Akim(u?S^Dd~)VBGnxYZ4D7ACA*vJ zifS6cw`0@G8fF$|=w%I_Vd+RtWNdbWr@N!ReemJ&VQgASNfU$7*pMFQZKJlnvFUlWQu4B19RL1adbkyDTrS*>Cnf2AR*u=P!%I6xo8jA~y z+-G&+cUkWBR%6u z^n=*-)m>_0qQ0)q;?la%8NrCKu$i}uC1q7r)&DjybNJ(gnv!1CG)m9TO3y2arNjn@ zL^y_|M^A9}>~g$*{F|M6z+4 zn%nwc4R&<)j81D%RMybY)YmsO^?y(@Iy_R6S917eucN7T@$F)4VtQ~`bVom9adSOA zk3KW?rlGDrI3$=}R>J6K(CZitogKS7yXlo3GfRu~$_`I&&)AHrs>({n@a+1R-Gg4Z9RU1Q5S+S%4jg+*MhNebDR1`NaH#M(8-%wvjM9BXEJvOg_F|}yw9lN;s zZ!N~m()#-5ZdF~w=+q1~ExoF3G?-FiYVSBYwHQsILO{rl9tJ&wu5WC*xVm0a-Qel# zpPo&RCB-tvXM`lAf`fv04-Rb|9O*?RjDI7m84Yb65h+!>o4e^{9Wx7y^s){lC%31& z=i%{5Y+4nglVNIYs|fhl{{I#LOs9acitw1O6o7)CtMQHk4UKBSa@yJPJ zw$v1uYTcKQ8XZhs>7%jRu$j(pnG4-A_BD@}dt5e_qaD7pI8m!e3PZW z_ADHK9o#Hos)_2>YOEA?Fst$1Fpm{{R_PTHtDcb(&9;K$puEIdkc z&6is#rR`e(eW<_rwQZIqL$FiY&RHMW&z~9JPm{C>>1a_yk7No2H0l4U+ZxL^i4pmn zRkuA|a;ez+Rc7P$*&3J2n=+&(-Usfc>klL(_-Yl@utUAwN$;LTTF~-?NR_SOj)i$9 zH$`&W4*z?%;q$Kgew%(+Pp!*ozOu;g@Xv4FTz;zh?P;}>Ra(`sndsk`-xv1JTc*7} z{c{R1q+KRJcmtP-Ow#cuA0sF23>2&G0d8J7gniiIO92r?I<)?>r`QZU0z{t?T>tzw#{vbvY-qxEeD%*?oX zEv4rd|GK0a%P-+nBZq5#w=PlC%w<8;?pWR0;Aw_V+?#0#S49;qDLSIZMJD%75Bwv` z-5<}&qn|_MD+=!Zy;hO`K%`Q(C`og8yO_ecvt2@Sj@o8<4k@(ZRG7o{vM3C8nR0Gz zW2mZrOelujGiPQIkTLbNHi;{2v!}4~aHc}SK+&*hShC|w(XjHlFPv403Y%vbEO#Bn z{7~J)HHo#lQr(5M@BR+|M^$GbSOX8o#H*5x@UGSJ?VRoZ)eORjV|Ui6;wD_i+Ty*a zia`RHOLq?Q@%8CjcZDtpU+{i6lT6iq4^nG)zZYepSliv+VZu=U39TjScLbV1I1D_A zECxJ`nBbarloY!`*S7H^t~rQNigNg_ya})bl^O@o)ha8vpPxwn+Qkq8NRiWl0lRU3_t`a>??E zCCcbOj6Kwn>vYAmb>oXKK~Nzh%}@0E>f;d|P4t(@wdC^;Qr7dVzZ`AQE{NRS$nxuK z-O%I)=x&xgG(6tQx|0|6Df`mW@kYth>f=weiIC%+%A~(K23GrNY+NwMZitR?)&A_w z3Nh)}+Cz*DyFhbAy$v)eS6!`Nkal2?ssNb8B3<@KwiAPMVlliWlf6R&R#gd9=~n%V zK(wa*6h!BTArQ*puKgxf`DD&q*?B)nMguM&I&CbQU6UlOZ3JO8rOMM*AeRG;;I_SS zfFqfh%j-=1CE5e>*0n4+Z6m;;m>WwLp3Ec!gullCL2cc!H+D%(P^J$$VXg!bN=h7N zv2gn|+L9sq7kkH4Xcd(_*DL%N8-F3%7j>7(OiGO-!N68xEj!cntnQmcQ|?t>B7d7g zhH8>^hXl`?_cN^vz5FbnAuxj`71VFZCHwvFS_#`myi z;;p5TMljvwkIWCTEYiWt%)AjGmAvHyufRf(-6Tn$cL*XA=#v_6B`uG{TZaX%*i}UK z=vcn7eSr1>4Yv3xX9C6oGkg(2#$7y8%P_`%k+*4AiT;+=MAY~t_>a+YL)C=SiTlUj z@&T-}2EXMd@9`cMFf|4!pykFRg_e2BQP5Z8J}*DgdiiRx7SPP)q#K7}OriK*)P7Bp z>ya_Lsb$$Ib_F4`U(DPIps-~VkWsF9r1p^!NWOr4w~%z%O1nqp0Rg=CRU(V;o~U+n zcT!Ma&pq2^iv?P(r9Z8hVp||0hqI(Oh=EzUxi8BhQLz?;J%Y((tX8-Wm_Mqa`29Xq z{iPU0h{=e@D1JZ*`xQ~S?fc|KP48uw1a`0Bf|{=kxG!9x;kESbCy!>$IAWVz`*tL1 z1ySw_5j3~%<5@P^Y_Rec`pF2J=F=Bl76C5v^J6S;*>aM%d@SzG^`BNc!}G=zIUL?M z&i8XQq?J}(b-Mn3{I63@!k^E+cka#W%rsqRe7F(8e9!Hjnr2?<2Y{hXD#9D($L>-A z64`ze=d2CndCdXf!WX1y-2gw2Y%$hq;y~!`6fxJ*jFfk=kP}XEzLH21n|Z=VnIlP% z)lnY@9S6RE0>VveEFk{-5O0(?bLotkGE01-gH$)H)3QrGQk=c1NrJb1+21y%=H>S< zJ+QVKAV*{^(TN7)&t~f3vL?oO1-^sbTp+y0b|VD034FG$DqOy){?cp9>>=?O(P&~! zr0jA1(@J8%G6{a3S?i{~Kl1$j?%ISpCgquxLv&|JUf1U*QE`I|AD$Tc-k>zGaWC@~HHd zj+Rtt_#8MS@}z@+F4tblFJd5eifdYry1Ip_p^!v$3H!sAo+uAnp;f8YcSbm4uBDY& zzSZTqffQ(+PE@eBn8&>3RpZbMD)`FYe{(Rg6stY_u9wUE`LQKF^ZUuWVUqKFeP7Rs zbP0!C_wac8H6EZc!x49jAr86|4__G!g#--vBeU_wB6Kl4iHj}>Q_=2*=iw>p`YWi1 zEnE+PUlSEhmU%Bn_Hg{&C+eN7@&su2sf&ar+jOi$Pc5{E6b!>+Y&_RVGc6;mO9u&p z9a)3!sQ_Ohfe7y|>d@}td0PnLsWJh!$hHY4hQrr1a<%(He{kTRA$(Ssxi3D9dY$ti zvCP6?M|)cc}DnivQh7p0#$j(8dH>eFrZ-wR*A1h<)dnCJg& zE`-{Li&_3=>6kNzWE0>J{$lR-KzlstvC5E3=RtaY$A2C=T@frpNuAD<6-SJ30?41MY9#xp{BwhIe}9hXp3Yl5JlzT&YGyUYT(Q`P-ywudZNgk?SeG1x--r`u zjP7#BvsfDw`Lv1a-9-LC;WJDm2}_Z;wNjGX#5Et1=ysIM98q~&NY0XIttQ;HMbvg6 zX>XInwS`CaHPP`zHB@Y!m`XNE=l~0_L){-KU>iq+Tb5((;}H%_WQU_zCvCD_JlQ#t zJWfE^F_CfFWH%JqiJxqrNxoo7cAO)tqbXNf$S(X84{dOeEZIvt&WDM76$cANgKsX! z8sZ|<3qURVuv@h2A$UY$ATqHfKKV2fK|P93nTt=2M1gi-^MuVo?6Ygid5 zctuV0djf2h0v;Zuj>N-YlhoQt>bp(q$Wh41_Km%=`g;_-?n-02OM@}f zpl&I!gk;1}%G@?>Wbg)Lhz8I}g?|cRdX@^lo60Ych7ds9>AJx^lv+oD-^5usq2Ox! za61}gIgBm%EX&^>?S)es0!n+Vn}yJ9)z-cHxTr=u&sa3&(qqis$HrEVgU!-4<#bJ~ zL>Fi#`c{u0JvK4923}ZJ`P<`cJFjgz|HRxXJ$vm*aNiSytjA_U+TQa|Y_C1hJ=ASe z*RfyM)+y03fjqT@=xvFycxdR{X*El}1bCp6nR+QRV(4k8&eJOzI!3J~N#Rc-1a$5Q z=sYz^FDibV_Dh$Z_0-(|iJnv@c__0;GLw*{llkoNMdtLItxueFWSExKlzyez;@w)M zc<7Blhe9vWHIGCyNb6w^z0|$35tvutei29?a-+9p*<3W@X)ev7d{=c0brrqDLqEr} z(3o?vFlUn4Ev_+l@-!i5>=)gko8Fd?^FhaBC4ug^f^!7Y-(PdhYRvuq4EzF{Pj<@x zHc#KR%BNp(ZIvtdWmS;X=hiDw@I$U(>X{eiO2Of;f`wZiEW_@|sC?)`0beDUr?LRt zR=}26c#=@C@FZWTGG8RS@JOeqO^0XxQ{JojoZGbAt!0=d;JynQriDVZ)&LPsu7px> zRim468Ij4ovq8mbPL0E3m?dr+>Y`f9+$7kmBa>B z#JgAg$f}4xt#rMgT@f=}L6XmVc;?xgYvuK4E9|U`$hXQbikBf83rHKVaKL>nF|ZZ^ z4y`G-iSl^1QEqSTnUei%cc@hMxa3)5DfvnM*~;hiC(nO>$~S2%a8`xfGVEsuV;Q0|pETbD@d)u{`X z1i07r1=TyWwR#5CsVkIbCAHcHwf&xNeWuWsm()gYZ_O7hD16=q%B~WTe-Y?je!2mx zyIc7Xd-;1JVjl6k^Z&)@49@IcPo zdo_0|_-f_(tAU)3#iUmsa$Ze7?_9Y4${7doScaJK<6l4Df*=cC{|fUq zi)X>2?}Di;&zqyvuw6_YUB5_O70ZwVs}~nns=w%V?_8tv*>($5<+VoS@a%T;SJA~6 zyCqJ#d4qc-tLS2$J#zFOsl}c%qdoGYJzv@ioLJf^JFTzU+BIn}mG6RWX^2=e$a6GO zd=iw5V@)P7k|!C~RSYYkKC49#*0awtnAJtG&rPTgyU2tV>+{@Y*pD)NJ^QXi_q!_g zUGPM#6|j4CA@Rt8n?eJl=z&|&19wjPqo@P-76-yc2Oc5^@17vFYe3n8^yIp-K##Hi+;f(fU9jzr@lPk%mssfT3CkCui9^qc zm-z7?^of_t053d5VX}b9y86O#!=3E*W!=fD#7UO>lgJyBY+jQnyGhR6Nmj2nTy0go z2_;j%YBQ}p9mH8QvtO1+HRjQ56aehPSoY}?)}LMAB^uKVedID=wDr_;bQ(RDRWni- zJ*{dmV!02zCdM>KA0dfBr}v@NsA<))X@x(~i(TL<^z=;C%$VnNOUIOp!L+&;dny)Y zfQ7>G04EI6*A9vMGaktLcE988-U&8H>21*c@%>R48~}QQAK&qOyN8^Bcfo>k+4h53 zh5?ow9WSJIUc5`3ixaL+7@JG_Fh>!dPZXY?b)QfBJSXJw;-YHVS=~apWmi;@P{Tr6u761O{K5$?k=zwM)03g0$Sig%g ziK5v>35%l3EDrmu=TK}Tc8gVFOyBTq4g_co?)^_Zd;94tSoeKo`+ekhF@!#zNxueW ziCIbjAS?l_ad_kmntc)nbe;S#fCGw7!hYgDwk1O?QOsck#4RlRDh4?=3H8DNV1Hw; zE`!Ih%N%Sh4uP;+cnT*QXbQ)yfUAb&}WDv>&YL=B?>>t{E<^X@6<8)LR$#ST}vJZl1SpoYzLaQm+&JCMe4FoP3V5 z08IbbQvnCH!LTL}pm)2#pA8nJ#1Q9}p##gTo?-~A8dv}hevZZ}BZdgTAtv#l5iINV zE>LR?GGLiy1z+Y={~$Xex^JVHbrTi*#^>x=n(^ zu&|c}AZIL`1&b_O26x*dS0@oy0PHuHkq-f&Fg!RN3*#g#I~ITh0HCXAq$3t~wEz-? zM#^KMV`6XtTpacY{ssj+jjqG|T{|?~`{BKJq}=wabMI%!8t<9hbvYi7?1Hf@n;#3k zPUtDvWbu3}%RYwb3=ZKS2CXBo&(}aF0dVgw&;kw-FbS)f-11yzaqWUGVVKTg5Dhfe zi)gq$260Y|N%6D>+1&;HGYRYNg6pHVR`B0${t-16XTt@LvE{Q4C^4?69c@ zCQ}2gsX;C+L-h$z4?JuL&!kLaZK7@e>VgUZ5KYS<2h3Kr7%~wLrS8L1P^=&D;C=Kz z@Qx(lSjP6@!!%$B7FLF0m0kuL0GL>DFmqf4Cl)G=hcH!xyfDb#0?1W7^SBt&5C9Al zn;S>LK4YPemzlI`*a}tH9!|14V&>+vj~6SCvtAune>|?4IIcTAt{45?@bLHQuzQJ3 zflbt8n>&CB11_`8`IDGm?TO?>v;Qgp22R36QP3?Kdr=qLNDWem#u|u2gkyjKrzmI> zifstMTGw^BwG2JC%u=@uox~v4R1nuuNL~C^I0_m7V67&w2cqF8_hEr}*vLZ|z(_p* zg_5VnT-cQ)8#ULJK&9ea6Fkgr;a|o=HzYi`^{PEL+Tm#?^7pMJJU{tKFQh6sonc&5 zr6x8ALjLZntprnq!XHw^B3D~Mi@#C)LIw%^tM=_L?NVY zscq_WJhQmM{->UDzZmzX>mQoPznw!o+rmG;?Ys9gL_s+E`zG|{=jZvxHqGs+)E~i@ zdx9noHtxNhrg(l}nS9O}Fq-Vzx-TqU*OQo})a^Oc<1%L7B3oD48j^eC&8ePPcvDNy zRv)jHTlek^Q#0A?99!4pYsHNl*^0`Vr1|apDaP8-^9PW2-m}9(YTYC=<~x)RSxRyZ zL)NQj=}0!kp4y!0Gas{3wwg@8vaRc7Svun@xQvD6qvK^VuC`q)OHn9kJ$oh~C2}QM zdoi+)E{Xp{5nzsODNgY@!LP*|WG9rfS%s*|qy*yUB(puTf9)j$i*x{REpuiRP`YZ{ zkKE|~25KoDBNb*TnPhrkdG@h?n3YUUEN7i;d32q%1dpU|OoOJFgsM`z<8`IJ#bczX z#CT{gg+=Z03QRgoob+Gs&hXFmAdH{R8&917lTOZ6QnPcMQX0fKW$0`Fd7R6gwj!<*oUzg~t`xK^ zon_xV`NYNh?&LtcbmR&&E+i^}LXgh{NWm4dFUnA_rgwF*@)QYdva?00Zt)03el;UU zY_Dvvfuma>Tv{k}PqOd!r(!;7iU5q=x9F2uu50|C48EwuPqibgZ+)NRNbGOBmt#4c zTYM;@-rBx#XDN}sNeca$zR4eSk+q_~L3Vr%Q$b{=-WfHdQe!aQFXh}?pn66)1Nnkq z1JXy~JulM-%enN`vp+?BzqUR=Em1lKe*Tekj7Vu#Uc@K=(`dtmi;m?Fq=MYTG<5~^ z@BI~+eev9I!MV8kZR;-g;aw%BC=mxpU*H@fU}k zkRtBO)(Q6nFK^3TVQT%Qd?kqmQa(UvgMXycU1r>_EHn1SUqwt`urRna>k{zl);qVG z8@J{Iv~pj}dFUwCG9tuD@%=}}cSjiUsEv$~$`&IEI@7iL&XS9)Iq!`+o${#vCODw? zcIw^4nLl@H#~uGyJK=p2-0)1~WOsm1^!LvDhY#6~dYd2IKmNoAJ^4D2zma7XANh}h z6$bzdi~;Lnar$hoUEnh)Vj)HhBpite!=gygssep^S))^g{3H?ND5i7UC{`r>ifX)3 zA)7;sF;5eXtPB&(8E*PVx}y8JqfZb!Q04hE>EbXdd&Eq>1#2|@()dZgO?O|$8WCg zTbttH2m&l@B3i%KKH>=kiGg)2jaa50#hI3TIFW5VFMSYFO6xYHzUfeOO0#*|;4iJ( zYGrpj?Q#C0zpRmtwGEqXdb!jU`FchvIy52T^094(x0~tXXTjjdM$=z$KNyN%?fL8r zj5T6)Y<)S^Gy6=hsy%77y~_42b1YU`?cPPIuj^@d_B+N^&Bj){klWKa3yKs@>lzlp z^lAE*X@Kr*tNrb!>D;~80R0V}iSW%H*bk`y<=wjzh^nrCzYE46JmjzRgp)aI|HR%i>hNq|V%lAp|gDrM;>?v8WxH1kkl=q)PmZ|Sv zeR;xkcjG$lyZl@yZ$=IAPv2!$J=gx##+uW_&)0nsdTyP{yft--k25s%Y9@j+>a#!Z zDw^cDO+L`9FaNXq)ZcBvE$EqT#f=-mej^K0tr<;CPd*1*{dRx*!?~fePwA!^;{9~z zTeecA7s8fXdXxVcPi>|-rQCb}yawsJpozpUmdyRMJ00VO$)_k&_ zzd{{0lF6KSddO+0FD~OOkv%>-W~LZ56A-(@S$*?(4(8mg2ar5^9qP7UZg!*2obRX$ z)L&oDs+if`@l)~T?Q>Z}yFu=~3vV0yzrQH;KkKdj>Fw+BTQx+3-Jd@e=8m1xp1!K` z_Il0ty5_HsawY*F+6uJ`@|_lau$bXADn9CvLaiE$_7D9}d2z+O-mgo4^HHJ4C_C%7 zN{)_FrJ>TL6eGOH7o{NV^W)Jy`>@v2f#fSale)te8b|loAK+cv`Bzx^B3oC4@nJ4P zBNzWxKQ#CelpcE9C$P1o;l@c8qh?pgCU#!*%#Qxlt*8F0pKtCvH2o)`bkDM;=_cxR z$A<iEZ*v-K;iGoPWN}JV%29~8VbC)&_824 zq4j#h;PwR@gWVK2n~WZNX&wr!ZR`@_E43LbYLbfkFw5C_DpB)NuT}Z-P2El?j1fo4 zUb^z}Zj@;8Wna<7&gQGy(E)P1IE$r&2E*H%sW0&3S{>igf9lsrs+1IIX@A}PtL!J+ z3%Rw(uVJ-Y+q447W?g=zB=+c5iVOZU|HS~|;JNebgC;TOa>Cdq;eMb8CZN`wn*97*(lhsF&zn(t&`>i>D71HdLNl@G% z3M?w6=0zyz6WN=lynZRq}Z*vW8TdsdFko5ICWNlTer}Okf%ANPq}O zLeF-Qbpt_m1cFN-#S0x{frl$>Lw&`dUa|ne?Y=PGI8SZ(jRxY)lm2`1fI~T%i-YDj z56wdw%Doi<|4@F&Nx%1^c^G{F&#(xESVS!jJXjwHKIspJSPI4uc*a|hMlE8ImNz^t z?w*u~KrC)?Kd;#_J58vvjPDq{Eu`==P5xqw{G(AQ4Kh?SWtr3=L!}R z{L0C7Du@OMK7Xxl#ns%_0E#@@h}UVFgvx|fz)i`%kprHx6#Yo3KqNtajw~+*_umIz zt^hmX<1A1_U0K8hRMw&6#P<%BA2UP{ZsG@Z;+O3Op2`WnqKRMY;@s{RgbRp&JPS{_ zCxK@tLFXpHW|I&*EML(DsWy;I4Nxt$N#vPU#v3wufqEkx`QA^>k$=Qp7pcBYJbOTt z;)ekz!9J~I7aT}+jtq_;mR^SY7Bv0f%-YvQ${C4^4Z*$(y*wFK3E)z3|Asknn3Ob| zIz&!^pi@#GRE|BTWUfp|^I+xAVHKWC3C=nIKl2}-N&B9zBJ2v(!jnLjYB%D^r+Gpm zv0=uV2{EoHvTeA|Yi&6D3k7sL$tpgERXfh(i0p|10kz`3CwSpy zkEb{@)eTZrvzinfekRTgV4Ehw>)K`2Hp9>VRCwWLlcXNege+G308~}K=5$L% z?whj2ttNJ=(~)ki^Xx3)(yYrE`ZB93&hFLjNQ=X4u5toZtdOc8Mh-`3DGrgB50M|< zs6HKP66F#RAIS|Divvc+UAIlr2_$=3l6bI)@Z`R5F|tQI!IwXVXOirRM&3YoMt>^= zOSVF;*J0HSU!$qy-lS5!HX^y372HvV=-{j}>hjQYltgpwDslz8o|fmhCh)WyYINI% z*Y=@=|MN?lY=JT*&rH%ZL_?{oI`IF3xTI0!A#D?{-FlEL5K{5na4mO9C&_y_O-CDa zrvR>fP-M=9t_B&aQlzw)}&G+nGCli(g5NUoY)5Wk@{u-(D% z(3U9b80>XdLugS)dcWl)sR?S~{irW<-RthRe97^6WVRqR(hy~*exn5%B1bS?l9naNIhfk1=kj!Qwy*^f_Jyc_FYwY&n` zI8P1L)z`%EL}EQ-ouvyV(a+3!lcDR3Tn5dvQI?>JkAVYTui2=De%9V}&unl#+Zi+G zq*v`K!PThVp!2PH#kO51qW7F6N$a|L(nj0!`nJE{OEfQ;lwGO;j?Yo;dgH#g=ubD- zgVB1|OOMWSfhZq!N9v)^jg!Mo(%qDRCKcCDI4;nd@-!}MI?bQ&0vB9K`eN)XtR3ft zk8#3ZZj2XRy@z-$CVVf-;tuzq(B?{()Zh+rfEH^(;-hn7qAhNCu|ycw&qU`oA zlgcZ`*&FUDIW8e3xT_@?2dHP?#n9{H-g#GC`meZ;Zv;>_12Z&1!0Qff~v0sNpFQ|Zn<`DUe}azsU~>skGbwrAlh*bXXo=YsQL8v>(B*R8<3En zkKX6B;ao&S`|IX)sJJ%C4!ccWijBR!P2mNdk{@ixKiHOx52Q2&Qk(;0L$*^=0FMkw zw3NWul7Lmxu}N<1tpR+fMP)cG37J>L&R-iqxj7PW|kv>;`0xkBKo4Dz@J#WD9!18&ql@lx#?P^!HP$ z@_)77*Sssh?34=6K<_ScbvId7xVOoxr@^mJ?>cz<-k8Q))}oD9Bu@;bTY9%gbGO%g zm*KqIcXhYNo+Pyl7mkb@*o2EuLY5HCsaft%T1ovsb|+w;C(S7`uH;NzIL;NyF&Qga zG2bEya-ps?LW#zi0a#HVZn9jwDG{+z^+&B<%@3pS$%q3tNvzX4E!#%qTWY zIyVNcd^t<@NaMOVNgkrPm?*qw#VxT;f^aCJDAP@jNzefdhMOeqIp6$dzPBf`_m8YQ z)Vz66cJr6=-tW%6WAmE_oqK=G_oR-@=uGl}vWq8u z#l?eYFbn#chySy*$8>X#wHg1H_W*f{Xa9-kxDa;W4Fx}q6W%6*Q~=Dhtra(-VBlLn zFJkj0J&9$H!VZw*WYg*cx6_+BDunTt@OY>IVd5O0z<S^3{V0PT_T}p_75es2|kZvT#jO7Fch(xpL^y6`3kTg1_lHGy)hI~421^^ zlGy)lrxonI_5D=;9Z703Rv8-;Fh`Wb5@iCHCR~XEXfTHuMR1U;-!;qH0*v7!`Qkz6 zUxr_5f%*?Z)gz%=lO&lgvP%o;&^wYc@s092A|4)va|QZlk^&0AKIk~l3PO3cl-G8Q zHkzUxNRgHW*v%=%`+5scg1p6Gcjf>W_(&0x;o_OUy3L8cnS^d-C@PTDZ4cs!Bs*YW zc9GD47DDdBBl5&=d-%RG3Z~m~bUre!xj*V^@+930covy^sY>JYy{764_OZZ5+pvpj zAJkVCb~h8l#os}ELs6(9@@$g_cyIZOfqbzbB{7n#D|s;*WI9Pa9}l;Wk8{F-d}WVL z9nesJ0L&ko+Qj$cGW&N7Uxd9FNdhe)<4WYW#Ph7eeB;UTuD2u!JIcRf4jzD@C{n`I zFNbaNhdXhG7?>uF$ln4~LSM*mIbFGY`a|@V0X#x!ju0lJBcmP1G8Zd_@s8fkYd)QK z1~8o!j98g&BwAK$Lmvpek!FXeDY?@)#LFOVT=1=9v=MA~Sjqo9LAaZ|o4~?tCEcO0 zY3fZ+P)jwd(y5iU&(XdqEpE&rYAAd}uWH#?UxWz@hTRHxz&yhW*3P_`L(?pQTAJC8 zt!kUF$DT);qw@rn1m(hOw+eT@b=gnVL0eUO&n3lIdqE$|&+=OE)p#?aPq!1bIo?(4 zYFrapArDJ&TuR!=GL`m&*#VnT>BCmvHhm`wOjQ0xu36IswN@FeQ{bBp(XETv?$o6B z$}wQS(`TP3PgfpaCE<7v0-nlw+2NVdF)Uf}Z}P3~<=MMOea|j+EbzX6ocKu60I?%R znsC&)7P(PxBoHdeX?mD_?`aaOivN<~~gnp>tQA3AcxAs?cBz#P^Bu^Dc#Ty>)09wYDx zwl%XZS)g>?IF_}oi^9&K;CV6A(nzRgPMJ;rA`;E@b=98Wj#}wDHEkEFF@AbA@GC<> zmjPU~RVx*sXX{!;aLFjFr!nN8OI_^Zx*r(E#&PcN!6T!#KtJcZ{|xA*h-T9QGLyy! zF^C*Ptlmady(0}G_k>h1l5^d9{c3hTCFoL4khPRCXZTcWBCFM)r0E5?()R(m!F6A$ z1i?sO=d@5p9F^-g-uhCy6}Huy{TBChKCkg&k=Ya5lR~ImZ`Hw|!r-EBtbk+7P?=A0 ziu*KIYZWGdGw@ZhjKc=clQ>pCfoH5-OjWogqlHBYYpBzrSTAdn8#JAbo#wK}A96Tj zO|A1HT5{T9XahPZ)SE;${-2dGykB3?a6k_p6RL(?;G4KpkcJNNisGv$4g>5G;wFh! z{mz9*(;|DV$Mzq;#E$A^cNFxqMKBfj=!FWEIxEcb;_bQMhv~KM)0*-O5C_Ls0w@^M zg_JRX5UFxpi+G6I!`KL}iR;HFO7C_0ggMZfDD^%zJtnSX)tQxmZv5P>f6rwg zrtv0f?I86M=;89FcI;o78W*0DXpf8bp9Sh-fF*1j@5mFE` zU<8U5N8V}5Yyq0^ZSk9fvW(KDyN20}hK5D);tVhDWhTm0Zkl#K@~n23z?O}unv_|r zNaiYU(OMsxNetqzh+z)H$ME`IB>OU95G@rk0xbK_1o|g+mD7jhS@2yDXK_B;P@F@W ze|jYISu5>r6Q}*!=ix1d0D0ew{5`%Ia~dkL=JEjf#eIUIPq1R^b}n0k56Vv3%+E?c zfh}!6>r(P3DJ$72d1+(tn?E?7=2PDlu3$WH*b2h0dQVsx&W}-&A_}&OS^SR5Lih!) z%0ZbE_gN$|?9Wtc4Z8Lzx~!zyCw$2gDrT06z}sl<)aBf4V4DCjA?vGf{8L>viJBY= zh4lY~ts>z@mQviwXG_r4Gf;#cR4Kue0847^f;!`g0Slo8?zAhWd3Za4uxax7=~6V& ziYj#?!FNygDmJYFUhdi_)*5dnN=a9hxV8}q@FU6YV$MkvZ1`TBCrddc*3PxWS-?3G zDPf^t>Etj9`?0{SIa$YiZ@9*FDf#!#I4}-nX5Y2ldl6a6P5K%yW_=B6c+5AGD==H3 zBvlzx5ibH;k`l2BE#3V0(fvwoZ{prDu7h9f$9DMom1MD)0o$lbVUGo8@~8Yk zq1*jRi&&2j;~4$>YLv<)2; z<}kWU@k~Xo;sl>&mzJtG0(D?$D-wi7bLKxO`v6_I1RliCCXx^%Dzw6UsilXv6HQU~ zT#*Shh6z(Z@*1aw38h}&OA`1`kk!GoDi7&P+yY=08jz3@k+3q zrNY!yqNGT82|J*l%fD*Idhl z)P-|O|BXTQ*Tr>m?_*jHv2e!kV}VXxkgzH?9U(uUJrVAYZR>EWuO2io1Ex z?CNVygy5jgi%r!j9b;9(Co3U&c?vF>^3*ryczh$e_18#vNOQ894sbLyPQr7M_;Sm(B*B=jutz>bje#9#oqcUS8aKw<1Xxxl$0=oE9QA$-Zk+?^OhqS%ujevuI4}x z%YJYyx|{W<1B-D;=tpg8x0#g87jR36q+>A0%D|qxTgYuF&TU-C<-EeH17que%KwQMRP$Wp4XO-8oM4Y2dJi_Q5XW2W! zO=p20IIfTtp%8Jt10UWW;%DuP&h8Y7Q^X~BS2;pfdBg}{oSB^!uh>RvLcyRoaP$F` zrOqo0D@EWsA#ugeDe4lHf{c}ddQ{@)l$VN>{`x9`iqUMvDlC%9XV%anl4yBJ)xQ$T zhHFYwMH=H0N)BtPYJTchi#1_uYSP785^I{?lIM8+&Kdh@r1+Qj&#f2o zV3g5PX1eQV&y|=PmzeANTRd1db1tzwbH*yA#F8Rqol;`1>~AjpFKLlrsw`F1EoI%~ zZx*s{;qGt$rNm-K%KVJGWrjaC+uw@!iuumEnYEM!W%MkWYTi>~k=TPZWWBiLf5Ex* zB3mgoPs-Wb!R1GZ1BL1+e+E2O;u_^|*6Bgz25=p9Kb7lCz_32Z$|uf?-R5}r`U&s5 z6|;N{z1PR~tnhm;2UZ+snNLvey+Jo$&PCtsY(HLU+$!`a-OQ(lV)xxED0fbk`Lyh6 zSXn^GRX<9ZudcLTb~f#zowwSOrEo6WU|-jq<9EX4RI+pc+hSm%bVyp+jf}DeBk8~^ z=~Lf_o|P_?xjkuT^Z<_h?nW-&|1-imifcb>-LBC@}`g1p5dY;?lEre9$+*uQw=V?r=gl>wB`6iqFh#}}O; zscuSmZ55Ag-N`5;c5V~(Pxd}7FLdNA zjGmbN8c1t<|LBKodgnI2ZJzogcj^P_SU#S2d@zO+@$O>{CIjQqn~t3o;bx5 z`nk+6&ABc^dRFHdeO`K;gFaojkSNaokQqw!-M;;1wl?hf{Dx=Uu~41nsqoF!nYP-Z z#FYZVPFJ;*MD{c$y`q^!X$(QX1*jSf=2|B31QVn)3Cf2cwnc#I zHU_*8;{8P8IwYc~pp)^Js6*n(+r2*vDt~rV{*K@L`;Q5N)g1K40QhQvqWiKCJP5H5 zQrH8@;K3IAfB(Kbb;h51*Zc*cPeky4IMHx+^uNqtrh%6S$HarmUT85M=7NSIh%6&} ze>%}8MQGOc8rI&M;DeWR`jQ;*tbwIc(?N6S7E*|6sA^OFicqTK;mC9ltrD?`7p85TCugS zVkULc76;1Ob>fn05(@u%jfG|Egzxl7mDkC?R8wd^kkShiDGrk=u9H*#@Du$y9qoQr3LhDh?1S;cA*cAu@ zD4>Xk5vQq&p)62-nZSV}a>kRCWlxPb{{5FL`T7Bh1{3uL@6-)Hs{a+X{F^nR_~sj= zCtu<7H_Qk#{2;uaqP*R6`Seq`;rRv=3k`z{4fMz_`l5r7rEgHYn9$?e9f zTRNBnd4AkQ^o9L9PL*g)huIhNk%NPNLolO%Mse1%qvD)lP56()6jo@n`+o#gCEmy8 zauG7mM&-82MQ8l3Zr=~v!d-7}>yf1`Y~6Xcn0_FG;}l5sx^^{ZtIUq)LDbgWy6t;8 zS<$_Bx~wX0tZu|)Y}wvm(o%HB#v3a_E?BhUtooK&m%G6iS(6<(4;OoM-L@rKcRZ}J zQ%N6R`Oc=9H&do%Qrykl7PrTRIn-}NJ~C`hxT*b$?ZXW7yZmvUh<~*#`A3gApWV7{ zc~4iK^FvP`@j^V)SNr0@ud%1Hs_N3lJsa5uM1N)3CoG@dy`d)#4K8@e(nX}7fUg!{ zj-GgIcX7C;{tse6oxd{7U`iF!5T>S5>Si9;m7n=;6eyZYxtgcBn+Hmcra76GX^r4q zpY~~{it3z}`IN({l#6+ps@-9RD%I!)yP=jS)f1__Q%As+*aruP1t^+Lv$bY4Qk?+&GZtk&@&A zCMCr=%$=#70|Epr^4NBop+&(0|Cqv%LUqUbfl1t#+c%d7S+%8Df66$gf2WG+>GDty zy9OqplGc*eoRceP(mnZsE@`w+cfO;y%e~xMEKi^hS)~>_YJuv38vJ;!7{upi!}t2b zGrLq-+m)`VqxqJ#Stn!N!mfP?KdQrBR1a-aIufgze{Jb53_ubTL6Q2{n_-vUr5QoM zyzlv}t~B1`-Bh3KipwVb(>r~kK;G2TUal^m^dVkcA!&Pvd7Q>up#rVVO8w(Cz0ybh z(z|Trnf=;B{b_3+)5o4%$0u9S!H65Fa`|2vIn$g)Y#j_8K7C0&udCw8+%9mK&Ol>Q%(zUimF>aRZQ zx4!Eu0PCZE>Bqr3u*M(U!0DfU9k?LA7p9~Z9BSnPFPH)8%f9O$Kk_Gk>BD~M-+%(B z2J_E;@vlZ|T!9%d!79j=h4yBlb3eu$wGW_v97MnJmw)+3Kl%TG0?2-9Oh0SvK0%a) zHtzk{d;$OnLHSOOPCat+rWZ6;I>|NkXI{LLEheo((GTY+E7)n4n;am2T9k zckSkt>QM{KRezKG)t1wVji0%0IXQ=K!yF3ln7!Q^r~DLbAyQugu3u00bNlS zDmP;zDuj5hfG#2sRqFt)OJOV87q`g;)|cc*5mdGO9x41Kagx8U1~-YaugTvJNL?I; zUbF*pNp54ke<6Le?Z4}WQtMIGtQNrga9~pi3^O-hBjttlaQc0XC zX0igBIN}|l7}LSK0uIu}J5g*nM>g9iRB#)Of@3c}=G0rxJ`X{htGAa*N}`B`+}Nc6 zQm%7C7tl6X|KS#H466vPQF1AWv2)xwrwL+ikb$#v(9%J)o)kI1C zGNFPD0xgMdmMRlXsK!)NQADr8ilZO!d7v8r03arb%fxz3Hcf`uC68QmaYB_Kb|FUw z(9Ak07hmLR>d>hWT@=ww#$X1yMAH)j4EDjm| zz#|umHn2l99d#&x95)_7YuRY_Ne6^0R%oIZZdRzm81EwTX#*QB?5K$=Y~WBs4jnZV zUwmC!|4t>2k|3oSN+~_<3QatF*OxAc0bw6haCl{v3W}*rBBCC1!wLTS5W-e68%=IG zS4p1BUVf2zqJS9)1^}L1n%HElRyHVrfPG#m#+X&&!Pyi!8~`;nqH-BRBVghXLa&ff zX4>h0p?+Em6WuUn1~ckVWrZu8;EA!Me!0ycjMSNyC?3JA;@Ll#C?HUUj#N#_a>jZx zP%CmtLI!wBdEy3Bt{}#S6;!w*mx`A4wXOL-qip560+& zIuPInb*SSO?!Zz*a)AS4x4L&l)4J{aFE;IzkD`buN>RAaN!aMbUvL zt~H0|nWkF~(ZM;afTahRp&P(x!VFXpfyq2zGO)SG5H^8~D(COpb#0RkO4C4@KtJ(w4YBKlkhmgk6%#Y z6>YVGF_3{B8mNjF6*HhSbdiKt#KJo>2pdEgBcm0*q9d;$ADPS-E5-H>pe6wrE{f4s zBUE7pyT}w4&q0MnU$YL#wi=a1G_py^IVN}@3);XPxOK)DFroqn#Ur9O z;H%v#vyH{=f*2|=1Nll4P0Ohlq+=BgE(q2RROBKKidjf$dSQfD|J*_%zO4X3&G6U# z*$x?Q@PQBdU^0-6w6^>7C#^X01YOW$3Iub*3Vb0mQ`*1*k#z<+lF)}<9KZ_2zy&Z^ znIJ>ToJ!_xzLR}>c1 z!73txkaNi6GyPzrx77Jcj83!7mQBPWOf0NW4^J>r3y zhiEw$hB*iIR;djVggjLJ|-NbT;HjGi2J{{}A#$^^}uJF{(;G-clYi?PT zbQ*%#Eg|k!2vJi55r!yaRZ3frt)zDEpyxZ^T9Ah?hOmuYG+_v(*o7H>JhVU2d^9z` zc~DltHKrIxwq19$nq8#>CNyCi^w`BVoZgK-B*6};|8W=^7#B&8qNM?pU#%iy3 zo9|jc#Wu*kbhJNRF{4C`Csp%n0Jg#t1#p8640r=s+yDoywBM6qq>wo@n=E!yP0s(s z@OK|1P%=o5n)RM~zBBq!yg0%UcoC1+zn&M`aQmNfUXh1{UNsWTMbU*$aeObDL;etg z>u2wJA+U&Awgha>b=rBImWBvn1pf6U?&gyLBl(+v{p`g}l&$3%A-Ram3M6tA9!*$n zsPJx%YCcq37GO!xq0K=?iTi~FmF8D(p3q(-00nRW39tYS@Bk5T09zvo-XRGb@Btn0 zic$-4_D=_NFHru(21FqMTZ025NB~=-179Qr|3UBrJx~Nc5Cs!3g0=zzAMgR{=jIs0 zER=0%`cFq3WCTkP1xfG(ckl;&&;xx?1PdSu9>4{SFbUkIkamp**a9E4VYtxmN$w{X zP!3w81xqRdSGr`U9szcM0*k~3uox~uFwjeoq)%AxNdT+m+K>%F!wusQ4%e_1-p~%` z5D!^y5ACoI11Q=6(b}Sos2qa#bVLoKtfnZ!4(U)w+%SOVko5G>5!nzD*H9AgFcVS5 z4x()>f+E@&qvj?eHPC`)0tE*dgCTk%r~r!+8L>ewkrh$JARZAG%R&}y5&v}24zZ{c z4-OEg?UamxSn{ubfK5jnZw`7&NMfM?|6)otpp4}fg4wFf0%>L;NCR;!@E}ZS0=?uL z0VN!_aU8*s9L2F5(eWHDa2>}nOJt)W8p2DakN>c-d8V#;5QH4#u^?vS8yjLY-ew;A0K8(~8r)3F`91W>#LO2V<~NO2tT(E=B;Aibm?0p%Yb()0KcHZsy6!=oJ;lFQ!l z9q;i5-%(gZZj>OSl=ep(ZUMPg$=G&os3xNEnk_o0Z3Yiw_j(eGV(KTYtyQ&f+7@EBMf~q47u_rpYju*k`t8@7=N)7lM)c8 zk}QXkETu9kvl1?kG8B0-{ff#b|3gnlW^nhgvL~042;LGf<ey8>(|Qm$Noy(^tgPHlcGiZ?ibN(>L7{Ip1?T*>gLW zb3JomJnz#x3*ZUd;1>v~S};N~Ovw(;gZ-X`Gel_{;|9r4VFo6^07`)gd|?}WfeDyk z8zdADd_hAc)E6QYLw%t_|1oq#FSJBS^h8ZGMNxD`RrEqN^hGyxLq}9YF_a1LAVL$( zLPIpsD%3-_;YUlfL}N73Kr}{a^g<_eL@D$~WpqNFlt!I&8=!Pak#tF8)JjKmLQV8V zNfb#X^h+gl0VwoB$Fvmi08DYTLQ8>4LzGFUv`VQIORqFatMo~ultQNzPw7-nDRcou zR7Z1EO?4DQE5HY^sSC9s7O11GJ^;nTLSxuE#|1tGa?_gPZ^;UWH2%hy0PW4%D^$0pOT9dU~y%kxl6;(qOTXDcr zPZb3~wOo^h3cp7P62>5s(SWX?*p}-oPSb9XFkg{y74)@V{q~aVqh0 z_wbS~FJ>=cmSsb6Wn=a(V|Hc%^D%$oCrq{{fubwGna| z7qA)*a{pEWtqvQ@A|h;1^deUt6E{^rS8^2>aXoi*4>v&!cOsOHQU$jxYOd-)H*{0? z8yU`VXIFG5_X2O%B6`wpOz|ISjvgiH>0{2e&3gSb+3Md z!sbTtNshvAGgo%E_j~i#dxs)_=Z<{C*MP^@f*OM~NRuLAgn0Ru3L!%sCc}OZ!wNHF z4E|s=|8s5?6xT5d$r{x%P^xWnxiL^iLl2?Xa9w!+X5;y2xIAXK59<(kX{Qdc*EV?1 zCp7ZiUa=k#!k7+%LKuP}ka&rcm_nHNiJLfzm-vb4aE9;8Zc>pkWQiU*w+xjf5pNEP z#aN2Tc#NO;jQJ1_3kgO*W1((Wr%3n^ea(O14_?bb89BC<+$9Ne%@p75MHq1w_^ghz zaw~yiTDHawEUzDh*Kj#khacIIv625slFOzKi!HDp`(*0e?KVsaHV82lUBkJAf;J>_ z9TyjOEAk{yvUYn{96|Yy0awLRL+Zj9aa!29WP>!3Y<5?BsKB^ z|IhdK<`zm!v33-71==nsKu#u~$^cqvHa0+n8{`6`(n{Kj7zjw-M8ghzg-!ZE6Zl~U zc4wt__9%uDp4CDqtZkm{`DgbBX@LTs9oQ4k!V?mBD$fEI>6t7(LsN<>|E6{*7Mgw) zn1TEGfa!N?EvTNmkuv^-F#x(Ox)Ei!w}`b7pSgFUC7Ps1+JQ?Nr74;z3pt~jmm->% z5JxdD&*7%*_AMT78Q(8K5&~p<0!t$3916+?f?ybAfC-4f6uv_U)*%#Nh8O+-70v+z zh=B-hzzozO9=PlrL_w&%Izl4ktHm0u$GWV^`mD!#sLx@oTjQ*`X{`&2n+iav|G7yQ z=0L7l1FQ*3sL9%_;rg$=TC4**tOs z#IF;3vo*W35gV+b)2q3Iu<^Q}2x_kPy0O25|9H;Gx<@qz$Uuc;Zw-!*r|uw}fE-GI z98`oJ(g7Im3?7_72ms+0sz4N!KnYZ!7&L(jdY}mQpbV}+38+H`cEKOWK>)H_9<*D# zCm_4QySu}Cyi282zT3OWVY|hplcR>IiVHdbNyWd*?w7b5u`w_moy#+wN$w9yA z+rHbIy?47*3S75&TOQt9zaK#W`~kil9KI)@yeFW+AKbzdyulwq!FjvF{~^4=(^~+r zp#-|SRJz-~?fbp?TgBPCzsW%!+&jP*oV{uMzu~*RH5|upyi{_W$3OhWd)&q!VZe!e z7gRjOdHcRiyuMwW!ktR@Vk%Kx5{u4bV^hw%*y)OV`bC_;6x`s;2S68gp%`+(36cN= zWS|&&;0n3`6^LOQ5{VvWpb3xx7ybYl;(-{R00&|qhz8)x0X@*&;Lisg%niNJ5na#~ z{m=>h%ge!y`oIk$y&NQ+(%shxJ>Ap4ybmJ% z&j*0gKYak)=+b4q4^%zW``{K@{n0y}(S04!QT^A09oU8a&=viM|6Uyd9$nXAy&PVh z(#rwXCH>3Qp$-_RkQ7hFK64q_W?F7egNWq$!U7pqp#epq2_^v$?9UcJS-vQve;sFf4-~~S56<*;Jp5Y(h2@L+>4?f`= z{s|ng0TrGBFP;;QkmDK9;4dBm8@6GM@Zka8OibLE{Tn=P%yiPk!l@KH{0a=@)+CPhRSs9_pz+<&V(f zlaS;?KIjYf2#+wv`hfhPc~LbuCY6`Tl*%;6kQ$TVO0Yy8|CGTLs-PGuuM~*E3`}7T zj9?gE;Q*3i7(6%(L_i4o{cQm;g9KCY5nnLhwptoL^3#%~7$fpOQSpO3?S{|=fgc(NqQl`31Ne901K$&wp4 zNQ78X;l_>;dv;u5j8p-Y_;NAnv!dZSHw7wGi6i3%lXC@$SWKdeh(;m>9=Um-_2Ic( z=XBZ0s!N-W6|X`i8CX=8+=?5udfGrlhusZ#^ZMnBS1;ha843E;i}-NZz#H&sh09Uk z#fWziqs1t2Bff&14|e|SIW*|eqDzx5ycl#&oIQJLj99QHXNn&=+a`Fsu0HrCY&zyAEK`0xMkAAddpNZ@K1|3Ng{W}#I?gn?E~rVvRIP3TjF6i#SS zh97Cj;f5Y|2%<)qxn|L42%?ssZtd07(uEej=wgg8&M4!B9zF!pX36zb(PXW7Qq(O@ zWT=%;e%C!7TJJ`8}AS|5<~bsWYKZDvDnZ+2%RZrWFtZb znU9iH_?bj0kt9-tl(|{sj34e9VxN3U=v#ZHi8NYmo{jmZpNb~RXoylO=h;SxP4^H! zK;lPTH>6M{B@x|6maj#2Xy?RGjcs65AGsvNl^ZrV6~`EV#3IUO zU#=pTNCjk>gq4Nq1RrK!PKFYHF;4kqo+FzaQb&#L*egR1<)Te4E6lut%r)DbOU~NV zOmojZ{|t1{LJv*!%{<>MGtRjbz;n({Ki#y^P8Use)m9Jvbk;^QJ+;m&=!Kwj(3!b` z4F()(t3Womp-XpANfjPM4YsP#9I$4bS$!44HJ-6|ZN^hcYzl5r%M}%l_(EhOjyT6S zj;4zfH(YT=9C1{BgXNXSG5O@0|7UJ_=$mUEy6B~oe){O9r+)h7t)uSx>ZVt|dF_;w zPP^!;$6mVXyYnu4@UROHJngr~p1JYLUvWdHx317l0<=9J%XNl{vR!wl-Vn<a&yUdF932oZ$~ac1D7lCc|{MkNj#>}Q10pV3{NDb%u$_}HL|I6y=Pb0`T7q$C#| z&;TL}WT2D?_`nAa5F!+$i3BZJ!3$3Cf*QnN1Swd-1cs0%A*>hzHwZ!xqVR((%-{$+ z2*Vf3kc1OV-~wmD4O09<7oH#mH+1j^Cvb{7G5CcI*k_bccmo&p8vK=~Qagc7u#{FLWE0V;xf zuIC+p0Dv<7mkVPE|1l!e*+al|lMCxmaWgj94#S?rgd>&+9~3Jb`Lq-kisa%Iy?}=) zc2NK#*x(%pv%w0IATvC4lL-evMlRly3#>dK41GYxFIItrBOrqpJuoU-lCX-65p0zN zE65U)rh_D4WvfWi#ZS+1j_3#^Ip+vMH*=v0ROrB+$Vh@FR?*HRpaQSRh>sr&fLASO zLI>YmMO^2)Pe(ekoa0oiV;{TNb%Iln;!Hv-+yQ{hs$mzi=!O&2N}XF6k$*-)QbFuc z0Jb$r25|t7W8^kg*w~Tx)WHm<=mS55bPfiI&6Ar1)qJ#Zi(I&E3^y>q5p$x0^5_a5_Jt`z&S3?OyaN~N z*u^X8aexY3p$i7E!ZvV$2q%z(8SyYfIx3lqBNXEfy&wlM0O5qSn4$`#pa(N>-~(cu zqYCl3|AHBk9MWQ_0|7D^MyRNO4>72K0aj2!JQgqpNF2ckykLSDBH)P|xM3Dy!AAjh zQ4VChf)_+EXFFG53U8Xh4Wz*9By@p{1K?E!Gl&B+fPoBRx1arOX@?u!&cA4C(;J3Qz%p73iWEPOw7G z|GKdcXB5B~&OpXCOi>C`@PlBX>eT<}(aj*NqYkD>!aI>cimEy@Yoi-Itx$uXB%Get3b>#Ey^wav##kyKV%+w36-aJ>$5`p)c+|Fm6xetk7;P6Qf*JU2 z=Eg?_5D!d%156-!$bbNuG#&Ov6`YX^)iYA0v@qVmJ(W~AT;(rV5-WCaE6p(s#b5;c z5CP}F4QB8P`;aAN@Cw;S4svh>0+4_*@CpYr2Tnj!Rj>l<5G!1<3vyr#yWjwN^$IJX z4zGX+SCD>LK@7d{2io8aN`MH%Km@O#3pQ{ClwbtiV+y@c45WYq;I{(7msJPRR^3#2 zSeO9Fpa2=kr3yw3r$4|GvE&LP+(Vp3{Kz< z#1M)0paAXwY@DC~bzlR1lnX(SVRhgD4scWuxeFu6f!*ek7D$352!bsMlPwv7H%XH$ z$!#)OPjB%6MgRbGPywruTAEM*zQTD!A~DnvN>4_5-QgrqQcM&Q|62s{Qsy%otv~~1 z!6ien0#^_#uVrvOQWJAf5dxzb5g|g7ks;nwDOfZctRz1JQ2@yi8yNx_a)J@u5dk7d zNIw8=i4}s9<%_den6wCPhpCvk$e6#_n7#Ozi3fOn^cG>Y4>*u9s}McjlMxvO9r%_+ zOQaE~r7$N2C7PrVbaNB07a9tOkdJYYZ?Zq{lPljtAMe5|xM3U?L0*g@o2|Ai!x9|1 z&;(5d3|e4d4t1R06j9=|oa5x2T7Ycil$<$C4#C8CfZSiunJfdE^g|CTL78*iDL_{Jj}F(n{D zAp?;<2oakglQ(uWpc(R@XQUA1(*%%(p&6>78_J;_I!Ib@3x5zge?U9ykU)3=J)gyn zpo9RGv=!JRWluq6u~1BP5nCBi0I&iUwt*lDf)92nI1u7KAfYR&u`GR)n{_lz@4*qC zfFXv#6NRBNdVv`gu?o3x0a>G^Tk14f`ZQkJrC9@}T#BV)YNlj*reXS}IWwkes-|t4 zrfABgaJr^tDyMgfr>lTfdWuzjdN4?dWF&!1Xk!pd;cxbtD(%=9N${Wo`4!J1P3t2m zKAIJ}DKTO)Au56!7hy{gVJ3I9Qqm+Ca`7MtnIJo{|78s#9jnT!t;(v6Ass~;t8l@p z0#U23Y8Dj!{Op z;v7Wac`V9rF+praTK@l6V z16#3&W3dwSu_2_fA#1WC`>-c;6C?o=3AssEFeIRD7tOOb=y12L--R#|}&UEv0t z0IB&RKE1N9MSB~zk`P{$FTWA1J3$}8Ss&Dd|FmKxw7NP?{Ie_`aV%TQwOtz=Ut2%% zBP?KxESoB{14FiCTOUb+EM8kb$FjC(OSWUX8(qt_aXT=1Ya7r47rq*xK1vXr_n9#W zdR2!P^m$6B2{Nssh*<&_`H?~*B)MQhLFR!IAXG6XGzT|PLMKEQDP$fUl({Da5${jb~x zL*H8jxpls|MZQGvy?MaC;~TzCKnhMk|G(i2zVGY5;+wztyT9zqy*>oKq+q{3w7v;E zzU_;?;S0eNJig#-!2*1~8H~XJ9Kq+y!5VzQ7>vN^3&P?X!X-SyCal5^EWs80!TvkK zF}%SSe7`Ro!4C|>;w!@re8T&iL-MP>F08&z&pUd)$ND_^zrGwPlj$u_H@$m=U zfI7_6JF!DK%u_iM@Hx42Ikxk~$#Xn$U<{f=IiPbqw^KX16FPfPIeUP`v?In`oH=#O zId^Qwd5p(!Gm@_(F490t~4mKdK zn-mKzx*XV3Do_C>wS*rTF;;eP|D-k2%C9WTuI$ROJj=5D0JOZP zsm#iK+RLgSG`@%~w)N|As15 z#2GC`64vS%(DW={^cd12F4o#0(gIDf(HULQ3eC_Gt%VAF~_QYQ4H{ow{n>)?PiU_lhM=tffiQb zn#zGIixC!!!Ly=)8X0ju3?UwSTX5oIED9N*QQD)wK`nyu7o#oOr5)P%g4zL{+N*8a zs_ojT-50Mt7_J@Lt3BKJQrn^}+p*2tvb`6!J=(L~+rK^A!+~#-f*I|Bww+M`Gb^m5 zbf~BD2Y3)39l=s)F%uu5)FiV3X89;7qn4FI5w&upv2hUyg0Z}^6L3-|;+>le>!bH^ z-XhY~0YV`5jo)Jp|GE3E-~FB6{Y@YN&foRz-)lYK|6$+>&ff!`-(_vz2+rUNe%}*L zmgveW4w|F`su$Y81a4rs|MHaf2_B7|1j%77QF={NQk&1sKh2^L9bpl);+mVTaj8h_%=CPyi~Fy2kIN6dbEb|*@}u5bFQ;jgb_Oe z7zP{8{#p|UYdBe9OyUFNKmOxkOSi&-=ykidn=09n&gjHK>AcaliT>z|p6O+K=%*1I zb_C;HKIi!d|9VJr5NiXj4Kqc0vjO2Fo5&I46hW(aDK{zd)C$_Nwec}TsuDR8CL6;M z8qz-=F&!xaC?-QA$&Tzb!Y5=YN2{UU&+bOtJ?+wN?afl{*?#TLuI=59WiBE|Fs_>d zDx2y<)b8lKE~*!voVbaq6Aw@#J5n56@*t$zBP4OzPK&Azk=%DArLLhXSEL}LRO9|0 zCUWB$H?i!>9>wb2C?CS`3or2zPw~j!?G-;G*)AX$LPvco@TVd0w6U&@k;MFi>Q6-2 z(LpFJB}OCyDORG_7OoQ#^X0Z0)X41{hl3+2;w6xRu|X{&tr09~JM@+gwud6=ivAmo z-WzP2|MP`H^hXQzbqlsh(&$LfwwzwJaUS%)6x1rgBIwPOp~o5Qj;Nx{8Dn+tlM=3`VF3W5-_-VhTH_!w_84&Nta`S94@?6kfihR-3~PWX$j zD2(4IlCQ2Tk|0DHt7x*X=ToG#8Q4sq4hQ3;I>(1k#{>^f;T$);;aK%6x5i9v~i zD^Q`rO2Y~*h=RL|K#}kfNF;-N{OCu8@+!=+i6T?-#j1R4NF|4wH0jAFf0XeuEEj~# zuPaw1vPz$T9(o@PTU2xP)snl}Q|5HIF71O>7 zT6NV-mkbN6-)K$H$tH^{@wy37Qw<>-+|b2B8Ny(q06TQENT5|BSk=NX%9|8C9ln zQMIlvpRxmP;T_jX$tc7(&>N=3bzpph#PyaOa>o_7JaWnruYB^wFW)?K&mVt$a?C}) z-15dncYO8IKTjNU&O<-FbJ{^qopsAcVI1lmkR ze1Q74Y0oHq8m^yYbbK?iH2bmZgabcwuO-e&fb zr$ui>6|BmQV!}O{*g=Cbf{WlPbuEqwJ z4zGp7>g6hk8VsVqD5At8YA-k_^30VK!z~!<%0>Olg|G4wEM4G9HnGTsj5?&LO8rJR z4}l3+Hs&hw!4W48Dd1pS#SnvK=Y$6_if<@29lfE^FrE4xs!D~bQHe@bpF$*K1c}Jc zz)Dt${7fY;B}qc=L`eel4XwKM5+=bVOgf|!@ely9g5{zcOKFOpY(Nu&WNc+^x)Ij^ zgpfypY?kArRdwpcma^1@D;l#1c1%XD66!B!%T#7FnfXj-MiZLTlx8)lc};6(vnKL# z$-S@xsEw`gLj?+FbXtZFIHg87tf7GzF?0?y_OE6V|M8;$tt1?U_{oC2dx^B1H?w=n zaRYY1Vec50621ZPh=f}x6mBC@#%NJPeY$p*M`8Ho6aMoDGP zbT~GadtFT={QDaDESX42f+|+zBjh8!YSl)n%8_7&WRkAx$XBJ6QzLNUoFi>(BjZ#M(jg%!hc5c0oIs;$9UKi4WKUfamqOH>$o_LfV&NLpmgZgXepkHV zO3?=*Jcu`!`+h$2F;8h8U){58Hjxe7@fL!(2T>4g-@&Y=ovra8_Cx-j_~ zNsQ^NW*4|KpOrQHguD$TGCCN^hG1>(Mn%Bq$P!7rY#z2 zPcO`9=4?*QG9thU*SFNmRqiM8dP?2cl$Cj!ja15V6=h9DVUAsw1yOx4LLJ4#A*aCWU3XC$r%RF!C!rkP1HP5Tkgzfx|338mA)S z75M0-FEqT+9{pcu^lUO#7UGy(|N>5R2@wW9o)Gc&1s!W zJVe;3#L2O^J7hVy`X`)NJZbBpNQn%x*{hcbmUDQGiYYEX>X7JAG+R13`(hTFz?v7* ziLE)O<`50iLyJ5Dkf>`$sdGkXd`4-M#wLr#Xrv2#fjR+sJnLYr4wN39X}6$yBD=6Z zSD~}y88Amn0`Xz1Co#BQJPf0%5nRfk5iudP(6}+VAS?_j+>*41q9GD0IVZ{$DKbcu z5UCp~xmMJkO^c$75*~yU$cplzO`{>CF_OlpEPo`&8WbNKl(?Tj3MPQH&XBdclZr^e z4RjN>N1?B4|Je~txuf8zBp*34mRrA~f-LpB8ciCp6aznV>oBm&K1?b~kqbX1DZk1n zt5{(%N%~0>Qy8pBKwRQAvgo#bD#3wsjJ$C(1Msbxs5^aIn`1$giC6_G#0%ue713ZY zp^3}mAd_>MC!WzTv@EzBDno6mrgZ7c)B;Sw3{1itOv8Mpky#Fr=^tWJI1B?Q5`s5; zWIDPyL;e~OBG3i^YbCbX5Vnvdty~O^P^uJpw97&!mUy}&!6&=u!wPS5?#Zk4f(wRIhm9=hrHS= zps2eB|DrWAf+Jl-%ay5>)zhQmbewMFBfVS>ClMQbEQ`#F6zh;Lplq=%VM_Y^K0+!n z^4q>A`#z(z&ke)RQ%jKLg0_>1Kere%0BWnebPI&&BAPmg-Q&!Dn=iH8jpZP`uwby* z%Zp^|MZm#IwD1$dxfL3?*A{8W&FH6gCv+?+(x`~2pfn6 zbtnov%7x$>E}bH$UDXzQVX$#=qv3?Ewt%j0(ye0iLF&X%G6W@HO|Qco%&1YO41_|! zY}oPApF-I}0&%PVsR(jatU?nR8$=0F@S^^yy8>`0JP?I7B7&a#khKd{jI|U_|B5US zDiFK5u$tr=72+MI%QkFH#%eXWApsN48@J5M5+8EW!(g|NTgZ^0p`QKOqy-YF^;VFG zF@k8#!Kx# zVgh)|pbjyizjL}^6&q2KIK;xDAkAdwM6ivb#>ZT{vCM+{#*7u}oAV+lk4kI52=Y|3QcgEj8;_z~xF2d1eoHoo{4i*SI|LCa|GLe-##mjP(CL!pU zTREvFuL{1B@`6+di z42)em9AeBtnH0Iph2E&UFuJ)r+ml7v0184yC~b%-tt%_*wve#{l)A!}5s~HuwhtRh zMMA%`BCGD3;mN>H9q!@(1nd(NTqU8hDEnEUHCG?(Su<14vDo7T`^iRoiR+CovK0m1 zvlw^VfOjBhy#z_Y;n%mVnl)L!z%i~WQbpuT*utD`+1?*cMwi;A?Q2@JOa3{7h~-0$ z*;xtcn7CO}GYM^BFs5@;g0MHUsfoI4r<|G%QBcKy|1-}4oY=2@qbaIE6?w&vG&9Sf z*=?QbXI&wPOd|9q&TOTO2bOGYO-PK0?`tjUk*X+n#xHr|+2e4)$kj^PN+Td%yNMuU z-gKPXD^i;?%bl~R=3&hAwO`BPZkz_Ce$tv{eA}iAQEnC07**(Y#im-yJqCN zMi*20Zb_C-7C=R+x(>e{erk!-% zR9c{JR%$)(!d=LDpZEIycYCMzzmt|R6W__x2+?$57h^Cf%JJbC?^NpXqC&@360j+@ zAmpMjPyfg(i^+wiszAX|!&+5_n1eutJJ&_bl>fIT+hy4C`rS_cxh;cvG$zb>>AM#K zw2|Ow2#oS!`a1$0vYIsCo9Lo;)f)>|3S#*KagV{lV)qaQ4Ve6k8aIlN*yx^urCIfnaOdV{##?pBde4jIC6Re6PtRZ2#2l+`fM6&wlJTOdM4(8H?E)Y3C7zsqop# zTfV0{0@f66ZYGcu6x852IP2%FOoO^4{yfSssZgKzh-5r^@h6d72KubHX~RtcdR4B-_`}2o$|Sl3 zMm#E2N7J7Jh4O636K%m(N(DA0*mmGipiMWx&G=U%$_+CQ3pC77aoog&6FdI+Sh3-g zlOH!eDOvJm$dxx!?i|{)=FxLUQ~y>fG;dysM3koWspD?x4R%@~WvLY9&yrAq?i`u) z>Cs%Vu>P)k%ZArDVVUIG`4gYn4ReTyZ0pjfE+V*r0zW+`xXp@9U!U$Red21iY{3tY z4}ZS=`t<2LRh$35{r>s?>ldI;0P@G*fC3_T;DPuhs1`m#sizWn4h1%tF0DX?8&o?r zl~;F2Z8#7SJpo6TVz@ChA!B{nV1N+0%!N+@Zk*EuG0xop-G&0K5?fT;?Ij#v(oJU6 zTXf}>9!(A+adE`NX`P3d@DGm50l^hKSl3qsHmGFfNE8H-{4?7$l(g zF~t{KoH525Yus_iY}v&ppYWZ9?~_FB87^Q(0eqIHutgX!zDF{)ly_W;%dc@S#(0h! zy0ja|7=Oef3U(6J+y7-zC|W0wdVOX(ty`1^$CF$3(y6I?GEo$hgermUbxH`jOE?zm1H%BN$r$cR77Zl z19Ac>Ckmr+7(fuDx3x>^jU{gzSQ?{HW_9E6FmDwgwHet z4R0(kUcE|hW$uemxOu9V_mINnn=^TRWxZd21@7NJ|Nr|hfB+nz01HUK1L7-zKxtEb z{57gTjcPlDlmCvlERwQ}9AtePvCHRNG@*C6?Z)cUCe@1@+cJ^wD4vqH> z3I`|2+m7fW1Q)|pk0>h2UYD!}9-1X7dr!QUr>xQk7>Q^`?5cuu#NsI6Y@l9(vS3kA zl@@=QX;dZSqVqVIo!k{qcCRDeBDoj5L?)6nkZh#3iUd4MUZy6W%AJX7mq?sk@^6kT z&koau7pJADa04QeMS{4L2X1XGc_P>M(6^JVoUo42(U~|MkD%AZck*%+o%~uYdVu);QB~3x9Q1hdQ+R%Tndz)6hO*d%`k3RNK?Wi zOG1?>Bv6xzI==`r%=CsQ*D;O=M?@%5EQe8lz{5EflZ5evaf4374&ySSnLJUhG*W4v z87ZU}j$yQ88QrKxJIYaxvFS|?nwUr%#-)d;2!oP|nKD&I6xL)-MXD*7ADt$XNNs9V zP-*C6L{Uqv(8xwOIv+zlrN@K)#VzR+j^Ql2o`toKc{#ib9*OD6K7uBzg`w6rg_k_7 zf&??x5^FKBT0F33if>oN+g8!WGL}szDXW{_^rVWjy;yB!X(Xm0HNw27lnX1A0cb9t zWB&sk<`JjUQE9<0`nm5UMj`P82`Hr{PHu*Cn&8x|NS>(~E|P6Cpw+BrGrOiO)ef~$ z@$A!L;~=NC)HSfB)`P@#vm9zGhDq$~)-(%~Tu2UGPgz$J=s1QP6`(9G>&RJPY0qdj zbu;ZuNJC+&rt6+IyV%{XcC%|h|9wquVv0$08KgrWVQ_s8x!MAIfFY8#1nYMADl`P60@4fC0zVl zidq@gN`g3<83ysAINVjTf$}DQ)9{E(EJnI0>6H7ju#pGp^cb&py_Z2& zHZ=*~;)oQYgH;qM9-Vrqt4{T+TRnh!BDI!GJs;+NeM>qlW^+HQEz_-RCz&~QI&*`s zaO(spg^ERzlT*UNhGCb4dB9q}%$Es4Iwx4Wn?jjKc$D>R%%;7y@=UAv((?A&;p7?< ztvK$wjZ`*bdZI<&?DpKK)Qs{xqXwVmK-g~TV3|)BSKHf3>J8IKbpINNPr)aUfeY2J zzQjkB|FxTg_%k#WWOzs>%kQ+eh07Q}xyFTe$>#rV<0j|$BS*eS(hzG`PiLg7I9cS+ zbd}{xh3-fE2{7Karn)Y%>upU#6yr?JHg{)Kj_ybhzIQ~XzI2n2OeSN$7gJq$6XW!c z{+O445a0nCNCIXa0~(-xa90FoNk*XwRQ1nlFp&OWU`o|hVpNcrz}D}j1d2@8V;qdZ zcu}SOo4G_s_y81hRKXv>%UD!|`fNlg!4&tb#h7*3gZ!S6l!ychVRsE-5uQnW93g!q z;Yi7l5S>kZyo740QM_r!Vt9+oG!adaTMea!rWDMA)mAI?5dWzFVECk-I>}vs!H7Y4 zLIJ3QfPsZr7>yyB#Tjh~yJ1I3#LNr*mF(qVUZoN~9LuxZ3bPnuAvOyl9^$ejA|o#1 zuoxn-*vcV3A|)nbB~IccR$uY#%J5LitB70&g-&F|+LtApdac+toe{is8Ipir^#nzS zxmTe`j*=OKqR`)1)L9Y~z)kQJpX3RuX;~1u7ft0))?r;TBI7bDqrz|+*OeOocnRV7 z5(7=i>d;hk!3>~)N`lc^e&ovoG07=4M4#D}r+5$e9L4yQk67eF9*#)TXifW&M=OMz zLU5VZfF6m=SQT|sx>=q-LX#Ddn?Nd&E748mflU)(5&sgJQxCvB$CXAKefh+{NvpCr4mt7 zU$%|e2_}k#)?ohS*R&a8MpbvE+A6xlrRar1l}8%wp;G+DNQ4JUXi{G=oIx;+8CnI; zpv6|y$biL*9VmtlBtiYS6js3uzh%)CDilPPTK_XLV{T%dZgP}%ZA=hO=4?HbZUD}b zJW+S-6`Z6;iDaf>+*Vf76V6=P=|Ej~7z%QT2w~;oJFW&1990C7BhE1mQn_X+#nfH4 zS$eM7dQv3vc-W(`XMD2RCXpE^NmQVi=gYW6gmejP7>Ua;Od#eHl~mQu-5_1H$Q$j8 zy10Q22oE-h#oJ;{ z*KFJix0Fc!uugaIT0c=vE;Oj3g#`|1LrCfoid;)Rfh3{mB}(#DM~0ZSeb!bVQXQ_k>?=gH@@dZ_zAD@H_XwYu3#(c>@y zqAwDLs>KMX$b{xeYi-RB=|u}5-et6{hd^A1p@@)1oMlUX#c|=lVI7HC=$10YlQu35 zJ<8sGObKXysg@4xX@T1R5bSns6#xIMs9hN-fPUF*1!t%DXO68J5OySGGK7T1)DGfY zljImaw8)FlnH;sFE>aE)v0|qvMvZDLg~pFO^~B+oTVirnK$;t4E+iENrV(+36R9H3 z#%J45VT)nLzQjZiu4|Bm3%8=-GEIwtUMx$To^@%H=uCuEpruxHLoOW`bi5405r&WG z5CO`NM-EwYK?bk^2h}tmQ6eSvJzrEVpYw^8vdt~r%BLa$kF(OuR6+(^Q0S|IFOrx zs_t(FP{LdZ|4j(&#?qMno&N{6#)e!Cg;3__GRCaog&n+;^mQK0_APeo92^;h92Hl= zX^uj)=BO|$hD-*4Mp%4BTYF5&x)!90f~e%xthj|%+N2rxE?)O~8(ayaX8a;7Iqsv$ zDB~naj#@-gtrv!lptf2QmojTPvChFnEv~t%En4oP038zys)8+Ps>-k9MwL#e42C)# z?@Vj&M4wQe8Qn_oRV5{7ysfd!$|qXJ9h%rx%>|boDrK;SjM`3NP}oNp((r^BZ5eB} zC1?wF2ksHWqUlHmK?-Z|)PMrW<<*b{y;Z^%tPvye5u*vG^$W(Z34}Z(1BqG!NpS+5 zh}OVV^n%@gO4OT7Q~x>U=sGFgxR~byZ*6IE1zUze=3cB>6cwC)OO47K&Wwglu3UqN z6oC++9#_d@1_+esNf0}vcL}2~cGn&=Ae6+Ebmbg+&czIA7zFRmpdHdmq#P^8Y%2}Z zyRqrPF-`Q)Rp3C5O2T6a!61~y3wd~_+IH*ig@GWoZNgU6{HFMNh7U|AZ%;e7t5lMxVp*^aHWUAd!_>0o) zjc8GYZIKHeyol4-0ivDkJN64}I!ZKl2hE|!Y@y9mW~9@suE+3ZKJRm=N#Gz~*%ZUa z$m|K!L}=xoaUWcJob$aBx=Ip{rdBDvR!X>9TbPL2#>E5~S-$nPv@(yeHWTR{Z+HkB z3dJPy?gYM)m!m&jUS>(OFwB)@s;~i#917yu|HcNw(+-!DfgUj}+#6p);NSUqJ zp~r>2^8a~t1ix*PXAaX`3UL6@ED7=)9AIv zJWN1S_iic-MosspcXkubc7JzwgSU5+_jpe+FlMi3s-ocv=U2toYl&M;#PcKf zi@4%0e63n{#O^Qha0Gd7?9!+j#)xS?=wn~;cP`cReslkVv8N=fRm~8mzTC@&s-}k3 z*plifsnzRjcxFiWXPD%NOSp$4Mu_8WA4N5UrpcJ{ndwPlT<04 zf^;B9|5RcGSUYC!Zm7>rdH8H;2}q)js?sxuS?ZdlSS3{!jRo0ddG`2D@U!On;&3y4 zqLoKr%1>VLX8!hGGHy2LIBC%g_w3(?ky7yW7LWH6@Rbmd!z2xcM;%_VkpnlH7j{}v zv$dl8uc!OELu=spYYtBH-$r}#?Q2z`sank06cguc8j^aoIN`8Nv)!EBc{5K1%>VJi z*1)yP6`(>)Vl~nLwqbu$xihtPB>KhQM-pqi5({B~a!P(Nb*(y2wvzl`lk2xmmyRy& zJ&)=>>bGE6drO%_w#au%&?1rklf3G1bWB7YvenFWS#aGBZ5#Mr`OS_iuQR=s zmndcxy_7fkn62DMdM;ORtOF8XWHmJl*Q*-{FRM@1B ze@Kg4&D_NwaR=0ZzxAPb2_0fY{G8+2^Yg-;hjgG6*OR9LVeK7kM)wkmk=;0A;QEfUnFqm{yh0uz?> zIPxG!iYX-`?5M+}!Imo@5|r4AAwq-+B^uP2i^-^519jQ4;pSY0Dsg1|VPXSc%MGhC zLVVd%XTg^?Wk$S+&mxfxp2lt^YF+4`>tv4+HOT2MRdzhc`ekaF>u2UyZhR(%Is<7Y)@mwFC7Y0g zNT-3mLarg85V#E?B67JUm)@AVfr)bpndOdT6SSCEntP2b1?Fv+!vZ2+f`aI6T4M>bqzs>gB2qX8j zEeTuq_WKs2YqJg4ByzF!soZnN?Uvhg+XdI#bONvfq?$FCFyEanDfd6unC?a&TL8%RaJBwGU@RO=i z9{VFnBC+I+ciWn0z8T&9>f1TKo_YS+=b(Z9d0TO9M)+o%Go}(%i!E(9TKz8eM5jX` zTT)3>JJZp~hz4X%qKHJBG_{LZY=tbX|I^q)18lRSAPaZXa11+#>K7m4OqJ50Y@Z~F zIX^3E)apq)CLHmOF;!erLm4j|a>5^*-g_-umdXQV;2&(f=n`rf78v(`B7;s&A~2G8%ljL);6^% zG;*qqlzC$uFU2}7Hcon(VqHki_pOJ8izFl}&PTMg8T)k%GcAOPY7BW1L7M3@^ivc* zK9&m|9wjMDsauCaC&7ydkXM?K$z=9orvDdq?K63#V=9RRM^v)Nj+Kg~9%ZRLO~ulV z#c|!dTII7-Axw<;5a9S!#5L?ia7FRS;ggEPsD=?MK%LCY8e!Hp+n7o>yzz~lw2>2n z5GQn7(N?9DNl4$N5S=JgX9`L9uXVn&X02Rq3Sm|PBUlzFumV3!PZ5Ha5twYK$jOF;#P&LJFU zL61bUdyq(0l_tNsGGexT$c$z(5gB#QzO(!*D{pC|BXuo6tdlNsMHNtaYGia;(WjUY zdLM%A$~iE5&>RC)6{rSohyNQhE^}6rlV+;PLQLqxP#8G3w8|h1Ou*A-lJK_!)6hTB zIvwWXs5s0uW^yRE*J!pP6$m9uggtz3J)bNS+BS$EmGE3V=jk_@CH7P2>D zQpHkAH!V&5p=5Be?f(kcJaWW0L*!Xo@slV4H!%Egq;|!f4HMLH8;u$Zip#PCX!PbU z<`ojd9lMK=@q(DV(AzHdo{L*h3YdHIo8I&8w_pPE7QXNW;Fn9(zx|Eyh7+sDN^;+$ zcnliQM0}D88Qo|k$|H=ScQRN>G)(ejMxQt+dL0wF+MM}rYY7u5Blexhz}p03FvTgB zgqanq%(5eOk~~2#kI;!ebfZ&8Jn1~Tc6P$A_0%U{@L42$!&Ietg0Zre!EJ{a+{DxNAf~Q1@BdA6VpF~<3!xPYtIl@HK zWdF>RjH9GriAEYCSlnR6%t9M(;T)jIPDG(^%;FuqNIo#_y8I}eKIj3VP+r>Uo!lvf zt^+*wta>tWIdDiwAQG`uCr|)K@W9Y)fQWt^!ootY1+D8oz@{Xo4uBx!HImHNMvhHF z?I6C(25c?}|1VnF?a`3XD}GTndTJ+uil)Brrg)P3=%^dz=*O;5QicjCGouhqMEW?# zc`%O>~LI5y%c1_=$%MtV?#dH4n^V(KFxQih1{p3o>jV$R%(b!45HIWJoO*w82bT zVHK`zt|qK+7%7O@={K1$A${g%6mneL2|43q)`HVLb_RvE4mt~DIh`{KlY}MshuPZ0 zzUC`?@Mb+8A{+LpIgW6jTrHW5D=8<6CRk)p#0Ecx4e>6m_hyalgs76{uz}Jo778FM zh+w2pMbbXcxbl*y22)hPPcT`gF@woKL&beM4=I20QPeVwm{KtnszqeV`vwI~$Vkz0 z#^)NuRU(B%3JVOsN~w0UlU~naX5vp)(-lDxB*dcH(2hkht|#U|iR6)3EdS&OD4 zjze&9B5cy4h=^1Y$5Ecrahi`2Z%p|XG5U^@aYB>Fp62)tacA}?y=KS)*RxsB1t;W( zN9HOaJW}H-hBVLvL#u>E?@6T~0)F5wv3!RrAtD?#LKI?ACSY<-qNsRK1e~z$B?j*? z4-iqEP*D?g=>(>O%mqfcC@qJ}y{bx8Mifs^q(@??Y-q(ByN9K?%nAiF^%4p*;7xH{ z6Np$VnBtDiRv>0JAU}O0#dOXl_5>suq^nj95%;T&sH#T{)mH^i81ai3^{c)BY(y25 zSGNayqN)t*j5RZLIhMo{BelXT)MtJqH4Z5vt?)>?^jD}231`l;WdCjFk=m{wv$4o53Z4^#*cIUJ%)6tsC%>Oq;?Hr4>_ceujGWXFRge3)!b+i}ixesl6NQDK z=55&!LurZtvn&jG1uS`&*<1vwkO<~tQ!-|C4};@&@Bw)!P>>QP24}WWw^w_+w>q|$ zWkE;-UtDyL#uH*lBb8WZM$*eLvkWUfk~MG$D0Z-k zg2%KriCMG;R{=A|ka0&M&wSdbXG!%KVak?>5jMJ0Ib?@j1}+i*)G0Oih`}r+=&x^E9iHX8+>5&}#RJ=aZ;HEEcRoqe);} zH%n{m`6f~Ip3-%5>`J3A`yPTolhJA(boN5!hM8 z?JRb11k1dzYtxhn0al?$>k%&V4mc!6B0?l~Ud2mjYg{By0Sl6l4HCDeaq)&kUZg`l zG*+dWGdP{DEQ518zq2drHamMoCG5Zx8@N6#ZD{{)E5R*fu(Je5u5(%lLH2aSCe2Sx zD~j$=Ci*TEJ5y|F&Cgg?QJ3%^wby+cG!9#kqQ=l`ma5q-PLxo@3?n1EdTf~IYW{F1 zV&f;KO5;W5ONdC2%CIUUC^RercpixWdYd8^JpV+q@S$?S)v0vK`Jy;rlX&?Sv0i`d z#^||;p;U_TD%^gOLkXpDqGn(y$kqPG924v`B<#3Q2a`#}j1g;K7{V*x%rXgNh%Rr7 z{3wP#sSbN*Mu8_6l;R2^_hkCTKOyX-&_Y=U%7OpufgM;Fl~oug_!$lJ=Ni~pU&NPy z53UeK!U7F!9Wz_vFeExuM(=5e!^Mm>PIJI5sasE@S}APm8&>vkpEyceyt1Fh3~Jcqwu0*!l5P-X2U6$8mpnC>$nUT&IGDI z(X(u3XNa~jQb2;W)Xseach!Sh%iwwg*LQ1>nTQm?94N@H;(e1Loi* zNH2Q~FInSj@eYrB9{fchJndgqQQKTMQdT3`;~qohG_9Q6qY9uvP?qe({Q$Co6T; z)rci&XRfF+6u&8kie+@>Hh^*O#&N$ImWNc;0&p((X^Ep)aps6h7ybHN_lXs~i5tg> zA7ye(v040if3WV&i8rv;&vnKdey1%}1PetuxLOfQV>(SW-cwXJb0I>*F3VF;bjSAa zBq8W9_vprMTx3sTy{Wht*x5SRhuy6Q4L)fo#LWiryh^994d_~M()QX>I*tH0hMGi= z{Fu4X3o9AZYlNYlcXc(~ng23@(6u3SBa=*~yeL9%LN7ULI;B(29h32;D{rR5hk~6| zf-Cs(JTsxjvY!&A6sjD|+NN%?=iPlZrUY$-qJ*2XtOb)d6)ifh0RIQ# z$!;^)5-X0PwEo~XCYL9QkTh7ebVb+T79(~4jW8U}bW0a5WZqwAp5<4b;26W5Pg-9U zv%9@dmZs^G=(f3QVotm5dLS~?T~oY0VKp+He_{whFw-QD!`8$i))xY!Rt)#hETnU; zD~R9$%n^5p9qol(?bBX5*d=JzX-iLto^;&3sv?ngb=JV`GQnuUR4>MLXug!EB;oXn zSjKg(D1Wos=N5vJ`2Y0JWAf%=S=HRNUThlP_uUxftH0KE^Btb^VOo_et^P1YI%hl) z3!X)C*D<|O5c%tuM5)oRooIgLUs^9sa`L#SeXxwg()gAntjX5J!j99834r)R26cDy znbGrE(i{C=j~M!&pGoC8Qc#aA3e<8k=EsJrV6WY%j@&L|s?>+16cy?whH3T6w0#b= zvcP{Rm+7sp(|U@V%tERmUO5Q)5H&nWRRCF#1sNdl=@PhMpss=f6B<;=aG}G75FbiJ zC{ZEBh!-pBYPC^ED~|>bcKkR}7f6921(Nj0@*~HSx=eCZxNw7xf;RE#&`HE#L6#dn zvb;GE=S`wElmD8$`7tO^of~X6WeN4@N0mhJA-t*c>OdVbZ2}!S6=7AWI&N;r#iY*) zsQAvg(N&>J98`ap6!5h3W|EF*(YkC&c(CEZhz~1H%y_Zm#*iONCakma*QAw!Vus7L zbJA9rJ8SK`VRUKFM@yOZYW?>gK?`MN8&o)%reJ9%jW!rQ1gRwwfjI5Pl22552HI};Oobp< z!L2tMh5sP-gkpuNu_Xj}ITfJJ9CgJZLteS4c+)CiDc4tKK$0e8RYd-1WM&5f7^Hzi zHd&;PK}LzBlScX|7+GMsBokOFIizJlBqTq!|_Dn;vBb zXJ}dpWTI68u6bgDO>J~xglPpDXNN?rfP-6L9d}&;+SzzREV-Pf)n61^h^C;McFO6e zo`wqQsG^oi>Zzut8k4H5Cg>D}Ib~X!a5$-#=RuVL1>zYuc=1fZ-L60oLW}} z2qIL;Do1Nm6<&o_Z723*>2M5+Rv?E_=|V&99(KMd2s! zd;fj5cOR4Z;#=>&`POT%zVrfYlz}3hca}$SD6-5YpGS$p#3FFZ9;C6|TwWk^AI9MDW98tw|ze(T0L+Hv;>9_J+F*BljU6w&3D zXO6j^V{XVfmu`N3nC4q{ZaQKH)%mecmn}OSPF#PeTUCoaDRRkywc-ig&_es8*ZTE?IHJ`m6t)375Mg)6 z$sujbUpHgm8^{AD_u!TSgz8QvW#UdYpF|H=JJ=o1ST$p$;x5+GMK#trZ!fo$`veg znao5bE1M}zX;Sl=(X?hPRmsh4b`zDUTtzCY+01c{bD860ra8$O&2?r|o86=)IKf%Y zYPOS}H%#q-vF^Pep)Jwc69A zIu)uq6)RMw3eli$b)pE!DpG|iRk9`(qCzkOb;y;AZscN=fAED3%*GpXFo7PW*hUi; zTZ+Xx*0GI!tYjxkS;js#vXjMZWi2aN&2F}{mh~)TIa}GtVz#lGHLYV6+k_#Mq5`ED z0%Kh(+tW6ov5H0QVqM!>%jWjBP53QtgG<~dR6w!Y7;bSF>x<jN=9e*ajT_u$EmMr>n zW7!5c9`J{COlLTcgf=cb=#6+*n$ZB#l7JSZBOQ51K{m3HHf-dd6-|URK9bRYoaCYb z-RMF;^3Q`7G^P!`=}lsK(w`2ss6|bRPkVaPm@f5k^#91lR$qG5f&O$26|G0wI9k+N zAvGXrd^p>;S<|gks&z1gjll#2r zNf)`wn=W*nC;jLvmwL+)V04&={Nz5r`O%f`^Z%#69PB@5dfA(P@|r8X=qGP^%%d)Z zxc^+|FxR;d!anxAw>;~0U%JTAp7p;6{_km*```-?^r5%?=1QOX;r(v&m81OUN2j^V zo4~H5eCrmFvdf;wRm5E2q7)O@#RN)_`U&`B7yc;0BjmA*62Lz7uP=cBY;XJ2s~+~S z-~I08Vf)zs-X8)$KI~<`3)QEd_PZEwx@mUA5j9?w|*CoSUvZ5f&JEx z|Ml3%e)z#(0_1zY_VBlT?P(AF;s>Gm@{d3K_pkr_`@i}7$9w$ufB08`B@hI%mw>PL zdO_fR)5m@PH-5GE2naZS@<)6H2z<8Jfd9Yedj*(#1!#f&hky4ceM}fpf zH(@rnc#5+qN2NH5;n9l5K_PGCivNmqjEt0PuoxSwMnnWsMv+8}o>w+!VMf8C7I5K5 zfdngHREr03i?&8Y3KNWe6f8dkjlT#hW)v0V;y-~DM!a%G&}fc3l#6+?J6y3t>-dY3 zG%JLZ8$H1Qaj*)RqA=I-S9+#Uq_+X*5C;GF72I1EV#&QZT`B70*K=^ieiX;XK~rk4(80+;S8hL_I-43PMN^ZB&<|;Vo~n0dt@=5)+ae z0+e&GI|o5I%u$#qW0)i%6-J>jU}HBSIhcZ(6|Au*!gGz1WFf?oKO2cG>+w7nf6#5fdA@GdDh&Jg#CJL{I>Ja+8>G8CaneAyfd|5C?Ao6?Twk z2o*z>kqb8v6aJA4N$>#GnFQBqo!Due+IgMc$(`K!o#LsT;8~rsU_KpEE6-D#!EzbR zVllE3FG1lS8F?|SX`5LI5*x!CU{feANfoQp6@=myUja5Dlr2CB7U`LvW5XHmX%tdiF;f8|4MjHw)EW|6H7diD_vsTEijxd9JFVe2GohL$p$po%3f1`l z-a3TXDX!HSuHCr`-8ru6x~}Bft#c7Ezc7#;LIp3fk}r)R_dW zvEGbX7CO;SVV@&L*Bv>#sM9;^07og zSPP>tbKr??1DM^ivbWf=B8!Sxbgd5}Hy&D(vauRZu{wcKCp&u@F5w>`X)X4`HN+F9 z@+m>QBA?9R73}Cg&M26x5Eyd+FR>{U5@SIfv#k}BIvwFTje-mDq5~wVsvq+`WoaWm zSSh<93jd)fExE7{VQP+8QyM;WEfkU|T44jdp)`Hwrf8H41YicLN;kymEV$Vp40AB{ zb1=^FtoiYj`$--`k)br18&d%@=YuvC%D6;PA}NCy#{;=Y0T@@5wXex1I$;uoRk?v7 z61|xO74jKr!!%ma3fv3MmksLjSS4OsxY@hwImJ&Nlb zDz-bb1{;6WSG(Yw`H_$8kqcBnxIT0>CP^!RlPs-ZzA-tI@gg>SBb*GeCqzrM%;AYd zbd}8E2`YmV&a*?`=&U~!m>@DMbJ{CKX&bWXG+9xf~ z3(b}UAi!roIm5Ye4$)u+570qy5~~pEw9U#g&EY{G^AnjHEmaaI9{aip0hJ)c5W_jL zeN&*KvlC$gEYSlq2oj}uGLr@zAhRK#hH|(+Vl2>60IT3b9pSiwNd&i`0NaoY!{7wE zP-CN^UllUOP3rrY=`U+-n1E!!0 z#oz?zAOJyd4q!nKLC_SXAOq||t7%ab-XgpdLA;jodAU#*H=uEpk{S((!G09Cb^0_= zkqa|`1J1w%??43*U@gun~#P7hl&U_vxNs`zz zvUUTQRs0%i6F3{mvahL=64VcI_i5D&ya48Sl9+wcxn zfC~E%4h+2^1HL|_ECPysp+55qtXJx~QjOdQF2&kk{%Zy|~spbelGDKNBOo~I3e z5EG&px5?ZRBXJWeU=05tqvn7Q#UKOxunz)I1@wRnlTZpi&;*YF0sjon&W2IP7Hkd~ zyNsaeA;NqxvHiGxM!;^2pP`|YJWVS$5x%)L*IWsw@O(T z8(9;NQKON!qLGLjKb3I~)QzlXlLTEYusU!K#qbM|pbHd@3PjKiy}$$!5DkBj1-xKB z5fee~9Wf=Ws>FGsD!eo7Y#sdC6orkyzT70?tqJ^q3<_`ykgyN9Pz>4t4-oJN5MTqZ zfCEVY4^^-Nt3A0RO}LK>BnqsV7HZn9sWq078OzF=W z&C^`K!84$jo*+a0x&h;=DbqIyvo^R>8WPNt2yGKZPzAVf3;$+t4#PkM&d>wSKn#uA z2d@wZL{J4n5C^=_Y!XE3p?uf6k=G4eP}an@A&fHM^2_X=P5d3}?Aw<9-tD(dhe%tlB|&swegKHfi~fB^~W)^%mE!|L75Ob zvcm$c9BAz{8M}#ZLTl^-$DS+ z5X&kwvO%rX%(CzRY7{LQ(;P{dgxTsnOU1b(mBb0t&2hOmX%*!AyZ%`g!ATsodfX|4 z+fD2h0MSavh7CFd3fypTph1QT3+m9JYZbl?6e|`avcdlo5qzswlqz(^+@PySoD~HH5)pN)0KF=4Wc*>0i-<0cHvY_ENF>)j9R+k< z#d`IeF01&kw$intz}Bz@=5W=OD~Z*tZMl+7V$MvGA~FZYq&M=YZ#%ynSEp0^}1KrOr{VoS0;Q>FT=nDH)rW|+G2TuH)l zpj00^|AA>4CDtZ6+Lrp*>6#x1|MS%MbJdhmy7Tj+? z0q>LNmuQ>`Z?icH+UzQPF4U#FgggW*Ck%7)utO4Wis(bH>_F(kh760(F%lo5sKc1J zduYVVATu!{$QXO9qSH1D(I6sxj0mQIQ2dauml#{}F~gLs4M!?LGsvqNITOeZC;1Xc zo^47QVw)z0C}m7vO7R8FCQ2c*lqSYZGtM#J91~4AeKB*-J)3BP2{UfWkQDHiV(lC^ z<~Yx&8<;4-FQ-i0Y!)RvkcJLAcG#4TXFAn1Q%ytVbW~|dEfrK$LDh5zX~a+im+%rh z?InT?YfZ=_BZExD+j_l=shfPYRY`|3n~ndm!AwL}S=mwyaw&^8JMyQiXjHPYUk__+ zHO6G~$)_V}8y3YarH!&L?iQl5FDYMY4WC;OaKnvT>czL-d%JO?8wBRH*NuPk#dlzQ z`*6b;eAT&yVR~^eR~K&L$i-HvZpnoxN13qUR(#Hh3?a?#ww_kEnS9#G%gT14Hrs*PTOl-h+1N*rHu5?$jj0y zVo6IZa*_T)MkOraNJbR6za@Ev8&_CCWXLm=D%?N@kE$493h)OT7-U^`_z_<0R~dM< z3ojx(A(kRT!d;!lGuc8&`k;gxD6y|HlM#_ukfxa8bqh3Zdm&-acNud<#%W55k+B@} z!or*_T{p_it`-upnJlG8Q^Nn&WY`x(6S9qcF@#cV7LpOLVXtZIy495KcRxbiFE+o3 zLwLk>j$4?gC}W62EUdB@8{A+#7a1TyPy)b~5JZ55Ead(am>308gd>L};9(wl5dg*{ zfqr@9Bgc~xM_Pm?Ez!#*5825~>R^#B5sv^FX~|y$ULnh9hMffqBfmrai$|3<5*{;$GPY{?Fm$j+5n;!z3D%F z(^KLUb)P&H3rJ2%9DzQyIb3b3PYWv473km!861xdj9~+!STGJ8tC1aYfeR+ol?k!H z0Tc2X3j@T02?n@pU-|0SzScFbc?E1@?RwZ)3^uWiEo@%z`d7l%m9K&It6l>;+00s2 zu#*KXWevMoze@J7qs8l8_gY!M4t5)Z#lvOw8Vfx1)c|;ytuOEz3*8pBvXWJ8Y&q)- zyUJFxf3@pok6ZuO!WI{>qO~k^nXrxIGPkjs#X)BG`rOo7H@Ua1u5gj-SKL+?u%?af zWF>3c$NL)eGv~_JOODWS%DCAah@xn;s!X##cT@j2oyB-y1Zy?cC(vc1}`|f z2v)Fx89ZSJ8#uxe#&CfRtYHjyI2Ii4u!ceG;SZD8!w9ypgtM#K)|%L_2xf7NDSX!i zGl3T~(1wrnxk#{R(930ueOyF^8Dcs$`Hn_1PCNYOu zj8`K6SjZFpu#r*G6JF+m6m?jE#x58OQP?3{YDq#8RuN}9*V)c?p7WjWJPSSd8P9UA zbDrZYXh8qdnb3JAw4eVxXht7e(GO5`pWhK_N+-I|gBJ9hGp%P!)0xka?lh$vUFT0L zI@Ezq!lyTFXg_QE(ywN9S@)upSD0cIO$gn3asi`ELUNlaIm!O~7eHasl9mY^q(x}C z0bw$`l8WRcFiH9BOCnI2$mZk$fgNpVD^irf1}6W4J#KP?+uY<9Hv-AcZD*_GkOxep zBguVi0B-Yu$UX@z<$Z2k0$Y~a4mPmw?e7HYkKnl6CjV#xaDgvy;F(k)2*+(poD^UK zR*(lTbkSBB{35+HMTt5yJqQ4-5c7gyII09m@ z0cXgCCLo3z7z3op1+Z|7tFQ_rj0h!c3#))aCcKI!RKnD;Law;N4oSi-%nGRB!Y@q1 zv)Dp0)WR}!3(`RgFvJQnWQ(>SLp7X2tf-2tXu~9=LN1I5t9U~?Y$G_l!>bTOwy47| z%n32v0J8wYJEX!UJPQxP3a?1Qt^!SIh%b?8RPm0$wylZqNi*bb?>> z#biuHWIV=ZM8#T6#bi9iXe>owjKyel#%Q!gVl+i#+{Icv#cd2naD2vM%mYmrMs$2d zU_?i5;6_)(#$g0UQj|t+B*$k=MRkUW4Hxlu*sF&17m>6TY$+usL5{l$)CJ}njA`F$Vr~0$(`IuofQAdm}JRraLJd9 zN|$6wmR!lJ#LAYm%9eymm+VTdjLNR8O0EP;snp4+w92haORC(;mW%0%d4bGu>8ufjLNut%%_Y=zr@R| zbjcf-0XO)AKiC6jxP=?|gDb#=D{zB8Fv(320@PehlXT72Tuoy@fh#b{J>Uf)NP;1# z0%K^I`;Y?8fjDSMN4Xq8rU71vdTR%)$Q zU=7u1omWq-*K2iFZN1i8-PKz)f-3OWS9k>@0D)pChJrmt{e{rAu*a5 zXY1&o9OF?-D%W(-IxFjz%Jcr_dH{;7@hE~|2!bOB0pKWtq6mf}IEoM`LQ;1qhF}eR3N}wo7@xdO$P#i-E z3?(UgxW;f4$58@DNlFd8#t0NAP=Y{7suCknoJ0u{B`KjG9F&4IiXS+E1W*A6>fo)| z1{}b^F^r%r0VQm393yayq#S|*oWKYIBPq9_1}8Cs1VdtH;8`q6Y!qyR1E>K-;8mOm zP=N`+0}PNxEujD>aGa#V0y97idxF48Dm(B7+;B~hI7vkb*+bG0Eo2F?K}e7a!~nj* zE0_Z}AR5X*Ca9zMDNr#gz=(SQ&*2^pV31TxATn?Wtgt5`KB}3}J!lIw0aAyUAy>!} zng?k?LJ$emfP3gASOibvda+D#Ye5e110f&+B$UE)xP%=P1Hk_$m|=ArQFC!|2?+_g zdi82bN=jQ>TUlAz>({SEBGKUB;MmyMn+ij`3?!wHXlLhS=27yQJ7M0(5p1t$(59`csYFbH}hBBOl70kxG70G+JX2Hy^ z!sW?kd|~ByTd{+{Z`Q2pE~}Kx=jgXpoiVBK5ed1)bl?8Upy@G-KX)>J=AU2j-(4{w zrSBUr(YHF^NEWy^UfE!d)l>%9KTJaBRZkoG_co;;l+u!^@$Y}`dbrs5+RVmx5oc}l zoGnghV%_EYvX@lO)bOJuS(EN+eZP@zrrGWXnZM6X z$X5rFJ3g(g`*L-ldD!^5@t3*ivA#B|jP*;N~e$ z(XYoN)%gGoOS9#$3X-ub+%v(a^AFDqUOmn0RKPRbfqOHNbqQ8b*6U12J;&>7L24~U32B? zLqFDgP0n=)CvsIve$jOy9Q}7h_uB}!z4Q%e+kXB7+O~DFuJdob=Xrj z+g6*T%vb0lSlsE>!+YxmEskh=rI~%SXu3nq^`h@<+KX?MJ*q|AnP<+Ce7)ZFaa@}o zjfbQtQwdVRe!H|d(A2=^dENi#o%6U()atr zv1EPlyA*fM{6Mfi_uPl<=CH;0c_p%jxpU`XfekFms1d%5tSTJB`5WySk7mllrvSmqyV8l>?p#-K^EDZ!^O(tU#dfh;%3~ZB#K&o-mVavYp$WJL1W!WqhAP?@MLOzY1QQg+?1;L z(1A4VxYRL~a$mDcYguSzC~Z7Ge^uI!GbyaTn=+coH*O#0(2jVnoxUl}!nVF>`elA~ z`S!-HmSs~3a+W@uGju()cHQcc_e(F&$hdw&|EWWZUPQUZu#wlE-G`rLx7w&rNU)6B z4Lhxr?j^;y2U#7TYi$o}7|t$zve|grJMrR!#Hd-BVO7^i>&#VM9GOoZdnZ?S)UVof z(k?-b#(sjwzB!ctb##kcgulcYa#QvyL`9 z_Sm=OGU6d`a>DW0rhulM1!L{A={3rWPN#gBMk!`Rv1%(gw4%U9?c=vb>;_F=^4y=& zA}s^$&&TTXe?L(yakPiWZ_xkA!Tt0KTc3v7U0QmWR)Gt@Y}d5p+0qz`yKZaRx|{aQ P3F6szJ^B>ok-h%|YGi-f literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/image75.gif b/doc/salome/gui/GAUSS/image75.gif new file mode 100644 index 0000000000000000000000000000000000000000..5ba8835cc20110614b9a95f30e588181476ba6b5 GIT binary patch literal 60739 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

"; +} + +function fakeItemsArea(nB,n,sKA,sKB,obj) +{ + this.nB=nB; + this.nNum=n; + this.sKA=sKA; + this.sKB=sKB; + this.obj=obj; + this.nMargin=(n-1)*gnUHeight; + + this.setNum=function(n) + { + var nLastobj=-1; + var nDelta=this.nMargin; + this.nMargin=(n-1)*gnUHeight; + nDelta=nDelta-this.nMargin; + if(n>0) + { + this.nNum=n; + var nMU=getMaxUnits(); + nLastobj=Math.floor((n-1)/nMU); + if(this.obj.length) + this.obj[nLastobj].style.marginTop=((n-1)%nMU)*gnUHeight; + else + this.obj.style.marginTop=((n-1)%nMU)*gnUHeight; + } + if(this.obj.length) + { + for(var i=this.obj.length-1;i>nLastobj;i--) + removeThis(this.obj[i]); + } + else + { + if(nLastobj==-1) + removeThis(this.obj); + } + return nDelta; + } + this.insertAdjacentHTML=function(sWhere,sHTML) + { + if(sWhere=="beforeBegin") + { + if(this.obj.length) + this.obj[0].insertAdjacentHTML(sWhere,sHTML); + else + this.obj.insertAdjacentHTML(sWhere,sHTML); + } + else if(sWhere=="afterEnd") + { + if(this.obj.length) + { + if(gbMac&&gbIE5&&this.obj[this.obj.length-1].nextSibling) + this.obj[this.obj.length-1].nextSibling.insertAdjacentHTML("beforeBegin",sHTML); + else + this.obj[this.obj.length-1].insertAdjacentHTML(sWhere,sHTML); + } + else + { + if(gbMac&&gbIE5&&this.obj.nextSibling) + this.obj.nextSibling.insertAdjacentHTML("beforeBegin",sHTML); + else + this.obj.insertAdjacentHTML(sWhere,sHTML); + } + } + } + this.getBtm=function() + { + if(this.obj.length) + return this.obj[this.obj.length-1].offsetTop; + else + return this.obj.offsetTop; + } + this.getTop=function() + { + return this.getBtm()-this.nMargin; + } +} + +function usedItems(nB,nE) +{ + this.nB=nB; + this.nE=nE; + this.oN=null; +} + +function checkReady() +{ + var len=gaChunks.length; + var bNeedLoad=false; + var aDataCon; + var s=0; + var bDown=(gsSKB==null); + var sK=bDown?gsSKA:gsSKB; + if(sK==null) + { + markEnd(); + setTimeout("checkAgain();",50); + return; + } + if(!gsChK||sK!=gsChK||gnNum==0) + { + gnCheck=0; + gsChK=sK; + aDataCon=new Array(); + } + else{ + s=gnNum; + aDataCon=gaDataCon; + } + for(var i=gnCheck;i0&&aPos[i]>=0&&aPos[i]0) + { + sCurrentK=aDataCon[i].aKs[aPos[i]].sName; + } + } + } + return sCurrentK; +} + +function checkAgain() +{ + if(!gbProcess) + { + if(gsBCK!=null) + { + gsCK=gsBCK; + gsBCK=null; + findCK(); + } + else + { + markBegin(); + getUnitIdx(document.body.scrollTop,document.body.clientHeight); + } + } + else + setTimeout("checkAgain()",50); +} + +function getLimit(aDataCon,aPos,aMaxPos,aMinPos,i) +{ + aMaxPos[i]=aDataCon[i].nNum; + aMinPos[i]=-1; + var oPNode=null; + if(aDataCon[i].oUsedItems) + { + var oUsedItems=aDataCon[i].oUsedItems; + do{ + if(oUsedItems.nB>aPos[i]) + { + aMaxPos[i]=oUsedItems.nB; + break; + } + oPNode=oUsedItems; + oUsedItems=oUsedItems.oN; + }while(oUsedItems!=null); + if(oPNode) + aMinPos[i]=oPNode.nE; + } + else if(aDataCon[i].aKs==null) + { + aMaxPos[i]=aMinPos[i]=aPos[i]; + } + if(aMinPos[i]>=aPos[i]||aMaxPos[i]<=aPos[i]) + { + aMaxPos[i]=aMinPos[i]=aPos[i]; + } +} + +function getIdxPos(oIdx,bDown,sK) +{ + var aKs=oIdx.aKs; + var nIdx; + if(bDown) + nIdx=oIdx.nNum; + else + nIdx=-1; + if(aKs!=null) + { + for(var i=0;i0) + { + nIdx=i; + break; + } + } + else + { + if(compare(aKs[i].sName,sK)<0) + nIdx=i; + else + break; + } + i+=aKs[i].nNKOff; + } + } + else if(oIdx.aKsOnly) + { + var aKsOnly=oIdx.aKsOnly; + for(var i=0;i0) + { + nIdx=i; + break; + } + } + else + { + if(compare(aKsOnly[i],sK)<0) + nIdx=i; + else + break; + } + } + } + } + return nIdx; +} + +function writeItems(oHTML,aDataCon,aPos,aMinPos,aMaxPos,bDown,nLevel) +{ + var aOldPos=new Array(); + for(var i=0;iaMinPos[i])) + { + if(sCurrentK==""|| + (bDown&&compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)>0)|| + (!bDown&&compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)<0)) + { + sCurrentK=aDataCon[i].aKs[aPos[i]].sName; + p=0; + aCurIdxSet[p++]=i; + } + else if(compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)==0){ + aCurIdxSet[p++]=i; + } + } + else if(nLevel==1&&aMaxPos[i]!=aMinPos[i]){ + if(bDown&&aPos[i]==aMaxPos[i]) + { + if(aDataCon[i].aKs) + { + gsSKA=aDataCon[i].aKs[aOldPos[i]].sName; + return false; + } + } + else if(!bDown&&aPos[i]==aMinPos[i]) + { + if(aDataCon[i].aKs) + { + gsSKB=aDataCon[i].aKs[aOldPos[i]].sName; + return false; + } + } + } + } + if(p>=1){ + for(var s=0;s0); + return true; +} + +function updateUsedK(aDataCon,aOriPos,aOldPos,bDown) +{ + for(var i=0;inB) + { + if(oUsedItems.nB==nE+1) + { + oUsedItems.nB=nB; + } + else{ + var oNewNode=new usedItems(oUsedItems.nB,oUsedItems.nE); + oNewNode.oN=oUsedItems.oN; + oUsedItems.nB=nB; + oUsedItems.nE=nE; + oUsedItems.oN=oNewNode; + } + break; + } + oPNode=oUsedItems; + oUsedItems=oUsedItems.oN; + }while(oUsedItems); + if(!oUsedItems) + { + if(oPNode!=null) + oPNode.oN=new usedItems(nB,nE); + } + if(oPNode!=null){ + if(oPNode.nE==oPNode.oN.nB-1) + { + oPNode.nE=oPNode.oN.nE; + oPNode.oN=oPNode.oN.oN; + } + } + } +} + +function projInfo(sPPath,sDPath,sFile) +{ + this.sPPath=sPPath; + this.sDPath=sDPath; + this.sFile=sFile; +} + +function addProjInfo(sPPath,sDPath,sFile) +{ + var oIdxInfo=new projInfo(sPPath,sDPath,sFile); + gaData[gaData.length]=oIdxInfo; + return oIdxInfo; +} + +function writeDataIFrame() +{ + if(gnLoad=nPos) return true; + oUsed=oUsed.oN; + } + return false; +} + +function getKByIdx(oCData,nB) +{ + var nRelPos=nB-(oCData.nTotal-oCData.nNum); + var aIKs=oCData.aKs; + if(nRelPos>=0&&aIKs&&nRelPos=0) + { + do{ + oK=aIKs[nRelPos--]; + } + while((oK.nType==3||isUsed(oCData,nRelPos+1))&&nRelPos>=0); + } + if(oK.nType!=3) + { + return oK.sName; + } + } + } + return null; +} + +function loadData2(sFileName) +{ + disEvt(); + if(gbXML) + loadDataXML(sFileName); + else + loadData(sFileName); + enEvt(); +} + +function projReady(aChunk) +{ + gaChunks[gnLoad++]=aChunk; + var len=aChunk.length; + var nTotal=0; + if(len>0) + nTotal=aChunk[len-1].nTotal; + gnItems+=nTotal; + if(nTotal>gnMaxItems) + { + gnMaxItems=nTotal; + gnRef=gnLoad-1; + } + setTimeout("writeDataIFrame();",1); +} + +function writeFakeItems() +{ + disEvt(); + gnUHeight=15; + var sHTML=getFakeItemsHTMLbyCount(0,gnItems); + document.body.insertAdjacentHTML("beforeEnd",sHTML); + var obj=getH6ById(0); + if (document.body != null) + { + gnVisible=Math.ceil(document.body.clientHeight/gnUHeight); + } + gaFakes[0]=new fakeItemsArea(0,gnItems,"",getEndString(),obj); + enEvt(); +} + +function getEndString() +{ + var sBC=getBiggestChar(); + return sBC+sBC+sBC+sBC+sBC+sBC+sBC+sBC; +} + +function getUnitIdx(nScrl,nHeight) +{ + if(gaFakes.length==0) + { + markEnd(); + return; + } + var nB=0; + var nE=gaFakes.length-1; + var nM=-1; + var nTop=0; + var nBtm=0; + var bF=false; + do{ + nM=(nB+nE)>>1; + nBtm=gaFakes[nM].getBtm(); + nTop=gaFakes[nM].getTop(); + + if(nTop>=nScrl+nHeight) + nE=nM-1; + else if(nBtm=nB); + if(bF) + { + if(nTop>=nScrl){ + gsSKA=gaFakes[nM].sKA; + gsSKB=null; + gnNeeded=Math.ceil((nHeight-nTop+nScrl)/gnUHeight); + gnIns=gaFakes[nM].nB; + checkReady(); + } + else if(nBtm<=nScrl+nHeight){ + gsSKB=gaFakes[nM].sKB; + gsSKA=null; + gnNeeded=Math.ceil((nBtm-nScrl+gnScrlMgn)/gnUHeight); + gbNeedCalc=true; + checkReady(); + } + else{ + gnNeeded=gnVisible; + var nUnitIdx=gaFakes[nM].nB+Math.floor((nScrl-nTop)/gnUHeight); + if (!showItemsInEvaluation(nUnitIdx)) + { + gsSKA=gaFakes[nM].sKA; + gsSKB=null; + gnNeeded=Math.ceil(nHeight/gnUHeight); + gnIns=gaFakes[nM].nB; + checkReady(); + } + } + } + else + markEnd(); +} + +function disEvt() +{ + window.onscroll=null; + window.onresize=null; +} + +function enEvt() +{ + window.onscroll=window_OnScroll; + window.onresize=window_OnResize; +} + +function insertIdxKs(nIns,oHTML,bScrl) +{ + var bRtn=true; + disEvt(); + var nCount=oHTML.nConsumed; + var nB=0; + var nE=gaFakes.length-1; + var nM=-1; + var bF=false; + do{ + nM=(nB+nE)>>1; + if(gaFakes[nM].nB>nIns) + nE=nM-1; + else if(gaFakes[nM].nB+gaFakes[nM].nNum<=nIns) + nB=nM+1; + else{ + bF=true; + break; + } + }while(nE>=nB); + if(bF) + { + var oFIA=gaFakes[nM]; + var nOffsetTop=oFIA.getTop(); + var nOffsetBottom=oFIA.getBtm(); + var nDelta=0; + var nHDiff=nIns-oFIA.nB; + var nTDiff=oFIA.nNum+oFIA.nB-(nIns+nCount); + if(nHDiff>0) + { + nDelta=oFIA.setNum(nHDiff); + var sOldKBefore=oFIA.sKB; + oFIA.sKB=oHTML.sFK; + if(nTDiff>0) + { + var sHTML=getFakeItemsHTMLbyCount(nIns,nTDiff); + oFIA.insertAdjacentHTML("afterEnd",sHTML); + var obj=getH6ById(nIns); + insertItemIntoArray(gaFakes,nM+1,new fakeItemsArea(nIns+nCount,nTDiff,oHTML.sLK,sOldKBefore,obj)); + } + oFIA.insertAdjacentHTML("afterEnd",oHTML.sHTML); + if(bScrl) + { + if(gbMac&&gbIE4) + { + var nScrollPos=nOffsetBottom-nDelta; + while(document.body.scrollTop!=nScrollPos) + document.body.scrollTop=nScrollPos; + } + else + window.scrollTo(0,nOffsetBottom-nDelta); + } + } + else{ + oFIA.insertAdjacentHTML("beforeBegin",oHTML.sHTML); + if(bScrl){ + if(gbMac&&gbIE4) + { + var nScrollPos=nOffsetTop; + while(document.body.scrollTop!=nScrollPos) + document.body.scrollTop=nScrollPos; + } + else + window.scrollTo(0,nOffsetTop); + } + + if(nTDiff>0) + { + oFIA.nB=nIns+nCount; + nDelta=oFIA.setNum(nTDiff); + oFIA.sKA=oHTML.sLK; + } + else{ + gaFakes[nM].setNum(0); + removeItemFromArray(gaFakes,nM); + } + } + } + else + bRtn=false; + enEvt(); + return bRtn; +} + +function window_OnScroll() +{ + gnSE++; + setTimeout("procScroll();",50); +} + +function procScroll() +{ + if(gnSE==1&&!gbProcess) + { + markBegin(); + getUnitIdx(document.body.scrollTop,document.body.clientHeight); + } + gnSE--; +} + +function window_OnResize() +{ + gnRE++; + setTimeout("procResize();",50); +} + +function procResize() +{ + if(gnRE==1&&!gbProcess) + { + markBegin(); + gnVisible=Math.ceil(document.body.clientHeight/gnUHeight); + if(gnIns==-1) + getUnitIdx(document.body.scrollTop,document.body.clientHeight); + } + gnRE--; +} + +function getChunkByIdx(nIdx,nPosition) +{ + var oCData=null; + if(nIdx0) + { + var nB=0; + var nE=len-1; + var bF=false; + do{ + var nM=(nB+nE)>>1; + if(nPositionnB); + if(bF) + oCData=gaChunks[nIdx][nE]; + else if(nPosition0) + { + var nB=0; + var nE=len-1; + var bF=false; + do{ + var nM=(nB+nE+(bDown?0:1))>>1; + if(bDown) + { + if(compare(sK,gaChunks[nIdx][nM].sEK)<0) + { + bF=true; + nE=nM; + } + else + nB=nM+1; + } + else + { + if(compare(sK,gaChunks[nIdx][nM].sBK)>0) + { + bF=true; + nB=nM; + } + else + nE=nM-1; + } + }while(nE>nB); + if(bF) + { + if(bDown) + nCandId=nE; + else + nCandId=nB; + } + else + { + if(bDown) + { + if(gaChunks[nIdx].length>nB&&compare(sK,gaChunks[nIdx][nB].sEK)<0) + nCandId=nB; + else + nCandId=gaChunks[nIdx].length-1; + } + else + { + if(0<=nE&&compare(sK,gaChunks[nIdx][nE].sBK)>0) + nCandId=nE; + else + nCandId=0; + } + } + return gaChunks[nIdx][nCandId]; + } + } + return null; +} + +function findCK() +{ + if(gsCK!=null) + { + gsSKA=gsCK; + gbFindCK=true; + gnNeeded=1; + markBegin(); + checkReady(); + } +} + +function writeLoadingDiv(nIIdx) +{ + return ""; +} + +var gbWhHost=true; \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whibody.htm b/doc/salome/gui/GAUSS/whibody.htm new file mode 100644 index 00000000..a279fa88 --- /dev/null +++ b/doc/salome/gui/GAUSS/whibody.htm @@ -0,0 +1,284 @@ + + +Index content + + + + + + + + + + + + + + + + + + + diff --git a/doc/salome/gui/GAUSS/whidhtml.htm b/doc/salome/gui/GAUSS/whidhtml.htm new file mode 100644 index 00000000..945fdc8f --- /dev/null +++ b/doc/salome/gui/GAUSS/whidhtml.htm @@ -0,0 +1,30 @@ + + +Index + + + + + + + + + diff --git a/doc/salome/gui/GAUSS/whiform.htm b/doc/salome/gui/GAUSS/whiform.htm new file mode 100644 index 00000000..76674d78 --- /dev/null +++ b/doc/salome/gui/GAUSS/whiform.htm @@ -0,0 +1,91 @@ + + +Index form + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whihost.js b/doc/salome/gui/GAUSS/whihost.js new file mode 100644 index 00000000..9aaf13a6 --- /dev/null +++ b/doc/salome/gui/GAUSS/whihost.js @@ -0,0 +1,424 @@ +// WebHelp 5.10.002 +var gsDefaultTarget="bsscright"; +var gsBgColor="#ffffff"; +var gsBgImage=""; +var goIdxFont=null; +var goIdxEmptyFont=null; +var goIdxHoverFont=null; +var gsIdxMargin="0pt"; +var gsIdxIndent="8pt"; +var gsIdxActiveBgColor="#cccccc"; +var gsCK = null; +var gsBCK = null; +var gbCR = false; +var gbBCR = false; +var gbWhIHost=true; + +function myEvent() +{ + this.pageX = 0; + this.pageY = 0; +} +var _event=new myEvent(); + +function setBackgroundcolor(sBgColor) +{ + gsBgColor=sBgColor; +} + +function setBackground(sBgImage) +{ + gsBgImage=sBgImage; +} + +function setFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration) +{ + var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration); + if(sType=="Normal") + goIdxFont=vFont; + else if(sType=="Empty") + goIdxEmptyFont=vFont; + else if(sType=="Hover") + goIdxHoverFont=vFont; +} + +function setActiveBgColor(sBgColor) +{ + gsIdxActiveBgColor=sBgColor; +} + +function setMargin(sMargin) +{ + gsIdxMargin=sMargin; +} + +function setIndent(sIndent) +{ + gsIdxIndent=sIndent; +} + +function writeOneItem(oHTML,bDown,aDataCon,aCurIdxSet,nLength,aPos,nLevel) +{ + var sHTML=""; + var nIdxSet=aCurIdxSet[0]; + var nIIdx=aPos[nIdxSet]; + var sKOriName=getItemName(aDataCon,nIdxSet,nIIdx); + var sKName=_textToHtml(sKOriName); + + var nIdxIndent=parseInt(gsIdxIndent); + var sTopics=""; + if(nLevel==1){ + if(getItemType(aDataCon,nIdxSet,nIIdx)==1) + { + sHTML+="
"; + sHTML+=""+sKName+"
"; + } + else{ + for(var i=0;i"; + sHTML+="0) + sHTML+=sTopics+");return false;\">"+sKName+"

"; + else + sHTML+=");return false;\" style=\""+getFontStyle(goIdxEmptyFont)+"\">"+sKName+"

"; + } + } + else if(nLevel>=2){ + var nIndent=nIdxIndent*nLevel; + for(var i=0;i"; + else + sHTML+="
"; + sHTML+="0) + sHTML+=sTopics+");return false;\">"+sKName+"
"; + else + sHTML+=");return false;\" style=\""+getFontStyle(goIdxEmptyFont)+"\">"+sKName+""; + } + oHTML.addHTML(sHTML,nLength,bDown,(nLevel==1),sKOriName); +} + +function getTargetName(aDataCon,nIdxSet,nIIdx) +{ + if(nIdxSetnIIdx) + if(aDataCon[nIdxSet].aKs[nIIdx].sTarget) + return aDataCon[nIdxSet].aKs[nIIdx].sTarget; + return gsDefaultTarget; +} + +function mergeItems(oHTML,bDown,aDataCon,aCurIdxSet,nLength,aPos,nLevel) +{ + var oLocalHTML=new indexHTMLPart(); + writeOneItem(oLocalHTML,bDown,aDataCon,aCurIdxSet,nLength,aPos,nLevel); + + var aLocalPos=new Array(); + var aMaxPos=new Array(); + for(var i=0;i0) + aMaxPos[aCurIdxSet[i]]=aLocalPos[aCurIdxSet[i]]+nNKOff; + } + var oSubHTML=new indexHTMLPart(); + writeItems(oSubHTML,aDataCon,aLocalPos,null,aMaxPos,true,nLevel+1); + oLocalHTML.addSubHTML(oSubHTML,true); + oHTML.appendHTML(oLocalHTML,bDown); +} + +function adjustPosition(bDown,aDataCon,aCurIdxSet,nLength,aPos) +{ + if(bDown) + { + for(var i=0;inIIdx) + return aDataCon[nIdxSet].aKs[nIIdx].sName; + else + return null; +} + +function getItemType(aDataCon,nIdxSet,nIIdx) +{ + if(nIdxSetnIIdx) + return aDataCon[nIdxSet].aKs[nIIdx].nType; + else + return 0; +} + +function getNKOff(aDataCon,nIdxSet,nIIdx) +{ + if(nIdxSetnIIdx) + return aDataCon[nIdxSet].aKs[nIIdx].nNKOff; + else + return null; +} + +function getPKOff(aDataCon,nIdxSet,nIIdx) +{ + if(nIdxSetnIIdx) + return aDataCon[nIdxSet].aKs[nIIdx].nPKOff; + else + return null; +} + +function window_OnLoad() +{ + if(gsBgImage&&gsBgImage.length>0) + { + document.body.background=gsBgImage; + } + if(gsBgColor&&gsBgColor.length>0) + { + document.body.bgColor=gsBgColor; + } + document.body.insertAdjacentHTML("beforeEnd",writeLoadingDiv()); + loadIdx(); + var oMsg=new whMessage(WH_MSG_SHOWIDX,this,1,null) + SendMessage(oMsg); +} + +function loadIdx() +{ + if(!gbReady) + { + var oResMsg=new whMessage(WH_MSG_GETPROJINFO,this,1,null); + if(SendMessage(oResMsg)&&oResMsg.oParam) + { + gbReady=true; + var oProj=oResMsg.oParam; + var aProj=oProj.aProj; + gbXML=oProj.bXML; + if(aProj.length>0) + { + var sLangId=aProj[0].sLangId; + for(var i=0;inIIdx) + { + if(aDataCon[nIdxSet].aKs[nIIdx].aTopics) + { + var nLen=aDataCon[nIdxSet].aKs[nIIdx].aTopics.length; + var nProj=aDataCon[nIdxSet].nProjId; + var sPath=gaData[nProj].sPPath; + for(var i=0;i>1; + sItem=getInnerText(oP[nM]); + + if(compare(sItem,sK)==0) + { + bF=true; + break; + } + else if(compare(sItem,sK)>0) + nE=nM-1; + else if(compare(sItem,sK)<0) + nB=nM; + } + if(!bF) + { + if(nB==nE) nM=nB; + + if(nM+10){ + var nbTag=getElementsByTag(oMatch,"NOBR"); + if(nbTag&&nbTag.length>0) + HighLightElement(nbTag[0], gsIdxActiveBgColor, "transparent"); + if (gbCR) + { + if (gbIE4) + tempColl(0).click(); + else + { + var strCommand = tempColl[0].getAttribute("onClick"); + var nstrCommand = strCommand.indexOf(";"); + strCommand = strCommand.substring(0, nstrCommand); + strCommand = strCommand.replace("event", "_event"); + window._event.pageX = oMatch.offsetLeft ; + window._event.pageY = oMatch.offsetTop + 20; + window.setTimeout(strCommand, 100); + } + } + } + } + gsCK=gsBCK; + gbCR=gbBCR; + if(gsBCK!=null) + { + gsBCK=null; + gbBCR=false; + findCK(); + return false; + } + + } + return true; +} + +function clearHighLight() +{ + resetHighLight(gsBgColor); +} + +function IndexWriteClassStyle() +{ + var sStyle=""; + sStyle+=""; + document.write(sStyle); + return; +} + +function window_Unload() +{ + UnRegisterListener2(this,WH_MSG_PROJECTREADY); + UnRegisterListener2(this,WH_MSG_SEARCHINDEXKEY); +} + +function onSendMessage(oMsg) +{ + if(oMsg) + { + var nMsgId=oMsg.nMessageId; + if(nMsgId==WH_MSG_SEARCHINDEXKEY) + { + if(oMsg.oParam && oMsg.oParam.sInput) + { + if(gsCK==null) + { + gsCK=oMsg.oParam.sInput; + gbCR = oMsg.oParam.bCR; + findCK(); + } + else + { + gsBCK=oMsg.oParam.sInput; + gbBCR = oMsg.oParam.bCR; + } + } + } + else if(nMsgId==WH_MSG_PROJECTREADY) + { + loadIdx(); + } + } + return true; +} + +if(window.gbWhVer&&window.gbWhLang&&window.gbWhMsg&&window.gbWhUtil&&window.gbWhHost&&window.gbWhProxy) +{ + RegisterListener2(this,WH_MSG_PROJECTREADY); + RegisterListener2(this,WH_MSG_SEARCHINDEXKEY); + goIdxFont=new whFont("Verdana","8pt","#000000","normal","normal","none"); + goIdxEmptyFont=new whFont("Verdana","8pt","#666666","normal","normal","none"); + goIdxHoverFont=new whFont("Verdana","8pt","#007f00","normal","normal","underline"); + + window.onload=window_OnLoad; + window.onbeforeunload=window_BUnload; + window.onunload=window_Unload; + gbWhIHost=true; +} +else + document.location.reload(); + diff --git a/doc/salome/gui/GAUSS/whlang.js b/doc/salome/gui/GAUSS/whlang.js new file mode 100644 index 00000000..870be0e1 --- /dev/null +++ b/doc/salome/gui/GAUSS/whlang.js @@ -0,0 +1,453 @@ +// WebHelp 5.10.001 +var garrSortChar=new Array(); +var gaFtsStop=new Array(); +var gaFtsStem=new Array(); +var gbWhLang=false; + +garrSortChar[0] = 0; +garrSortChar[1] = 1; +garrSortChar[2] = 2; +garrSortChar[3] = 3; +garrSortChar[4] = 4; +garrSortChar[5] = 5; +garrSortChar[6] = 6; +garrSortChar[7] = 7; +garrSortChar[8] = 8; +garrSortChar[9] = 40; +garrSortChar[10] = 41; +garrSortChar[11] = 42; +garrSortChar[12] = 43; +garrSortChar[13] = 44; +garrSortChar[14] = 9; +garrSortChar[15] = 10; +garrSortChar[16] = 11; +garrSortChar[17] = 12; +garrSortChar[18] = 13; +garrSortChar[19] = 14; +garrSortChar[20] = 15; +garrSortChar[21] = 16; +garrSortChar[22] = 17; +garrSortChar[23] = 18; +garrSortChar[24] = 19; +garrSortChar[25] = 20; +garrSortChar[26] = 21; +garrSortChar[27] = 22; +garrSortChar[28] = 23; +garrSortChar[29] = 24; +garrSortChar[30] = 25; +garrSortChar[31] = 26; +garrSortChar[32] = 38; +garrSortChar[33] = 45; +garrSortChar[34] = 46; +garrSortChar[35] = 47; +garrSortChar[36] = 48; +garrSortChar[37] = 49; +garrSortChar[38] = 50; +garrSortChar[39] = 33; +garrSortChar[40] = 51; +garrSortChar[41] = 52; +garrSortChar[42] = 53; +garrSortChar[43] = 88; +garrSortChar[44] = 54; +garrSortChar[45] = 34; +garrSortChar[46] = 55; +garrSortChar[47] = 56; +garrSortChar[48] = 115; +garrSortChar[49] = 119; +garrSortChar[50] = 121; +garrSortChar[51] = 123; +garrSortChar[52] = 125; +garrSortChar[53] = 126; +garrSortChar[54] = 127; +garrSortChar[55] = 128; +garrSortChar[56] = 129; +garrSortChar[57] = 130; +garrSortChar[58] = 57; +garrSortChar[59] = 58; +garrSortChar[60] = 89; +garrSortChar[61] = 90; +garrSortChar[62] = 91; +garrSortChar[63] = 59; +garrSortChar[64] = 60; +garrSortChar[65] = 131; +garrSortChar[66] = 148; +garrSortChar[67] = 150; +garrSortChar[68] = 154; +garrSortChar[69] = 158; +garrSortChar[70] = 168; +garrSortChar[71] = 171; +garrSortChar[72] = 173; +garrSortChar[73] = 175; +garrSortChar[74] = 185; +garrSortChar[75] = 187; +garrSortChar[76] = 189; +garrSortChar[77] = 191; +garrSortChar[78] = 193; +garrSortChar[79] = 197; +garrSortChar[80] = 214; +garrSortChar[81] = 216; +garrSortChar[82] = 218; +garrSortChar[83] = 220; +garrSortChar[84] = 225; +garrSortChar[85] = 230; +garrSortChar[86] = 240; +garrSortChar[87] = 242; +garrSortChar[88] = 244; +garrSortChar[89] = 246; +garrSortChar[90] = 252; +garrSortChar[91] = 61; +garrSortChar[92] = 62; +garrSortChar[93] = 63; +garrSortChar[94] = 64; +garrSortChar[95] = 66; +garrSortChar[96] = 67; +garrSortChar[97] = 131; +garrSortChar[98] = 148; +garrSortChar[99] = 150; +garrSortChar[100] = 154; +garrSortChar[101] = 158; +garrSortChar[102] = 168; +garrSortChar[103] = 171; +garrSortChar[104] = 173; +garrSortChar[105] = 175; +garrSortChar[106] = 185; +garrSortChar[107] = 187; +garrSortChar[108] = 189; +garrSortChar[109] = 191; +garrSortChar[110] = 193; +garrSortChar[111] = 197; +garrSortChar[112] = 214; +garrSortChar[113] = 216; +garrSortChar[114] = 218; +garrSortChar[115] = 220; +garrSortChar[116] = 225; +garrSortChar[117] = 230; +garrSortChar[118] = 240; +garrSortChar[119] = 242; +garrSortChar[120] = 244; +garrSortChar[121] = 246; +garrSortChar[122] = 252; +garrSortChar[123] = 68; +garrSortChar[124] = 69; +garrSortChar[125] = 70; +garrSortChar[126] = 71; +garrSortChar[127] = 27; +garrSortChar[128] = 114; +garrSortChar[129] = 28; +garrSortChar[130] = 82; +garrSortChar[131] = 170; +garrSortChar[132] = 85; +garrSortChar[133] = 112; +garrSortChar[134] = 109; +garrSortChar[135] = 110; +garrSortChar[136] = 65; +garrSortChar[137] = 113; +garrSortChar[138] = 223; +garrSortChar[139] = 86; +garrSortChar[140] = 213; +garrSortChar[141] = 29; +garrSortChar[142] = 255; +garrSortChar[143] = 30; +garrSortChar[144] = 31; +garrSortChar[145] = 80; +garrSortChar[146] = 81; +garrSortChar[147] = 83; +garrSortChar[148] = 84; +garrSortChar[149] = 111; +garrSortChar[150] = 36; +garrSortChar[151] = 37; +garrSortChar[152] = 79; +garrSortChar[153] = 229; +garrSortChar[154] = 222; +garrSortChar[155] = 87; +garrSortChar[156] = 212; +garrSortChar[157] = 32; +garrSortChar[158] = 254; +garrSortChar[159] = 251; +garrSortChar[160] = 39; +garrSortChar[161] = 72; +garrSortChar[162] = 97; +garrSortChar[163] = 98; +garrSortChar[164] = 99; +garrSortChar[165] = 100; +garrSortChar[166] = 73; +garrSortChar[167] = 101; +garrSortChar[168] = 74; +garrSortChar[169] = 102; +garrSortChar[170] = 133; +garrSortChar[171] = 93; +garrSortChar[172] = 103; +garrSortChar[173] = 35; +garrSortChar[174] = 104; +garrSortChar[175] = 75; +garrSortChar[176] = 105; +garrSortChar[177] = 92; +garrSortChar[178] = 122; +garrSortChar[179] = 124; +garrSortChar[180] = 76; +garrSortChar[181] = 106; +garrSortChar[182] = 107; +garrSortChar[183] = 108; +garrSortChar[184] = 77; +garrSortChar[185] = 120; +garrSortChar[186] = 199; +garrSortChar[187] = 94; +garrSortChar[188] = 116; +garrSortChar[189] = 117; +garrSortChar[190] = 118; +garrSortChar[191] = 78; +garrSortChar[192] = 131; +garrSortChar[193] = 131; +garrSortChar[194] = 131; +garrSortChar[195] = 131; +garrSortChar[196] = 131; +garrSortChar[197] = 131; +garrSortChar[198] = 131; +garrSortChar[199] = 150; +garrSortChar[200] = 158; +garrSortChar[201] = 158; +garrSortChar[202] = 158; +garrSortChar[203] = 158; +garrSortChar[204] = 175; +garrSortChar[205] = 175; +garrSortChar[206] = 175; +garrSortChar[207] = 175; +garrSortChar[208] = 154; +garrSortChar[209] = 193; +garrSortChar[210] = 197; +garrSortChar[211] = 197; +garrSortChar[212] = 197; +garrSortChar[213] = 197; +garrSortChar[214] = 197; +garrSortChar[215] = 95; +garrSortChar[216] = 197; +garrSortChar[217] = 230; +garrSortChar[218] = 230; +garrSortChar[219] = 230; +garrSortChar[220] = 230; +garrSortChar[221] = 246; +garrSortChar[222] = 227; +garrSortChar[223] = 224; +garrSortChar[224] = 131; +garrSortChar[225] = 131; +garrSortChar[226] = 131; +garrSortChar[227] = 131; +garrSortChar[228] = 131; +garrSortChar[229] = 131; +garrSortChar[230] = 131; +garrSortChar[231] = 150; +garrSortChar[232] = 158; +garrSortChar[233] = 158; +garrSortChar[234] = 158; +garrSortChar[235] = 158; +garrSortChar[236] = 175; +garrSortChar[237] = 175; +garrSortChar[238] = 175; +garrSortChar[239] = 175; +garrSortChar[240] = 154; +garrSortChar[241] = 193; +garrSortChar[242] = 197; +garrSortChar[243] = 197; +garrSortChar[244] = 197; +garrSortChar[245] = 197; +garrSortChar[246] = 197; +garrSortChar[247] = 96; +garrSortChar[248] = 197; +garrSortChar[249] = 230; +garrSortChar[250] = 230; +garrSortChar[251] = 230; +garrSortChar[252] = 230; +garrSortChar[253] = 246; +garrSortChar[254] = 227; +garrSortChar[255] = 250; + +gaFtsStop[0] = "a"; +gaFtsStop[1] = "about"; +gaFtsStop[2] = "after"; +gaFtsStop[3] = "against"; +gaFtsStop[4] = "all"; +gaFtsStop[5] = "also"; +gaFtsStop[6] = "among"; +gaFtsStop[7] = "an"; +gaFtsStop[8] = "and"; +gaFtsStop[9] = "are"; +gaFtsStop[10] = "as"; +gaFtsStop[11] = "at"; +gaFtsStop[12] = "be"; +gaFtsStop[13] = "became"; +gaFtsStop[14] = "because"; +gaFtsStop[15] = "been"; +gaFtsStop[16] = "between"; +gaFtsStop[17] = "but"; +gaFtsStop[18] = "by"; +gaFtsStop[19] = "can"; +gaFtsStop[20] = "come"; +gaFtsStop[21] = "do"; +gaFtsStop[22] = "during"; +gaFtsStop[23] = "each"; +gaFtsStop[24] = "early"; +gaFtsStop[25] = "for"; +gaFtsStop[26] = "form"; +gaFtsStop[27] = "found"; +gaFtsStop[28] = "from"; +gaFtsStop[29] = "had"; +gaFtsStop[30] = "has"; +gaFtsStop[31] = "have"; +gaFtsStop[32] = "he"; +gaFtsStop[33] = "her"; +gaFtsStop[34] = "his"; +gaFtsStop[35] = "however"; +gaFtsStop[36] = "in"; +gaFtsStop[37] = "include"; +gaFtsStop[38] = "into"; +gaFtsStop[39] = "is"; +gaFtsStop[40] = "it"; +gaFtsStop[41] = "its"; +gaFtsStop[42] = "late"; +gaFtsStop[43] = "later"; +gaFtsStop[44] = "made"; +gaFtsStop[45] = "many"; +gaFtsStop[46] = "may"; +gaFtsStop[47] = "me"; +gaFtsStop[48] = "med"; +gaFtsStop[49] = "more"; +gaFtsStop[50] = "most"; +gaFtsStop[51] = "near"; +gaFtsStop[52] = "no"; +gaFtsStop[53] = "non"; +gaFtsStop[54] = "not"; +gaFtsStop[55] = "of"; +gaFtsStop[56] = "on"; +gaFtsStop[57] = "only"; +gaFtsStop[58] = "or"; +gaFtsStop[59] = "other"; +gaFtsStop[60] = "over"; +gaFtsStop[61] = "several"; +gaFtsStop[62] = "she"; +gaFtsStop[63] = "some"; +gaFtsStop[64] = "such"; +gaFtsStop[65] = "than"; +gaFtsStop[66] = "that"; +gaFtsStop[67] = "the"; +gaFtsStop[68] = "their"; +gaFtsStop[69] = "then"; +gaFtsStop[70] = "there"; +gaFtsStop[71] = "these"; +gaFtsStop[72] = "they"; +gaFtsStop[73] = "this"; +gaFtsStop[74] = "through"; +gaFtsStop[75] = "to"; +gaFtsStop[76] = "under"; +gaFtsStop[77] = "until"; +gaFtsStop[78] = "use"; +gaFtsStop[79] = "was"; +gaFtsStop[80] = "we"; +gaFtsStop[81] = "were"; +gaFtsStop[82] = "when"; +gaFtsStop[83] = "where"; +gaFtsStop[84] = "which"; +gaFtsStop[85] = "who"; +gaFtsStop[86] = "with"; +gaFtsStop[87] = "you"; + +gaFtsStem[0] = "ed"; +gaFtsStem[1] = "es"; +gaFtsStem[2] = "er"; +gaFtsStem[3] = "e"; +gaFtsStem[4] = "s"; +gaFtsStem[5] = "ingly"; +gaFtsStem[6] = "ing"; +gaFtsStem[7] = "ly"; + + +// as javascript 1.3 support unicode instead of ISO-Latin-1 +// need to transfer come code back to ISO-Latin-1 for compare purpose +// Note: Different Language(Code page) maybe need different array: +var gaUToC=new Array(); +gaUToC[8364]=128; +gaUToC[8218]=130; +gaUToC[402]=131; +gaUToC[8222]=132; +gaUToC[8230]=133; +gaUToC[8224]=134; +gaUToC[8225]=135; +gaUToC[710]=136; +gaUToC[8240]=137; +gaUToC[352]=138; +gaUToC[8249]=139; +gaUToC[338]=140; +gaUToC[381]=142; +gaUToC[8216]=145; +gaUToC[8217]=146; +gaUToC[8220]=147; +gaUToC[8221]=148; +gaUToC[8226]=149; +gaUToC[8211]=150; +gaUToC[8212]=151; +gaUToC[732]=152; +gaUToC[8482]=153; +gaUToC[353]=154; +gaUToC[8250]=155; +gaUToC[339]=156; +gaUToC[382]=158; +gaUToC[376]=159; + +var gsBiggestChar=""; +function getBiggestChar() +{ + if(gsBiggestChar.length==0) + { + if(garrSortChar.length<256) + gsBiggestChar=String.fromCharCode(255); + else + { + var nBiggest=0; + var nBigChar=0; + for(var i=0;i<=255;i++) + { + if(garrSortChar[i]>nBiggest) + { + nBiggest=garrSortChar[i]; + nBigChar=i; + } + } + gsBiggestChar=String.fromCharCode(nBigChar); + } + + } + return gsBiggestChar; +} + +function getCharCode(str,i) +{ + var code=str.charCodeAt(i) + if(code>256) + { + code=gaUToC[code]; + } + return code; +} + +function compare(strText1,strText2) +{ + if(garrSortChar.length<256) + { + var strt1=strText1.toLowerCase(); + var strt2=strText2.toLowerCase(); + if(strt1strt2) return 1; + return 0; + } + else + { + for(var i=0;igarrSortChar[getCharCode(strText2,i)]) return 1; + } + if(strText1.lengthstrText2.length) return 1; + return 0; + } +} +gbWhLang=true; \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whmozemu.js b/doc/salome/gui/GAUSS/whmozemu.js new file mode 100644 index 00000000..84c6de1e --- /dev/null +++ b/doc/salome/gui/GAUSS/whmozemu.js @@ -0,0 +1,67 @@ +// WebHelp 5.10.002 +if (! window.gbIE4 && window.gbNav6 && !document.childNodes[0].insertAdjacentHTML){ + +HTMLElement.prototype.insertAdjacentElement = function(where,parsedNode) +{ + switch (where){ + case 'beforeBegin': + this.parentNode.insertBefore(parsedNode,this); + break; + case 'afterBegin': + this.insertBefore(parsedNode,this.firstChild); + break; + case 'beforeEnd': + this.appendChild(parsedNode); + break; + case 'afterEnd': + if (this.nextSibling){ + this.parentNode.insertBefore(parsedNode,this.nextSibling); + } else { + this.parentNode.appendChild(parsedNode); + } + break; + } +} + +HTMLElement.prototype.insertAdjacentHTML = function(where,htmlStr){ + + var r = this.ownerDocument.createRange(); + r.setStartBefore(this); + var parsedHTML = r.createContextualFragment(htmlStr); + this.insertAdjacentElement(where,parsedHTML); +} + + +HTMLElement.prototype.insertAdjacentText = function(where,txtStr){ + + var parsedText = document.createTextNode(txtStr); + this.insertAdjacentElement(where,parsedText); +} +} + +function testScroll() { + // Initialize scrollbar cache if necessary + if (window._pageXOffset==null) { + window._pageXOffset = window.pageXOffset; + window._pageYOffset = window.pageYOffset; + } + // Expose Internet Explorer compatible object model + document.scrollTop = window.pageYOffset; + document.scrollLeft = window.pageXOffset; + window.document.scrollHeight = document.height; + window.document.scrollWidth = document.width; + window.document.clientWidth = window.innerWidth; + window.document.clientHeight = window.innerHeight; + + // If cache!=current values, call the onscroll event + if (((window.pageXOffset!=window._pageXOffset) || (window.pageYOffset!=window._pageYOffset)) && (window.onscroll)) + window.onscroll(); + // Cache new values + window._pageXOffset = window.pageXOffset; + window._pageYOffset = window.pageYOffset; + } + +// Create compatibility layer for Netscape +if (window.gbNav6 && !window.gbNav7) { + setInterval("testScroll()",50) +} \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whmsg.js b/doc/salome/gui/GAUSS/whmsg.js new file mode 100644 index 00000000..52ffcd24 --- /dev/null +++ b/doc/salome/gui/GAUSS/whmsg.js @@ -0,0 +1,69 @@ +// WebHelp 5.10.002 +var WH_MSG_RESIZEPANE =0x0100; +var WH_MSG_SHOWPANE =0x0101; +var WH_MSG_HIDEPANE =0x0102; +var WH_MSG_SYNCTOC =0x0103; +var WH_MSG_NEXT =0x0104; +var WH_MSG_PREV =0x0105; +var WH_MSG_NOSEARCHINPUT =0x0106; +var WH_MSG_NOSYNC =0x0107; +var WH_MSG_ENABLEWEBSEARCH =0x0108; + +var WH_MSG_ISPANEVISIBLE =0x0109; +var WH_MSG_PANESTATUE =0x010a; + +var WH_MSG_SYNCINFO =0x010b; +var WH_MSG_PANEINFO =0x010c; +var WH_MSG_WEBSEARCH =0x010d; + +var WH_MSG_SEARCHINDEXKEY =0x0201; + +var WH_MSG_SEARCHFTSKEY =0x020a; + +var WH_MSG_PROJECTREADY =0x0301; +var WH_MSG_GETPROJINFO =0x0302; + +var WH_MSG_SHOWTOC =0x0401; +var WH_MSG_SHOWIDX =0x0402; +var WH_MSG_SHOWFTS =0x0403; +var WH_MSG_SHOWGLO =0x0404; + +var WH_MSG_SHOWGLODEF =0x0500; + +var WH_MSG_GETTOCPATHS =0x0600; +var WH_MSG_GETAVIAVENUES =0x0601; +var WH_MSG_GETCURRENTAVENUE =0x0602; +var WH_MSG_GETPANEINFO =0x0603; +var WH_MSG_AVENUEINFO =0x0604; + +var WH_MSG_GETSTARTFRAME =0x0701; +var WH_MSG_GETDEFAULTTOPIC =0x0702; + +var WH_MSG_SEARCHTHIS =0x0801; +var WH_MSG_GETSEARCHS =0x0802; + +var WH_MSG_ISINFRAMESET =0x0900; + +var WH_MSG_TOOLBARORDER =0x0a00; +var WH_MSG_MINIBARORDER =0x0a01; +var WH_MSG_ISSYNCSSUPPORT =0x0a02; +var WH_MSG_ISSEARCHSUPPORT =0x0a03; +var WH_MSG_GETPANETYPE =0x0a04; +var WH_MSG_BACKUPSEARCH =0x0a05; +var WH_MSG_GETPANES =0x0a06; +var WH_MSG_INITSEARCHSTRING =0x0a07; +var WH_MSG_RELOADNS6 =0x0a08; +var WH_MSG_ISAVENUESUPPORT =0x0a09; + +var WH_MSG_GETCMD =0x0b00; +var WH_MSG_GETPANE =0x0b01; +var WH_MSG_GETDEFPANE =0x0b02; + +function whMessage(nMessageId,wSender,nVersion,oParam) +{ + this.nMessageId=nMessageId; + this.wSender=wSender; + this.nVersion=nVersion; + this.oParam=oParam; +} +var gbWhMsg=true; \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whnjs.htm b/doc/salome/gui/GAUSS/whnjs.htm new file mode 100644 index 00000000..42f642fb --- /dev/null +++ b/doc/salome/gui/GAUSS/whnjs.htm @@ -0,0 +1,25 @@ + + +Gauss Points Viewer + + + + + + + + + + + +<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/GAUSS/whphost.js b/doc/salome/gui/GAUSS/whphost.js new file mode 100644 index 00000000..9c91b49c --- /dev/null +++ b/doc/salome/gui/GAUSS/whphost.js @@ -0,0 +1,581 @@ +// WebHelp 5.10.005 +var gaProj=new Array(); +var gnChecked=0; +var gsProjName=""; +var gbReady=false; +var goMan=null; +var gbXML=false; +var gsFirstPane=""; +var gServerEnabled=false; +var gsPath=""; +var gbWhPHost=false; +var goDiv = null; +var gsHTML = ""; + +if (navigator.currentNavPen) + gsFirstPane = navigator.currentNavPen; + + +function delayLoad() +{ + if (goDiv&&gsHTML) + { + goDiv.innerHTML=gsHTML; + goDiv=null; + gsHTML=""; + } +} + +function whCom(sName,sComFile) +{ + this.msName=sName; + this.msDivId=sName+"Div"; + this.msIFrameId=sName+"IFrame"; + this.msComFile=sComFile; + this.mbloaded=false; + this.mbShow=false; + this.show=function(bShow) + { + if(this.mbShow!=bShow) + { + if(bShow&&!this.mbloaded) + { + this.load(); + } + + var oDiv=getElement(this.msDivId); + if(oDiv) + { + if(gbIE55||(gbIE5&&gbMac)) + { + var oIframe=getElement(this.msIFrameId); + if(oIframe) + { + if(bShow) + { + oDiv.style.zIndex=3; + if(oIframe!=null) + { + oIframe.style.zIndex=3; + if (!gbIE55) + oIframe.style.visibility="visible"; + } + } + else + { + oDiv.style.zIndex=2; + if(oIframe!=null) + { + oIframe.style.zIndex=2; + if (!gbIE55) + oIframe.style.visibility="hidden"; + } + } + } + } + if (!gbIE55) + oDiv.style.visibility=(bShow==true)?'visible':'hidden'; + this.mbShow=bShow; + } + + } + } + this.load=function() + { + if(!this.mbloaded) + { + if(this.msComFile.length>0){ + var strFile= _getFullPath(getPath(), this.msComFile); + var oDiv=getElement(this.msDivId); + if(oDiv){ + if(gbIE4||gbOpera7){ + var nIFrameHeight=oDiv.style.pixelHeight; + var nIFrameWidth=oDiv.style.pixelWidth; + var sHTML=""; + }else{ + sHTML+="100%; height:100%;\">"; + } + oDiv.innerHTML=sHTML; + }else if(gbNav6){ + gsHTML=""; + goDiv = oDiv; + setTimeout("delayLoad()", 100); + } + this.mbloaded=true; + } + } + } + } + this.unload=function() + { + var oDiv=getElement(this.msDivId); + if(oDiv) + oDiv.innerHTML=""; + } + this.getDivHTML=function() + { + var sHTML=""; + if(gbMac&&gbIE4) + sHTML+="
"; + else if(gbIE5) + sHTML+="
"; + else if(gbIE4||gbWindows) + sHTML+="
"; + else + sHTML+="
"; + sHTML+="
"; + return sHTML; + } +} + +function whComMan() +{ + this.sName=""; + this.maCom=new Array(); + this.addCom=function(sName,sComFile) + { + var owhCom=new whCom(sName,sComFile); + this.maCom[this.maCom.length]=owhCom; + } + this.init=function() + { + var sHTML=""; + for(var i=0;i0) + { + if(oMsg.oParam==1) + gsFirstPane="toc"; + else if(oMsg.oParam==2) + gsFirstPane="idx"; + else if(oMsg.oParam==3) + gsFirstPane="fts"; + else if(oMsg.oParam==4) + gsFirstPane="glo"; + } + else if(oMsg.oParam==0) + { + bHidePane=true; + } + } + goMan.init(); + if(gsProjName!="") + loadData2(gsProjName); + if (bHidePane) + { + gsFirstPane=""; + var oMsg1=new whMessage(WH_MSG_HIDEPANE, this, 1, null) + SendMessage(oMsg1); + } + else + { + if(gsFirstPane!="") + goMan.show(gsFirstPane); + else + goMan.showById(0); + } +} + +function setServerEnabled() +{ + gServerEnabled = true; +} + +function loadData2(strFile) +{ + if(gbXML) + loadDataXML(strFile); + else + loadData(strFile); +} + +function addProject(bPreferXML,sXMLName,sHTMLName) +{ + var bLoadXML=bPreferXML; + if(!gbIE4&&!gbNav6&&!gbOpera7) + return; + if(gbIE4&&!gbIE5) + bLoadXML=false; + if (gbIE5&&!gbMac) + bLoadXML=true; + if(gbIE55||gbNav6) + bLoadXML=true; + if(gbOpera7) + bLoadXML=false; + if(bLoadXML) + addProjectXML(sXMLName); + else + addProjectHTML(sHTMLName); +} + +function addProjectHTML(sName) +{ + gbXML=false; + gsProjName=sName; +} + +function addProjectXML(sName) +{ + gbXML=true; + gsProjName=sName; +} + +function window_MyBunload() +{ + goMan.unload(); + window_BUnload(); +} + +function putDataXML(xmlDoc,sdocPath) +{ + if(xmlDoc!=null) + { + var projectNode=xmlDoc.getElementsByTagName("project")[0]; + if(projectNode) + { + var aRProj=new Array(); + aRProj[0]=new Object(); + aRProj[0].sPPath=_getPath(sdocPath); + var sLangId=projectNode.getAttribute("langid"); + if(sLangId) + { + aRProj[0].sLangId=sLangId; + } + var sDPath=projectNode.getAttribute("datapath"); + if(sDPath) + { + if(sDPath.lastIndexOf("/")!=sDPath.length-1) + sDPath+="/"; + aRProj[0].sDPath=sDPath; + } + else + aRProj[0].sDPath=""; + aRProj[0].sToc=projectNode.getAttribute("toc"); + aRProj[0].sIdx=projectNode.getAttribute("index"); + aRProj[0].sFts=projectNode.getAttribute("fts"); + aRProj[0].sGlo=projectNode.getAttribute("glossary"); + var RmtProject=projectNode.getElementsByTagName("remote"); + var nCount=1; + for (var i=0;i 1 && document.body.clientHeight>1) + { + var oMsg = new whMessage(WH_MSG_RESIZEPANE, this, 1, null); + SendMessage(oMsg); + } + } +} + +function window_unload() +{ + UnRegisterListener2(this,WH_MSG_GETPROJINFO); + UnRegisterListener2(this,WH_MSG_SHOWTOC); + UnRegisterListener2(this,WH_MSG_SHOWIDX); + UnRegisterListener2(this,WH_MSG_SHOWFTS); + UnRegisterListener2(this,WH_MSG_SHOWGLO); + UnRegisterListener2(this,WH_MSG_GETPANEINFO); +} + +function onSendMessage(oMsg) +{ + if(oMsg) + { + var nMsgId=oMsg.nMessageId; + if(nMsgId==WH_MSG_GETPROJINFO) + { + if(gbReady) + { + var oProj=new Object(); + oProj.aProj=gaProj; + oProj.bXML=gbXML; + oMsg.oParam=oProj; + } + else + return false; + } + else if(nMsgId==WH_MSG_SHOWTOC) + { + if(goMan) + goMan.show("toc"); + var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "toc"); + SendMessage(onMsg); + onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null); + SendMessage(onMsg); + } + else if(nMsgId==WH_MSG_SHOWIDX) + { + if(goMan) + goMan.show("idx"); + var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "idx"); + SendMessage(onMsg); + onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null); + SendMessage(onMsg); + } + else if(nMsgId==WH_MSG_SHOWFTS) + { + if(goMan) + goMan.show("fts"); + var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "fts"); + SendMessage(onMsg); + onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null); + SendMessage(onMsg); + } + else if(nMsgId==WH_MSG_SHOWGLO) + { + if(goMan) + goMan.show("glo"); + var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "glo"); + SendMessage(onMsg); + onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null); + SendMessage(onMsg); + } + else if(nMsgId==WH_MSG_GETPANEINFO) + { + oMsg.oParam=goMan.getCurrent(); + return false; + } + } + return true; +} + +if(window.gbWhUtil&&window.gbWhMsg&&window.gbWhVer&&window.gbWhProxy) +{ + RegisterListener2(this,WH_MSG_GETPROJINFO); + RegisterListener2(this,WH_MSG_SHOWTOC); + RegisterListener2(this,WH_MSG_SHOWIDX); + RegisterListener2(this,WH_MSG_SHOWFTS); + RegisterListener2(this,WH_MSG_SHOWGLO); + RegisterListener2(this,WH_MSG_GETPANEINFO); + + if((gbMac&&gbIE4)||(gbSunOS&&gbIE5)||gbOpera7) + { + window.onresize=window_resize; + } + else if(gbIE4) + { + window.onresize=window_resize2; + } + window.onload=window_OnLoad; + window.onbeforeunload=window_MyBunload; + window.onunload=window_unload; + gbWhPHost=true; +} +else + document.location.reload(); + diff --git a/doc/salome/gui/GAUSS/whproj.htm b/doc/salome/gui/GAUSS/whproj.htm new file mode 100644 index 00000000..be8cee23 --- /dev/null +++ b/doc/salome/gui/GAUSS/whproj.htm @@ -0,0 +1,24 @@ + + +project description + + + + + + + + + + + \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whproj.js b/doc/salome/gui/GAUSS/whproj.js new file mode 100644 index 00000000..ae38fa99 --- /dev/null +++ b/doc/salome/gui/GAUSS/whproj.js @@ -0,0 +1,85 @@ +// WebHelp 5.10.001 +var gaProj=new Array(); + +gaProj[0]=new project(""); + +function setLangId(sLangId) +{ + gaProj[0].sLangId=sLangId; +} + +function setDataPath(sPath) +{ + if(sPath.length!=0) + { + if(sPath.lastIndexOf("/")!=sPath.length-1) + sPath+="/"; + gaProj[0].sDPath=sPath; + } + else + gaProj[0].sDPath=""; +} + +function addToc(sFile) +{ + gaProj[0].sToc=sFile; +} + +function addIdx(sFile) +{ + gaProj[0].sIdx=sFile; +} + +function addFts(sFile) +{ + gaProj[0].sFts=sFile; +} + +function addGlo(sFile) +{ + gaProj[0].sGlo=sFile; +} + +function addRemoteProject(sProjRelPath) +{ + if(sProjRelPath.lastIndexOf("/")!=sProjRelPath.length-1) + sProjRelPath+="/"; + gaProj[gaProj.length]=new project(sProjRelPath); +} + +function project(sPPath) +{ + this.sPPath=sPPath; + this.sLangId=""; + this.sDPath=""; + this.sToc=""; + this.sIdx=""; + this.sFts=""; + this.sGlo=""; +} + +window.onload=window_OnLoad; + +function window_OnLoad() +{ + gsName=document.location.href; + gsName=_replaceSlash(gsName); + var nPos=gsName.lastIndexOf("/"); + if(nPos!=-1) + gaProj[0].sPPath=gsName.substring(0,nPos+1); + else + alert("Error in Loading navigation component. Please regenerate WebHelp."); + patchPath(gaProj); + if(parent&&parent!=this&& typeof(parent.putProjectInfo)=="function") + { + parent.putProjectInfo(gaProj); + } +} + +function patchPath(aProj) +{ + for(var i=1;i + + diff --git a/doc/salome/gui/GAUSS/whproxy.js b/doc/salome/gui/GAUSS/whproxy.js new file mode 100644 index 00000000..d0ee2981 --- /dev/null +++ b/doc/salome/gui/GAUSS/whproxy.js @@ -0,0 +1,74 @@ +// WebHelp 5.10.001 +var gbInited=false; +var gWndStubPage=null; +function getStubPage() +{ + if(!gbInited) + { + gWndStubPage=getStubPage_inter(window); + gbInited=true; + } + return gWndStubPage; +} + +function getStubPage_inter(wCurrent) +{ + if(null==wCurrent.parent||wCurrent.parent==wCurrent) + return null; + + if(typeof(wCurrent.parent.whname)=="string"&&"wh_stub"==wCurrent.parent.whname) + return wCurrent.parent; + else + if(wCurrent.parent.frames.length!=0&&wCurrent.parent!=wCurrent) + return getStubPage_inter(wCurrent.parent); + else + return null; +} + +function RegisterListener(framename,nMessageId) +{ + var wSP=getStubPage(); + if(wSP&&wSP!=this) + return wSP.RegisterListener(framename,nMessageId); + else + return false; +} + +function RegisterListener2(oframe,nMessageId) +{ + var wSP=getStubPage(); + if(wSP&&wSP!=this) + return wSP.RegisterListener2(oframe,nMessageId); + else + return false; +} + +function UnRegisterListener2(oframe,nMessageId) +{ + var wSP=getStubPage(); + if(wSP&&wSP!=this&&wSP.UnRegisterListener2) + return wSP.UnRegisterListener2(oframe,nMessageId); + else + return false; +} + +function SendMessage(oMessage) +{ + var wSP=getStubPage(); + if(wSP&&wSP!=this&&wSP.SendMessage) + return wSP.SendMessage(oMessage); + else + return false; +} + +var gbWhProxy=true; + +var gbPreview=false; +gbPreview=false; +if (gbPreview) + document.oncontextmenu=contextMenu; + +function contextMenu() +{ + return false; +} diff --git a/doc/salome/gui/GAUSS/whres.xml b/doc/salome/gui/GAUSS/whres.xml new file mode 100644 index 00000000..44600d56 --- /dev/null +++ b/doc/salome/gui/GAUSS/whres.xml @@ -0,0 +1,256 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + </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/GAUSS/whrstart.ico b/doc/salome/gui/GAUSS/whrstart.ico new file mode 100644 index 0000000000000000000000000000000000000000..bffcd6eb9409a6e1121695adf763c2ab477ce902 GIT binary patch literal 10134 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 UFMH1!hGZ~$el#mfpYA#HU*7IM9RL6T literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/whskin_banner.htm b/doc/salome/gui/GAUSS/whskin_banner.htm new file mode 100644 index 00000000..b903d49f --- /dev/null +++ b/doc/salome/gui/GAUSS/whskin_banner.htm @@ -0,0 +1,49 @@ +<html> +<head> +<title>About WebHelp                                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Macromedia

+

Copyright © 1992 - 2004, eHelp Corporation

+

Author: Macromedia

+
+

Powered by: WebHelp 5.50 +
Generated by: RoboHelp X5 +
www.ehelp.com

+
+ + \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whskin_blank.htm b/doc/salome/gui/GAUSS/whskin_blank.htm new file mode 100644 index 00000000..43439a8c --- /dev/null +++ b/doc/salome/gui/GAUSS/whskin_blank.htm @@ -0,0 +1,10 @@ + + +Blank Page + + + + + + + diff --git a/doc/salome/gui/GAUSS/whskin_frmset01.htm b/doc/salome/gui/GAUSS/whskin_frmset01.htm new file mode 100644 index 00000000..3b8d56ad --- /dev/null +++ b/doc/salome/gui/GAUSS/whskin_frmset01.htm @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whskin_frmset010.htm b/doc/salome/gui/GAUSS/whskin_frmset010.htm new file mode 100644 index 00000000..8a02235c --- /dev/null +++ b/doc/salome/gui/GAUSS/whskin_frmset010.htm @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whskin_homepage.htm b/doc/salome/gui/GAUSS/whskin_homepage.htm new file mode 100644 index 00000000..138b4ed2 --- /dev/null +++ b/doc/salome/gui/GAUSS/whskin_homepage.htm @@ -0,0 +1,139 @@ + + + + Gauss Points Viewer + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whskin_info.htm b/doc/salome/gui/GAUSS/whskin_info.htm new file mode 100644 index 00000000..82813329 --- /dev/null +++ b/doc/salome/gui/GAUSS/whskin_info.htm @@ -0,0 +1,20 @@ + + +WebHelp 5.50 + + + + +

WebHelp 5.50 System Info

+ + + + + + + + + +
Start Page gauss_points_viewer.htm
Skin Name Default
Generating Time 12:05 12/20/2005
Language ID 1033
Compile Script webhelp5_compile_script.xml
Compile Build Version 13.10.606
Product Name WebHelp 5.50
Authoring Tool Name RoboHelp X5
+ + \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whskin_mbars.htm b/doc/salome/gui/GAUSS/whskin_mbars.htm new file mode 100644 index 00000000..c4fa48af --- /dev/null +++ b/doc/salome/gui/GAUSS/whskin_mbars.htm @@ -0,0 +1,59 @@ + + + WebHelp Navigation Mini-bar + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whskin_papplet.htm b/doc/salome/gui/GAUSS/whskin_papplet.htm new file mode 100644 index 00000000..3e2e3ed8 --- /dev/null +++ b/doc/salome/gui/GAUSS/whskin_papplet.htm @@ -0,0 +1,360 @@ + + +Navigation Pane + + + + + + + + + + + + + + + + + + diff --git a/doc/salome/gui/GAUSS/whskin_pdhtml.htm b/doc/salome/gui/GAUSS/whskin_pdhtml.htm new file mode 100644 index 00000000..9ee30a31 --- /dev/null +++ b/doc/salome/gui/GAUSS/whskin_pdhtml.htm @@ -0,0 +1,64 @@ + + + Navigation Pane + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whskin_pickup.htm b/doc/salome/gui/GAUSS/whskin_pickup.htm new file mode 100644 index 00000000..1f1af7fc --- /dev/null +++ b/doc/salome/gui/GAUSS/whskin_pickup.htm @@ -0,0 +1,229 @@ + + +Select a Topic                                                                                    + + + + + + +

Select a topic, then click Display

+
+
+
+ + + +
+ + + + \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whskin_plist.htm b/doc/salome/gui/GAUSS/whskin_plist.htm new file mode 100644 index 00000000..f7cf6d1d --- /dev/null +++ b/doc/salome/gui/GAUSS/whskin_plist.htm @@ -0,0 +1,238 @@ + + + Navigation Pane + + + + + + + + + \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whskin_tbars.htm b/doc/salome/gui/GAUSS/whskin_tbars.htm new file mode 100644 index 00000000..11dd09b0 --- /dev/null +++ b/doc/salome/gui/GAUSS/whskin_tbars.htm @@ -0,0 +1,101 @@ + + + WebHelp Navigation Toolbar + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whskin_tw.htm b/doc/salome/gui/GAUSS/whskin_tw.htm new file mode 100644 index 00000000..69737fa1 --- /dev/null +++ b/doc/salome/gui/GAUSS/whskin_tw.htm @@ -0,0 +1,63 @@ + + + + \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whst_topics.xml b/doc/salome/gui/GAUSS/whst_topics.xml new file mode 100644 index 00000000..6dce9986 --- /dev/null +++ b/doc/salome/gui/GAUSS/whst_topics.xml @@ -0,0 +1,82 @@ + + + + + + + + + +";]]> + + + + +"]]> + + + + +"; +OutputInTopicNavBarDataWebSearch.form();]]> + + + + + + + + + + +";]]> + + + diff --git a/doc/salome/gui/GAUSS/whstart.ico b/doc/salome/gui/GAUSS/whstart.ico new file mode 100644 index 0000000000000000000000000000000000000000..365eceac87e1f84509afe98f098b13c5012ebef8 GIT binary patch literal 10134 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 Cw@GdQ literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/whstart.js b/doc/salome/gui/GAUSS/whstart.js new file mode 100644 index 00000000..dc713683 --- /dev/null +++ b/doc/salome/gui/GAUSS/whstart.js @@ -0,0 +1,432 @@ +// WebHelp 5.10.003 +RegisterListener2(this, WH_MSG_GETSTARTFRAME); +RegisterListener2(this, WH_MSG_GETDEFAULTTOPIC); +RegisterListener2(this, WH_MSG_MINIBARORDER); +RegisterListener2(this, WH_MSG_TOOLBARORDER); +RegisterListener2(this, WH_MSG_ISSEARCHSUPPORT); +RegisterListener2(this, WH_MSG_ISSYNCSSUPPORT); +RegisterListener2(this, WH_MSG_ISAVENUESUPPORT); +RegisterListener2(this, WH_MSG_GETPANETYPE); +RegisterListener2(this, WH_MSG_GETPANES); +RegisterListener2(this, WH_MSG_RELOADNS6); +RegisterListener2(this, WH_MSG_GETCMD); +RegisterListener2(this, WH_MSG_GETPANE); +RegisterListener2(this, WH_MSG_GETDEFPANE); + +if (gbNav6) +{ + var gnReload=0; + setTimeout("delayReload();",5000); +} + +function delayReload() +{ + if (!(this.cMRServer && cMRServer.m_strVersion)) + { + if(gnReload!=2) + { + if(nViewFrameType&&nViewFrameType==1) + document.location=document.location; + } + } +} + +var gsToolbarOrder = "toc|idx|fts|blankblock|searchform|banner"; +var gsMinibarOrder = "blankblock|hide2|"; + +var gsTopic = "index.htm"; +var PANE_OPT_SEARCH = 1; +var PANE_OPT_BROWSESEQ = 2; +var gnOpts=-1; +var gnCmd=-1; +var gnPans=2; +var gsBtns="invalid"; +var gsDefaultBtn="invalid"; +var gbHasTitle=false; + +if (location.hash.length > 1) +{ + var sParam = location.hash; + if (sParam.indexOf("#<") == 0) + { + document.location = "whcsh_home.htm#" + sParam.substring(2); + } + else if (sParam.indexOf("#>>") == 0) + { + parseParam(sParam.substring(3)); + sParam = "#" + gsTopic + sParam.substring(1); + } + else + { + var nPos = sParam.indexOf(">>"); + if (nPos>1) + { + gsTopic = sParam.substring(1, nPos); + parseParam(sParam.substring(nPos+2)); + } + else + gsTopic = sParam.substring(1); + } + if (gnPans == 1 && gsTopic) + { + var strURL=location.href; + if (location.hash) + { + var nPos=location.href.indexOf(location.hash); + strURL=strURL.substring(0, nPos); + } + if (gbHasTitle) + document.location=_getPath(strURL)+ "whskin_tw.htm" + sParam; + else + document.location=_getPath(strURL)+ gsTopic; + } +} + +function parseParam(sParam) +{ + if (sParam) + { + var nBPos=0; + do + { + var nPos=sParam.indexOf(">>", nBPos); + if (nPos!=-1) + { + if (nPos>0) + { + var sPart=sParam.substring(nBPos, nPos); + parsePart(sPart); + } + nBPos = nPos + 2; + } + else + { + var sPart=sParam.substring(nBPos); + parsePart(sPart); + break; + } + } while(nBPos < sParam.length); + } +} + +function parsePart(sPart) +{ + if(sPart.toLowerCase().indexOf("cmd=")==0) + { + gnCmd=parseInt(sPart.substring(4)); + } + else if(sPart.toLowerCase().indexOf("cap=")==0) + { + document.title=_browserStringToText(sPart.substring(4)); + gbHasTitle=true; + } + else if(sPart.toLowerCase().indexOf("pan=")==0) + { + gnPans=parseInt(sPart.substring(4)); + } + else if(sPart.toLowerCase().indexOf("pot=")==0) + { + gnOpts=parseInt(sPart.substring(4)); + } + else if(sPart.toLowerCase().indexOf("pbs=")==0) + { + var sRawBtns = sPart.substring(4); + var aBtns = sRawBtns.split("|"); + for (var i=0;i0) + { + frame=getframehandle(frames[i].frames,framename); + if(null!=frame) + return frame; + } + } + return frame; +} + +function AddToArray(arr,obj) +{ + var bFound=false; + for(var i=0;ii) + return gArrayCompoentsArray[i]; + else + return null; + } + } + return null; +} + +function CreateComponentsArray(nMessageId) +{ + var len=gArrayRegistedMessage.length; + gArrayRegistedMessage[len]=nMessageId; + gArrayCompoentsArray[len]=new Array(); + return gArrayCompoentsArray[len]; +} + +function listener(sName,oWindow) +{ + this.sName=sName; + this.oWindow=oWindow; +} + +function RegisterListener(windowName,nMessageId) +{ + var arrayComponents=GetComponentsArray(nMessageId); + if(arrayComponents==null) + arrayComponents=CreateComponentsArray(nMessageId); + + if(arrayComponents!=null) + { + for (var i=0;i0){ + for(var i=0;idP%e) zdK;Y}Mj5@&VCJ3sdEW2&*82YX-glpM)?VwJefHVczJB|a)9T54(<>dUk=G&FQ{v{x8dt}@WmGqB%aW@O>!;N{`w;Ns#Fln~~-eNTXk z>#n@Wz57zKva-CwiYf}y$`UfN(*I0CK}Sc&K+kaN>eXA){9OFf|Kmpb0Wi@5Er0_h z#ckjc69pv`1*rqz1ptc6h>VI(PDxEm z&-m+OW`03o(dXil(z5Dr-%&NSb@dHx?H!$6=BXhxKP%YPwe^j? z{e#1!k<_eB^Av-xF|09lW$5Us>}RR)Hl=&XzaY0 zZ%c>LvZyD0s`^PMAY-`8YVSRK<))zQqR`$y(Ef$&{|{K${|ecEfc;-w(*Oe{1(`fb zCIAF{Klz#xgM_Xsk^r+yj)=C(NqY9{1LAuehfvr6D3KfYpk4j;Z=vx%`nM2`M0dX6 z%itw$ZLQh$-5wU_0!Fm;DbK<{Q>UVaRUS-Kb^~Hmd?A@EhRa;Cu`CIoivcf)Xd1)Jun>hTUnUNhZj98F!Z`+-=EbLKsOeFz+)yLHyrv6Rh3ZpBr ze)}Zgt--;9!r3zt&?2%sr&V3K^OKJR3@T&NOYMgTB#?h%Hou+sq;;v76}vco$o@8` z*@%qCQqqusaqWZV3fDjhuG#W!n?HA&Wv;$@V;P!E#~J*nY|l!Umfjn*vp@pO3&))f zj)F2?*o!rVqV3Q{I(F_8W{?}z$@&f?08@~uXD)3l(v^&jo~b4Q0{$j-K11Sq&e8G z6vA4U(90*C?(V7S5^J9O$@vVqVyxO99se@t0nEs+6+G5T6LF*{_~SdU+F)PH zkBVtO?w9L*GQm(sk5+9bWUgj)KE&M_^^qd(mNEMKDrIE7j1T;#3MnkQwP{>3QCg&# zyf3>PxzP|MBm3%w#n*~NxQ%w|X4ItguHL*1-VF4&zOlExwFq#5Vku3lePC-z6y zj&We~$7KS>Khls66<|#}ZPFHo|6xx}SK@V|m+5PSELgwrm72PSSe^{I`gDJW7#wkN zq&>V$w3@x(_{)L!V3P!#jKA_LzCh^ur;~t#ZO~4cNQ+I;HxjU5{7fk!TA>GDkjjYk z$z+Cp{pe5^{WRrHm+fq*WrZ1LDa}%(TmE*LL?5}y=Iht>%o0`Z%n2ivfg2)V(s_THA zaIo(+%+{SN3zH8RO&x&{aPgwSEYwfLNiJ1-GoYRXJg5D!%6?MeCzOsjO0oP(0-)ba z(}$Is@=nHGaxmz;yCpiywMm@tz%GH0l}W*Ay$I3goLVEF4;<w zCIRdjB@EJHq8n3YAY9$1D96g0ue$ZPxslrq*IWVDmHTQedlpB0zOW5+v-f_@5(0Mr z+-0RrboCrdW+aDUEQ35N^v#N337gGZ^WL{1PG_?K!JA(Fz94`8ChrW}z^(dB>jDqjdlVAN5>SMw{ zGpq$FU(BD5*NvaQSdtsdwc2uUeN)}V<~7q3=UM3R?%iMr%1q7EV>9Ao-eF`Tq6W1} z*sc#Mf-h~)n0!lu5`pcj)n!+^!f`Z*9sWLK~NmAWE1xnf3X`)y9dV)XC zSc_@JcwPC$60fqp$?|ux)cl>Sg%aD zvJPrS6IhfTE<$bOwZE5-tY!yTZQ-!cw?$Fy#>WaVBIaA-h`t}q6wiqS{a;m|JsAmj zgy>vr3Ka<`nE@MajB zhsT3X`d|4XY%pOvHu%$&eObeRVqyrH5)BFjj-c-0fj^BQ;z{s_q}rltU)^jP0=U4NvIthy`8Iz{oiTN(c5f zh|)}`DH*e5;SZPZSmC6J4Fexm>d?pK@<^t6T!a*d#{LL$nTY)|a^Wwz9wPW1l|C;P z=ihcS(6`AbWLalSh}zWoIBw$yjUxJ9FablIK|mr$zfEnT?s>>M)#{YG(bc`z&7vbe?B>G2vmciwuV~Ljgte6zufnk2#E+pt zih@gU5+I7se4Ii|;=MQ^XEEg?-J`lCl^*q3lq!nF@C^0lT};`u?_tf;`x_!m(|YxbN?maR4H|VZb_48MJ?P(gX#tnG=s_3KG&LG3axSDLLL!G8}mW_4S8}{^V|X z7sTE9(ONB(di2y0LSX$ecx7&SVLexP&$!dRRbKdY4{grYlETj``kz2yXJ*OI7v|UF zlwMROyYsQ$*Qs6C|6e| zv9`AR%AXA<*NNM~aJf#X5qzhUBg~cK_3eO7NF29dv|Nm*A_aspX@QkD3RTHDZJr}( z9k&?0jI~u~RJyf+JE=k=v@4-S(@vnV(UMQ>n#WeY=Cz-5ny>YC5^~d=?EbzA2D1$u z)BbAP?fh=*)s~Gpn|khIEkDxV-{k&vZ3)hY$igm!PE=43QHz=JwWTgSuWLJWYlb5~ zF+7?qsAaXcVZl{z+|1Zg3N9O_^3?vqk{>_o%XLz;m3CwmXZ=F;Nr9M>PB{+MYBc0) z6jCRifU) zvU!UF?jV6B>1<*YNCGUP;a8GAET7mkCM1u7gXwembDw%FTIV2LJZHEe9=c4kuT7-U;mh&O zpuGiTz{J1e4Qb`t(J&EdNHsRA!$QgQ zjkS)|t$Ods&Y0^*0&-a9iiyD)L_+@G8?8qdQY|(Y4{I-uz!@Y!4@nMEBR|9_T`P!) z;smX~U&td@2|2O&*2?vGazU~_-nvt!TuJctI9nT`MZ=xWNdRFiz<~%K#1GrScs~CA z%dPO#VF|uHucPCaDZYQ3on6x`QCbF%!Df9~o0lEG=c6c#ue>MQuc~>l^OeVpf`y9` z4IJbW$5)P3`I<-1RZ5%_e`e_%o2FK;giFQp%!w$gRLsL&pCuo+U2=q*Gh-_jQB`?* zaMmUlA;*(kD@(4=8+wHKy@?*NoQedVsFF2~+Ni?a=4>aO4|cWHrsAAc!mDrgJ6>K3 zW~`BEGAM%9&R-r;HgYZOwDa{+ve0*P*Y28J2&b%_y$CL+X>Sp1-kq@$YA&fmHR?-X zF^m3S(X#|={Z+j^ny5;-vmhOCwT=$`qbE1hOAO@(jRqj9Bwz^&(?A=Jb5tRH4qN?E zHK?-*%Gj{e0V zRJn=-C_5ESCE)GkSIP2~-;O1=epdQLp2UdE4u?qN|Dh%N5;*}q?D$2PHC#b7dx0}S zt4*zGl7IcHGstOAu*mzBdikjSyi9ATTT?h=&wRRSNGKQdP^X?hf*1(-VAHMwEva#O zSQY=JJO1iw!uJrlZ?20yJaU;>i1?!N&c_e6?LUPCR!%$ObBUTB=TLoEKK4R)pteu;=Upkr3pT2h4g9i@Kzsk~1 zVU~bVrlBbp=D&I%IrZw9w6~383(8*JKVq$1lIGMJeJKsnD^6Hs!SoH7|9aT`X6nP2 zN$9YJT7Z3R7`u+dgrX=}NGG04R3$V_$c;(NQN$EvqQ=)G0Y zCdM1=$gU(i-|0|`S=}#G3d+j+Rh%heH-km}a%bmEjE#;Un?&vbx%_@0ueam~YWC6) z{`a=ATwB8D9g-vcq#wfhhiu}bjHg$Xzr>)Y%|P2E;Hb<3E`d$Fr#qnUm;f3n>ypr3 zn80%ciid5ml`^&P2i9mRaJ#x6m<`)~G#d;mihLa}t9v`4^bbaszI1IO334AkY4_H7 z@OGU0!sdyq7sHI(Hu&SMsZkZMUKi3i9-^V=vZEKCZ7rPS?%?XLb^B^^QU^7-UU|Hd zS-$sLG1VV5A4Rw2!Q|@Uxmapk(QA9}kSKDHRJ5x(jrsH(&b;Hl9AfG`K(jvio9GLv z{lv=8;r3L#R{C&(sndt||S*P))9_ zynt1}BXFjA$mi6}aK~(nK?>66ta?DaReF;90j0^9gVg4D)d+=3Nv{l#l~>IFJ@LY^ zY|V66Zqxtf`W1@(*L{u6jAYUH2C9A|7uYC{VhewK;?FerI}mfTG=Fy8FhTnFt(k2F zYsOQKqJCz14ihVs?o1;Fd9ERtUTxX+p>=uky`tu!@X!RO&mh+zOG-ln7puq+rX_|c z#W>X3)A+%1tPfY-$_ulT1Yd-5*E#~e(y~)plG4!l@NTENp44P9cA02xK|IY*?fXHd zkbHC&crRQ;uT|m*LtE}_IwOUKl$PHr4hL9017YzlT^~!WZLGf-T%^+*96W5h@0Z}! z@3ekm{w`~(tfz^ji8VwB5Q+kJyQJDYU=x(`=gI&q`uO#_xX-D0Pr3eLq1x42OfFJd?LpK5hvtKpz zx;aDVd1^sU;ozhx@9OK+_XBp+(@t2mm7~1foz*_SFt?>Gn8Qi+A{GGCqU7$Ee*3SU zr@@^l*mezGc;aA^5kgIP3Uhn`f#Xj_lUmsVH5*%`F$thmHh~GgEY&O8w*DTu zfOG11ey;q!N^GXIELWIKvLv|Zb12d##?N4Xi@P~a;vK&$mSK-=KhOCG?)&Irsp%fC zZUdY_hBt9JHKYR}@M1e2>7aCce>o?uK9@g1gLPu9A=Mo94VsYx7Pybsx!Xg|d*jEu zX4S+|V~O2~G;z^iRma5(lhr(v3q5Zd(*7)Bd*y1FneFpXj59#om$UIE{QVX)ntlHV zRT5ft89yO(AO6P?%16b;RMR+T*O7i~{@wn*9;NM}3i#+tZ~yHX3;+7j!f>T@rChp4 z?4Zp|?*s=?6Sp0mN~~8=76`{ru9e12V;fWsrN4Wd=Qm_uH;f+W+cXiF{W4tTF1`$k zlbl+iyfdO4h;59?Ldv&2Q;#c-$*O1bvJWvhEXm)i?(JxJ?Wk{yCXDYFH7c3}px|A& zu|M`7W_aroh-bXZR=ON+1D`%wpj}zq_q01F`l(9zY>$r1_t&Sb>)pS#zY?Dt7y@&h zg?6dnvZ`BZMo^Sz5ke5~GZG+n?LDu79%eSfV9YEYN7(iyxMyF>P|bs>)FnT9WNhn| zbX4JT)>ezrU2$8?lseba=QS8J{aU}<`8Ndgt@1^-6OTJ^;cAWUxXH%Uod_LhG4!z7 zUlmYoF5Apql`d6yuzV3B%$DDEOz5n4g@^4->uEkx4jf}haDB6vrR5zDmW&T?;AM>o zQaY7LANJR#!&}Cy;W`~~S-Rt?>i+IhwOyPQJd*L0y)-Cuv{k5) z+pWnB^v>O^H^IlULR#q^QLgXaH%We}^(YYGXdD{DWzE(y`#y|Tz)Pi-a0J#JM!Jiy zG~{SS^QY5#qt`QQDjjl}4X~{+2kr4xXd+#~93Rz{{b0K{JSm=RIfFl)!5J1U7 zLB&Er`U>y^00j*>+TQ{HyHHS4QPa@U(K9e!B2Q?%0#H&=QBhJ;(a=y+lV^vL#{p^< z8dgDh9onm=kLiSb*c4tRy{8A?s_kMo8{HRHbnuN}VC3NB;^q+%6%&_`R8m$^Ra4i{ zy$#jVH!!?oZea{7k^L9ge{;sq6OPzw)Cd2ny5^8;vo@lHMY4crCDcv{L=B+iB^WK#p5J4@`4PNS#I3 z#}(DO0U-(8?nK*r%So}WjGq%egV9_#2#ZO%zXr4ItGHRu4| z>OIHH_r6i(FO62V@c4gpPEqF%yjUc5LZAA33*SPoeRC9B_fMFSg5p9l6rvYFeRW=7o*+5@sgbF^G{s{~hpl*THZT|I*kf-PBz&mYFZ}K6+ImG( z`qHevrARsgoZ)}#D=r?n4)u+2M0UzvoQRivYo}A#b+dK_VJI|rGr7SphV-kqc^T>v zGnD&lmp^s?z@tOc-yPT#=leE+)E^Z#_`iK9!!7oze-rh38xlpd8%R6)ZZ)n;KhWBj zC$T*Sh?L$ zbG_v8pDjDPkc#&*)vVhC!50HLvF{!VQ*a79wvvDyhdQ*?D(hfh;bgh_x!x(J%~2R} zF*{?+*lQl^Ei$JzJS)9k{;*T;LC0)#mXF)U-PZ#*Wz~-=+ zgCm0yR;m4gFy+{@o_!LKnY)-(y4%d_>g9oCnqSR{lgiV`8x_vM`yDHpZ6FXy}Z$!XZd(Mi-U#cSKG(+%H=?7QU%TuEf7Hh{} zD$QFa_H--6raw5vNxhzxvq&1IAF_ID^{L6DJD78`(b1X&B<8HIa9d(`C9~lS4?x-i zCg$XT=MY#L2y~-QeC78XoZ6sv4?t{{4 zU5k82BFiM4|3&b)o2}kNTgLOZ758o03^{W@CL@~P|2(r~@DJJYy-rBl8mo47xr=&C9ohMwsrnGhEzjj9UexnUG2}VX`RBKQ(ypMF zH9X7;3kn+SZ?lW52kv}BRZAfZl9P~0!38JKn?_OG*+JBgEWjc5X91{b!r=7D;sb$G zFcOn=-)4FimD=>okg;EoN!Ng0AYjN!rdcWjo{Mi!hnMC?Ex-e5n~LMzIk;!I@-&`K z5kR==#of0qBR^|)$EOVo)?uD9N<%8fJHGt!?9e4-Z!(S*C-`w(Ml?gv0ebJ@Fkn40 z`OVkOuS44itP&WUf9!2BRop=<4mQBz@>c_G z@)TU9nWJ&~f_v6yGz0I&7DFl5gF|}~(6{4g^c}T#blTb00T)kyOuxvhy&+YwOmO$= z?t;yxBKS&CYzb8@NFnGKf?F!D1hhU*jvs$YURkNg0a^bYS51cL*mEtF4S2{vs39u;mi$Y;Wvfe4r^QXC8kTa_-Q|cW3ACebHl? z@D-QHg0r>BkmZ1PUL6k{#e}U}FJO(x1D4|O*o45|^lp&}uzJwJCpUvCqSF!Gj5G~oJz z>9hfV+qD3H8_{4*m;#Z2mlLD+D9H8}Ljpdzw;zNd*w;_qxR?FtcCA{_&%zb~lKYoU zO4SKf>I8Oh&W{jg--SJ5PoNE48ftJt*Qt8XaE5KG|E5q{Co#>h@KZ*muAdKgD<|Xk z0kGt)v_9Q!_mJ*<0dk1ZkDrepWxZ`@9XAqpmGkMvcB*Ze*|?s)B+`8sZJD@nv??fA z=3=B&yhhQ7Q_f$wG&yBQ9ON`*KkOg@4XgCvVa4MSw^0dbDS|cC+9f>p*qix9vQz%4 zL5pFEdNMbCm!O=LBxXxCN!}|Eb`Z_2ErU}-k&H55G|3aA9{4(gzyq_ zfiuNd<%Yh;9o3ZDF{~PCq&^a8$RAdZQf2MC>Htn;ApbL&64J(g)f+tIH5ye4!U`q3 zWO#mT!mn{}=!&WVm)(``!CJ2m&0?~GB8g%AM10YIisxVVLQ)^Td352saCq{?d1b~y zQom*_cuHi0ACD(rLboTJe1H4+%xQL!)%`8ns6N@FF(iPmuvmwjo)MSNKeMsV7g==5 z2shKwi)INoOueFNE7z`hnG;^sNQt2t6+-PR<8uQf6?~?TDhTH9`ztqzBJj*~tW|$! z6RO3(Y@E2R?3D&Bi5!+LvI^jGsMDYr`h@ z0FL#k{IvBPI2tq%&kqkKFaM*mu}-6%*}7LYrmd+!WLN0W{m+BGgonNz#ONk} z5XV*kQE{|U+-o%-&8y3_P9Z`z6h>SP`FL^^$(3WQg78;U#%xQcWf)p zZ*<%Vr0feE`Zbm3Emoi*d%lrK1}3MjM56Vo#GGmY9?N-wgK}$sG`(+-11AP`;m2Nk z<1rwN(Ru;?)b4y6DNRr86NY`L)*U`{T^mf)!zOLG10<9`okE zKnJU1+3_A`@g9Cw!M5|M`8Fq`U`I94O0JpU9uNk8deGR5pf0^Kaw%2#(+f@H&I1Gs zn5Z>HJS$JG7p!9W7f1vdq#HjTuTKmmkCft{{?k?n8zV@7<}zWkPFlZFR`O9@(8HWz!*;)Wtk)C4dA}WZ+6^-nzq*p|=~H9iC~sZ41_h*t0H7s*2+` z64!N(xL4x_MrB|N$CvbW3R2}Uu3Fp7dhqUmgL&?mq*}yW7-a(@xwWv)O7%Sl3Gj}c zw=wh)-FurCc~E}*rYy!nzq_)WR+E3^V94*FmWj7NwE*>8)s)!|%8EA&+Q-Eo`b-^R z_ABpg7Vkxuye|D9o@6q!z9V#^y^>X9_ ztk6OBCFjPR@_r_3CD%a)w!hj}>}3Dlnjr5ZkRZ`Sdo#>ylC^0w3;rB-7(+O3zBq-otSb%$r9NPQv}yMg=tM6M-s@vwP_>tg;#*Zyv0=T>}jlXj*Ahv)J4oZ+}&H zdu=Hp=K8VU-H*xrPOWXM0)P0Vb)7;m=w?%^=^3cqV_79n*%20azqI1gmFhlMLI_Wc z+1QhOt`d1;OkeCARbF@P=}~p7S9VBQ-g+vB$C*Q04ugfOt5U{|fz< zeypI&t-!EwY-NvK>_2d_bGy zC44T-d3jgPDKXi#gezh6O>)zqUsykoW|@oS`*Y~wgmQYl_s3~`1>4J;A83BG4yhWp z@Vf@-=Ny7n3{J}TDBYS+KD-7ph1`i0NcqsP!lKfs=ilLWR~GcTMFVXPxtu>dn$@Ya z&KYz{6X6e%M=V~1V{AS?E)R65)mg>Ywj|y zuw4?6$9AYr0^q9aP@OE_8~64m-$WCg#A-&(j8Kb13~|PK0lE_`)@R<)#h=ZvL5=!0 z0z-D;^tZ0Q?bkV;W_Ee6(x7abqAy%u3pqFtBmsY-dj>Ig>TXC!W?Tc6m2jR(pLzVr z8@ooA7+^Us6qv%{*Fznd!Xkx0B@ib>P?^b_eP2q$nTL1`rP%wq&GY*R?l}v3`UL`z zy(zn={^eOJkzQ9J&zL~#)`~7$q1W-Zr1DGXzz2O01RSZ-(}MHxY11rT;6e;02`Q|) z9w}vq{(##ST~x%7eBYm(8Y}v z?Lm-PO$be2ElgEeTf}%*243Y&TXApjXL(k}Ml;eebQis{8Bio~fzns(xywKi$vtxA6=3AHZ#0O&v{uh=>TVCtLu28Bhnv zuU!LOBO?caKok_@*D2|4Qr@^h$wWg-MaRa>!Oq6a%F4+j!q3Si%+1OwAbU?(Ok7Gz zii2PNft-Yrh@_On->s^We^TKxm)a1Z7z=4E_3m~Q@BB3V2 z_W&FKKtx7}_HV%dUPQzsq-57XX228fABNQg;E$jC@Z3A@7xet?vkjOMPm z>NQ%!rywqGI*IV4LUL}knl5^y$zME@&wL^%t~1P#+`*pU37!(}x=Iy)4_aCC7lT%XD(lb70W_>CuhLx0- zl~>f()i*RYHMg{W@9ydC>mL{#nwp-Oots}+Tw34Q+}i$$+}YjxjXF6!JHPmIiT=w) z1d#kE)_;-x4=!o~7cnU*2`T6=7ZGtF;U=LbCA%wrjYicF^wgV{OCp?{PA#dhri+4G z(&!icGoQ)p3_McnyubgV{fq2>2Nv=FBKt3}|K?f(C`pJ2#Ur5xQ~-oz-(i$L6FlL9 z`|dkj7pa%uU*aDg@OV`d*$@Yc=DB>m{ub6nw8nLh=oMOP{91 zfUVFNs+_keb9i8W!|1nwQ_DNdDOutv(+_sRw>`rJ$|6KAFiQQA7n*{(qX+YnQnlkO zlA(T;V4J>6p2l>Gx4z|S-m&ccC-8S5a#8NwQGKtG{#7XQ2Xsx^_51p#wrExV3kwe2 zXp60gz^JWQ1sZa$bVgXPiEzzU-uG6vEU~z0-dQ^J3jG+l8y%b;2f<~VT~D*qFcp2Z zBmR)r$;x8N#|8AHt|OhE#;3X;Fyt*S-FN(DKpKrt#Ri1N5a%lEPYzO^Ol_b_%+iSi zMMh{!o9VEw>K-Lv)t{QxeVS{k1hlF)w@c0>8xd0r_U|o)4D0@got)&{e23C$2D2I$ zQNW_6TjG!r<0|?`+x_&{+__E%D-#t<2YQxmCZ^nFo>oKR*joDu9-v_JKC~`NO@@Y2 zV+0|SrXt%H%=(q@QeT~v;eodmTNj3S0Ql6BFN-aMa%(`&T*G3&)hHwNO4k-+dbK?c zCs<#P^67_~Qr)I7`y);r>|W#yeH+LTKKi7oq4_zB`%FH}-w0B($6(m7QGEa6OMhYr z$M_p#5wNilYj8zZ&xS>_Qm{0S&j7jLQ_Oxfv*vro?z@@oclgqe)#{pSS0K(`T2Zo& zG+{T*=L+i{V$DKJ9EZKImF^DQRcN2Rq{u!hL9?G`x7jV3jkaw)j z#@eOsgvyX(-7NiWL{OmULo-kc%T@x1>|B(uhNVzJf^hC~o%|roEvAJ}SzDyH(pk&0=~5D;NytR<*4C*QnwddZ_oqHM~E1 zU2fmOo@v<4K3&0XVV%P=5Pl@KGpr87CUy@yai(<+WxU&MEFY+yqI?|v5!Vy;t$p}F zn9wF9cq!nx&NkuR`y(o-w{A6~mBv$}N};_Y4>r$*mlb?aM`CeMtI( zJk#2=PQEvOy90X$4pB%cSHEh}8pYxS`PIZ@MCiBg-CgAz-iz&9(Ge)lxiS+f9LIzv zT{o#2f~c1^rjCs zacKDHSxo4oa1Vw&cv51dfwezZ*?v0tLVLuDrQPx7S|J9S``G(teQ~uxwW0zs=S*=a~!Pz$K%Q20P~U+*yoeDd{q9-)8C#KTcm z&cMd5490C^lc>(%!MYw`@XPp*eH5!InSsU=-{u9Ho1kJIH{w=aC^CPBI4^}Yj3Uxe z!bx#uB(K6l`Ri^ImGk~4&)B+R`KZlV$e-1#(74?&*-&nmh0bX$^5p4$ zp>qL$qnQ!HqEq;>=s648cgF7+vnMnAoeHs_nYaB2s!%S|7B!0zWp#6Uv-{#~n^19?@lI$BF{CzGwRS3Zs~Klh;3<@s-!G z>Et!Sbown7>zEr%>Z5C^Uwd6Ti6S2hsvuL>a+&PVUOH)bpyX`Io&|(KWuJUX$iU?Z z6gV#TW6o1huv?P2R)eAJpU~+pLa`ub`q0fEgxW}1L> zmJa7XjODudlchSFMp;zUQpO$$s~%|Sx|q39O!~p;Q+2m91xpVxOo0Y17hjvG9RC!B_$4%HbGA`0IBT@C}-c+@Z z>qMK z%VYj+)f8MF74}5u-LTJRY#&*w#te z2W{&z;(-vVp(L_q)~#1)m7ykKyQHfbOeOIhPVA15?UYCH%Zd31rha}?A@RRSGteF# z=V?`6>UE@ip9x7^ zy^1&*AEo!AS7-<;UWU$XPAX`asK}i0K!AmnGxDPapV;gL4lx#41 z(^A;DABI}`PbdLW@ zbTp6wx=O_P*Ep?TdSM=fRjTvWT(J=GF!DC$yj+4K2Pcm$j!&GPm^{%0oyXTgsi&dWI z88gRkGIgO@IfklTnN60I(v!3&l;&>>_eq29wG}9zErV?>+?X4XZyYsnV@=U=haVky zH&j$Mpvn2*nC|%r*HymXGDTk+dJGTi#XTTOH7!1`f9KsfxqySB%bm9x=eG{M=5X%| zzSJM3+M-|19;2;hwyPZS^wd@dC%KX#^w)lA%CbJEe}z+wQ#cA@Gn~7#;0U}Mbr-2| zE7O8?pL-ZV3TA##_`m!B)A3FlaL*&!1Qk@X2w~NbeXZZJLs?`}xt?`(l2?Ym`Ll%$ zIj<@On|oBJuSr@M#w8mBqFH;-iW`@tOFm7h4f<)DvQj7D0aL@-`o*gHY&O-c@Z?`K zl@oB4eDG@fO!X-qAa+R*$s|K54$wP4BSsugipqv8d!<;t^Evk8Zqt*-)eejc2(8+`c;}tTj6j~SjgsWDfQY70Zf_hn@Hof@M-q1{?f1#Pj;^9X#No;Iq~@5)f}^N z7C9I{JK+zeOut3rc@GbC&iu}3%Hq{bCZCWSN@pB6FR{l1K2&4vqzJpce9ALR>7HPo z$nBezqZdt1sz81@N7QHK1t@ZbAV5b&rZeqmMOM>t0q}}xH{pQ2@-wW*1LLiPLBXt# z8`FWdhaOiXgR-)}xJ*d3@6cH5Z@Mm`4gFUq9 zZDTfjdxyf1A&d^59$Ay7dFo|E;U&sn7dd6DxZIt>s&`i~b3goH#{5*5*NygWEsqgF zC%FXdn(mwpt-%|da%oyNF8I4TN6%^HMIOgQ^%NIsrTZsk!ba7KD+K1%IcZon9f*0X zcnGze@lYNP_79X|bz*jS6Q6m8aWm+)70l3?*=n1iIoi6x*YKXIxd2g2l+wvqwPK*% zSVx%nE%_rKufOis@2kz?W#djws5Y;I8L^hT;MC63Amf?shM`a9{5{MV*E{m|Hsr=k z9aEF??R<|dSM9Khve>hKrPm3wEAy{pTWJakPEPb0`2?mHZvUMr2qiN70v*2xRSe|L{PfjP}-oHaA<4rS-`Yz-tOx-XTFl@D%jU%?V_xIbWV3| z$fm)|f?d*A#oFTAeLiDh`a*dy=X~Kn1;}LU&rrJir=dYkrY&tg1Q{`>MnF5wR?9sg z!qis5s4niX-ka~x99|(KO|$NYa0i(Q8KUj2Vc9>|13#z)db6!wGVuV<*{JY9MT=wU zy~yUN?=U&^W*;*{;9$}Zz+kG|c~syQ!{ zwh39nIz;dU6~^Xe;i46GL zpK1qc9mWxj7fR!X3ES4GRfW-)$+4m48VXe%ymxwUiXL8A?_cFPlVtb1l6S<+TZny zn`Lufj4EAY5vmVNJ3r-wOHhIJbgA6}0<6WO`u;3?`jo=_(CIM83+K5XcbCK*4I_>9 z^7Z472B}4<&z*`AV_&v+Vch7!qdJw=i<7P1`seaI*&L`}-GmtU@`Xd-X}l@c&ZbPp zP5BO&zyHj}cyN(NB69{FsCn3p%*BPje*B%u;rnMUxj{V8AE)6unS5ckHveqbFgc`s zjJnAFAWrfgh?KsXg^EfikUG!mn2QMG`Eh&-W-5!WBjLiK)F;FCL~mOoVve~-Q3bKj zcu682gq>K)59w(tNb)lF%0Du(^14x6_G-8i^b|LMi>!fHdmdPK-S2tr-zTSxJ01AU zt7#@?EqMf}6PuaR0?O9H;O8PC6EDG9$=hBQA*(JitLX zdM_unZR!Z7&|lMrL9AuoN`s-)jn!v$xnD^Mdvl(o?iu8tU|Jc)y(h z7mBtIe8E}V9incXTsT@P^Zub5thzyp`5CG{LHO~Ak2cfK)<=43OT$`G$d{7oH{ODj z-kic8P!Fy@#Z>w&8}P-s(=Z~U814DQJ7HkzfX5Y*$!(f{W)7jXOP9}dq6z&~b4;FN z(;|>vup?8qm$&}jG`W!eut7^0b7(MEq>O#Qn?B#QQ@AVg@z?rid=b*1!UHJt_t<+f z(=$s|dpubp5ZZwY_dXYivJv959f*h3mF~jA(63`AF_of_u$!in-F&6DjD*FP^uvP6 ziuhI!)^AJ5n(lX1Z_|$)I4~)j`otW?n`s8UA&C$-6NazO?ebbC(#v0JSk15Z?pbp^ zWLPJC%VB$#6aI%&{W5x1S`IN<%4D&3#%GegY#gnf=GdoW+pz@|9GsC#Zw(fy-z~`E z3ZyeU;a@kO8B}?mzPesY+Y8gU&7V-kJuU)Zk2-tI4%B}=L5 z;`6{P`mpL}eOrBeXj((EGsxG2^(0zwmACXcjTzemlMluQQ+~~+4U7(PG&043liK zo=MA}^&@H-wEyW(L(l6eqA-i&Mu>i^(uc$AS6_bjU84f7%sfisoz;b7NT0;lDtcq~ zW_ywrgN!)2$Ct>*=>i6r-eOrss2{gR>x7LJb+*P4}Y8>I{*Lx literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_abte.jpg b/doc/salome/gui/GAUSS/wht_abte.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a5638fabfa1ffb439302d7055d404f22fa78e942 GIT binary patch literal 9810 zcmdUUcUV(PxA&$aRS(62hzf|Hf`EX4kfR8Q2r9jZkuD`fN&snjZJ;P1AR-{3A|lOD z6G()pC`c3OAch=@bP{?<-FJiUIp>~x-+SNlJ@>C~^6c4r)|#?rtu^yoGXV#{-+--W zP0UOHE^aR14D@98S@28)8z~&%f%46I0Kh%KeGnW0 zN4e?TCOoEm2YFZk_g}dH7gY9u9xi}~XQL%o^v3rF^^f$cAh46`;UC5S;bT*V`Az25 z4JkK!`R99s$1A$YOwAC80m$!u{*d=ck5v_drwt*wFINy1O>M zfI#T^Ip579Z~}UDLysU323!R~065?ZxIu4Ei1ruT|E&HO+D5yL_Wver%D!#064yU% zDY;qNkd0@PE3#4MZ-KInF(F+8d!f$@0H6YW^1lIg09@d|@_z~-cG3gs<_UQG1FFac z4gt3T5kW!0ErKFjwuo#K782ejB`zW&F115KLP|nn$2O78^v~DN!hg-VM1_S##YDG? ziEWh>6BCo%$iyUnHre)fIso4R+XSHrT;t)|4{ⅇ@QRpk|09}fFHSFkd%B}n+Xzl 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_abti.jpg b/doc/salome/gui/GAUSS/wht_abti.jpg new file mode 100644 index 0000000000000000000000000000000000000000..14ac68cae4358e4c8b347e2e0a9124cc8e6e0b58 GIT binary patch literal 3863 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_fts_h.gif b/doc/salome/gui/GAUSS/wht_fts_h.gif new file mode 100644 index 0000000000000000000000000000000000000000..feb79ae82af9eee69c53f26bb0259032aa075e4c GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_glo_h.gif b/doc/salome/gui/GAUSS/wht_glo_h.gif new file mode 100644 index 0000000000000000000000000000000000000000..12223e5cc1fce0341697756352f9b0c62a8bda9e GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_glo_n.gif b/doc/salome/gui/GAUSS/wht_glo_n.gif new file mode 100644 index 0000000000000000000000000000000000000000..32803ebd9c781fc4af17f14b9adb90110ad849a1 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_idx_h.gif b/doc/salome/gui/GAUSS/wht_idx_h.gif new file mode 100644 index 0000000000000000000000000000000000000000..2df1b16a21c18de76f78db446889be1049f15b00 GIT binary patch literal 168 zcmZ?wbhEHbHIyb7gPvHyQ kB=ho<%9&Y;?rBphgO@tBstIyPcx}nJ(B#3&#=>9?0DB23GXMYp literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_idx_n.gif b/doc/salome/gui/GAUSS/wht_idx_n.gif new file mode 100644 index 0000000000000000000000000000000000000000..fd193a0f7e3769bce176e5d3218e2da3c9be2047 GIT binary patch literal 168 zcmZ?wbhEHbHIyb7gPvHyQ kB=ho<%9&Y;?rBphgO@tBstIyPcx}nJ(B#3&#=>9?0JH-snE(I) literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_logo1.gif b/doc/salome/gui/GAUSS/wht_logo1.gif new file mode 100644 index 0000000000000000000000000000000000000000..2ef5700f23ab96a8894ca981f6dd4e03d49f15da GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_next.gif b/doc/salome/gui/GAUSS/wht_next.gif new file mode 100644 index 0000000000000000000000000000000000000000..8ea834d5e7032dbe1ad10ea4cddaf55ac91156cc GIT binary patch literal 73 zcmZ?wbhEHbu&t4cF*@n~ Vey2jt%i6i7QHe!nS-}hp)&O=i6J!7Y literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_next_g.gif b/doc/salome/gui/GAUSS/wht_next_g.gif new file mode 100644 index 0000000000000000000000000000000000000000..c0e9758468e31a83aea3f3d353e5d88920ca011b GIT binary patch literal 73 zcmZ?wbhEHb0c=>&3LIf YBPcn4pOU*-tpa=3)XoK`gBTdB0bkn^WB>pF literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_prev_g.gif b/doc/salome/gui/GAUSS/wht_prev_g.gif new file mode 100644 index 0000000000000000000000000000000000000000..86479091649ebee62ce8a95f7880d3aa95305ce1 GIT binary patch literal 73 zcmZ?wbhEHbutpmhBaYhCPCMFj~25SJyItL8^ literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_sync.gif b/doc/salome/gui/GAUSS/wht_sync.gif new file mode 100644 index 0000000000000000000000000000000000000000..0ef174735ff57f43ff709fc824f326c8f7d9a772 GIT binary patch literal 846 zcmZ?wbhEHb1(%oXCs~51m>$<%ME692A|p#B_yPer#Ci)*`POB%^7dz+epkpkfn) literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_tab0.gif b/doc/salome/gui/GAUSS/wht_tab0.gif new file mode 100644 index 0000000000000000000000000000000000000000..955c42f47a076d635e5f28250996e98e7cd7c076 GIT binary patch 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?@ literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_tab1.gif b/doc/salome/gui/GAUSS/wht_tab1.gif new file mode 100644 index 0000000000000000000000000000000000000000..b3ec41d6d8a6a3f2d06b41f8ea70572610acbfdb GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_tab2.gif b/doc/salome/gui/GAUSS/wht_tab2.gif new file mode 100644 index 0000000000000000000000000000000000000000..08fb0ce4fe630b4dd33f1f8d099945ff48531b0c GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_tab3.gif b/doc/salome/gui/GAUSS/wht_tab3.gif new file mode 100644 index 0000000000000000000000000000000000000000..1819c8e8f786ed0b62007b198cb69dca982c49f6 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_tab4.gif b/doc/salome/gui/GAUSS/wht_tab4.gif new file mode 100644 index 0000000000000000000000000000000000000000..1a6fc4f4aa68d1b8fdd35c21c002f4a117133639 GIT binary patch literal 198 zcmZ?wbhEHb)MF53*vtR|4Pe{=rW$~}1`s%K;J|;N_j1LiMqShUz?=`!;bD@_^L1sSXX;;C5C literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_tab6.gif b/doc/salome/gui/GAUSS/wht_tab6.gif new file mode 100644 index 0000000000000000000000000000000000000000..fe312d238ad98026d9171f20077f95e372a82752 GIT binary patch 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* literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_tab8.gif b/doc/salome/gui/GAUSS/wht_tab8.gif new file mode 100644 index 0000000000000000000000000000000000000000..c80acc8d57852a246362d981ae89d4148f157987 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_toc1.gif b/doc/salome/gui/GAUSS/wht_toc1.gif new file mode 100644 index 0000000000000000000000000000000000000000..515c352de2fa5d8ae7def9c3590b6ea3c49d26e5 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_toc3.gif b/doc/salome/gui/GAUSS/wht_toc3.gif new file mode 100644 index 0000000000000000000000000000000000000000..330f3691c32e371e8af44c6d5780747737d30ed9 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_toc_h.gif b/doc/salome/gui/GAUSS/wht_toc_h.gif new file mode 100644 index 0000000000000000000000000000000000000000..fe20f686099a401a1ea951e81eae565b4efc9f2c GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GAUSS/wht_toc_n.gif b/doc/salome/gui/GAUSS/wht_toc_n.gif new file mode 100644 index 0000000000000000000000000000000000000000..ce283101f4204c55c042012228385fb6fefef830 GIT binary patch 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=0 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||gbOpera) + 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+"Disable"; + var oAs = getElementsByTag(oEl,"a"); + if (oAs.length>0) + { + oAs[0].style.cursor="default"; + } + 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 oAs = getElementsByTag(oEl,"a"); + if (oAs.length>0) + { + oAs[0].style.cursor="hand"; + } + 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]=""+sButton+""; +} + +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=""; + 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=390; + var nHeight=204; + 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)&&(!gbOpera)) + { + 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||gbOpera) + 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); + UnRegisterListener2(this,WH_MSG_NOSEARCHINPUT); + UnRegisterListener2(this,WH_MSG_NOSYNC); + } +} + +function window_OnLoad() +{ + if(!gbOpera7&&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; + } + } + else if(nMsgId==WH_MSG_NOSEARCHINPUT) + { + var oSearchInput = getElement("searchInput"); + if (oSearchInput) + { + oSearchInput.style.visibility = "hidden"; + return false; + } + } + else if(nMsgId==WH_MSG_NOSYNC) + { + var oSync = getElement("btnsynctoc"); + if (oSync) + { + oSync.style.visibility = "hidden"; + 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/GAUSS/whthost.js b/doc/salome/gui/GAUSS/whthost.js new file mode 100644 index 00000000..54ddc9aa --- /dev/null +++ b/doc/salome/gui/GAUSS/whthost.js @@ -0,0 +1,1504 @@ +// WebHelp 5.10.007 +var gaHSLoad=new Array(); +var gnMinIdx=0; +var gnInsIdx=-1; +var gsLoadingDivID="LoadingDiv"; +var gsLoadingMsg="Loading, click here to cancel..."; +var gaProj=null; +var gaTocs=new Array(); +var goChunk=null; +var gbReady=false; +var gbToc=false; +var gbXML=false; +var gaRoot=new Array(); +var gnCC=-1; +var gsTP=""; +var gaBTPs=""; +var gsCTPath=""; +var gnLT=-1; +var gsPathSplit="\n"; +var gsBgColor="#ffffff"; +var gsBgImage=""; +var goFont=null; +var goHFont=null; + +var gsMargin="0pt"; +var gsIndent="15pt"; +var gsABgColor="#cccccc"; + +var giBookClose=""; +var giBookOpen=""; +var giBookItem=""; +var giURLItem=""; +var giNewBookClose=""; +var giNewBookOpen=""; +var giNewBookItem=""; +var giNewURLItem=""; +var gnImages=0; +var gnLoadedImages=0; +var gaImgs=new Array(); +var gbLoadData=false; +var gobj=null; +var gaTocsNs61Fix=null; +var gbWhTHost=false; +var gBookItems=new Array(); +var gInSync=false; +var gbLData=false; +var gbNeedFillStub=false; +var gbLoadToc=false; + +function chunkInfoQueue() +{ + this.aContent=new Array(); + this.inQueue=function(cInfo) + { + this.aContent[this.aContent.length]=cInfo; + } + this.deQueue=function() + { + var cInfo=null; + if(this.aContent.length>0) + { + cInfo=this.aContent[0]; + for(var i=1;i0) + { + var nCIdx=0; + do { + nCIdx++; + var i=nIdx+nCIdx; + var nItemType=getItemType(i); + if(nItemType==1){ + if (!isBookEmpty(i)) + return false; + } + else if(nItemType==4){ + var sSrc=getRefURL(i); + var nProj=getProject(sSrc); + if(nProj!=-1){ + sSrc=gaRoot[nProj].sToc; + if(sSrc) + return false; + } + } + else if(nItemType==2||nItemType==16||nItemType==8) + return false; + } while(nCIdx

\"Book\""; + sHTML+=" "+sName+"

"; + var sURL=_textToHtml_nonbsp(getItemURL(nIdx)); + if(sURL!="") + addBookItem(getBookId(nIdx),_textToHtml_nonbsp(getTopicTarget(nIdx)),sURL); + sHTML+="
"; + } + else + sHTML=""; + } + else + { + sHTML+="stub>
"; + gbNeedFillStub=true; + setTimeout("fillStub("+nIdx+","+bLocalProject+");",100); + } + return sHTML; +} + +function checkFillStub() +{ + if(!gbLData) + { + if(gchunkRequestQueue.length()>0) + { + var cInfo=gchunkRequestQueue.deQueue(); + if(cInfo) + { + fillStub(cInfo.nIdx,cInfo.bLocal); + return; + } + } + } + if(gbNeedFillStub) + { + gbNeedFillStub=false; + setTimeout("syncInit()",1); + } +} + +function fillStub(nIdx,bLocalProject) +{ + if(!gbLData) + { + gbLData=true; + var sObj=getElement(getPBId(nIdx)); + if(sObj!=null) + { + tocExpandHelpSet(nIdx,bLocalProject); + gbNeedFillStub=false; + setTimeout("syncInit()",1); + } + else + setTimeout("fillStub("+nIdx+","+bLocalProject+");",100); + } + else + gchunkRequestQueue.inQueue(new chunkInfo(nIdx,bLocalProject)); +} + +function getBookId(nIdx){return "B_"+nIdx;} + +function getItemId(nIdx){return "I_"+nIdx;} + +function markBook(nIdx) +{ + var obj=getElement(getItemId(nIdx)); + if(obj==null) + obj=getElement(getBookId(nIdx)); + if(gbNav6) + { + gobj=obj; + setTimeout("delayMarkObj();",1); + } + else + markObj(obj); +} + +function delayMarkObj() +{ + if(gobj) + { + markObj(gobj); + gobj=null; + } +} + +function markObj(obj) +{ + if(obj!=null) + { + HighLightElement(obj,gsABgColor,"transparent"); + var sPath=calTocPath(obj); + if(gsCTPath!=sPath) + gsCTPath=sPath; + } +} + +function markItem(nIdx) +{ + var obj=getElement(getItemId(nIdx)); + if(gbNav6) + { + gobj=obj; + setTimeout("delayMarkObj();",1); + } + else + markObj(getElement(getItemId(nIdx))); +} + +function calTocPath(obj) +{ + var sPath=getInnerText2(obj); + var pObj=getParentNode(obj); + do + { + while(pObj!=null&&!isCBId(pObj.id)) pObj=getParentNode(pObj); + if(pObj!=null) + { + var nId=getIdByCBId(pObj.id); + var sObj=getElement(getPBId(nId)); + if(sObj!=null) + { + var objs=getItemsByBook(sObj); + for(var i=0;i\""+sAltString+"\" "+sName+"

"; + return sHTML; +} + +function writeBookItems(nIdx,num) +{ + var sHTML=""; + if(num>0){ + var nCIdx=0; + do{ + nCIdx++; + var i=nIdx+nCIdx; + var nItemType=getItemType(i); + if(nItemType==1||nItemType==4||nItemType==8){ + sHTML+=writeBook(i); + nCIdx+=getItemContentsNum(i); + } + else if(nItemType==2||nItemType==16){ + sHTML+=writeAnItem(i); + } + } + while(nCIdx"+gsLoadingMsg+"
"; +} + +function getItemName(nIdx) +{ + var oChunk=getChunk(nIdx); + if(oChunk) + return oChunk.aTocs[nIdx-oChunk.nMI].sItemName; + else + return null; +} + +function getItemContentsNum(nIdx) +{ + var oChunk=getChunk(nIdx); + if(oChunk) + return oChunk.aTocs[nIdx-oChunk.nMI].nContents; + else + return null; +} + +function getItemType(nIdx) +{ + var oChunk=getChunk(nIdx); + if(oChunk) + return oChunk.aTocs[nIdx-oChunk.nMI].nType; + else + return 0; +} + +function getItemURL(nIdx) +{ + var oChunk=getChunk(nIdx); + if(oChunk) + { + var sPath=oChunk.aTocs[nIdx-oChunk.nMI].sItemURL; + if(!(sPath==null||sPath=="")) + { + return _getFullPath(oChunk.sPPath,sPath); + } + } + return ""; +} + +function getRefURL(nIdx) +{ + var oChunk=getChunk(nIdx); + if(oChunk) + { + var sPath=oChunk.aTocs[nIdx-oChunk.nMI].sRefURL; + if(!(sPath==null||sPath=="")) + { + return _getFullPath(oChunk.sPPath,sPath) + } + } + return ""; +} + +function getTopicTarget(nIdx) +{ + var oChunk=getChunk(nIdx); + if(oChunk) + { + if(typeof(oChunk.aTocs[nIdx-oChunk.nMI].sTarget)!="undefined") + return oChunk.aTocs[nIdx-oChunk.nMI].sTarget; + } + return ""; +} + +function getItemIcon(nIdx,nIconIdx) +{ + var oChunk=getChunk(nIdx); + if(oChunk) + { + if(typeof(oChunk.aTocs[nIdx-oChunk.nMI].sIconRef)!="undefined") + { + var sIconRef=oChunk.aTocs[nIdx-oChunk.nMI].sIconRef; + var nIndex=sIconRef.indexOf(";"); + while(nIconIdx-->0&&nIndex!=-1) + { + sIconRef=sIconRef.substring(nIndex+1); + nIndex=sIconRef.indexOf(";"); + } + if(nIconIdx<0) + { + if(nIndex!=-1) + sIconRef=sIconRef.substring(0,nIndex); + return _getFullPath(oChunk.sPPath,sIconRef) + } + } + } + return ""; +} + +function TocWriteClassStyle() +{ + var sStyle=""; + document.write(sStyle); +} + +function TocWriteFixedWidth(bBegin,nWidth) +{ + if((gbIE4)&&(gbMac)&&(!gbIE5)){ + if(bBegin) + document.write("
"); + else + document.write("
"); + } +} + +function TocInitPage() +{ + var tempColl=getItemsByBook(document.body); + if(tempColl.length>0) + tempColl[0].focus(); +} + +function getItemsFromObj(obj) +{ + var aAnchor=new Array(); + var tempColl=getChildrenByTag(obj,"P"); + if(tempColl&&tempColl.length>0) + { + var anobr=new Array(); + for(var i=0;i0) + for(var j=0;j0) + for(var u=0;u0) + for(var j=0;jdocument.body.clientHeight){ + nNewScroll=nTop-20; + } + } + document.body.scrollTop=nNewScroll; +} + +function TocExpand(nId,bChangeImg,bForceOpen) +{ + var oDiv=getElement(getCBId(nId)); + if(oDiv==null) return null; + + var whichIm=document.images[getBId(nId)]; + if((oDiv.style.display!="block")||bForceOpen){ + oDiv.style.display="block"; + if(bChangeImg){ + var sPath=getPath(whichIm.src); + sPath=_getFullPath(sPath,getBookImage(nId,false)); + whichIm.src=sPath; + } + }else{ + oDiv.style.display="none"; + if(bChangeImg){ + var sPath=getPath(whichIm.src); + sPath=_getFullPath(sPath,getBookImage(nId,true)); + whichIm.src=sPath; + } + if(gbMac&&gbIE5){ + this.parent.document.getElementById("tocIFrame").style.width="101%"; + this.parent.document.getElementById("tocIFrame").style.width="100%"; + } + } + return oDiv; +} + +function getChunkId(n) +{ + var nCan=-1; + for(var i=0;i=gaTocs[nCan].nMI) + nCan=i; + } + if(nCan!=-1) + return nCan; + else + return -1; +} + +function getChunk(n) +{ + if(gnCC!=-1&&gaTocs[gnCC].nMI<=n&&(gnCC==gaTocs.length-1|| + gaTocs[gnCC+1].nMI>n)) + { + return gaTocs[gnCC]; + } + else{ + gnCC=getChunkId(n); + if(gnCC!=-1) + return gaTocs[gnCC]; + else + return null; + } +} + +function getBookImage(nIdx,bClosed) +{ + var nIdx=bClosed?0:1; + var sIcon=getItemIcon(nIdx,nIdx); + if(sIcon=="") + if(bClosed) + sIcon=giBookClose; + else + sIcon=giBookOpen; + return _getFullPath(gaProj[0].sPPath,sIcon); +} + +function getItemImage(nIdx,bRemote) +{ + var sIcon=getItemIcon(nIdx,0); + if(sIcon=="") + if(bRemote) + sIcon=giURLItem; + else + sIcon=giBookItem; + return _getFullPath(gaProj[0].sPPath,sIcon); +} + +function getInnerText2(obj) +{ + var sText=getInnerText(obj); + if(sText.length>0&&!gbOpera7) + sText=sText.substring(1); + return sText; +} + +function expandToc(oObj,sRest,aIdList) +{ + var len=aIdList.length; + var nPos=sRest.indexOf(gsPathSplit); + if(nPos!=-1) + { + sPart=sRest.substring(0,nPos); + sRest=sRest.substring(nPos+1); + } + else + { + sPart=sRest; + var aTagAs=getItemsByBook(oObj); + for(var s=0;s0) + { + if(gbNav6) + { + var sCommand=obj[0].getAttribute("onClick"); + var nCommand=sCommand.indexOf(";"); + sCommand=sCommand.substring(0,nCommand); + setTimeout(sCommand,1); + } + else + obj[0].click(); + } + return -1; + } + var nRet=expandToc(oCObj,sRest,aIdList); + if(nRet) + return nRet; + } + } + aIdList.length=len; + return 0; +} + +function getIdByPBId(sPId) +{ + return parseInt(sPId.substring(2,sPId.length-1)); +} + +function getIdByCBId(sCId) +{ + return parseInt(sCId.substring(2,sCId.length-1)); +} + +function isPBId(sId) +{ + return (sId&&sId.indexOf("B_")==0&&sId.lastIndexOf("P")==sId.length-1); +} + +function isCBId(sId) +{ + return (sId&&sId.indexOf("B_")==0&&sId.lastIndexOf("C")==sId.length-1); +} + +function getBId(nIdx) +{ + return "B_"+nIdx; +} + +function getPBId(nIdx) +{ + return getBId(nIdx)+"P"; +} + +function getCBId(nIdx) +{ + return getBId(nIdx)+"C"; +} + +function getClosestTocPath(aPaths) +{ + var nMaxSimilarity=0; + var nThatIndex=-1; + var sPath=null; + if(aPaths.length==0) return sPath; + for(var i=0;inMaxSimilarity) + { + nMaxSimilarity=nSimilarity; + nThatIndex=i; + } + } + if(nThatIndex!=-1) + sPath=aPaths[nThatIndex]; + else + sPath=aPaths[0]; + return sPath; +} + +function comparePath(sPath1,sPath2) +{ + var nMaxSimilarity=0; + var nStartPos1=0; + var nPos1=-1; + var nStartPos2=0; + var nPos2=-1; + do{ + var sCheck1=null; + var sCheck2=null; + nPos1=sPath1.indexOf(gsPathSplit,nStartPos1); + if(nPos1!=-1) + { + sCheck1=sPath1.substring(nStartPos1,nPos1); + nStartPos1=nPos1+1; + } + else + { + sCheck1=sPath1.substring(nStartPos1); + nStartPos1=-1; + } + nPos2=sPath2.indexOf(gsPathSplit,nStartPos2); + if(nPos1!=-1) + { + sCheck2=sPath2.substring(nStartPos2,nPos2); + nStartPos2=nPos2+1; + } + else + { + sCheck2=sPath2.substring(nStartPos2); + nStartPos2=-1; + } + if(sCheck1==sCheck2) + nMaxSimilarity++; + else + break; + }while(nStartPos1!=-1&&nStartPos2!=-1); + return nMaxSimilarity; +} + +function getTocPaths(oTopicParam) +{ + var aRelTocPaths=oTopicParam.aPaths; + var aPaths=new Array(); + for(var i=0;i0) + { + for(var i=0;i0) + { + document.body.background=gsBgImage; + } + if(gsBgColor&&gsBgColor.length>0) + { + document.body.bgColor=gsBgColor; + } + loadToc(); + var oMsg=new whMessage(WH_MSG_SHOWTOC,this,1,null) + SendMessage(oMsg); +} + +function loadImages() +{ + if(giBookClose) + { + gaImgs[gnImages]=giBookClose; + gnImages++; + } + if(giBookOpen) + { + gaImgs[gnImages]=giBookOpen; + gnImages++; + } + if(giBookItem) + { + gaImgs[gnImages]=giBookItem; + gnImages++; + } + if(giURLItem) + { + gaImgs[gnImages]=giURLItem; + gnImages++; + } + if(giNewBookClose) + { + gaImgs[gnImages]=giNewBookClose; + gnImages++; + } + if(giNewBookOpen) + { + gaImgs[gnImages]=giNewBookOpen; + gnImages++; + } + if(giNewBookItem) + { + gaImgs[gnImages]=giNewBookItem; + gnImages++; + } + if(giNewURLItem) + { + gaImgs[gnImages]=giNewURLItem; + gnImages++; + } + if(gnImages>0) + { + setTimeout("loadDataAfter();",1000); + loadImage(gaImgs[0]); + } + else + loadDataAfter(); +} + +function loadImage(sURL) +{ + var oImg=new Image(); + oImg.onload=checkImageLoading; + oImg.onerror=errorImageLoading; + oImg.src=_getFullPath(gaProj[0].sPPath,sURL); +} + +function loadDataAfter() +{ + if(!gbLoadData) + { + gbLoadData=true; + loadTData(); + } +} + +function errorImageLoading() +{ + gnLoadedImages++; + if(gnImages==gnLoadedImages) + loadDataAfter(); + else + loadImage(gaImgs[gnLoadedImages]); +} + +function checkImageLoading() +{ + gnLoadedImages++; + if(gnImages==gnLoadedImages) + loadDataAfter(); + else + loadImage(gaImgs[gnLoadedImages]); +} + +function window_unload() +{ + UnRegisterListener2(this,WH_MSG_PROJECTREADY); + UnRegisterListener2(this,WH_MSG_SYNCTOC); + UnRegisterListener2(this,WH_MSG_SHOWTOC); +} + +function onSendMessage(oMsg) +{ + if(oMsg) + { + var nMsgId=oMsg.nMessageId; + if(nMsgId==WH_MSG_PROJECTREADY) + { + loadToc(); + } + else if(nMsgId==WH_MSG_SYNCTOC) + { + if(gbReady) + { + syncWithPaths(oMsg.oParam); + } + } + else if(nMsgId==WH_MSG_SHOWTOC) + { + if(!gbNav6) + document.body.focus(); + } + } + return true; +} + +if(window.gbWhUtil&&window.gbWhVer&&window.gbWhMsg&&window.gbWhProxy) +{ + RegisterListener2(this,WH_MSG_PROJECTREADY); + RegisterListener2(this,WH_MSG_SYNCTOC); + RegisterListener2(this,WH_MSG_SHOWTOC); + goFont=new whFont("Verdana","8pt","#000000","normal","normal","none"); + goHFont=new whFont("Verdana","8pt","#007f00","normal","normal","underline"); + + window.onload=window_OnLoad; + window.onbeforeunload=window_BUnload; + window.onunload=window_unload; + gbWhTHost=true; +} +else + document.location.reload(); \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whtopic.js b/doc/salome/gui/GAUSS/whtopic.js new file mode 100644 index 00000000..8a53281c --- /dev/null +++ b/doc/salome/gui/GAUSS/whtopic.js @@ -0,0 +1,724 @@ +// WebHelp 5.10.005 +var gsPPath=""; +var gaPaths=new Array(); +var gaAvenues=new Array(); + +var goFrame=null; +var gsStartPage=""; +var gsRelCurPagePath=""; +var gsSearchFormHref=""; +var gnTopicOnly=-1; +var gnOutmostTopic=-1; + +var BTN_TEXT=1; +var BTN_IMG=2; + +var goSync=null; + +var goShow=null; +var goHide=null; + +var goPrev=null; +var goNext=null; +var gnForm=0; +var goShowNav=null; +var goHideNav=null; + +var goWebSearch=null; + +var gsBtnStyle=""; +var gaButtons=new Array(); +var gaTypes=new Array(); +var whtopic_foldUnload=null; +var gbWhTopic=false; +var gbCheckSync=false; +var gbSyncEnabled=false; + +function setButtonFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration) +{ + var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration); + gsBtnStyle+=".whtbtn"+sType+"{"+getFontStyle(vFont)+"}"; +} + +function writeBtnStyle() +{ + if(gaButtons.length>0) + { + if(gsBtnStyle.length>0) + { + var sStyle=""; + document.write(sStyle); + } + } +} + +function button(sText,nWidth,nHeight) +{ + this.sText=sText; + this.nWidth=nWidth; + this.nHeight=nHeight; + + this.aImgs=new Array(); + var i=0; + while(button.arguments.length>i+3) + { + this.aImgs[i]=button.arguments[3+i]; + i++; + } +} + +//project info +function setRelStartPage(sPath) +{ + if(gsPPath.length==0) + { + gsPPath=_getFullPath(_getPath(document.location.href),_getPath(sPath)); + gsStartPage=_getFullPath(_getPath(document.location.href),sPath); + gsRelCurPagePath=_getRelativeFileName(gsStartPage,document.location.href); + } +} + +function getImage(oImage,sType) +{ + var sImg=""; + if(oImage&&oImage.aImgs&&(oImage.aImgs.length>0)) + { + sImg+="\""+sType+"\"0) + sImg+=" width="+oImage.nWidth; + if(oImage.nHeight>0) + sImg+=" height="+oImage.nHeight; + sImg+=" border=0>"; + } + return sImg; +} + +function addTocInfo(sTocPath) +{ + gaPaths[gaPaths.length]=sTocPath; +} + +function addAvenueInfo(sName,sPrev,sNext) +{ + gaAvenues[gaAvenues.length]=new avenueInfo(sName,sPrev,sNext); +} + +function addButton(sType,nStyle,sText,sHref,sOnClick,sOnMouseOver,sOnLoad,nWidth,nHeight,sImg1,sImg2,sImg3) +{ + var sButton=""; + var nBtn=gaButtons.length; + if(sType=="prev") + { + if(canGo(false)) + { + var sTitle="Previous Topic"; + goPrev=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); + sButton=""; + if(nStyle==BTN_TEXT) + sButton+=goPrev.sText; + else + sButton+=getImage(goPrev,sTitle); + sButton+=""; + } + } + else if(sType=="next") + { + if(canGo(true)) + { + var sTitle="Next Topic"; + goNext=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); + sButton=""; + if(nStyle==BTN_TEXT) + sButton+=goNext.sText; + else + sButton+=getImage(goNext,sTitle); + sButton+=""; + } + } + else if(sType=="show") + { + if(isTopicOnly()&&(!gbOpera6||gbOpera7)) + { + var sTitle="Show Navigation Component"; + goShow=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); + sButton=""; + if(nStyle==BTN_TEXT) + sButton+=goShow.sText; + else + sButton+=getImage(goShow,sTitle); + sButton+=""; + } + } + else if(sType=="hide") + { + if(!isTopicOnly()&&!gbOpera6) + { + var sTitle="Hide Navigation Component"; + goHide=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); + sButton=""; + if(nStyle==BTN_TEXT) + sButton+=goHide.sText; + else + sButton+=getImage(goHide,sTitle); + sButton+=""; + } + } + else if(sType=="shownav") + { + if(isShowHideEnable()) + { + var sTitle="Show Navigation Component"; + goShowNav=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); + sButton=""; + if(nStyle==BTN_TEXT) + sButton+=goShowNav.sText; + else + sButton+=getImage(goShowNav,sTitle); + sButton+=""; + } + } + else if(sType=="hidenav") + { + if(isShowHideEnable()) + { + var sTitle="Hide Navigation Component"; + goHideNav=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); + sButton=""; + if(nStyle==BTN_TEXT) + sButton+=goHideNav.sText; + else + sButton+=getImage(goHideNav,sTitle); + sButton+=""; + } + } + else if(sType=="synctoc") + { + if(gaPaths.length>0) + { + var sTitle="Sync TOC"; + goSync=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); + sButton=""; + if(nStyle==BTN_TEXT) + sButton+=goSync.sText; + else + sButton+=getImage(goSync,sTitle); + sButton+=""; + } + } + else if(sType=="websearch") + { + if(gsSearchFormHref.length>0) + { + var sTitle="WebSearch"; + goWebSearch=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3); + sButton=""; + if(nStyle==BTN_TEXT) + sButton+=goWebSearch.sText; + else + sButton+=getImage(goWebSearch,sTitle); + sButton+=""; + } + } + else if(sType=="searchform") + { + gaButtons[nBtn]="NeedSearchForm"; + gaTypes[nBtn]=sType; + } + if(sButton.length!=0) + { + if(nStyle==BTN_TEXT) + sButton+=" "; + gaButtons[nBtn]=""+sButton+""; + gaTypes[nBtn]=sType; + } +} + +function isSyncEnabled() +{ + if(!gbCheckSync) + { + var oMsg=new whMessage(WH_MSG_ISSYNCSSUPPORT,this,1,null); + if(SendMessage(oMsg)) + { + gbSyncEnabled=oMsg.oParam; + } + gbCheckSync=true; + } + return gbSyncEnabled; +} + +function isInPopup() +{ + return (window.name.indexOf("BSSCPopup")!=-1); +} + +function getIntopicBar(sAlign) +{ + var sHTML=""; + if(gaButtons.length>0) + { + sHTML+="
"; + + sHTML+=""; + for(var i=0;i0) + { + var sHTML=""; + if(nAligns!=0) + { + sHTML+="
" + if(nAligns&1) + sHTML+=""; + if(nAligns&2) + sHTML+=""; + if(nAligns&4) + sHTML+=""; + sHTML+="
"+getIntopicBar("left")+""+getIntopicBar("center")+""+getIntopicBar("right")+"
"; + document.write(sHTML); + } + } +} + +function sendAveInfoOut() +{ + if(!isInPopup()) + setTimeout("sendAveInfo();",100); +} + +function sendAveInfo() +{ + var oMsg=new whMessage(WH_MSG_AVENUEINFO,this,1,gaAvenues); + SendMessage(oMsg); +} + + +function onNext() +{ + var oMsg=new whMessage(WH_MSG_NEXT,this,1,null); + SendMessage(oMsg); +} + +function onPrev() +{ + var oMsg=new whMessage(WH_MSG_PREV,this,1,null); + SendMessage(oMsg); +} + +function createSyncInfo() +{ + var oParam=new Object(); + if(gsPPath.length==0) + gsPPath=_getPath(document.location.href); + oParam.sPPath=gsPPath; + oParam.sTPath=document.location.href; + oParam.aPaths=gaPaths; + return oParam; +} + +function syncWithShow() +{ + if(isTopicOnly()) + show(); + else + { + sync(); + showTocPane(); + } +} + +function showTocPane() +{ + var oMsg=new whMessage(WH_MSG_SHOWTOC,this,1,null); + SendMessage(oMsg); +} + +function sendSyncInfo() +{ + if(!isInPopup()) + { + var oParam=null; + if(gaPaths.length>0) + { + oParam=createSyncInfo(); + } + var oMsg=new whMessage(WH_MSG_SYNCINFO,this,1,oParam); + SendMessage(oMsg); + } +} + +function sendInvalidSyncInfo() +{ + if(!isInPopup()) + { + var oMsg=new whMessage(WH_MSG_SYNCINFO,this,1,null); + SendMessage(oMsg); + } +} + +function enableWebSearch(bEnable) +{ + if(!isInPopup()) + { + var oMsg=new whMessage(WH_MSG_ENABLEWEBSEARCH,this,1,bEnable); + SendMessage(oMsg); + } +} + +function autoSync(nSync) +{ + if(nSync==0) return; + if(isInPopup()) return; + if(isOutMostTopic()) + sync(); +} + +function isOutMostTopic() +{ + if(gnOutmostTopic==-1) + { + var oMessage=new whMessage(WH_MSG_ISINFRAMESET,this,1,null); + if(SendMessage(oMessage)) + gnOutmostTopic=0; + else + gnOutmostTopic=1; + } + return (gnOutmostTopic==1); +} + +function sync() +{ + if(gaPaths.length>0) + { + var oParam=createSyncInfo(); + var oMessage=new whMessage(WH_MSG_SYNCTOC,this,1,oParam); + SendMessage(oMessage); + } +} + + +function avenueInfo(sName,sPrev,sNext) +{ + this.sName=sName; + this.sPrev=sPrev; + this.sNext=sNext; +} + +function getCurrentAvenue() +{ + var oParam=new Object(); + oParam.sAvenue=null; + var oMessage=new whMessage(WH_MSG_GETCURRENTAVENUE,this,1,oParam); + SendMessage(oMessage); + return oParam.sAvenue; +} + +function unRegisterListener() +{ + sendInvalidSyncInfo(); + enableWebSearch(false); + if(whtopic_foldUnload) + whtopic_foldUnload(); +} + +function onSendMessage(oMsg) +{ + var nMsgId=oMsg.nMessageId; + if(nMsgId==WH_MSG_GETAVIAVENUES) + { + oMsg.oParam.aAvenues=gaAvenues; + return false; + } + else if(nMsgId==WH_MSG_GETTOCPATHS) + { + if(isOutMostTopic()) + { + oMsg.oParam.oTocInfo=createSyncInfo(); + return false; + } + else + return true; + } + else if(nMsgId==WH_MSG_NEXT) + { + goAvenue(true); + } + else if(nMsgId==WH_MSG_PREV) + { + goAvenue(false); + } + else if(nMsgId==WH_MSG_WEBSEARCH) + { + websearch(); + } + return true; +} + +function goAvenue(bNext) +{ + var sTopic=null; + var sAvenue=getCurrentAvenue(); + var nAvenue=-1; + if(sAvenue!=null&&sAvenue!="") + { + for(var i=0;i0&&bNext) + { + sTopic=gaAvenues[i].sNext; + break; + } + else if(gaAvenues[i].sPrev!=null&&gaAvenues[i].sPrev.length>0&&!bNext) + { + sTopic=gaAvenues[i].sPrev; + break; + } + } + } + + if(sTopic!=null&&sTopic!="") + { + if(gsPPath!=null&&gsPPath!="") + { + sFullTopicPath=_getFullPath(gsPPath,sTopic); + document.location=sFullTopicPath; + } + } +} + +function canGo(bNext) +{ + for(var i=0;i0&&bNext)|| + (gaAvenues[i].sPrev!=null&&gaAvenues[i].sPrev.length>0&&!bNext)) + return true; + } + return false; +} + +function show() +{ + if(gsStartPage!="") + window.location=gsStartPage+"#"+gsRelCurPagePath; +} + +function hide() +{ + if(goFrame!=null) + { + goFrame.location=window.location; + } +} + +function isTopicOnly() +{ + if(gnTopicOnly==-1) + { + var oParam=new Object(); + oParam.oFrame=null; + var oMsg=new whMessage(WH_MSG_GETSTARTFRAME,this,1,oParam); + if(SendMessage(oMsg)) + { + goFrame=oParam.oFrame; + gnTopicOnly=0; + } + else + gnTopicOnly=1; + } + if(gnTopicOnly==1) + return true; + else + return false; +} + +function websearch() +{ + if(gbNav4) + { + if(document.ehelpform) + document.ehelpform.submit(); + } + else + { + if(window.ehelpform) + window.ehelpform.submit(); + } +} + +function addSearchFormHref(sHref) +{ + gsSearchFormHref=sHref; + enableWebSearch(true); +} + +function searchB(nForm) +{ + var sValue=eval("document.searchForm"+nForm+".searchString.value"); + var oMsg=new whMessage(WH_MSG_SEARCHTHIS,this,1,sValue); + SendMessage(oMsg); +} + +function getSearchFormHTML() +{ + var sHTML=""; + gnForm++; + var sFormName="searchForm"+gnForm; + var sButton="
" + sButton+=""; + if(""=="text") + { + sButton+=""; + } + else if(""=="image") + { + sButton+="" + sButton+=""; + } + sButton+="
"; + sHTML=""+sButton+""; + return sHTML; +} + +function showHidePane(bShow) +{ + var oMsg=null; + if(bShow) + oMsg=new whMessage(WH_MSG_SHOWPANE,this,1,null); + else + oMsg=new whMessage(WH_MSG_HIDEPANE,this,1,null); + SendMessage(oMsg); +} + +function isShowHideEnable() +{ + if(gbIE4) + return true; + else + return false; +} + + +function PickupDialog_Invoke() +{ + if(!gbIE4||gbMac) + { + if(typeof(_PopupMenu_Invoke)=="function") + return _PopupMenu_Invoke(PickupDialog_Invoke.arguments); + } + else + { + if(PickupDialog_Invoke.arguments.length>2) + { + var sPickup="whskin_pickup.htm"; + var sPickupPath=gsPPath+sPickup; + if(gbIE4) + { + var sFrame=PickupDialog_Invoke.arguments[1]; + var aTopics=new Array(); + for(var i=2;i1) + { + var nWidth=300; + var nHeight=180; + var nScreenWidth=screen.width; + var nScreenHeight=screen.height; + var nLeft=(nScreenWidth-nWidth)/2; + var nTop=(nScreenHeight-nHeight)/2; + if(gbIE4) + { + var vRet=window.showModalDialog(sPickupPath,aTopics,"dialogHeight:"+nHeight+"px;dialogWidth:"+nWidth+"px;resizable:yes;status:no;scroll:no;help:no;center:yes;"); + if(vRet) + { + var sURL=vRet.m_url; + if(sFrame) + window.open(sURL,sFrame); + else + window.open(sURL,"_self"); + } + } + } + else if(aTopics.length==1) + { + var sURL=aTopics[0].m_sURL + if(sFrame) + window.open(sURL,sFrame); + else + window.open(sURL,"_self"); + } + } + } + } +} + +if(window.gbWhUtil&&window.gbWhMsg&&window.gbWhVer&&window.gbWhProxy) +{ + RegisterListener("bsscright",WH_MSG_GETAVIAVENUES); + RegisterListener("bsscright",WH_MSG_GETTOCPATHS); + RegisterListener("bsscright",WH_MSG_NEXT); + RegisterListener("bsscright",WH_MSG_PREV); + RegisterListener("bsscright",WH_MSG_WEBSEARCH); + if(gbMac&&gbIE4) + { + if(typeof(window.onunload)!="unknown") + if(window.onunload.toString!=unRegisterListener.toString) + whtopic_foldUnload=window.onunload; + } + else + { + if(window.onunload) + if(window.onunload.toString!=unRegisterListener.toString) + whtopic_foldUnload=window.onunload; + } + window.onunload=unRegisterListener; + setButtonFont("show","","10pt","","","",""); + + gbWhTopic=true; +} +else + document.location.reload(); \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whutils.js b/doc/salome/gui/GAUSS/whutils.js new file mode 100644 index 00000000..85fae7e0 --- /dev/null +++ b/doc/salome/gui/GAUSS/whutils.js @@ -0,0 +1,527 @@ +// WebHelp 5.10.004 +var gsFileName=""; +var gsDivName=""; +var xmlDoc=null; +var sdocPath=null; +var gsInsertBeforeEndHTML=""; +var sReplaceStringsSrc=new Array(); +var gsDivName="dataDiv"; +var gnLoadDivNum=0; +sReplaceStringsSrc[0]="&"; +sReplaceStringsSrc[1]=">"; +sReplaceStringsSrc[2]="<"; +sReplaceStringsSrc[3]="""; +sReplaceStringsSrc[4]=String.fromCharCode(8364); +sReplaceStringsSrc[5]=" "; + +var sReplaceStringsDst=new Array(); +sReplaceStringsDst[0]="&"; +sReplaceStringsDst[1]=">"; +sReplaceStringsDst[2]="<"; +sReplaceStringsDst[3]="\""; +sReplaceStringsDst[4]=String.fromCharCode(128); +sReplaceStringsDst[5]=" "; +var goHighLighted=null; + +function _getRelativePath(strParentPath,strCurrentPath) +{ + if(_isAbsPath(strCurrentPath)) return _getPath(strCurrentPath); + strParentPath=_replaceSlash(strParentPath); + strParentPath=_getPath(strParentPath); + strCurrentPath=_replaceSlash(strCurrentPath); + strCurrentPath=_getPath(strCurrentPath); + for(var i=0;i0) + { + var nPosx=sPath.indexOf("/",nPos+2); + if(nPosx>0) + return sPath.substring(0,nPosx); + else + return sPath; + } + return sPath; +} + +function _getFullPath(sPath,sRelPath) +{ + if(_isAbsPath(sRelPath)) + return sRelPath; + else if(_isAbsPathToHost(sRelPath)) + return _getHost(sPath)+sRelPath; + else + { + var sFullPath=sPath; + var nPathPos=0; + while(nPathPos!=-1) + { + var nPathPos=sRelPath.indexOf("../"); + if(nPathPos!=-1) + { + sRelPath=sRelPath.substring(nPathPos+3); + sFullPath=sFullPath.substring(0,sFullPath.length-1); + var nPos2=sFullPath.lastIndexOf("/"); + if(nPos2!=-1) + sFullPath=sFullPath.substring(0,nPos2+1); + else + break; + } + } + sFullPath+=sRelPath; + return sFullPath; + } +} + +function _isAbsPath(strPath) +{ + var strUpper=strPath.toUpperCase(); + return (strUpper.indexOf(":")!=-1||strUpper.indexOf("\\\\")==0); +} + +function _replaceSlash(strURL) +{ + var re=new RegExp("\\\\","g"); + var strReplacedURL=strURL.replace(re,"/"); + return strReplacedURL; +} + +function _getPath(strURL) +{ + pathpos=strURL.lastIndexOf("/"); + if(pathpos>0) + return strURL.substring(0,pathpos+1); + else + return ""; +} + +function removeItemFromArray(oArray,i) +{ + if(oArray.length&&i>=0&&i=0&&i<=oArray.length) + { + var len=oArray.length; + for(var s=len;s>i;s--) + oArray[s]=oArray[s-1]; + oArray[i]=obj; + } +} + +function loadData(sFileName) +{ + var i=gnLoadDivNum; + var sName=gsDivName+gnLoadDivNum++; + loadData_2(sFileName,sName); +} + +function loadData_2(sFileName,sDivName) +{ + if(!getElement(sDivName)) + { + if(!insertDataDiv(sDivName)) + { + gsFileName=sFileName; + gsDivName=sDivName; + return; + } + } + var sHTML=""; + if(gbMac) + sHTML+=""; + else + sHTML+=""; + + var oDivCon=getElement(sDivName); + if(oDivCon) + { + if(gbNav6) + { + if(oDivCon.getElementsByTagName&&oDivCon.getElementsByTagName("iFrame").length>0) + { + oDivCon.getElementsByTagName("iFrame")[0].src=sFileName; + } + else + oDivCon.innerHTML=sHTML; + } + else + oDivCon.innerHTML=sHTML; + } +} + +function loadDataXML(sFileName) +{ + var sCurrentDocPath=_getPath(document.location.href); + sdocPath=_getFullPath(sCurrentDocPath,sFileName); + if(gbIE5) + { + xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.async=true; + xmlDoc.onreadystatechange=checkState; + if(document.body!=null) + xmlDoc.load(sdocPath); + } + else if(gbNav6) + { + xmlDoc=document.implementation.createDocument("","",null); + xmlDoc.addEventListener("load",initializeData,false); + xmlDoc.load(sdocPath,"text/xml"); + } +} + +function initializeData() +{ + if(xmlDoc!=null) + putDataXML(xmlDoc,sdocPath); +} + +function checkState() +{ + if(xmlDoc!=null) + { + var state=xmlDoc.readyState; + if(state==4) + { + var err=xmlDoc.parseError; + if(err.errorCode==0) + putDataXML(xmlDoc,sdocPath); + else + onLoadXMLError(); + } + } +} + +function insertDataDiv(sName) +{ + var sHTML=""; + if(gbMac) + sHTML+="
"; + else + sHTML+="
"; + if((gbIE5||gbNav6)&&document.body) + document.body.insertAdjacentHTML("beforeEnd",sHTML); + else + { + gsInsertBeforeEndHTML=sHTML; + setTimeout("insertWhenBodyReady();",100); + return false; + } + return true; +} + +function insertWhenBodyReady() +{ + if(gsInsertBeforeEndHTML=="") return; + if(document.body) + { + document.body.insertAdjacentHTML("beforeEnd",gsInsertBeforeEndHTML); + gsInsertBeforeEndHTML=""; + loadData_2(gsFileName,gsDivName); + } + else + { + setTimeout("insertWhenBodyReady();",100); + } +} + +function window_BUnload() +{ + for(var i=0;i='0'&&sBStr.charAt(i)<='9') + { + sNum+=sBStr.charAt(i++); + } + if(sNum!=""){ + var nNum=parseInt(sNum,16); + sText+=String.fromCharCode(nNum); + sBStr=sBStr.substring(i); + } + nPos=sBStr.indexOf('%'); + } + sText+=sBStr; + return sText; +} + +function excapeSingleQuotandSlash(str) +{ + if(str==null) return null; + var nPos=0; + var sRes=""; + var nPosNew=str.indexOf("\\",nPos); + while(nPosNew!=-1){ + sRes+=str.substring(nPos,nPosNew+1)+"\\"; + nPos=nPosNew+1; + nPosNew=str.indexOf("\\",nPos); + } + if(nPos=4) + { + if(navigator.appName=="Netscape") + { + gbNav4=true; + if(gnVerMajor>=5) + gbNav6=true; + } + gbIE4=(navigator.appName.indexOf("Microsoft")!=-1); + } + if(gbNav6) + { + var nPos=gAgent.indexOf("gecko"); + if(nPos!=-1) + { + var nPos2=gAgent.indexOf("/", nPos); + if(nPos2!=-1) + { + var nVersion=parseFloat(gAgent.substring(nPos2+1)); + if(nVersion>=20010726) + { + gbNav61=true; + if (nVersion>=20020823) + gbNav7=true; + } + } + } + }else if(gbIE4) + { + var nPos=gAgent.indexOf("msie"); + if(nPos!=-1) + { + var nVersion=parseFloat(gAgent.substring(nPos+5)); + if(nVersion>=5) + { + gbIE5=true; + if(nVersion>=5.5) + gbIE55=true; + } + } + } +} +else if (gbOpera) +{ + var nPos = gAgent.indexOf("opera"); + if(nPos!=-1) + { + var nVersion=parseFloat(gAgent.substring(nPos+6)); + if(nVersion>=6) + { + gbOpera6=true; + if(nVersion>=7) + gbOpera7=true; + } + } +} +else if (gbKonqueror) +{ + var nPos = gAgent.indexOf("konqueror"); + if(nPos!=-1) + { + var nVersion = parseFloat(gAgent.substring(nPos+10)); + if (nVersion >= 3) + { + gbKonqueror3=true; + } + } +} + +var gbWhVer=true; \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whxdata/whftdata0.xml b/doc/salome/gui/GAUSS/whxdata/whftdata0.xml new file mode 100644 index 00000000..c1bb1982 --- /dev/null +++ b/doc/salome/gui/GAUSS/whxdata/whftdata0.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/salome/gui/GAUSS/whxdata/whfts.xml b/doc/salome/gui/GAUSS/whxdata/whfts.xml new file mode 100644 index 00000000..9206defa --- /dev/null +++ b/doc/salome/gui/GAUSS/whxdata/whfts.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/doc/salome/gui/GAUSS/whxdata/whfwdata0.xml b/doc/salome/gui/GAUSS/whxdata/whfwdata0.xml new file mode 100644 index 00000000..dc599bb6 --- /dev/null +++ b/doc/salome/gui/GAUSS/whxdata/whfwdata0.xml @@ -0,0 +1,253 @@ + + + 10,13,32, + 13, + 3,9,11,13,14,25,27, + 9,10,13,27,29, + 13,32, + 13,27, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13,29, + 13, + 1,2,9,10,12,13,14,27,31,33, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 34, + 34, + 7, + 13, + 1,9,11,13,26, + 11, + 11, + 23, + 13,23, + 26, + 27, + 27, + 2, + 2, + 24, + 0,2,5,6,9,10,12,13,14,15,16,18,23,24,27,28,31,32,34, + 0,2,9,34, + 24, + 24, + 31, + 31, + 28, + 28, + 5,6, + 14, + 14, + 32, + 0,10,14, + 13,32, + 10, + 13, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 0,13,27,32, + 10, + 19, + 19, + 22, + 0, + 13, + 13, + 10, + 24, + 13, + 13, + 13, + 16,19,30, + 0,2,3,4,15, + 2,10,13,24,27, + 5,6,11, + 4,9,24,25,26,27,28,34, + 5,6,10,13,14,23,24,25,27, + 2,5,6,7,9,10,13,23,24,28,34, + 0,3,4,5,6,7,8, + 28, + 0,5,6,10,16,24,27,29, + 14, + 13, + 9,10,14, + 30,29,34, + 10, + 1,33, + 9,24, + 0, + 1,2,3,9,11,13,15,16,19,24,28,31,32,34, + 9, + 10, + 13, + 4,9,11,17,13,14,24, + 13, + 14,34, + 2,31, + 11, + 1,7,11,20,23,34, + 2,5,6,11,14,18,24,28, + 2,8,23,25,26,27,28, + 0, + 2,9,13,24, + 32, + 0,4,9,10,13,31,34, + 10,13,14,29,34, + 9, + 24, + 11,28, + 10, + 28, + 0, + 12,13,32, + 2,5,6,24, + 13, + 24, + 10,14,19, + 10,11,13,23,27,28, + 13, + 23, + 10,27, + 2, + 2,10, + 23, + 11,27, + 0,4,5,6,8,10,13,14,15,16,19,22,28,29, + 9,27,32, + 14, + 14, + 2, + 2,5,9,17,13,16,19,20,28,30,33, + 10,27,32, + 13,33, + 13, + 13,30, + 11, + 13,14, + 13, + 13, + 9,10,13,14,28,32, + 10,13, + 10, + 9, + 10,32, + 3,6,10,13,24,28,33, + 17,16,20, + 13, + 0,2,3,4,7,9,12,19,22,24,28, + 0,1,3,4,5,6,7,9,10,11,13,14,22,23,24,26,27,28,31, + 10, + 10, + 16, + 2,13,14,18,19,24,31,32, + 0,9,10,13, + 13, + 27, + 10,17, + 16,26,27, + 2, + 0,2,5,6,8,9,10,13,14,23,34, + 13, + 9,28, + 2,14, + 10,14,25,26,32, + 2,10,25,34, + 2,9,10,13,14,20,24,27,31, + 13, + 10,11,34, + 13, + 0,5,6,11,13,14,30, + 2,24, + 3,9,13, + 10,13,31,32, + 13, + 13, + 9,11,22, + 0,1,2,3,4,7,14,24,30, + 23, + 27, + 9,11, + 27, + 21, + 12, + 9,10,13,14,28, + 13, + 27,31, + 0,2,3,4,5,6,7,8,9,10,11,12,13,15,16,19,20,22,24,26,27,30,29,34, + 13,14, + 0,2,4,11,13,31, + 0,13, + 0,2,4,21, + 24, + 10,31, + 10,11,13,19,24,29,31,32, + 5,26, + 26, + 11,16, + 11,13, + 2,17,33, + 0,10, + 10,13,23, + 0,2,4,15,16, + 13,23, + 10,13,23,27, + 14,28, + 26,33, + 0,10,14,27, + 32, + 0, + 2,4,5,6,10,11,12,13,14,15,16,23,27,28,31,34, + 0, + 27, + 2,4,10,19,22,24,25, + 25,26, + 0,2,4,8,9,12,13,14,16,24,27,32,34, + 10,13,14,19,24,32,33, + 13,29,31,32, + 33, + 10, + 1, + 0,4,12,19,21,22,28,32,34, + 5,6,8, + 0, + 24, + 25,26,27, + 0,13, + 4,10,13,14,26,27,30,29,31, + 1,2,3,4,5,9,10,11,13,14,15,16,19,20,23,24,25,26,27,28,30,29,31,32,33, + 10,13,32, + 13, + 13, + 27,31, + 2,9,24, + 30, + 0,10,13, + 10,24, + 2,10,11,16,18,21,28,34, + 2,9,10,11,13,14,27,32,34, + 13, + 10, + 32, + 14,28, + 14, + + diff --git a/doc/salome/gui/GAUSS/whxdata/whfwdata1.xml b/doc/salome/gui/GAUSS/whxdata/whfwdata1.xml new file mode 100644 index 00000000..f7373c97 --- /dev/null +++ b/doc/salome/gui/GAUSS/whxdata/whfwdata1.xml @@ -0,0 +1,245 @@ + + + 13, + 10, + 2,3,9,10,11,13,19,22,23,24,28,29,31,32,34, + 10, + 13, + 0,10,13,14,34, + 13, + 10, + 10,24,25,26,27, + 13,22, + 13,23,27,34, + 13, + 11,13,19, + 2,31, + 0,1,3,4,5,6,8,9,10,12,13,14,15,16,24,28,29,31,32,34, + 2,14,24,31,32, + 9, + 10,13,27, + 17,25,27,28,33, + 10, + 19,22,24, + 21, + 27,31, + 5,6,9,13, + 2,27, + 10, + 9, + 28, + 34, + 2,13,14,25,26,27, + 13,32, + 2,9,10,12,13, + 28, + 9,28, + 10,13,24,34, + 13, + 10,13,24,34, + 10,13, + 5,6,9,12,13,28, + 0,2,4,8,9,10,14,16,24,28, + 13, + 15, + 5,6, + 10,13,28,32, + 17, + 2, + 0,12,15, + 4, + 0,2,24, + 13, + 10,13, + 9,34, + 5,6,8,9,10,14,24, + 33, + 24, + 10, + 13, + 8, + 19, + 0,9,17,13,16,24,28, + 8,9,10,11,13, + 12, + 10, + 28, + 5,10,17,13,20, + 11,26, + 9, + 1,9,20,34, + 13, + 26, + 13,28, + 13, + 0,4,9,34, + 13, + 13, + 9,30,29, + 0,1,7,11,28,34, + 0,2,3,5,6,7,9,10,11,12,13,14,19,22,23,24,26,27,28,29,31,32,34, + 2, + 0,2,3,4,11,12,13,19,22,23,30, + 13,28,31, + 2,13, + 0,10,11,17,13,14,19,23,32, + 13,32, + 31, + 2,14,24,25,26,31,32, + 2,14, + 2,8,10,11,13,14,20,23,24,25,26,27,28,31,32,33,34, + 13, + 13, + 11,27, + 13, + 1,9,10,11,13,20,24,26, + 24,26,31, + 27, + 2,10, + 16,28,30, + 30, + 1,8,10,13,20,28,31,32,33,34, + 2,5,6,9,10,14,15,16,20,21,23,28,32, + 10, + 0,1,5,6,8,10,17,13,14,16,20,21,24,27,28,29,31,32,33,34, + 17,15,16,18,20,28,33, + 11,32, + 10,13, + 0,13,28, + 0,31, + 13,34, + 13, + 10, + 0,11,18,30, + 13,14,18,28, + 4,10,21,28, + 13, + 13, + 4,9,23,34, + 11,16,21,23, + 13,33, + 17, + 13, + 19,22, + 27, + 13,32, + 17,13,16, + 12, + 3, + 13, + 10,14,24,28, + 0, + 9, + 13, + 17,18,20, + 2,9,10,12,13,14, + 2,5,6, + 14, + 0,4,8,11,13,14,24,32, + 14, + 10,13, + 5,6,9,23,32, + 32, + 3, + 10, + 13, + 9,13, + 0, + 14,25,26,27, + 25,27,31, + 24, + 24,27, + 14, + 5,28,34, + 0,14, + 8,10,13,14,16,19,28,32, + 2, + 2,9,24, + 9,10, + 9, + 10,13,14,33, + 24, + 10, + 13, + 21, + 31, + 2, + 24,26,27,34, + 21, + 0,2,4,5,6,9,14,24,28,34, + 19, + 2,9,11, + 10,13,14,25,26,27,31, + 10,13,14,18,25,26,27,31, + 31, + 16, + 13, + 13, + 13,24, + 0, + 13, + 11, + 2,5,6,10,13,14,27,28,32, + 13,32, + 0, + 2,34, + 0,9, + 13, + 9,13,14, + 9,13, + 9,11, + 4,12,13,15,22,30, + 13,27, + 2,10,13, + 10,13,19, + 12, + 13, + 13, + 1,11,13, + 10, + 13, + 13,27,31, + 2,5,9,10,13,23,24, + 23, + 23,24,27, + 10, + 5,6,8,14, + 13, + 13, + 13, + 13, + 26, + 26, + 26, + 13, + 24, + 11,30, + 0,1,2,3,4,5,6,7,9,11,14,15,16,19,22,24,28,30,29,32,34, + 0,4,8,9,10,13,14,15,16,19,28,33, + 0,13, + 31, + 13, + 10,13, + 10, + 0,4,9,11,13,14,16,23,29,34, + 0,27, + 9,11, + 0,2,17,13,14,16,31,32, + 13,14,19, + 0,10,13,15,34, + 3,9,17,15,16,30,29,33, + 13, + 0,1,2,4,7,10,14,18,24,26,28,31, + 0,10,11,13,14,27,28,31, + 2,14,18,25,26,27,31,32, + 10,13,27, + 10,13,32, + 22, + 10, + 13, + 2,9,12,14,19,24,33, + 18,24,25,27,31, + 12,13,24,25,26,27,31, + 13, + + diff --git a/doc/salome/gui/GAUSS/whxdata/whfwdata2.xml b/doc/salome/gui/GAUSS/whxdata/whfwdata2.xml new file mode 100644 index 00000000..71592bf2 --- /dev/null +++ b/doc/salome/gui/GAUSS/whxdata/whfwdata2.xml @@ -0,0 +1,244 @@ + + + 13, + 17, + 13, + 30,32, + 13, + 4,13, + 13, + 0,2,5,6,9,10,13,16,19,22,24,26,27,28,29,33,34, + 4,10,11,14,16, + 2,9,12,16,24,28, + 10, + 0,5,6,9,10,13,14,16,24,27, + 12, + 0,13, + 13, + 13,14, + 13, + 2,10,13,31,34, + 28, + 17, + 14, + 9,13, + 0,2,7,9,10,11,13,14,16,18,23,29,31, + 9,10,13,14,22,30, + 9, + 32, + 2,3,7,9,10,11,13,19,22,24,28, + 10,13, + 0,13, + 32, + 30, + 0,1,2,4,5,6,7,9,13,14,19,30,29,34, + 23, + 13,27, + 2,10,13, + 10,13,24, + 0,10, + 23, + 10, + 23, + 3,5,6,19,22,28,30,29,31,32, + 14, + 25, + 25, + 13, + 25,26,27,31, + 2,4,13,16,28, + 2,13,31,32, + 2,10,13,24,30,29,32,34, + 10, + 13, + 8,14, + 10,13, + 2, + 19, + 23, + 3, + 10, + 10, + 8,13,23, + 2,24, + 30, + 2,5,6,8,10,14,24,28,32,34, + 10, + 13, + 6,10,33, + 11,23, + 13, + 0,1,2,5,6,8,9,10,17,13,14,16,18,20,21,24,25,26,27,28,29,31,32,33,34, + 31, + 12, + 0,1,2,4,5,6,7,9,11,14,15,16,24,28,34, + 2,14,24,31,32, + 13, + 14, + 0,10,13,14, + 0,4,5,6,10,12,13,14,23,28,32,34, + 2,24,30,29,31,32, + 2,10,14,28, + 2,10, + 2,13,27,30,29,31,32, + 3,5,6,9,10,12,13,22,23,28, + 13,16, + 0,4,5,6,9,10,11,13,14,16,24,28,29,34, + 2,10,13, + 22,23,25, + 10,13,14,29, + 2,24,30,29,31,32, + 12,13,16, + 14, + 13, + 13, + 2,9,10,13,16,20,24,26, + 13, + 9,11,13,15, + 9, + 4,9,10,23,24, + 2,5,6,10,19,22,25,27,31, + 34, + 19, + 27, + 0,2,9,13,16,24,34, + 23,27, + 14,32, + 9, + 9, + 33, + 13, + 10, + 13, + 11,13, + 10,13,25,26,27,32, + 13, + 2,9,10,13, + 2,9,24, + 30, + 11,23, + 13, + 2,9,24,28, + 28, + 13, + 13,29, + 28, + 13, + 2,24, + 13, + 9,28, + 5,6, + 2,5,6,13, + 9, + 5,6,17, + 2,8,9,24, + 2,9,19,24, + 13, + 10,13, + 9, + 4,9, + 13, + 23, + 0,13, + 13, + 15, + 13,24,25, + 10,13,27, + 2,24, + 0,1,8,10,12,13,14,16,19,20,28,29,33,34, + 2,24, + 14, + 5,6,16,30, + 0,1,2,4,7,10,13,24,27, + 24, + 10,27, + 2,14,25,26,27,31, + 13, + 19,20, + 14, + 2,3,17,14,15,16,19,20,21,22,24,25,26,27,28,30,29,31,32,33, + 2,24, + 2,9,10,13,14,23,24,27,29,34, + 14, + 23, + 23, + 2,11,19,22, + 13, + 0,8,10,13,14,29, + 2,10,13,18,23,25,27,31, + 0,10, + 27, + 2,6,8,10,11,12,13,24,28,32, + 32, + 0,5,10,11,17,13, + 13,18,20,32, + 2,13, + 23, + 5,6,10,13,19,23,24,33, + 0,2,4,8,11,13,14,22,24,28,32,34, + 2,3,4,5,6,10,11,14,24,28,34, + 10,14, + 23, + 19,22,23,24,25,27,30, + 9,10,13,14, + 2, + 11, + 9,13,28, + 13, + 0,23, + 10,11,13,14,20, + 2, + 9, + 5,6,13, + 13,16, + 2,13,33, + 26, + 10,13, + 5,6,28, + 2,14, + 14, + 10,13, + 9, + 9, + 2, + 13, + 9,33, + 2,14, + 9,11,13,23,30,32,33, + 13,33, + 13,18,27,31, + 11,25,27,31, + 11, + 2,14,34, + 0,13,16, + 6,10,13,33, + 10,13,32, + 0,13,28, + 2,9,10,17,13,15,19,20,24,26,28,31,34, + 27, + 12,23, + 2,23, + 2,13,31, + 12, + 11,23, + 2,19,24, + 19, + 12,13,22,32, + 2,7,9,12,19,22,24,30, + 0,4,9, + 13, + 28, + 0,17,25,26,27, + 9, + 9, + 29,34, + 27, + 13, + 0,2,8,13,27, + 13, + 10,13, + 2, + 13, + 8,23, + + diff --git a/doc/salome/gui/GAUSS/whxdata/whfwdata3.xml b/doc/salome/gui/GAUSS/whxdata/whfwdata3.xml new file mode 100644 index 00000000..121414a9 --- /dev/null +++ b/doc/salome/gui/GAUSS/whxdata/whfwdata3.xml @@ -0,0 +1,88 @@ + + + 13, + 13, + 24, + 13, + 13, + 24,27, + 0,10,13,24, + 23, + 13, + 10,13,23, + 13, + 5,6,13,14,25,27, + 10, + 27, + 0,9,10,12,13,14,19,23,24,25,27,28,34, + 1,5,6,11,20,24, + 5,6,9,14,27,30, + 0,4,5,6,10,15,16,23, + 2,10,32, + 13, + 32, + 2,9, + 0,10,25,26,31, + 9,13,32, + 10,14,32, + 0,2,4,7,12,19,24,34, + 9, + 13, + 27, + 0,2,9,10,11,13,14, + 18,31, + 13, + 30, + 32, + 2,10,13, + 0,31, + 4,10,13, + 9,13, + 8,14, + 9, + 10,13,22,27, + 6,10,12,13,14,19,24, + 0,1,2,3,4,5,6,8,9,10,11,13,14,15,16,18,19,21,22,23,24,25,26,27,28,29,31,32,34, + 30, + 10, + 3,13, + 12, + 0,9,10,13,14,31,32,34, + 10,11,13,24, + 0,13, + 1, + 13, + 13, + 13, + 14,23, + 0,1,2,5,6,9,10,12,13,14,15,16,18,21,23,24,27,28,32,34, + 10,13,19, + 0,3,17,13,14,15,16,25,27,30,29,31,32,33,34, + 16, + 0, + 28, + 13,23,31, + 32, + 32, + 31, + 11,23, + 2,13,14,15,16,19,20,23,24,25,27,34, + 13, + 13, + 0, + 0,13, + 9,13, + 0,1,2,5,6,9,10,17,13,16,19,20,23,24,25,26,27,28,29,32,34, + 8,10,14,32, + 9,14, + 10,12,13,14,15,18,19,22,24,25,27,31, + 2,8,14,19,24, + 17, + 13, + 13,14,24,27, + 13,27, + 4,12,14, + 27, + 13,14,25,26,27,31,32, + + diff --git a/doc/salome/gui/GAUSS/whxdata/whglo.xml b/doc/salome/gui/GAUSS/whxdata/whglo.xml new file mode 100644 index 00000000..3866c5bd --- /dev/null +++ b/doc/salome/gui/GAUSS/whxdata/whglo.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/doc/salome/gui/GAUSS/whxdata/whidx.xml b/doc/salome/gui/GAUSS/whxdata/whidx.xml new file mode 100644 index 00000000..ac66bb96 --- /dev/null +++ b/doc/salome/gui/GAUSS/whxdata/whidx.xml @@ -0,0 +1,4 @@ + + + + diff --git a/doc/salome/gui/GAUSS/whxdata/whtdata0.xml b/doc/salome/gui/GAUSS/whxdata/whtdata0.xml new file mode 100644 index 00000000..94002f02 --- /dev/null +++ b/doc/salome/gui/GAUSS/whxdata/whtdata0.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/salome/gui/GAUSS/whxdata/whtoc.xml b/doc/salome/gui/GAUSS/whxdata/whtoc.xml new file mode 100644 index 00000000..a271ba7c --- /dev/null +++ b/doc/salome/gui/GAUSS/whxdata/whtoc.xml @@ -0,0 +1,4 @@ + + + + diff --git a/doc/salome/gui/Makefile.in b/doc/salome/gui/Makefile.in index e03160f1..805d892e 100644 --- a/doc/salome/gui/Makefile.in +++ b/doc/salome/gui/Makefile.in @@ -16,6 +16,7 @@ VPATH=.:@srcdir@ docs: cp -fr $(srcdir)/VISU ./ + cp -fr $(srcdir)/GAUSS ./ -find $(PWD) -name CVS -exec rm -rf {} \; clean: @@ -23,11 +24,14 @@ clean: distclean: clean rm -fr VISU + rm -fr GAUSS install: mkdir -p $(docdir)/gui cp -rf VISU $(docdir)/gui + cp -rf GAUSS $(docdir)/gui -find $(PWD) -name CVS -exec rm -rf {} \; uninstall: rm -rf $(docdir)/gui/VISU + rm -rf $(docdir)/gui/GAUSS diff --git a/doc/salome/tui/VISU/doxyfile b/doc/salome/tui/VISU/doxyfile index e4d7a67d..41139fc8 100755 --- a/doc/salome/tui/VISU/doxyfile +++ b/doc/salome/tui/VISU/doxyfile @@ -1,73 +1,89 @@ -# Doxyfile 1.3-rc1 +# Doxyfile 1.3.7 #--------------------------------------------------------------------------- -# General configuration options +# Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = "SALOME - VISU - v.3.1.0" PROJECT_NUMBER = id#1.1 OUTPUT_DIRECTORY = ../ +CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = NO +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 5 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = YES +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- EXTRACT_ALL = YES EXTRACT_PRIVATE = YES EXTRACT_STATIC = YES EXTRACT_LOCAL_CLASSES = YES -HIDE_UNDOC_MEMBERS = NO -HIDE_UNDOC_CLASSES = NO +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES 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 +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO 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_IF_DOC_ERROR = YES WARN_FORMAT = "$file:$line: $text" WARN_LOGFILE = log.txt + #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- -INPUT = ../../../share/salome/idl/VISU_Gen.idl -FILE_PATTERNS = -RECURSIVE = NO +INPUT = ../../../share/salome/src \ + ../../../share/salome/idl +FILE_PATTERNS = *.idl *.h *.hh *.hxx *.c *.cc *.cxx *.ixx *.jxx +RECURSIVE = YES EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = EXAMPLE_PATH = EXAMPLE_PATTERNS = -EXAMPLE_RECURSIVE = NO +EXAMPLE_RECURSIVE = YES IMAGE_PATH = sources/ INPUT_FILTER = FILTER_SOURCE_FILES = YES + #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- @@ -76,12 +92,15 @@ INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = NO REFERENCES_RELATION = YES +VERBATIM_HEADERS = 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 #--------------------------------------------------------------------------- @@ -102,6 +121,7 @@ DISABLE_INDEX = YES ENUM_VALUES_PER_LINE = 4 GENERATE_TREEVIEW = YES TREEVIEW_WIDTH = 250 + #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- @@ -116,6 +136,8 @@ LATEX_HEADER = PDF_HYPERLINKS = NO USE_PDFLATEX = NO LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO + #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- @@ -125,6 +147,7 @@ COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = + #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- @@ -132,16 +155,21 @@ GENERATE_MAN = NO MAN_OUTPUT = man MAN_EXTENSION = .3 MAN_LINKS = NO + #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = NO +XML_OUTPUT = xml XML_SCHEMA = XML_DTD = +XML_PROGRAMLISTING = YES + #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO + #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- @@ -149,6 +177,7 @@ GENERATE_PERLMOD = NO PERLMOD_LATEX = NO PERLMOD_PRETTY = YES PERLMOD_MAKEVAR_PREFIX = + #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- @@ -161,14 +190,16 @@ INCLUDE_FILE_PATTERNS = PREDEFINED = EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = NO + #--------------------------------------------------------------------------- -# Configuration::addtions related to external references +# Configuration::additions related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = ALLEXTERNALS = NO EXTERNAL_GROUPS = YES PERL_PATH = /usr/bin/perl + #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- @@ -177,24 +208,22 @@ HIDE_UNDOC_RELATIONS = NO HAVE_DOT = YES CLASS_GRAPH = YES COLLABORATION_GRAPH = NO +UML_LOOK = NO TEMPLATE_RELATIONS = YES INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = NO +CALL_GRAPH = NO GRAPHICAL_HIERARCHY = YES DOT_IMAGE_FORMAT = jpg DOT_PATH = DOTFILE_DIRS = MAX_DOT_GRAPH_WIDTH = 1024 MAX_DOT_GRAPH_HEIGHT = 1200 +MAX_DOT_GRAPH_DEPTH = 0 GENERATE_LEGEND = NO DOT_CLEANUP = YES + #--------------------------------------------------------------------------- -# Configuration::addtions related to the search engine +# Configuration::additions 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/idl/VISU_Gen.idl b/idl/VISU_Gen.idl index 480ae6e3..79237353 100644 --- a/idl/VISU_Gen.idl +++ b/idl/VISU_Gen.idl @@ -59,6 +59,7 @@ module VISU { TSCALARMAP, /*!< Scalarmap 3D presentation object */ TISOSURFACE, /*!< Iso surface 3D presentation object */ TDEFORMEDSHAPE, /*!< Deformed shape 3D presentation object */ + TGAUSSPOINTS, /*!< Gauss Points 3D presentation object */ TPLOT3D, /*!< Plot3D 3D presentation object */ TCUTPLANES, /*!< Cut planes 3D presentation object */ TCUTLINES, /*!< Cut lines 3D presentation object */ @@ -70,6 +71,7 @@ module VISU { TXYPLOT, /*!< 2D XY plot consisting of one or several curve lines */ TTABLEVIEW, /*!< Table view is used for displaying data tables */ TVIEW3D, /*!< 3D view is used for displaying 3D graphical presentations */ + TGAUSSVIEW, /*!< 3D view is used for displaying Gauss Points graphical presentations */ TENTITY, /*!< An element composing a mesh: node, edge, face or cell */ TFAMILY, /*!< The whole mesh can be divided into one or several submeshes, called families, which are defined by the user. Each family in its turn is composed of entities of a definite type. */ TGROUP, /*!< A group of families */ @@ -364,8 +366,9 @@ module VISU { PresentationType GetPresentationType(); }; + //------------------------------------------------------- - /*! \brief Interface of the %Scalar Map + /*! \brief Basic Interface for the %Colored 3D Presentations * * This interface is responsable for coloring of 3D field presentations * according the scalar values applied to different cells. @@ -373,7 +376,7 @@ module VISU { * bar is displayed along with each colored field presentation and serves for * consulting the correspondance between colors and data values. */ - interface ScalarMap : Prs3d { + interface ColoredPrs3d : Prs3d { /*! Sets the method of coloring of the elements composing a 3D presentation. */ void SetScalarMode(in long theScalarMode); @@ -382,24 +385,6 @@ module VISU { */ long GetScalarMode(); - /*! - * Sets the type of scaling of the values reflected by the scalar bar. - * \param theScaling The value of this parameter is taken from the Scaling enumeration. - */ - void SetScaling(in Scaling theScaling); - - /*! - * Gets the type of scaling of the values reflected by this presentation. - */ - Scaling GetScaling(); - - /*! - * Sets scalar range - min and max boundaries of the scalar bar. - * \param theMin Min boundary of the scalar bar. - * \param theMax Max boundary of the scalar bar. - */ - void SetRange(in double theMin, in double theMax); - /*! * Gets the min boundary of the scalar bar. */ @@ -410,24 +395,6 @@ module VISU { */ double GetMax(); - /*! %Orientation of the scalar bar. */ - enum Orientation { - HORIZONTAL, /*!< Horizontal orientation of the scalar bar.*/ - VERTICAL /*!< Vertical orientation of the scalar bar.*/ - }; - - /*! - * Sets the type of orientation of the scalar bar. - * \param theOrientation This parameter defines the orientation of the scalar bar. - * It is taken from the Orientaton enumeration. - */ - void SetBarOrientation(in Orientation theOrientation); - - /*! - * Gets the type of orientation of the scalar bar. - */ - Orientation GetBarOrientation(); - /*! \brief Position of the scalar bar. * * Sets the position of the scalar bar origin on the screen. @@ -505,7 +472,63 @@ module VISU { string GetTitle(); }; + //------------------------------------------------------- + /*! \brief Interface of the %Scalar Map + * + * This interface is responsable for coloring of 3D field presentations + * according the scalar values applied to different cells. + * As well it contains presentation parameters of the scalar bar. The scalar + * bar is displayed along with each colored field presentation and serves for + * consulting the correspondance between colors and data values. + */ + interface ScalarMap : ColoredPrs3d { + /*! + * Sets the type of scaling of the values reflected by the scalar bar. + * \param theScaling The value of this parameter is taken from the Scaling enumeration. + */ + void SetScaling(in Scaling theScaling); + + /*! + * Gets the type of scaling of the values reflected by this presentation. + */ + Scaling GetScaling(); + + /*! + * Sets scalar range - min and max boundaries of the scalar bar. + * \param theMin Min boundary of the scalar bar. + * \param theMax Max boundary of the scalar bar. + */ + void SetRange(in double theMin, in double theMax); + + /*! %Orientation of the scalar bar (to provide backward compatibility). */ + enum Orientation { + HORIZONTAL, /*!< Horizontal orientation of the scalar bar.*/ + VERTICAL /*!< Vertical orientation of the scalar bar.*/ + }; + + /*! + * Sets the type of orientation of the scalar bar (to provide backward compatibility). + * \param theOrientation This parameter defines the orientation of the scalar bar. + * It is taken from the Orientaton enumeration. + */ + void SetBarOrientation(in Orientation theOrientation); + + /*! + * Gets the type of orientation of the scalar bar (to provide backward compatibility). + */ + Orientation GetBarOrientation(); + }; + + //------------------------------------------------------- + /*! \brief Gauss Points presentation interface + * + * Presentation parameters of the Gauss Points presentation. + */ + //------------------------------------------------------- + interface GaussPoints : ColoredPrs3d { + }; + /*! \brief Deformed shape presentation interface * * Presentation parameters of the deformed shape presentation. @@ -1127,7 +1150,7 @@ module VISU { /*! */ - ScalarMap getPresentation(in long theField, in long theFrame); + ColoredPrs3d getPresentation(in long theField, in long theFrame); /*! Sets the type of presentation (vectors, deformed shape etc.) * which will be generated by the method generatePresentations. @@ -1237,10 +1260,33 @@ module VISU { * for further construction of graphical presentations. */ interface Result : RemovableObject, SALOME::GenericObj { - //interface Result : Base{ /*! Reads all data from the corresponding sources. By default the data is loaded on demand. */ boolean BuildAll(); + + /*! Start to parse the source MED file and publish all its entities into the study*/ + boolean Build(in boolean theIsBuildAll, in boolean theIsAtOnce); + + /*! Allow to check is all requested MED entites already loaded or not */ + boolean IsDone(); + + /*! Allow to check is corresponding MED entites already loaded or not */ + boolean IsEntitiesDone(); + + /*! Choose to parse MED fields and perform global min / max on the MED timestamps.*/ + void SetBuildFields(in boolean theIsBuildFields, in boolean theIsCalculateMinMax); + + /*! Allow to check is corresponding MED fields already loaded or not */ + boolean IsFieldsDone(); + + /*! Choose to parse MED groups.*/ + void SetBuildGroups(in boolean theIsBuildGroups); + + /*! Allow to check is corresponding MED groups and families already loaded or not */ + boolean IsGroupsDone(); + + /*! Allow to check is min / max calculation over field's components already perfrormed or not */ + boolean IsMinMaxDone(); }; //------------------------------------------------------- @@ -1285,6 +1331,13 @@ module VISU { */ Result ImportFile(in string theFileName); + /*! + * Create result and initialize its with the file. The access to this file will be conserved outside of the application. + * \param theFileName String parameter defining the name of the file + * from which the data will be imported. + */ + Result CreateResult(in string theFileName); + /*! * Imports data from a file. The access to this file will closed. * \param theFileName String parameter defining the name of the file @@ -1340,6 +1393,18 @@ module VISU { in Entity theEntity, in string theFieldName, in double theIteration); + /*! + * Creates a Gauss Points presentation. + * \param theResult Data generated in other sources. (MED object or file) + * \param theMeshName One of the meshes presented in MED file + * \param theEntity Type of entity where the field is defined + * \param theFieldName Group of data attributed to the %MESH. The data can be scalar or vector. + * \param theIteration Number of iteration on the field + */ + GaussPoints GaussPointsOnField(in Result theResult, in string theMeshName, + in Entity theEntity, in string theFieldName, + in double theIteration); + /*! * Creates a deformed shape presentation. * \param theResult Data generated in other sources. (MED object or file) diff --git a/resources/Vertex_Program_ARB.txt b/resources/Vertex_Program_ARB.txt new file mode 100755 index 00000000..ce6147ff --- /dev/null +++ b/resources/Vertex_Program_ARB.txt @@ -0,0 +1,21 @@ +attribute float mode; +attribute float clampSize; +attribute float geomSize; +attribute float minSize; +attribute float maxSize; +attribute float magnification; + +void main() +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + + gl_FrontColor = gl_Color; + + float size; + if( mode == 0 ) // Results + size = minSize + ( maxSize - minSize ) * ( 1 - gl_Color.w / 241.0f ); + else // Geometry and Uniform colored outside cursor + size = geomSize; + + gl_PointSize = clamp( magnification * size * gl_ProjectionMatrix[1].y, 2.0, clampSize ); +} diff --git a/resources/Visu_PlaneSegmentation.png b/resources/Visu_PlaneSegmentation.png new file mode 100644 index 0000000000000000000000000000000000000000..eb538d005eea2f26a19d9c2ce4e95d48846627cc GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE9TgdT8-ee7X4 zVWP!;fpmp421-1t=MMaLSUe$fRmDsXgCD#p2URcH{1x(IxnlGpu|x2!Q<8~Lu7YY? zqJ+oF#5wV0iabZsBXXz7arK@y5MWqdo3(?7ry=mn9UVX0!z?T;8s6 literal 0 HcmV?d00001 diff --git a/resources/Visu_SphereSegmentation.png b/resources/Visu_SphereSegmentation.png new file mode 100644 index 0000000000000000000000000000000000000000..e27ca1ca0a8100b4c5a86f01c927e020c1ec4c26 GIT binary patch literal 893 zcmV-@1A_dCP)jELO@UtO~!51#v-*)N!HM0GISH#>FXhHHsfSy-{ph(fA9bO zzyEvh8-XNsIkwe9>W!vI!DoPvfZ2MZIT?M|71&bXQVg6`->#&WWGoQ@$f!6C3@L(0 z)g&+o+;ME{Ysa>(I<_?t+dG?xhYFR7=}3)ZTYbQf!23YF-OnA{dJHt`jpjw*Vp6t9 zdg$0z9=HdT07}Edl!k`|z`qY4%FgCyl=@x0(flN~uLVr&Dc<}7lnTWn9R(o{P$`dGo3`gMKQ||V&+3ilSII+()@z!kai&s9y(fZ$0um|C zR4Uw@pC=5%iA&eK9%06@EvXCz=*#8v=(?&SrASi;pzAuhd>){Xb`Pgi^yRZ>NnMhd zGRa{9mHPm|+;JDp9rwS8@V1IS2SLED@29sckV3h>>-z*j0Pwwn&jZEYp_WW)LLV7a&X_dDJUa28m747FQtyJ*mxgHOz@Zf766_D`VBg! Trk~Y700000NkvXXu0mjfDBPmw literal 0 HcmV?d00001 diff --git a/resources/Visu_gauss_points.png b/resources/Visu_gauss_points.png new file mode 100644 index 0000000000000000000000000000000000000000..3410cce8ff583dbd739cf8c025cf721b29449ebc GIT binary patch literal 689 zcmV;i0#5yjP)+32&g(k!GLXJ-c=z7#d0)Qgo_nvt@L!Pz zFuytpl{%W>F#u8wkz#=q?`3$6~-k;Ea=V4e*TuWvH|}+yUxNavj*wd%88B07erk9JO3W$xFa1D^$1R zrL!*+AC!Z6tu?*x*2%qGW_a^$EAKndOb~5a?$7B+I)~O3 zc;5auijwva-~;gJ>h?sXxKTtz;--Ky1Heh^c-x?MW6tv`L=nJU;JjU}0#9$5*-C%4 zN!SSS@g0ZC+yU;{*%O0$7CQu@REo`fp4$Bf6s8LMo!Xh8|7$_y-Ze$45kvv>+nMO>q&F1GLuYJ&mM=!c^fR@EAA+)POl)-DzoOluCx#SwpF0 zlK52&TTZOH{9hcJo4^%d3s`>hdSzEcn7lEGU2Dfk`(19wZF@X^0M)P&?)vyGu4c=1 z=N(t?P(+Q$?e3f-(%M7*IuaJ^!1Y64?1cAvB`60gad&%sL`2!GKNP(-?sKn{O^Pl)S*0|);9XJ~0+_z$EQ z7#`Knt^-nxB|(0{3=Yq3q=7g|-tI0e{TVj{fgG_C*NBqf{Irtt#G+J&^vpD)g1mGE zBRvB>L)*B089)``o-U3d6?1&M4)PvQ;5l+fi(A2vp(}!6Dx*Nk|Cv%5s~;VoE6>K# zQGEW5oA9EG!rjU&^ViLso3`2fSZHEMajgTe~DWM4fqRCMQ literal 0 HcmV?d00001 diff --git a/resources/Visu_recording_pause.png b/resources/Visu_recording_pause.png new file mode 100644 index 0000000000000000000000000000000000000000..6f37d3fef535c9693602f58a529c8296056ddb57 GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#Dwi~yy2aL`GrfR9vL&t&CC>S|xv6<249-QVi6yBi3gww4844j8sS56%z5(x3 zRP%regFIavLo7}w|M~ylo>{e_v(d@m1KWlL+y+KQhnS!K|Np;d$B_@a7A)U8w-E>y zZeRS^-fm-}P)GBXhDoQq79H8JtQn}tc#*rPnPJ5)$zL-$8S>YwbnZFU>I^iU!PC{x JWt~$(69Cs>O^g5l literal 0 HcmV?d00001 diff --git a/resources/Visu_recording_play.png b/resources/Visu_recording_play.png new file mode 100644 index 0000000000000000000000000000000000000000..62b82247bed68f9c44fbba53f9428dc5490d10d5 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#Dwi~yinyue_X|KF*%H@?66gHf+|;}h2Ir#G#FEq$h4Rdj426)4R0VfW-+=ci zs(C<#Wu7jMAr`0aPIlyKFc4r?uZ!gW)l{`2zmMH@%Qi2~IG&b6n^bN(q|O#AF?m$Y z=$YsDL1j^K=TTQ?rrTBi4|u*;o?Ec)NRP+d28Ff>9kRdF5ul>S#pbHp0UHx3vIVCg!0G+^8bN~PV literal 0 HcmV?d00001 diff --git a/resources/Visu_recording_start.png b/resources/Visu_recording_start.png new file mode 100644 index 0000000000000000000000000000000000000000..aef1bb2ffea623e18312a14028270b9a24eed0ad GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#Dwi~yl9)(J!U3R=Y>8_`iF1B#Zfaf$gL6@8Vo7R>LV0FMhC)b2s)D35R21CgB-aIDDZfv*xx%Uf2Fy)xJ+nnSmKF@1?Uh?eHimFBtef)XB-elL4YtYIan-R!d1)W!yjvW2@8+4}Xy>mc45`LD>uooQMw;rg zcAZ!i8Dx6V`@T)e)f2}>(=tC796RCoV7kKHi9OpI*DROV1#|_2r>mdKI;Vst0H8Nm AMgRZ+ literal 0 HcmV?d00001 diff --git a/resources/Visu_recording_stop.png b/resources/Visu_recording_stop.png new file mode 100644 index 0000000000000000000000000000000000000000..c6134cced7994800058259ab27fc5a905bfa9c1d GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#Dwi~y8b=rVjO9Qf*%H@?66gHf+|;}h2Ir#G#FEq$h4Rdj426)4R0VfW-+=ci zs(C<#Zk{fVAr`0aPB!E^V8Fxdzp(%OCG+_24wnx)PnOBJsL<20IA~$ulm89bCX;-; y13yND-A{=Pv-e2$>PR0h+>A;z2j8{3+6NCeEer(F&-k-^i|&t;ucLK6U(eLyz= literal 0 HcmV?d00001 diff --git a/resources/Visu_vvtk_switch.png b/resources/Visu_vvtk_switch.png new file mode 100644 index 0000000000000000000000000000000000000000..b0a9c807e016446374173db06507c4d237312483 GIT binary patch literal 782 zcmV+p1M&QcP)_#cKcn03CEi zSad^gZEa<4bO1wgWnpw>WFU8GbZ8({Xk{QrNlj4iWF>9@00MGJL_t&-)76tdOB_KM z#(#6Spd0VpfEGCmvA8QN6zl}WN))tA<0mj5z%P}`P7WeSG(`kO1uZN@(GX77^KLJ< zx3jZ5JCnlPq48hRC2uwJ!26p&&-226S+}>hc5Q9Vo}8T6zwH&>g|&CRQc8PpaKPc= zAtNIr3=a>Zl%iIvQ7)I6nVAuP3_LwOwU?Kd%+Ai@x-P9&3&+WkWrj4>?CtFVu(Y)F z2r9&#l)En;9UZZ_xQOezB#Gkco6qO3mwd0?5Hy=qDiw?|?Ck73`xOs>j^h9jh9N4J z1nrcMpDfic4UCDoxw&C_dYU+nIX^$QuL8T*w${?=L=3*kh?5o$DI8 z&-3s+k9VaJ0E~e+mObFu*cjW}+bE@MUtgbi^2uqMJ{bh9Goq-2Qi@zIhcO1NHRI#s z?C$QqZp!b6NGXw0qP0eAO&EsM>vde$LoB+2u@iHQl0kB2qAD?m;U~Klu|@dL=Xf7K|mOWWLbvRnnI!Q@+`O8ZM(j{&fMG_tyT+T3|W?; zltM~Lnx;68gAjuK{e4zfR~Z@_65R|x0s>rIT-a*0N~KaEpU-Cyi6GbtRNW7vj43o`fE0qdhgTdh2?X5XBN25`v(=m)oQT!+f zf+q}zs36Gld85%74u_Uy&FAyQ^TM|6?{|0IZbz-Dx%asM!?>y_ib|)`)oK;hCX>l( zwc2fW`~7~iacuhmT_6lzc%F0d&;~IV7uwC&o7wE%aW;p;;dnfPvRFKurU{XyY2kP9A27NO-U+;!eJNh_xqE{B$8>j+hcS5^!Nmd zvvHQor8Tu+-!Ke>91OB99&e1MSS;%LmtL<20hTqrpUvO}_8~_3q+l*2MR|CVBxCWo zRF-sIN0;kZQ&mmVkQhQn6d0u!zSjZ=bm2G- g(}aD%5Hc{E!Cra}L^+P|HD1GtoxMF0Q* literal 0 HcmV?d00001 diff --git a/src/CONVERTOR/Makefile.in b/src/CONVERTOR/Makefile.in index 8805f3d6..59057158 100644 --- a/src/CONVERTOR/Makefile.in +++ b/src/CONVERTOR/Makefile.in @@ -32,12 +32,25 @@ VPATH=.:@srcdir@ @COMMENCE@ -EXPORT_HEADERS = VISU_Convertor.hxx VISU_Convertor_impl.hxx VISU_ConvertorUtils.hxx VISU_ExtractUnstructuredGrid.hxx +EXPORT_HEADERS = \ + VISU_IDMapper.hxx \ + VISU_Convertor.hxx \ + VISU_ConvertorDef.hxx \ + VISU_Convertor_impl.hxx \ + VISU_ConvertorUtils.hxx \ + VISU_MergeFilter.hxx \ + VISU_ExtractUnstructuredGrid.hxx # Libraries targets LIB = libVisuConvertor.la -LIB_SRC = VISU_Convertor.cxx VISU_Convertor_impl.cxx VISU_ConvertorUtils.cxx VISU_ExtractUnstructuredGrid.cxx \ +LIB_SRC = \ + VISU_IDMapper.cxx \ + VISU_Convertor.cxx \ + VISU_Convertor_impl.cxx \ + VISU_ConvertorUtils.cxx \ + VISU_ExtractUnstructuredGrid.cxx \ + VISU_MergeFilter.cxx \ VISU_MedConvertor.cxx # Executables targets @@ -45,7 +58,16 @@ BIN = VISUConvertor BIN_SRC = CPPFLAGS+= -ftemplate-depth-32 $(VTK_INCLUDES) $(HDF5_INCLUDES) $(QT_INCLUDES) \ - -I${KERNEL_ROOT_DIR}/include/salome -I${MED_ROOT_DIR}/include/salome $(BOOST_CPPFLAGS) -LDFLAGS+= $(VTK_LIBS) $(QT_LIBS) -L${MED_ROOT_DIR}/lib/salome -lMEDWrapper -LDFLAGSFORBIN=$(LDFLAGS) $(HDF5_LIBS) -lMEDWrapper_V2_2 -lMEDWrapper_V2_1 -lMEDWrapperBase + -I${KERNEL_ROOT_DIR}/include/salome \ + -I${MED_ROOT_DIR}/include/salome \ + -I${GUI_ROOT_DIR}/include/salome \ + $(BOOST_CPPFLAGS) + +LDFLAGS+= $(VTK_LIBS) $(QT_LIBS) \ + $(BOOST_LIBS) -lboost_thread-mt \ + -L${MED_ROOT_DIR}/lib/salome -lMEDWrapper \ + -L${GUI_ROOT_DIR}/lib/salome -lVTKViewer + +LDFLAGSFORBIN=$(LDFLAGS) -lMEDWrapper_V2_2 -lMEDWrapper_V2_1 -lMEDWrapperBase -lmed_V2_1 -lVTKViewer -lsuit -lqtx + @CONCLUDE@ diff --git a/src/CONVERTOR/VISUConvertor.cxx b/src/CONVERTOR/VISUConvertor.cxx index c81e39e0..273b62a8 100644 --- a/src/CONVERTOR/VISUConvertor.cxx +++ b/src/CONVERTOR/VISUConvertor.cxx @@ -34,6 +34,9 @@ #include #include #include +#include "VISU_Convertor_impl.hxx" + +#include using namespace std; @@ -43,19 +46,33 @@ static int MYDEBUG = 1; static int MYDEBUG = 0; #endif -void parseFile(const char* theFileName) { - //try{ +//#define _DEXCEPT_ + +typedef vtkUnstructuredGrid TOutput; + +void parseFile(const char* theFileName) +{ +#ifndef _DEXCEPT_ + try{ +#endif MSG(MYDEBUG,"'"< aCon(CreateConvertor(theFileName)); //aCon->GetSize(); //return; + aCon->BuildEntities(); + aCon->BuildFields(); + aCon->BuildMinMax(); const VISU::TMeshMap& aMeshMap = aCon->GetMeshMap(); + //return; VISU::TMeshMap::const_iterator aMeshMapIter = aMeshMap.begin(); for(; aMeshMapIter != aMeshMap.end(); aMeshMapIter++){ + //continue; + const string& aMeshName = aMeshMapIter->first; const VISU::PMesh& aMesh = aMeshMapIter->second; const VISU::TMeshOnEntityMap& aMeshOnEntityMap = aMesh->myMeshOnEntityMap; VISU::TMeshOnEntityMap::const_iterator aMeshOnEntityMapIter; + //Import fields aMeshOnEntityMapIter = aMeshOnEntityMap.begin(); for(; aMeshOnEntityMapIter != aMeshOnEntityMap.end(); aMeshOnEntityMapIter++){ @@ -70,12 +87,36 @@ void parseFile(const char* theFileName) { VISU::TValField::const_iterator aValFieldIter = aValField.begin(); for(; aValFieldIter != aValField.end(); aValFieldIter++){ int aTimeStamp = aValFieldIter->first; - aCon->GetTimeStampOnMesh(aMeshName,anEntity,aFieldName,aTimeStamp); + + if(anEntity != VISU::NODE_ENTITY){ + VISU::PGaussPtsIDMapper aGaussMesh = + aCon->GetTimeStampOnGaussPts(aMeshName,anEntity,aFieldName,aTimeStamp); + VISU::TVTKOutput* aDataSet = aGaussMesh->GetVTKOutput(); + /* + int aNbCells = aDataSet->GetNumberOfCells(); + for(int anCellId = 0; anCellId < aNbCells; anCellId++){ + VISU::TGaussPointID anObjID = aGaussMesh->GetObjID(anCellId); + cout<GetTimeStampOnMesh(aMeshName,anEntity,aFieldName,aTimeStamp); + VISU::TVTKOutput* aDataSet = anIDMapper->GetVTKOutput(); + /* + int aNbCells = aDataSet->GetNumberOfCells(); + for(int anCellId = 0; anCellId < aNbCells; anCellId++){ + int anObjID = anIDMapper->GetElemObjID(anCellId); + int aVTKID = anIDMapper->GetElemVTKID(anObjID); + cout<myGroupMap; VISU::TGroupMap::const_iterator aGroupMapIter = aGroupMap.begin(); @@ -83,6 +124,28 @@ void parseFile(const char* theFileName) { const string& aGroupName = aGroupMapIter->first; aCon->GetMeshOnGroup(aMeshName,aGroupName); } + + //continue; + + //Import mesh on entity + aMeshOnEntityMapIter = aMeshOnEntityMap.begin(); + for(; aMeshOnEntityMapIter != aMeshOnEntityMap.end(); aMeshOnEntityMapIter++){ + const VISU::TEntity& anEntity = aMeshOnEntityMapIter->first; + VISU::PIDMapper anIDMapper = aCon->GetMeshOnEntity(aMeshName,anEntity); + VISU::TVTKOutput* aDataSet = anIDMapper->GetVTKOutput(); + { + /* + int aNbCells, anCellId, anObjID, aVTKID; + aNbCells = aDataSet->GetNumberOfCells(); + for(anCellId = 0; anCellId < aNbCells; anCellId++){ + anObjID = anIDMapper->GetElemObjID(anCellId); + aVTKID = anIDMapper->GetElemVTKID(anObjID); + cout<first; - aCon->GetMeshOnEntity(aMeshName,anEntity,aFamilyName); + aCon->GetFamilyOnEntity(aMeshName,anEntity,aFamilyName); } } - //Import mesh on entity - aMeshOnEntityMapIter = aMeshOnEntityMap.begin(); - for(; aMeshOnEntityMapIter != aMeshOnEntityMap.end(); aMeshOnEntityMapIter++){ - const VISU::TEntity& anEntity = aMeshOnEntityMapIter->first; - aCon->GetMeshOnEntity(aMeshName,anEntity); - } } + OK: MSG(MYDEBUG,"OK"); -// }catch(std::exception& exc){ -// MSG(MYDEBUG,"Follow exception was occured in file:"< 1){ - QFileInfo fi(argv[1]); - for(int i = 0; i < 1; i++){ - if(fi.exists()){ - if(fi.isDir()){ - QDir aDir(fi.absFilePath()); - QStringList aStringList = aDir.entryList("*.med",QDir::Files); - int jEnd = aStringList.count(); - for(int j = 0; j < jEnd; j++){ - parseFile(aDir.filePath(aStringList[j]).latin1()); - } - }else{ - parseFile(argv[1]); + if(argc > 1){ + QFileInfo fi(argv[1]); + for(int i = 0; i < 1; i++){ + if(fi.exists()){ + if(fi.isDir()){ + QDir aDir(fi.absFilePath()); + QStringList aStringList = aDir.entryList("*.med",QDir::Files); + int jEnd = aStringList.count(); + for(int j = 0; j < jEnd; j++){ + parseFile(aDir.filePath(aStringList[j]).latin1()); } + }else{ + parseFile(argv[1]); } } - return 0; } - //}catch(std::exception& exc){ - // MSG(MYDEBUG,"Follow exception was occured :\n"< TMeshOnEntity::GetCellsDims(const string& theFamilyName) const - { - if(theFamilyName == "") - return make_pair(myNbCells,myCellsSize); - TFamilyMap::const_iterator aFamilyMapIter = myFamilyMap.find(theFamilyName); - if(aFamilyMapIter == myFamilyMap.end()) - throw std::runtime_error("GetCellsDims >> There is no family on the mesh with entity !!!"); - const PFamily& aFamily = aFamilyMapIter->second; - return make_pair(aFamily->myNbCells,aFamily->myCellsSize); - } - - const PField TMesh::GetField(const string& theFieldName) const { - TMeshOnEntityMap::const_iterator aMeshOnEntityMapIter = myMeshOnEntityMap.begin(); - for(; aMeshOnEntityMapIter != myMeshOnEntityMap.end(); aMeshOnEntityMapIter++){ - const TFieldMap& aFieldMap = aMeshOnEntityMapIter->second->myFieldMap; - TFieldMap::const_iterator aFieldMapIter = aFieldMap.begin(); - for(; aFieldMapIter != aFieldMap.end(); aFieldMapIter++) - if(theFieldName == aFieldMapIter->first) - return aFieldMapIter->second; - } - return PField(); - } - - - PFamily FindFamily(VISU::PMesh theMesh, const string& theFamilyName) - { - PFamily aFamily; - const TMeshOnEntityMap& aMeshOnEntityMap = theMesh->myMeshOnEntityMap; - TMeshOnEntityMap::const_iterator aMeshOnEntityMapIter = aMeshOnEntityMap.begin(); - for(; aMeshOnEntityMapIter != aMeshOnEntityMap.end(); aMeshOnEntityMapIter++){ - const PMeshOnEntity aMeshOnEntity = aMeshOnEntityMapIter->second; - aFamily = GetFamily(aMeshOnEntity,theFamilyName); - if(aFamily) - break; - } - return aFamily; - } - - - PFamily GetFamily(VISU::PMeshOnEntity theMeshOnEntity, const string& theFamilyName) - { - PFamily aFamily; - if(theFamilyName != ""){ - TFamilyMap& aFamilyMap = theMeshOnEntity->myFamilyMap; - TFamilyMap::iterator aFamilyMapIter = aFamilyMap.find(theFamilyName); - if(aFamilyMapIter != aFamilyMap.end()) - aFamily = aFamilyMapIter->second; - } - return aFamily; - } } -const VISU::TMeshMap& VISU_Convertor::GetMeshMap() { - if(!myIsDone) { myIsDone = true; Build();} +const VISU::TMeshMap& +VISU_Convertor +::GetMeshMap() +{ return myMeshMap; } -string VISU_Convertor::GenerateName(const VISU::TTime& aTime){ +string +VISU_Convertor +::GenerateName(const VISU::TTime& aTime) +{ static QString aName; const string aUnits = aTime.second, tmp(aUnits.size(),' '); if(aUnits == "" || aUnits == tmp) @@ -117,7 +74,11 @@ string VISU_Convertor::GenerateName(const VISU::TTime& aTime){ return aName.latin1(); } -string VISU_Convertor::GenerateName(const string& theName, unsigned int theTimeId) { +string +VISU_Convertor +::GenerateName(const string& theName, + unsigned int theTimeId) +{ static QString aName; aName = QString(theName.c_str()).simplifyWhiteSpace(); int iEnd = strlen(aName); diff --git a/src/CONVERTOR/VISU_Convertor.hxx b/src/CONVERTOR/VISU_Convertor.hxx index bebb26f0..4a5ac993 100644 --- a/src/CONVERTOR/VISU_Convertor.hxx +++ b/src/CONVERTOR/VISU_Convertor.hxx @@ -27,228 +27,387 @@ #ifndef VISU_Convertor_HeaderFile #define VISU_Convertor_HeaderFile -#include +/*! + \file VISU_Convertor.hxx + \brief The file contains definitions for basic classes of the VISU CONVERTER package +*/ + +#include "VISU_IDMapper.hxx" +#include "VISU_ConvertorDef.hxx" + +#include "MED_Vector.hxx" -#include #include #include #include -#include #include #include -#include +namespace VISU +{ + using MED::TVector; -class vtkUnstructuredGrid; + //--------------------------------------------------------------- + typedef std::string TName; -namespace VISU{ + typedef TVector TNames; - template class shared_ptr: public boost::shared_ptr + //--------------------------------------------------------------- + //! Define a basic class for all MED entites which can be identified by its number + struct TIntId: virtual TBaseStructure { - public: - shared_ptr() {} - - template - explicit shared_ptr(Y * p) - { - reset(p); - } - - template - shared_ptr(shared_ptr const & r): - boost::shared_ptr(r,boost::detail::dynamic_cast_tag()) + vtkIdType myId; + + TIntId(): myId(0) {} + }; - template - shared_ptr & operator=(shared_ptr const & r) - { - shared_ptr(r).swap(*this); - return *this; - } - - template shared_ptr& operator()(Y * p) // Y must be complete - { - if(T* pt = dynamic_cast(p)) - boost::shared_ptr::reset(pt); - else - boost::throw_exception(std::bad_cast()); - return *this; - } + //--------------------------------------------------------------- + typedef std::map TMeshOnEntityMap; + typedef std::map TGroupMap; + + //! Define a basic class which corresponds to MED MESH entity + /*! + This class in its turn contains map of TMeshOnEntity and TGroup substructures, + also it keeps name and dimention of corresponding MED MESH entity. + */ + struct TMesh: virtual TBaseStructure + { + TMeshOnEntityMap myMeshOnEntityMap; //!< Contains corresponding meshes for MED ENTITIES + TGroupMap myGroupMap; //!< Contains map of bounded MED GROUPS + TName myName; //! Name of the corresponding MED MESH + int myDim; //! Dimension of the corresponding MED MESH + + TMesh(): myDim(0) + {} }; + typedef std::map TMeshMap; - enum TEntity {NODE_ENTITY, EDGE_ENTITY, FACE_ENTITY, CELL_ENTITY}; + //--------------------------------------------------------------- + //! Define a basic class which corresponds to MED PROFILE entity + struct TSubProfile: virtual TBaseStructure + {}; - typedef std::pair TFamilyAndEntity; - typedef std::set TFamilyAndEntitySet; - typedef std::set TBindGroups; - typedef std::pair TTime; + //--------------------------------------------------------------- + //! Define a containerfor MED PROFILE entities which belongs to the same MED ENTITY + struct TProfile: virtual TNamedIDMapper + {}; - struct TMesh; - typedef shared_ptr PMesh; - typedef std::map TMeshMap; - struct TMeshOnEntity; - typedef shared_ptr PMeshOnEntity; - typedef std::map TMeshOnEntityMap; + //--------------------------------------------------------------- + bool + operator<(const PSubProfile& theLeft, const PSubProfile& theRight); - struct TFamily; - typedef shared_ptr PFamily; - typedef std::map TFamilyMap; + typedef std::set TProfileKey; + typedef std::map TProfileMap; - struct TGroup; - typedef shared_ptr PGroup; - typedef std::map TGroupMap; - struct TField; - typedef shared_ptr PField; - typedef std::map TFieldMap; + //--------------------------------------------------------------- + //! Define a basic class for MED GAUSS entity + struct TGauss: virtual TBaseStructure + {}; - struct TValForTime; - typedef shared_ptr PValForTime; - typedef std::map TValField; - struct TBaseStructure{ - virtual ~TBaseStructure(){} + //--------------------------------------------------------------- + //! Define a container for mesh generated from MED GAUSS and corresponding MED PROFILE + struct TGaussSubMesh: virtual TBaseStructure + { + PSubProfile mySubProfile; //!< Keeps reference on what submesh the Gauss Points are located }; - typedef std::vector TNames; + + //--------------------------------------------------------------- + //! Define a container for all TGaussSubMesh that belongs to the same MED ENTITY + struct TGaussMesh: virtual TGaussPtsIDMapper + {}; - struct TMesh: TBaseStructure{ - int myDim, myNbPoints; - std::string myName; - TMeshOnEntityMap myMeshOnEntityMap; - TGroupMap myGroupMap; + //--------------------------------------------------------------- + bool + operator<(const PGaussSubMesh& theLeft, const PGaussSubMesh& theRight); - TMesh() : myDim(0), myNbPoints(0) {} - const PField GetField(const std::string& theFieldName) const; - }; + typedef std::set TGaussKey; + typedef std::map TGaussMeshMap; + + + //--------------------------------------------------------------- + + typedef std::map TFamilyMap; + typedef std::map TFieldMap; + + //! Define a basic class which corresponds to MED ENTITY + /*! + This class in its turn contains map of TGaussMesh and TProfile substructures, + also it keeps corresponding map of MED FAMILIES and FIELDS. + */ + struct TMeshOnEntity: virtual TNamedIDMapper + { + TGaussMeshMap myGaussMeshMap; //!< Contains map of Gauss mesh which exist on it + TProfileMap myProfileMap; //!< Contains map of Profile mesh which exist on it - struct TMeshOnEntity: TBaseStructure{ - std::string myMeshName; - TEntity myEntity; - int myNbCells, myCellsSize; - TFamilyMap myFamilyMap; - TFieldMap myFieldMap; - TMeshOnEntity() : myNbCells(0), myCellsSize(0) {} + TFamilyMap myFamilyMap; //!< Contains map of MED FAMILIES which belongs to it + TFieldMap myFieldMap; //!< Contains map of MED FIELDS which belongs to it - std::pair - GetCellsDims(const std::string& theFamilyName = "") const; + TName myMeshName; //!< Contains name of the MED MESH where the it belongs to. + TEntity myEntity; //!< Referes to MED ENTITY where the it belongs to. }; - struct TFamily: TBaseStructure{ - int myId; - std::string myName; - TEntity myEntity; - TBindGroups myGroups; - int myNbCells, myCellsSize; - TFamily() : myNbCells(0), myCellsSize(0) {} + + //--------------------------------------------------------------- + //! Define a basic class for MED FAMILY entity + struct TFamily: virtual TIntId, + virtual TIDMapper + { + TEntity myEntity; //!< Referes to MED ENTITY where the TFamily belongs to. + TName myName; //!< Contains name of the corresponding MED FAMILY }; - struct TGroup: TBaseStructure{ - std::string myName; - std::string myMeshName; - int myNbCells, myCellsSize; - TFamilyAndEntitySet myFamilyAndEntitySet; - TGroup() : myNbCells(0), myCellsSize(0) {} + + //--------------------------------------------------------------- + typedef std::set TFamilySet; + + //! Define a basic class for MED GROUP entity + struct TGroup: virtual TIDMapper + { + TFamilySet myFamilySet; }; - struct TField: TBaseStructure{ - int myId; - TEntity myEntity; - bool myIsTrimmed; - std::string myName; - std::string myMeshName; - int myNbComp, myDataSize; - TValField myValField; - TNames myCompNames; - TNames myUnitNames; - TField() : myNbComp(0), myDataSize(0), myIsTrimmed(0) {} + + //--------------------------------------------------------------- + typedef std::map TValField; + typedef std::pair TMinMax; + + //! Define a basic class for MED FIELD entity + struct TField: virtual TIntId + { + TEntity myEntity; //!< Referes to MED ENTITY where it belongs to. + TName myName; //!< Contains name of the corresponding MED FIELD + TName myMeshName; //!< Contains name of the MED MESH where it belongs to. + TValField myValField; //!< Contains sequence of values for corresponding MED TIMESTAMPS + TNames myCompNames; //!< Contains names of components of the MED FIELD + TNames myUnitNames; //!< Contains names of units of the MED FIELD + vtkIdType myNbComp; //!< Keeps number of components for the MED FIELD + + //! Calculate min/max values for each of the MED FIELD components among all its timestamps + /*! + Numeration of the components starts from 1. + Zero component contains min/max value for modulus of corresponding vector + */ + virtual + TMinMax + GetMinMax(vtkIdType theCompID) = 0; + + bool myIsMinMaxInitilized; //!< Is the min / max values are calculated + + TField(): + myNbComp(0), + myIsMinMaxInitilized(false) + {} }; - struct TValForTime: TBaseStructure{ - int myId; - TEntity myEntity; - std::string myMeshName; - std::string myFieldName; - int myNbComp; - TTime myTime; - TValForTime() : myNbComp(0) {} - }; + //--------------------------------------------------------------- + typedef std::pair TTime; - PFamily FindFamily(VISU::PMesh theMesh, - const std::string& theFamilyName); + //! Define a basic class for MED TIMESTAMP entity + struct TValForTime: virtual TIntId + { + TEntity myEntity; //!< Referes to MED ENTITY where it belongs to. + TName myMeshName; //!< Contains name of the MED MESH where it belongs to. + TName myFieldName; //!< Contains name of the MED FIELD where it belongs to. + TTime myTime; - PFamily GetFamily(VISU::PMeshOnEntity theMeshOnEntity, - const std::string& theFamilyName); + PProfile myProfile; //!< Contains corresponding MED PROFILE where the MED TIEMSTMAP attached to + PGaussMesh myGaussMesh; + }; - void WriteToFile(vtkUnstructuredGrid* theDataSet, - const std::string& theFileName); + //--------------------------------------------------------------- + //! The utility function allows to write vtkUnstructuredGrid to a file with defined name + void + WriteToFile(vtkUnstructuredGrid* theDataSet, + const std::string& theFileName); }; -class VISU_Convertor{ + +//--------------------------------------------------------------- +//! This class defines interface to read VTK interpretation of MED entities +/*! + It is the main class of the VISU CONVERTER package. + Following MED entities can be retrived from any MED file: + - mesh from corresponding MED ENTITIES; + - MED TIMESTAMPS; + - MED FAMILIES; + - MED GROUPS. + The class produce its work in two main steps: + 1. Perfrom parsing of MED file to get known what MED entities are pressent in it + 2. Get VTK representation for any existing MED entity + Also, it can perform some additional work to calculate expected amount of memory to build defined VTK representation + +*/ +class VISU_Convertor +{ protected: std::string myName; VISU::TMeshMap myMeshMap; int myIsDone; + public: - virtual ~VISU_Convertor(){}; - virtual const std::string& GetName() { return myName;} - virtual int IsDone() const { return myIsDone;} - typedef vtkUnstructuredGrid TOutput; - - virtual VISU_Convertor* Build() = 0; - virtual const VISU::TMeshMap& GetMeshMap() ; - virtual float GetSize() = 0; - - virtual TOutput* GetMeshOnEntity(const std::string& theMeshName, - const VISU::TEntity& theEntity, - const std::string& theFamilyName = "") = 0; - - virtual float GetMeshOnEntitySize(const std::string& theMeshName, - const VISU::TEntity& theEntity, - const std::string& theFamilyName = "") = 0; + virtual + ~VISU_Convertor() + {}; - virtual TOutput* GetMeshOnGroup(const std::string& theMeshName, - const std::string& theGroupName) = 0; - - virtual float GetMeshOnGroupSize(const std::string& theMeshName, - const std::string& theGroupName) = 0; - - virtual TOutput* GetTimeStampOnMesh(const std::string& theMeshName, - const VISU::TEntity& theEntity, - const std::string& theFieldName, - int theStampsNum) = 0; + //! Get brief name of the corresponding source MED file + virtual + const std::string& + GetName(){ return myName;} + + //! Let known whether the source MED file parsed or not + virtual + int + IsDone() const { return myIsDone; } + + //! Defines what subtype of vtkDataSet is used for MED to VTK mapping + typedef VISU::TVTKOutput TOutput; + + //! This method perform first parsing of MED file to get known what MED entities are pressent in it + virtual + VISU_Convertor* + Build() = 0; + + //! This method perform first parsing of MED file to get known what MED mesh entities are pressent in it + virtual + VISU_Convertor* + BuildEntities() = 0; + + //! This method perform first parsing of MED file to get known what MED fields are pressent in it + virtual + VISU_Convertor* + BuildFields() = 0; + + //! This min /max calculation over existing MED fields + virtual + VISU_Convertor* + BuildMinMax() = 0; + + //! This method perform first parsing of MED file to get known what MED groups are pressent in it + virtual + VISU_Convertor* + BuildGroups() = 0; + + //! This method allow to get known what MED entities are present is the MED file + virtual + const VISU::TMeshMap& + GetMeshMap(); + + //! Get amount of memory to build VTK representations for all existing MED entities + virtual + float + GetSize() = 0; + + //! Get mesh for corresponding MED ENTITY + virtual + VISU::PNamedIDMapper + GetMeshOnEntity(const std::string& theMeshName, + const VISU::TEntity& theEntity) = 0; + + //! Get amount of memory to build mesh for corresponding MED ENTITY + virtual + float + GetMeshOnEntitySize(const std::string& theMeshName, + const VISU::TEntity& theEntity) = 0; + + //! Get mesh for corresponding MED FAMILY + virtual + VISU::PIDMapper + GetFamilyOnEntity(const std::string& theMeshName, + const VISU::TEntity& theEntity, + const std::string& theFamilyName) = 0; + + //! Get amount of memory to build mesh for corresponding MED FAMILY + virtual + float + GetFamilyOnEntitySize(const std::string& theMeshName, + const VISU::TEntity& theEntity, + const std::string& theFamilyName) = 0; + + //! Get mesh for corresponding MED GROUP + virtual + VISU::PIDMapper + GetMeshOnGroup(const std::string& theMeshName, + const std::string& theGroupName) = 0; + + //! Get amount of memory to build mesh for corresponding MED GROUP + virtual + float + GetMeshOnGroupSize(const std::string& theMeshName, + const std::string& theGroupName) = 0; + + //! Get mesh with attached values for corresponding MED TIMESTAMP + virtual + VISU::PIDMapper + GetTimeStampOnMesh(const std::string& theMeshName, + const VISU::TEntity& theEntity, + const std::string& theFieldName, + int theStampsNum) = 0; + + //! Get Gauss Points mesh with attached values for corresponding MED TIMESTAMP + virtual + VISU::PGaussPtsIDMapper + GetTimeStampOnGaussPts(const std::string& theMeshName, + const VISU::TEntity& theEntity, + const std::string& theFieldName, + int theStampsNum) = 0; - virtual float GetTimeStampSize(const std::string& theMeshName, - const VISU::TEntity& theEntity, - const std::string& theFieldName, - int theStampsNum) = 0; + //! Get amount of memory to build mesh for corresponding MED TIMESTAMP + virtual + float + GetTimeStampSize(const std::string& theMeshName, + const VISU::TEntity& theEntity, + const std::string& theFieldName, + int theStampsNum) = 0; - virtual float GetFieldOnMeshSize(const std::string& theMeshName, - const VISU::TEntity& theEntity, - const std::string& theFieldName) = 0; - - virtual const VISU::PField GetField(const std::string& theMeshName, - VISU::TEntity theEntity, - const std::string& theFieldName) = 0; - - virtual const VISU::PValForTime GetTimeStamp(const std::string& theMeshName, - const VISU::TEntity& theEntity, - const std::string& theFieldName, - int theStampsNum) = 0; + //! Get amount of memory to build all MED TIMESTAMPS for corresponding MED FIELD + virtual + float + GetFieldOnMeshSize(const std::string& theMeshName, + const VISU::TEntity& theEntity, + const std::string& theFieldName) = 0; + + //! Find MED FIELD container + virtual + const VISU::PField + GetField(const std::string& theMeshName, + VISU::TEntity theEntity, + const std::string& theFieldName) = 0; + + //! Find MED TIMESTAMP container + virtual + const VISU::PValForTime + GetTimeStamp(const std::string& theMeshName, + const VISU::TEntity& theEntity, + const std::string& theFieldName, + int theStampsNum) = 0; - static std::string GenerateName(const VISU::TTime& aTime); - static std::string GenerateName(const std::string& theName, unsigned int theTimeId); + //! Allow to generate pretty name for MED TIMESTAMP + static + std::string + GenerateName(const VISU::TTime& aTime); + + static + std::string + GenerateName(const std::string& theName, unsigned int theTimeId); }; -extern "C"{ - VISU_Convertor* CreateConvertor(const std::string& theFileName) ; +extern "C" +{ + //! Instatiate proper VISU_Convertor subclass + VISU_Convertor* + CreateConvertor(const std::string& theFileName); }; + #endif diff --git a/src/CONVERTOR/VISU_ConvertorDef.hxx b/src/CONVERTOR/VISU_ConvertorDef.hxx new file mode 100644 index 00000000..0fedadc5 --- /dev/null +++ b/src/CONVERTOR/VISU_ConvertorDef.hxx @@ -0,0 +1,78 @@ +// VISU CONVERTOR : +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// File : +// Author : +// Module : + +#ifndef VISU_ConvertorDef_HeaderFile +#define VISU_ConvertorDef_HeaderFile + +/*! + \file VISU_ConvertorDef.hxx + \brief The file contains predeclarations for basic classes of the VISU CONVERTER package +*/ + +#include "MED_SharedPtr.hxx" + +namespace VISU +{ + using MED::SharedPtr; + + //--------------------------------------------------------------- + enum TEntity {NODE_ENTITY, EDGE_ENTITY, FACE_ENTITY, CELL_ENTITY}; + + struct TMesh; + typedef SharedPtr PMesh; + + struct TGaussSubMesh; + typedef SharedPtr PGaussSubMesh; + + struct TGaussMesh; + typedef SharedPtr PGaussMesh; + + struct TSubProfile; + typedef SharedPtr PSubProfile; + + struct TProfile; + typedef SharedPtr PProfile; + + struct TMeshOnEntity; + typedef SharedPtr PMeshOnEntity; + + struct TFamily; + typedef SharedPtr PFamily; + + struct TGroup; + typedef SharedPtr PGroup; + + struct TField; + typedef SharedPtr PField; + + struct TGauss; + typedef SharedPtr PGauss; + + struct TValForTime; + typedef SharedPtr PValForTime; +} + +#endif diff --git a/src/CONVERTOR/VISU_ConvertorUtils.cxx b/src/CONVERTOR/VISU_ConvertorUtils.cxx index fcfb6f95..a4d0f3bb 100644 --- a/src/CONVERTOR/VISU_ConvertorUtils.cxx +++ b/src/CONVERTOR/VISU_ConvertorUtils.cxx @@ -25,9 +25,18 @@ // Module : VISU #include "VISU_ConvertorUtils.hxx" + #include +#include + +#ifdef _DEBUG_ +static int MYDEBUG = 0; +#else +static int MYDEBUG = 0; +#endif -namespace VISU{ +namespace VISU +{ void WriteToFile(vtkUnstructuredGrid* theDataSet, const std::string& theFileName) @@ -40,4 +49,32 @@ namespace VISU{ aWriter->Delete(); } + + TTimerLog + ::TTimerLog(int theIsDebug, + const std::string& theName): + myIsDebug(MYDEBUG + theIsDebug), + myTimerLog(vtkTimerLog::New()), + myPrefixPrinter(myIsDebug == 1), + myName(theName) + { + myCPUTime = myTimerLog->GetCPUTime(); + BEGMSG(myIsDebug > 1,"{\n"); + } + + TTimerLog + ::~TTimerLog() + { + myCPUTime = myTimerLog->GetCPUTime() - myCPUTime; + + if(myIsDebug > 1){ + BEGMSG(myIsDebug,"} = "<Delete(); + myTimerLog = NULL; + } + } diff --git a/src/CONVERTOR/VISU_ConvertorUtils.hxx b/src/CONVERTOR/VISU_ConvertorUtils.hxx index 1ef42e36..154589fc 100644 --- a/src/CONVERTOR/VISU_ConvertorUtils.hxx +++ b/src/CONVERTOR/VISU_ConvertorUtils.hxx @@ -34,11 +34,30 @@ #include "MED_Utilities.hxx" class vtkUnstructuredGrid; +class vtkTimerLog; + +namespace MED +{ + class PrefixPrinter; +} namespace VISU{ void WriteToFile(vtkUnstructuredGrid* theDataSet, const std::string& theFileName); + + class TTimerLog + { + int myIsDebug; + double myCPUTime; + std::string myName; + vtkTimerLog* myTimerLog; + MED::PrefixPrinter myPrefixPrinter; + public: + TTimerLog(int theIsDebug, + const std::string& theName); + ~TTimerLog(); + }; } diff --git a/src/CONVERTOR/VISU_Convertor_impl.cxx b/src/CONVERTOR/VISU_Convertor_impl.cxx index 477abba7..85032edf 100644 --- a/src/CONVERTOR/VISU_Convertor_impl.cxx +++ b/src/CONVERTOR/VISU_Convertor_impl.cxx @@ -26,6 +26,11 @@ #include "VISU_Convertor_impl.hxx" #include "VISU_ConvertorUtils.hxx" +#include "VTKViewer_AppendFilter.h" +#include "VISU_MergeFilter.hxx" + +#include +#include #include #include @@ -37,7 +42,6 @@ #include #include -#include #include #include @@ -55,36 +59,970 @@ static int MYVTKDEBUG = 0; #ifdef _DEBUG_ static int MYDEBUG = 0; static int MYDEBUGWITHFILES = 0; +//#define _DEXCEPT_ #else static int MYDEBUG = 0; static int MYDEBUGWITHFILES = 0; #endif +namespace VISU +{ + //--------------------------------------------------------------- + TIsVTKDone::TIsVTKDone(): + myIsVTKDone(false), + myIsDone(false) + {} + + + //--------------------------------------------------------------- + TSizeCounter::TSizeCounter(): + myNbCells(0), + myCellsSize(0) + {} + + + //--------------------------------------------------------------- + TSource::TSource() + {} + + const TVTKSource& + TSource + ::GetSource() const + { + if(!mySource.GetPointer()){ + mySource = vtkUnstructuredGrid::New(); + mySource->Delete(); + } + return mySource; + } + + TVTKOutput* + TSource + ::GetVTKOutput() + { + return GetSource().GetPointer(); + } + + + //--------------------------------------------------------------- + TAppendFilter::TAppendFilter() + {} + + const TVTKAppendFilter& + TAppendFilter + ::GetFilter() const + { + if(!myFilter.GetPointer()){ + myFilter = VTKViewer_AppendFilter::New(); + myFilter->Delete(); + myFilter->SetDoMappingFlag(true); + } + return myFilter; + } + + TVTKOutput* + TAppendFilter + ::GetVTKOutput() + { + GetFilter()->Update(); + return GetFilter()->GetOutput(); + } + + + //--------------------------------------------------------------- + TMergeFilter::TMergeFilter() + {} + + const TVTKMergeFilter& + TMergeFilter + ::GetFilter() const + { + if(!myFilter.GetPointer()){ + myFilter = VISU_MergeFilter::New(); + myFilter->Delete(); + } + return myFilter; + } + + TVTKOutput* + TMergeFilter + ::GetVTKOutput() + { + GetFilter()->Update(); + return GetFilter()->GetUnstructuredGridOutput(); + } -namespace{ + //--------------------------------------------------------------- + TPointCoords + ::TPointCoords(): + myPoints(vtkPoints::New()) + { + myPoints->Delete(); + } + + void + TPointCoords + ::Init(vtkIdType theNbPoints, + vtkIdType theDim) + { + myDim = theDim; + myNbPoints = theNbPoints; + myCoord.resize(theNbPoints*theDim); + myPoints->SetNumberOfPoints(theNbPoints); + } + + TCCoordSlice + TPointCoords + ::GetCoordSlice(vtkIdType theNodeId) const + { + return TCCoordSlice(myCoord,std::slice(theNodeId*myDim,myDim,1)); + } + + TCoordSlice + TPointCoords + ::GetCoordSlice(vtkIdType theNodeId) + { + return TCoordSlice(myCoord,std::slice(theNodeId*myDim,myDim,1)); + } + + + //--------------------------------------------------------------- + void + TNamedPointCoords + ::Init(vtkIdType theNbPoints, + vtkIdType theDim, + const TVectorID& theVectorID) + { + TPointCoords::Init(theNbPoints,theDim); + myPointsDim.resize(theDim); + myVectorID = theVectorID; + + for(vtkIdType anID = 0, anEnd = theVectorID.size(); anID < anEnd; anID++) + myObj2VTKID[theVectorID[anID]] = anID; + } + + std::string& + TNamedPointCoords + ::GetName(vtkIdType theDim) + { + return myPointsDim[theDim]; + } + + const std::string& + TNamedPointCoords + ::GetName(vtkIdType theDim) const + { + return myPointsDim[theDim]; + } + + vtkIdType + TNamedPointCoords + ::GetObjID(vtkIdType theID) const + { + if(myVectorID.empty()) + return theID; + else + return myVectorID[theID]; + } + + + vtkIdType + TNamedPointCoords + ::GetVTKID(vtkIdType theID) const + { + if(myObj2VTKID.empty()) + return theID; + else{ + TObj2VTKID::const_iterator anIter = myObj2VTKID.find(theID); + if(anIter != myObj2VTKID.end()) + return anIter->second; + } + return -1; + } + + std::string + TNamedPointCoords + ::GetNodeName(vtkIdType theObjID) const + { + return ""; + } + + //--------------------------------------------------------------- + TMeshImpl::TMeshImpl(): + myPoints(vtkPoints::New()), + myNbPoints(0) + { + myPoints->Delete(); + } + + + //--------------------------------------------------------------- + TSubProfileImpl::TSubProfileImpl(): + myStatus(eNone), + myGeom(eNONE) + {} + + + vtkIdType + TSubProfileImpl + ::GetElemObjID(vtkIdType theID) const + { + return theID; + } + + + //--------------------------------------------------------------- + bool + operator<(const PSubProfile& theLeft, const PSubProfile& theRight) + { + PSubProfileImpl aLeft(theLeft), aRight(theRight); + + if(aLeft->myGeom != aRight->myGeom) + return aLeft->myGeom < aRight->myGeom; + + if(aLeft->myStatus != aRight->myStatus) + return aLeft->myStatus < aRight->myStatus; + + return aLeft->myName < aRight->myName; + } + + + //--------------------------------------------------------------- + TProfileImpl::TProfileImpl(): + myIsAll(true), + myMeshOnEntity(NULL) + {} + + vtkIdType + TProfileImpl + ::GetNodeObjID(vtkIdType theID) const + { + return myNamedPointCoords->GetObjID(theID); + } + + vtkIdType + TProfileImpl + ::GetNodeVTKID(vtkIdType theID) const + { + return myNamedPointCoords->GetVTKID(theID); + } + + float* + TProfileImpl + ::GetNodeCoord(vtkIdType theObjID) + { + if(myIsAll) + return myMeshOnEntity->GetNodeCoord(theObjID); + + vtkIdType aVtkID = GetNodeVTKID(theObjID); + return GetFilter()->GetOutput()->GetPoint(aVtkID); + } + + vtkIdType + TProfileImpl + ::GetElemObjID(vtkIdType theID) const + { + if(myIsAll) + return myMeshOnEntity->GetElemObjID(theID); + + vtkIdType anInputID; + const TVTKAppendFilter& anAppendFilter = GetFilter(); + vtkIdType aID = anAppendFilter->GetCellInputID(theID,anInputID); + PSubProfileImpl aSubProfileImpl = mySubProfileArr[anInputID]; + return aSubProfileImpl->GetElemObjID(aID); + } + + vtkIdType + TProfileImpl + ::GetElemVTKID(vtkIdType theID) const + { + if(myIsAll) + return myMeshOnEntity->GetElemVTKID(theID); + + if(myElemObj2VTKID.empty()) + return theID; + else{ + TID2ID::const_iterator anIter = myElemObj2VTKID.find(theID); + if(anIter != myElemObj2VTKID.end()) + return anIter->second; + } + return -1; + } + + vtkCell* + TProfileImpl + ::GetElemCell(vtkIdType theObjID) + { + if(myIsAll) + return myMeshOnEntity->GetElemCell(theObjID); + + vtkIdType aVtkID = GetElemVTKID(theObjID); + return GetFilter()->GetOutput()->GetCell(aVtkID); + } + + TVTKOutput* + TProfileImpl + ::GetVTKOutput() + { + const TVTKAppendFilter& anAppendFilter = GetFilter(); + return anAppendFilter->GetOutput(); + } + + std::string + TProfileImpl + ::GetNodeName(vtkIdType theObjID) const + { + return myNamedPointCoords->GetNodeName(theObjID); + } + + std::string + TProfileImpl + ::GetElemName(vtkIdType theObjID) const + { + if(myIsAll) + return myMeshOnEntity->GetElemName(theObjID); + + vtkIdType anInputID; + vtkIdType aVTKId = GetElemVTKID(theObjID); + const TVTKAppendFilter& anAppendFilter = GetFilter(); + vtkIdType aSubID = anAppendFilter->GetCellInputID(aVTKId,anInputID); + PSubProfileImpl aSubProfileImpl = mySubProfileArr[anInputID]; + vtkIdType anEntityObjId = aSubProfileImpl->GetElemObjID(aSubID); + return myMeshOnEntity->GetElemName(anEntityObjId); + } + + + //--------------------------------------------------------------- + TVTKOutput* + TIDMapperFilter + ::GetVTKOutput() + { + if(!myFilter.GetPointer()){ + const TVTKAppendFilter& anAppendFilter = myIDMapper.GetFilter(); + TVTKOutput* aGeometry = anAppendFilter->GetOutput(); + + const TVTKSource& aSource = mySource.GetSource(); + TDataSet* aDataSet = aSource.GetPointer(); + aDataSet->ShallowCopy(aGeometry); + + const TVTKMergeFilter& aFilter = GetFilter(); + aFilter->SetGeometry(aGeometry); + aFilter->SetScalars(aDataSet); + aFilter->SetVectors(aDataSet); + aFilter->AddField("VISU_FIELD",aDataSet); + } + return myFilter->GetUnstructuredGridOutput(); + } + + vtkIdType + TIDMapperFilter + ::GetNodeObjID(vtkIdType theID) const + { + return myIDMapper.GetNodeObjID(theID); + } + + vtkIdType + TIDMapperFilter + ::GetNodeVTKID(vtkIdType theID) const + { + return myIDMapper.GetNodeVTKID(theID); + } + + float* + TIDMapperFilter + ::GetNodeCoord(vtkIdType theObjID) + { + return myIDMapper.GetNodeCoord(theObjID); + } + + vtkIdType + TIDMapperFilter + ::GetElemObjID(vtkIdType theID) const + { + return myIDMapper.GetElemObjID(theID); + } + + vtkIdType + TIDMapperFilter + ::GetElemVTKID(vtkIdType theID) const + { + return myIDMapper.GetElemVTKID(theID); + } + + vtkCell* + TIDMapperFilter + ::GetElemCell(vtkIdType theObjID) + { + return myIDMapper.GetElemCell(theObjID); + } + + + //--------------------------------------------------------------- + void + TGaussImpl + ::LessThan(const PGaussImpl& theGauss, + bool& theResult) const + { + theResult = false; + } + + + //--------------------------------------------------------------- + TGaussSubMeshImpl::TGaussSubMeshImpl(): + myStatus(eNone) + {} + + TGaussPointID + TGaussSubMeshImpl + ::GetObjID(vtkIdType theID) const + { + TCellID aCellID = theID / myGauss->myNbPoints; + TLocalPntID aLocalPntID = theID % myGauss->myNbPoints; + + return TGaussPointID(aCellID,aLocalPntID); + } + + //--------------------------------------------------------------- + bool + operator<(const PGaussSubMesh& theLeft, const PGaussSubMesh& theRight) + { + PGaussSubMeshImpl aLeft(theLeft), aRight(theRight); + const PGaussImpl& aGaussLeft = aLeft->myGauss; + const PGaussImpl& aGaussRight = aRight->myGauss; + + if(aGaussLeft->myGeom != aGaussRight->myGeom) + return aGaussLeft->myGeom < aGaussRight->myGeom; + + if(aLeft->mySubProfile != aRight->mySubProfile) + return aLeft->mySubProfile < aRight->mySubProfile; + + bool aResult; + aGaussLeft->LessThan(aGaussRight,aResult); + + return aResult; + } + + + //--------------------------------------------------------------- + TGaussMeshImpl + ::TGaussMeshImpl(): + myParent(NULL) + {} + + TGaussPointID + TGaussMeshImpl + ::GetObjID(vtkIdType theID) const + { + const TVTKAppendFilter& anAppendFilter = GetFilter(); + vtkIdType anInputDataSetID; + vtkIdType anInputID = anAppendFilter->GetCellInputID(theID,anInputDataSetID); + const TGaussSubMeshImpl& aSubMeshImpl = myGaussSubMeshArr[anInputDataSetID]; + + return aSubMeshImpl.GetObjID(anInputID); + } + + TVTKOutput* + TGaussMeshImpl + ::GetVTKOutput() + { + return mySource.GetVTKOutput(); + } + + TNamedIDMapper* + TGaussMeshImpl:: + GetParent() + { + return myParent; + } + + + //--------------------------------------------------------------- + TGaussPointID + TGaussPtsIDFilter + ::GetObjID(vtkIdType theID) const + { + return myGaussPtsIDMapper->GetObjID(theID); + } + + TNamedIDMapper* + TGaussPtsIDFilter:: + GetParent() + { + return myGaussPtsIDMapper->GetParent(); + } + + + //--------------------------------------------------------------- + vtkIdType + TSubMeshImpl + ::GetElemObjID(vtkIdType theID) const + { + return myStartID + theID; + } + + std::string + TSubMeshImpl + ::GetElemName(vtkIdType theObjID) const + { + return ""; + } + + //--------------------------------------------------------------- + vtkIdType + TMeshOnEntityImpl + ::GetNodeVTKID(vtkIdType theID) const + { + return myNamedPointCoords->GetVTKID(theID); + } + + vtkIdType + TMeshOnEntityImpl + ::GetNodeObjID(vtkIdType theID) const + { + return myNamedPointCoords->GetObjID(theID); + } + + vtkIdType + TMeshOnEntityImpl + ::GetElemVTKID(vtkIdType theID) const + { + if(myElemObj2VTKID.empty()) + return theID; + else{ + TID2ID::const_iterator anIter = myElemObj2VTKID.find(theID); + if(anIter != myElemObj2VTKID.end()) + return anIter->second; + } + return -1; + } + + vtkIdType + TMeshOnEntityImpl + ::GetElemObjID(vtkIdType theID) const + { + vtkIdType anInputID; + const TVTKAppendFilter& anAppendFilter = GetFilter(); + vtkIdType aID = anAppendFilter->GetCellInputID(theID,anInputID); + const PSubMeshImpl& aSubMesh = mySubMeshArr[anInputID]; + return aSubMesh->GetElemObjID(aID); + } + + std::string + TMeshOnEntityImpl + ::GetNodeName(vtkIdType theObjID) const + { + return myNamedPointCoords->GetNodeName(theObjID); + } + + std::string + TMeshOnEntityImpl + ::GetElemName(vtkIdType theObjID) const + { + vtkIdType aVTKId = GetElemVTKID(theObjID); + vtkIdType anInputID; + const TVTKAppendFilter& anAppendFilter = GetFilter(); + vtkIdType aSubID = anAppendFilter->GetCellInputID(aVTKId,anInputID); + const PSubMeshImpl& aSubMesh = mySubMeshArr[anInputID]; + return aSubMesh->GetElemName(aSubID); + } + + //--------------------------------------------------------------- + vtkIdType + TFamilyImpl + ::GetElemVTKID(vtkIdType theID) const + { + if(myElemObj2VTKID.empty()) + return theID; + else{ + TID2ID::const_iterator anIter = myElemObj2VTKID.find(theID); + if(anIter != myElemObj2VTKID.end()) + return anIter->second; + } + return -1; + } + + vtkIdType + TFamilyImpl + ::GetElemObjID(vtkIdType theID) const + { + return myMeshID[theID]; + } + + vtkIdType + TFamilyImpl + ::GetNodeObjID(vtkIdType theID) const + { + return myNamedPointCoords->GetObjID(theID); + } + + vtkIdType + TFamilyImpl + ::GetNodeVTKID(vtkIdType theID) const + { + return myNamedPointCoords->GetVTKID(theID); + } + + TVTKOutput* + TFamilyImpl + ::GetVTKOutput() + { + return TSource::GetVTKOutput(); + } + + + //--------------------------------------------------------------- + TNbASizeCells + TGroupImpl + ::GetNbASizeCells() const + { + vtkIdType aNbCells = 0, aCellsSize = 0; + TFamilySet::const_iterator anIter = myFamilySet.begin(); + for(; anIter != myFamilySet.end(); anIter++){ + PFamilyImpl aFamily = *anIter; + aNbCells += aFamily->myNbCells; + aCellsSize += aFamily->myCellsSize; + } + return make_pair(aNbCells,aCellsSize); + } + + vtkIdType + TGroupImpl + ::GetElemVTKID(vtkIdType theID) const + { + if(myElemObj2VTKID.empty()) + return theID; + else{ + TID2ID::const_iterator anIter = myElemObj2VTKID.find(theID); + if(anIter != myElemObj2VTKID.end()) + return anIter->second; + } + return -1; + } + + vtkIdType + TGroupImpl + ::GetElemObjID(vtkIdType theID) const + { + vtkIdType anInputID; + const TVTKAppendFilter& anAppendFilter = GetFilter(); + vtkIdType anID = anAppendFilter->GetCellInputID(theID,anInputID); + const PFamilyImpl& aFamily = myFamilyArr[anInputID]; + return aFamily->GetElemObjID(anID); + } + + vtkIdType + TGroupImpl + ::GetNodeObjID(vtkIdType theID) const + { + return myNamedPointCoords->GetObjID(theID); + } + + vtkIdType + TGroupImpl + ::GetNodeVTKID(vtkIdType theID) const + { + return myNamedPointCoords->GetVTKID(theID); + } + + + //--------------------------------------------------------------- + TFieldImpl + ::TFieldImpl(): + myDataSize(0) + {} + + void + TFieldImpl + ::InitArrays(vtkIdType theNbComp) + { + myNbComp = theNbComp; + myCompNames.resize(theNbComp); + myUnitNames.resize(theNbComp); + myMinMaxArr.resize(theNbComp + 1); + for(vtkIdType iComp = 0; iComp <= theNbComp; iComp++){ + TMinMax& aMinMax = myMinMaxArr[iComp]; + aMinMax.first = VTK_LARGE_FLOAT; + aMinMax.second = -VTK_LARGE_FLOAT; + } + } + + TMinMax + TFieldImpl + ::GetMinMax(vtkIdType theCompID) + { + return myMinMaxArr[theCompID]; + } + + + //--------------------------------------------------------------- + void + TMeshValue + ::Init(vtkIdType theNbElem, + vtkIdType theNbGauss, + vtkIdType theNbComp) + { + myNbElem = theNbElem; + myNbGauss = theNbGauss; + myNbComp = theNbComp; + + myStep = theNbComp*theNbGauss; + + myValue.resize(theNbElem*myStep); + } + + TCValueSliceArr + TMeshValue + ::GetGaussValueSliceArr(vtkIdType theElemId) const + { + TCValueSliceArr aValueSliceArr(myNbGauss); + vtkIdType anId = theElemId*myStep; + for(vtkIdType aGaussId = 0; aGaussId < myNbGauss; aGaussId++){ + aValueSliceArr[aGaussId] = + TCValueSlice(myValue,std::slice(anId,myNbComp,1)); + anId += myNbComp; + } + return aValueSliceArr; + } + + TValueSliceArr + TMeshValue + ::GetGaussValueSliceArr(vtkIdType theElemId) + { + TValueSliceArr aValueSliceArr(myNbGauss); + vtkIdType anId = theElemId*myStep; + for(vtkIdType aGaussId = 0; aGaussId < myNbGauss; aGaussId++){ + aValueSliceArr[aGaussId] = + TValueSlice(myValue,std::slice(anId,myNbComp,1)); + anId += myNbComp; + } + return aValueSliceArr; + } + + TCValueSliceArr + TMeshValue + ::GetCompValueSliceArr(vtkIdType theElemId) const + { + TCValueSliceArr aValueSliceArr(myNbComp); + vtkIdType anId = theElemId*myStep; + for(vtkIdType aCompId = 0; aCompId < myNbComp; aCompId++){ + aValueSliceArr[aCompId] = + TCValueSlice(myValue,std::slice(anId,myNbGauss,myNbComp)); + anId += 1; + } + return aValueSliceArr; + } + + TValueSliceArr + TMeshValue + ::GetCompValueSliceArr(vtkIdType theElemId) + { + TValueSliceArr aValueSliceArr(myNbComp); + vtkIdType anId = theElemId*myStep; + for(vtkIdType aCompId = 0; aCompId < myNbComp; aCompId++){ + aValueSliceArr[aCompId] = + TValueSlice(myValue,std::slice(anId,myNbGauss,myNbComp)); + anId += 1; + } + return aValueSliceArr; + } + + + //--------------------------------------------------------------- + TValForTimeImpl + ::TValForTimeImpl(): + myGaussPtsIDFilter(new TGaussPtsIDFilter()), + myIDMapperFilter(new TIDMapperFilter()) + {} + + const TMeshValue& + TValForTimeImpl + ::GetMeshValue(EGeometry theGeom) const + { + TGeom2Value::const_iterator anIter = myGeom2Value.find(theGeom); + if(anIter == myGeom2Value.end()) + EXCEPTION(runtime_error,"TValForTimeImpl::GetMeshValue - myGeom2Value.find(theGeom) fails"); + return anIter->second; + } + + TMeshValue& + TValForTimeImpl + ::GetMeshValue(EGeometry theGeom) + { + return myGeom2Value[theGeom]; + } + + int + TValForTimeImpl + ::GetNbGauss(EGeometry theGeom) const + { + TGeom2NbGauss::const_iterator anIter = myGeom2NbGauss.find(theGeom); + if(anIter == myGeom2NbGauss.end()){ + //EXCEPTION(runtime_error,"TValForTimeImpl::GetNbGauss - myGeom2NbGauss.find(theGeom) fails"); + return 1; + } + return anIter->second; + } + + + //--------------------------------------------------------------- + vtkIdType + VISUGeom2NbNodes(EGeometry theGeom) + { + switch(theGeom){ +#ifndef VISU_ENABLE_QUADRATIC + case VISU::eSEG3: + return 2; + case VISU::eTRIA6: + return 3; + case VISU::eQUAD8: + return 4; + case VISU::eTETRA10: + return 4; + case VISU::eHEXA20: + return 8; + case VISU::ePENTA15: + return 6; + case VISU::ePYRA13: + return 5; +#endif + case VISU::ePOLYGONE: + case VISU::ePOLYEDRE: + return -1; + default: + return theGeom % 100; + } + } + + vtkIdType + VISUGeom2VTK(EGeometry theGeom) + { + switch(theGeom){ + case VISU::ePOINT1: + return VTK_VERTEX; + case VISU::eSEG2: + return VTK_LINE; + case VISU::eTRIA3: + return VTK_TRIANGLE; + case VISU::eQUAD4: + return VTK_QUAD; + case VISU::eTETRA4: + return VTK_TETRA; + case VISU::eHEXA8: + return VTK_HEXAHEDRON; + case VISU::ePENTA6: + return VTK_WEDGE; + case VISU::ePYRA5: + return VTK_PYRAMID; + + case VISU::ePOLYGONE: + return VTK_POLYGON; + case VISU::ePOLYEDRE: + return VTK_CONVEX_POINT_SET; + +#ifndef VISU_ENABLE_QUADRATIC + case VISU::eSEG3: + return VTK_LINE; + case VISU::eTRIA6: + return VTK_TRIANGLE; + case VISU::eQUAD8: + return VTK_QUAD; + case VISU::eTETRA10: + return VTK_TETRA; + case VISU::eHEXA20: + return VTK_HEXAHEDRON; + case VISU::ePENTA15: + return VTK_WEDGE; + case VISU::ePYRA13: + return VTK_PYRAMID; + +#else + + case VISU::eSEG3: +#if defined(VTK_QUADRATIC_EDGE) && defined(VISU_USE_VTK_QUADRATIC) + return VTK_QUADRATIC_EDGE; +#else + return VTK_POLY_LINE; +#endif + + case VISU::eTRIA6: +#if defined(VTK_QUADRATIC_TRIANGLE) && defined(VISU_USE_VTK_QUADRATIC) + return VTK_QUADRATIC_TRIANGLE; +#else + return VTK_POLYGON; +#endif + + case VISU::eQUAD8: +#if defined(VTK_QUADRATIC_QUAD) && defined(VISU_USE_VTK_QUADRATIC) + return VTK_QUADRATIC_QUAD; +#else + return VTK_POLYGON; +#endif + + case VISU::eTETRA10: +#if defined(VTK_QUADRATIC_TETRA) && defined(VISU_USE_VTK_QUADRATIC) + return VTK_QUADRATIC_TETRA; +#else + return VTK_CONVEX_POINT_SET; +#endif + + case VISU::eHEXA20: +#if defined(VTK_QUADRATIC_HEXAHEDRON) && defined(VISU_USE_VTK_QUADRATIC) + return VTK_QUADRATIC_HEXAHEDRON; +#else + return VTK_CONVEX_POINT_SET; +#endif + + case VISU::ePENTA15: +#if defined(VTK_QUADRATIC_WEDGE) && defined(VISU_USE_VTK_QUADRATIC) + return VTK_QUADRATIC_WEDGE; +#else + return VTK_CONVEX_POINT_SET; +#endif + + case VISU::ePYRA13: +#if defined(VTK_QUADRATIC_PYRAMID) && defined(VISU_USE_VTK_QUADRATIC) + return VTK_QUADRATIC_PYRAMID; +#else + return VTK_CONVEX_POINT_SET; +#endif + +#endif //VISU_ENABLE_QUADRATIC + + default: + return -1; + } + } +} + + +namespace +{ + //--------------------------------------------------------------- template - std::string dtos(const std::string& fmt, T val){ + std::string + dtos(const std::string& fmt, T val) + { static QString aString; aString.sprintf(fmt.c_str(),val); return aString.latin1(); } + + //--------------------------------------------------------------- enum ECoordName{eX, eY, eZ, eNone}; - typedef VISU::TCoord (*TGetCoord)(const VISU::TMeshImpl::TPointsCoord&, int); + typedef VISU::TCoord (*TGetCoord)(const VISU::TCCoordSlice& theCoordSlice); - template + template VISU::TCoord - GetCoord(const VISU::TMeshImpl::TPointsCoord& thePointsCoord, - int theStartPos) + GetCoord(const VISU::TCCoordSlice& theCoordSlice) { - return thePointsCoord[theStartPos+TheCoordId]; + return theCoordSlice[TCoordId]; } template<> VISU::TCoord - GetCoord(const VISU::TMeshImpl::TPointsCoord& thePointsCoord, - int theStartPos) + GetCoord(const VISU::TCCoordSlice& theCoordSlice) { return 0.0; } @@ -136,86 +1074,100 @@ namespace{ class TCoordHelper{ - const VISU::TMeshImpl::TPointsCoord& myPointsCoord; TGetCoord* myGetCoord; public: - TCoordHelper(const VISU::TMeshImpl::TPointsCoord& thePointsCoord, - TGetCoord* theGetCoord): - myPointsCoord(thePointsCoord), + TCoordHelper(TGetCoord* theGetCoord): myGetCoord(theGetCoord) {} - virtual ~TCoordHelper(){} + + virtual + ~TCoordHelper() + {} + VISU::TCoord - GetCoord(int theStartPos, int theCoodId) + GetCoord(VISU::TCCoordSlice& theCoordSlice, + int theCoordId) { - return (*myGetCoord[theCoodId])(myPointsCoord,theStartPos); + return (*myGetCoord[theCoordId])(theCoordSlice); } }; typedef std::auto_ptr TCoordHelperPtr; - void GetPoints(VISU::TVTKSource& theStorage, VISU::PMeshImpl theMesh) + + //--------------------------------------------------------------- + vtkPoints* + GetPoints(const PMeshImpl& theMesh) { - vtkPoints* aPoints = theMesh->myPoints.GetPointer(); - if(!aPoints){ - aPoints = vtkPoints::New(); + TVTKPoints& aPoints = theMesh->myPoints; + const TNamedPointCoords& aCoords = theMesh->myNamedPointCoords; + + if(!theMesh->myIsVTKDone){ TCoordHelperPtr aCoordHelperPtr; - const VISU::TMeshImpl::TPointsCoord& anArray = theMesh->myPointsCoord; { int aMeshDimension = theMesh->myDim; bool anIsDimPresent[3] = {false, false, false}; for(int iDim = 0; iDim < aMeshDimension; iDim++){ - string aDimName = theMesh->myPointsDim[iDim]; - if(aDimName == "x" || aDimName == "X") + const std::string& aName = aCoords.GetName(iDim); + if(aName == "x" || aName == "X") anIsDimPresent[eX] = true; - else if(aDimName == "y" || aDimName == "Y") + else if(aName == "y" || aName == "Y") anIsDimPresent[eY] = true; - else if(aDimName == "z" || aDimName == "Z") + else if(aName == "z" || aName == "Z") anIsDimPresent[eZ] = true; } switch(aMeshDimension){ case 3: - aCoordHelperPtr.reset(new TCoordHelper(anArray,aXYZGetCoord)); + aCoordHelperPtr.reset(new TCoordHelper(aXYZGetCoord)); break; case 2: if(anIsDimPresent[eY] && anIsDimPresent[eZ]) - aCoordHelperPtr.reset(new TCoordHelper(anArray,aYZGetCoord)); + aCoordHelperPtr.reset(new TCoordHelper(aYZGetCoord)); else if(anIsDimPresent[eX] && anIsDimPresent[eZ]) - aCoordHelperPtr.reset(new TCoordHelper(anArray,aXZGetCoord)); + aCoordHelperPtr.reset(new TCoordHelper(aXZGetCoord)); else - aCoordHelperPtr.reset(new TCoordHelper(anArray,aXYGetCoord)); + aCoordHelperPtr.reset(new TCoordHelper(aXYGetCoord)); break; case 1: if(anIsDimPresent[eY]) - aCoordHelperPtr.reset(new TCoordHelper(anArray,aYGetCoord)); + aCoordHelperPtr.reset(new TCoordHelper(aYGetCoord)); else if(anIsDimPresent[eZ]) - aCoordHelperPtr.reset(new TCoordHelper(anArray,aZGetCoord)); + aCoordHelperPtr.reset(new TCoordHelper(aZGetCoord)); else - aCoordHelperPtr.reset(new TCoordHelper(anArray,aXGetCoord)); + aCoordHelperPtr.reset(new TCoordHelper(aXGetCoord)); break; } } - if(MYVTKDEBUG) aPoints->DebugOn(); - vtkIdType iEnd = theMesh->myPointsCoord.size(); - vtkIdType aNbPoints = iEnd / theMesh->myDim; + vtkIdType aNbPoints = aCoords.GetNbPoints(); aPoints->SetNumberOfPoints(aNbPoints); - MSG(MYDEBUG,"GetPoints - aNbPoints = "<myNbCells; + vtkIdType aCellsSize = theFamily->myCellsSize; + + vtkCellArray* aConnectivity = vtkCellArray::New(); + aConnectivity->Allocate(aCellsSize,0); + vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New(); + aCellTypesArray->SetNumberOfComponents(1); + aCellTypesArray->SetNumberOfTuples(aNbCells); + + TSubMeshID& aMeshID = theFamily->myMeshID; + aMeshID.resize(aNbCells); + + VISU::TID2ID& anElemObj2VTKID = theFamily->myElemObj2VTKID; + + const VISU::TGeom2SubMesh& aGeom2SubMesh = theMeshOnEntity->myGeom2SubMesh; + VISU::TGeom2SubMesh::const_iterator anIter = aGeom2SubMesh.begin(); + for(vtkIdType i = 0, j = 0; anIter != aGeom2SubMesh.end(); anIter++){ + VISU::EGeometry aEGeom = anIter->first; + vtkIdType aVGeom = VISUGeom2VTK(aEGeom); + + const VISU::TSubMeshImpl& aSubMesh = anIter->second; + const VISU::TCell2Connect& anArray = aSubMesh.myCell2Connect; + + const VISU::TGeom2SubMeshID& aGeom2SubMeshID = theFamily->myGeom2SubMeshID; + if(aGeom2SubMeshID.empty()) + EXCEPTION(runtime_error,"GetCells >> There is no elements on the family !!!"); + + VISU::TGeom2SubMeshID::const_iterator aGeom2SubMeshIDIter = aGeom2SubMeshID.find(aEGeom); + if(aGeom2SubMeshIDIter == aGeom2SubMeshID.end()) + continue; + + const VISU::TSubMeshID& aSubMeshID = aGeom2SubMeshIDIter->second; + + INITMSG(MYDEBUG, + " - aEGeom = "<myName + ": " + + VISU_Convertor::GenerateName(aTime); + return aFieldName; + } + + + //--------------------------------------------------------------- + void + GetTimeStampOnProfile(const TVTKSource& theSource, + const PFieldImpl& theField, + const PValForTimeImpl& theValForTime) + { + int aNbTuples = theField->myDataSize/theField->myNbComp; + std::string aFieldName = GenerateFieldName(theField,theValForTime); + + vtkDataSetAttributes* aDataSetAttributes; + switch(theField->myEntity){ + case VISU::NODE_ENTITY : + aDataSetAttributes = theSource->GetPointData(); + break; + default: + aDataSetAttributes = theSource->GetCellData(); + } + + int aNbComp = theField->myNbComp; + vtkFloatArray *aFloatArray = vtkFloatArray::New(); + + switch(aNbComp) { + case 1: + aFloatArray->SetNumberOfComponents(1); + aDataSetAttributes->SetScalars(aFloatArray); + break; + default: + aFloatArray->SetNumberOfComponents(3); + aDataSetAttributes->SetVectors(aFloatArray); + } + aFloatArray->SetNumberOfTuples(aNbTuples); + aFloatArray->SetName(aFieldName.c_str()); + + vtkFloatArray *aDataArray = vtkFloatArray::New(); + aDataArray->SetNumberOfComponents(aNbComp); + aDataArray->SetNumberOfTuples(aNbTuples); + aDataArray->SetName("VISU_FIELD"); + aDataSetAttributes->AddArray(aDataArray); + + int aNbComp2 = aNbComp; + if(aNbComp == 4) + aNbComp2 = 2; + else if(aNbComp > 4) + aNbComp2 = 3; + + INITMSG(MYDEBUG,"GetTimeStampOnProfile "<< + "- aNbTuples = "<> There is no elements for the GEOM("<second; + const TCell2Connect& aCell2Connect = aSubMesh.myCell2Connect; + vtkCellArray* aConnectivity = vtkCellArray::New(); aConnectivity->Allocate(aCellsSize,0); vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New(); aCellTypesArray->SetNumberOfComponents(1); aCellTypesArray->SetNumberOfTuples(aNbCells); - MSG(MYDEBUG,"GetCellsOnEntity - isFamilyPresent = "<myCellsConn; - VISU::TMeshOnEntityImpl::TCellsConn::const_iterator aCellsConnIter = aCellsConn.begin(); - for(int i = 0, j = 0; aCellsConnIter != aCellsConn.end(); aCellsConnIter++){ - const VISU::TMeshOnEntityImpl::TConnForCellType& anArray = aCellsConnIter->second; - int aVtkType = aCellsConnIter->first; - MSG(MYDEBUG,"GetCellsOnEntity - aVtkType = "<GetNumberOfPoints()<GetNumberOfCells()<myIsVTKDone = true; + } + + + //--------------------------------------------------------------- + void + GetMeshOnProfile(const PMeshImpl& theMesh, + const PMeshOnEntityImpl& theMeshOnEntity, + const PProfileImpl& theProfile) + { + if(theProfile->myIsVTKDone) + return; + + theProfile->myMeshOnEntity = theMeshOnEntity.get(); + const TVTKAppendFilter& anAppendFilter = theProfile->GetFilter(); + anAppendFilter->SetPoints(GetPoints(theMesh)); + + if(theProfile->myIsAll){ + TVTKOutput* aDataSet = theMeshOnEntity->GetVTKOutput(); + anAppendFilter->AddInput(aDataSet); + }else{ + const TGeom2SubProfile& aGeom2SubProfile = theProfile->myGeom2SubProfile; + + TID2ID& anElemObj2VTKID = theProfile->myElemObj2VTKID; + + TSubProfileArr& aSubProfileArr = theProfile->mySubProfileArr; + aSubProfileArr.resize(aGeom2SubProfile.size()); + + TGeom2SubProfile::const_iterator anIter = aGeom2SubProfile.begin(); + for(vtkIdType anInputID = 0, aCellID = 0; anIter != aGeom2SubProfile.end(); anIter++){ + PSubProfileImpl aSubProfile = anIter->second; + if(aSubProfile->myStatus == eRemoveAll) + continue; + + GetMeshOnSubProfile(theMesh, + theMeshOnEntity, + theProfile, + aSubProfile); + + const TVTKSource& aSource = aSubProfile->GetSource(); + anAppendFilter->AddInput(aSource.GetPointer()); + + vtkIdType aNbCells = aSource->GetNumberOfCells(); + for(vtkIdType aCell = 0; aCell < aNbCells; aCell++, aCellID++){ + anElemObj2VTKID[aSubProfile->GetElemObjID(aCell)] = aCellID; + } + + aSubProfileArr[anInputID++] = aSubProfile; + } + } + anAppendFilter->Update(); // Fix on VTK + theProfile->myNamedPointCoords = theMesh->myNamedPointCoords; + + theProfile->myIsVTKDone = true; + } + + + //--------------------------------------------------------------- + void + GetTimeStampOnGaussMesh(const TVTKSource& theSource, + const PFieldImpl& theField, + const PValForTimeImpl& theValForTime) + { + int aNbTuples = theSource->GetNumberOfPoints(); + std::string aFieldName = GenerateFieldName(theField,theValForTime); + + vtkDataSetAttributes* aDataSetAttributes; + switch(theField->myEntity){ + case VISU::NODE_ENTITY : + aDataSetAttributes = theSource->GetPointData(); + break; + default: + aDataSetAttributes = theSource->GetCellData(); + } + + int aNbComp = theField->myNbComp; + vtkFloatArray *aFloatArray = vtkFloatArray::New(); + switch(aNbComp){ + case 1: + aFloatArray->SetNumberOfComponents(1); + aDataSetAttributes->SetScalars(aFloatArray); + break; + default: + aFloatArray->SetNumberOfComponents(3); + aDataSetAttributes->SetVectors(aFloatArray); + } + aFloatArray->SetNumberOfTuples(aNbTuples); + aFloatArray->SetName(aFieldName.c_str()); + + vtkFloatArray *aDataArray = vtkFloatArray::New(); + aDataArray->SetNumberOfComponents(aNbComp); + aDataArray->SetNumberOfTuples(aNbTuples); + aDataArray->SetName("VISU_FIELD"); + aDataSetAttributes->AddArray(aDataArray); + + int aNbComp2 = aNbComp; + if(aNbComp == 4) + aNbComp2 = 2; + else if(aNbComp > 4) + aNbComp2 = 3; + + INITMSG(MYDEBUG,"GetTimeStampOnGaussMesh "<< + "- aNbTuples = "<> Can't find values for corresponding Gauss Points SubMesh"); + } + const TMeshValue& aMeshValue = anIter2->second; + int aNbGauss = aMeshValue.myNbGauss; + int aNbElem = aMeshValue.myNbElem; + + if(aNbGauss < 1) + continue; + + const TPointCoords& aCoords = aGaussSubMesh->myPointCoords; + + INITMSG(MYDEBUG, + "- aEGeom = "<> There is no elements on the family !!!"); - VISU::TFamilyImpl::TSubMesh::const_iterator aSubMeshIter = aSubMesh.find(aVtkType); - if(aSubMeshIter == aSubMesh.end()) continue; - const VISU::TFamilyImpl::TSubMeshOnCellType& aSubMeshOnCellType = aSubMeshIter->second; - MSG(MYDEBUG,"GetCellsOnEntity - aSubMeshOnCellType.size() = "<SetValue(j++,(unsigned char)aVtkType); + }else{ + for(int iElem = 0; iElem < aNbElem; iElem++, aTupleId++){ + TCValueSliceArr aValueSliceArr = aMeshValue.GetCompValueSliceArr(iElem); + for(int iComp = 0; iComp < aNbComp; iComp++){ + const TCValueSlice& aValueSlice = aValueSliceArr[iComp]; + aDataValues[iComp] = 0.0; + for(int iGauss = 0; iGauss < aNbGauss; iGauss++){ + aDataValues[iComp] += aValueSlice[iGauss]; + } + aDataValues[iComp] /= aNbGauss; + } + aFloatArray->SetTuple(aTupleId,&aDataValues[0]); + aDataArray->SetTuple(aTupleId,&aDataValues[0]); } } } - vtkIdType *pts = 0, npts = 0; - vtkIntArray* aCellLocationsArray = vtkIntArray::New(); - aCellLocationsArray->SetNumberOfComponents(1); - aCellLocationsArray->SetNumberOfTuples(aNbCells); - aConnectivity->InitTraversal(); - for(int i=0; aConnectivity->GetNextCell(npts,pts); i++) - aCellLocationsArray->SetValue(i,aConnectivity->GetTraversalLocation(npts)); - theStorage->SetCells(aCellTypesArray,aCellLocationsArray,aConnectivity); - if(MYVTKDEBUG) aConnectivity->DebugOn(); - aCellLocationsArray->Delete(); - aCellTypesArray->Delete(); - aConnectivity->Delete(); - } - - - void GetCellsOnGroup(VISU::TVTKSource& theStorage, - VISU::PMeshImpl theMesh, - const VISU::TFamilyAndEntitySet& theFamilyAndEntitySet) + aFloatArray->Delete(); + aDataArray->Delete(); + } + + + //--------------------------------------------------------------- + void + GetSource(const TVTKSource& theSource, + const PGaussSubMeshImpl& theGaussSubMesh, + const PMeshOnEntityImpl& theMeshOnEntity) { - //Calculate dimentions of the group - int aNbCells = 0, aCellsSize = 0; - VISU::TFamilyAndEntitySet::const_iterator aFamilyAndEntitySetIter = theFamilyAndEntitySet.begin(); - for(; aFamilyAndEntitySetIter != theFamilyAndEntitySet.end(); aFamilyAndEntitySetIter++){ - const VISU::TFamilyAndEntity& aFamilyAndEntity = *aFamilyAndEntitySetIter; - const string& aFamilyName = aFamilyAndEntity.first; - const VISU::TEntity& anEntity = aFamilyAndEntity.second; - const VISU::PMeshOnEntity aMeshOnEntity = theMesh->myMeshOnEntityMap[anEntity]; - pair aCellsDim = aMeshOnEntity->GetCellsDims(aFamilyName); - aNbCells += aCellsDim.first; - aCellsSize += aCellsDim.second; - } + const TPointCoords& aCoords = theGaussSubMesh->myPointCoords; + vtkIdType aNbPoints = aCoords.GetNbPoints(); + vtkIdType aDim = aCoords.GetDim(); + + vtkIdType aNbCells = theGaussSubMesh->myNbCells; + vtkIdType aCellsSize = theGaussSubMesh->myCellsSize; + vtkCellArray* aConnectivity = vtkCellArray::New(); aConnectivity->Allocate(aCellsSize,0); vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New(); aCellTypesArray->SetNumberOfComponents(1); aCellTypesArray->SetNumberOfTuples(aNbCells); - aFamilyAndEntitySetIter = theFamilyAndEntitySet.begin(); - for(int i = 0, j = 0; aFamilyAndEntitySetIter != theFamilyAndEntitySet.end(); aFamilyAndEntitySetIter++){ - const VISU::TFamilyAndEntity& aFamilyAndEntity = *aFamilyAndEntitySetIter; - const string& aFamilyName = aFamilyAndEntity.first; - const VISU::TEntity& anEntity = aFamilyAndEntity.second; - PMeshOnEntityImpl aMeshOnEntity = theMesh->myMeshOnEntityMap[anEntity]; - PFamilyImpl aFamily = GetFamily(aMeshOnEntity,aFamilyName); - const VISU::TMeshOnEntityImpl::TCellsConn &aCellsConn = aMeshOnEntity->myCellsConn; - VISU::TMeshOnEntityImpl::TCellsConn::const_iterator aCellsConnIter = aCellsConn.begin(); - for(; aCellsConnIter != aCellsConn.end(); aCellsConnIter++){ - const VISU::TMeshOnEntityImpl::TConnForCellType& anArray = aCellsConnIter->second; - int aVtkType = aCellsConnIter->first; - MSG(MYDEBUG,"GetCellsOnGroup - aVtkType = "<> There is no elements on the family !!!"); - VISU::TFamilyImpl::TSubMesh::const_iterator aSubMeshIter = aSubMesh.find(aVtkType); - if(aSubMeshIter == aSubMesh.end()) continue; - const VISU::TFamilyImpl::TSubMeshOnCellType& aSubMeshOnCellType = aSubMeshIter->second; - MSG(MYDEBUG,"GetCellsOnGroup - aSubMeshOnCellType.size() = "<SetValue(j++,(unsigned char)aVtkType); - } - } + + const TVTKPoints& aPoints = aCoords.GetPoints(); + vtkIdList *anIdList = vtkIdList::New(); + anIdList->SetNumberOfIds(1); + for(vtkIdType aPointId = 0; aPointId < aNbPoints; aPointId++){ + TCCoordSlice aSlice = aCoords.GetCoordSlice(aPointId); + + float aCoords[3] = {0.0, 0.0, 0.0}; + for(vtkIdType aDimId = 0; aDimId < aDim; aDimId++) + aCoords[aDimId] = aSlice[aDimId]; + + aPoints->SetPoint(aPointId,aCoords); + + anIdList->SetId(0,aPointId); + aConnectivity->InsertNextCell(anIdList); + aCellTypesArray->SetValue(aPointId,(unsigned char)VTK_VERTEX); } - vtkIdType *pts = 0, npts = 0; + anIdList->Delete(); + vtkIntArray* aCellLocationsArray = vtkIntArray::New(); aCellLocationsArray->SetNumberOfComponents(1); aCellLocationsArray->SetNumberOfTuples(aNbCells); + + vtkIdType *pts = 0, npts = 0; aConnectivity->InitTraversal(); for(int i = 0; aConnectivity->GetNextCell(npts,pts); i++) aCellLocationsArray->SetValue(i,aConnectivity->GetTraversalLocation(npts)); - theStorage->SetCells(aCellTypesArray,aCellLocationsArray,aConnectivity); + + const TVTKSource& aSource = theGaussSubMesh->GetSource(); + aSource->SetCells(aCellTypesArray,aCellLocationsArray,aConnectivity); + aSource->SetPoints(aPoints.GetPointer()); + aCellLocationsArray->Delete(); aCellTypesArray->Delete(); aConnectivity->Delete(); - } + } - void InitProfile(VISU::TVTKExtractFilter& theFilter, - PMeshOnEntityImpl theMeshOnEntity, - PValForTimeImpl theValForTime) - { - const VISU::TValForTimeImpl::TValForCells& aValForCells = theValForTime->myValForCells; - const VISU::TMeshOnEntityImpl::TCellsConn &aCellsConn = theMeshOnEntity->myCellsConn; - VISU::TMeshOnEntityImpl::TCellsConn::const_iterator aCellsConnIter = aCellsConn.begin(); - for(; aCellsConnIter != aCellsConn.end(); aCellsConnIter++){ - const vtkIdType& aCellType = aCellsConnIter->first; - if(aValForCells.find(aCellType) == aValForCells.end()) - theFilter->RemoveCellsWithType(aCellType); - } - } - - - void GetValsOnTimeStamp(vtkFloatArray *theFloatArray, - const vtkIdType& theNumberOfTuples, - const std::string& theFieldName, - VISU::PFieldImpl theField, - VISU::PValForTimeImpl theValForTime) - { - //theFloatArray->DebugOn(); - theFloatArray->SetNumberOfTuples(theNumberOfTuples); - theFloatArray->SetName(theFieldName.c_str()); - MSG(MYDEBUG,"GetValsOnTimeStamp - theNumberOfTuples = "<myValForCells; - VISU::TValForTimeImpl::TValForCells::const_iterator aValForCellsIter = aValForCells.begin(); - for(int k = 0; aValForCellsIter != aValForCells.end(); aValForCellsIter++) { - const VISU::TValForTimeImpl::TValForCellsWithType& anArray = aValForCellsIter->second; - int iEnd = anArray.size()/theField->myNbComp; - int aVtkType = aValForCellsIter->first; - MSG(MYDEBUG,"GetValsOnTimeStamp - iEnd = "<myTime; - string aFieldName = theField->myMeshName + ", " + theField->myName + ": " + - VISU_Convertor::GenerateName(aTime); - return aFieldName; + PGaussImpl aGauss = theGaussSubMesh->myGauss; + INITMSG(MYDEBUG,"GetGaussSubMesh - aVGeom = "<myGeom<myIsDone) + return; + + if(theGaussSubMesh->myIsVTKDone) + return; + + const TVTKSource& aSource = theGaussSubMesh->GetSource(); + GetSource(aSource,theGaussSubMesh,theMeshOnEntity); + INITMSGA(MYDEBUG,0,"GetNumberOfPoints - "<GetNumberOfPoints()<GetNumberOfCells()<myIsVTKDone = true; } + - void GetTimeStamp(VISU::TVTKSource& theStorage, - const VISU::PFieldImpl theField, - const VISU::PValForTimeImpl theValForTime) + //--------------------------------------------------------------- + void + BuildGaussMesh(const PMeshImpl& theMesh, + const PMeshOnEntityImpl& theMeshOnEntity, + const PGaussMeshImpl& theGaussMesh) { - int aNumberOfTuples = theField->myDataSize/theField->myNbComp; - string aFieldName = GenerateFieldName(theField,theValForTime); - MSG(MYDEBUG,"GetTimeStamp(TVTKSource) - aFieldName = "<GetFilter(); + const TGeom2GaussSubMesh& aGeom2GaussSubMesh = theGaussMesh->myGeom2GaussSubMesh; + TGeom2GaussSubMesh::const_iterator anIter = aGeom2GaussSubMesh.begin(); + for(; anIter != aGeom2GaussSubMesh.end(); anIter++){ + PGaussSubMeshImpl aGaussSubMesh = anIter->second; + if(aGaussSubMesh->myStatus == eRemoveAll) + continue; + + GetGaussSubMesh(theMesh, + theMeshOnEntity, + theGaussMesh, + aGaussSubMesh); + + const TVTKSource& aSource = aGaussSubMesh->GetSource(); + + anAppendFilter->AddInput(aSource.GetPointer()); } + anAppendFilter->Update(); // Fix on VTK - vtkFloatArray *aFloatArray = vtkFloatArray::New(); - switch(theField->myNbComp) { - case 1: - aFloatArray->SetNumberOfComponents(1); - aDataSetAttributes->SetScalars(aFloatArray); - break; - default: - aFloatArray->SetNumberOfComponents(3); - aDataSetAttributes->SetVectors(aFloatArray); - } + theMeshOnEntity->GetVTKOutput()->Update(); - GetValsOnTimeStamp(aFloatArray,aNumberOfTuples,aFieldName,theField,theValForTime); + vtkDataSet* aSource = anAppendFilter->GetOutput(); + INITMSGA(MYDEBUG,0,"aNbPoints - "<GetNumberOfPoints()<GetNumberOfCells()<myIsVTKDone = true; } - void GetTimeStamp(VISU::TVTKAttribyteFilter& theAttribyteFilter, - VISU::TVTKMergetFilter& theMergeFilter, - VISU::TVTKExtractFilter& theExtractFilter, - const VISU::PFieldImpl theField, - const VISU::PValForTimeImpl theValForTime) + + //--------------------------------------------------------------- + void + PrintMemorySize(vtkUnstructuredGrid* theDataSet) { - int aNumberOfTuples = theField->myDataSize/theField->myNbComp; - string aFieldName = GenerateFieldName(theField,theValForTime); - MSG(MYDEBUG,"GetTimeStamp(TVTKAttribyteFilter) - aFieldName = "<GetOutput(),aFileName); + } + + if(MYVTKDEBUG){ + GetMeshOnEntitySize(theMeshName,theEntity); + PrintMemorySize(anAppendFilter->GetOutput()); + } + } + +#ifndef _DEXCEPT_ + }catch(...){ + throw; + } +#endif + + return aMeshOnEntity; +} + + +//--------------------------------------------------------------- +VISU::PIDMapper +VISU_Convertor_impl +::GetFamilyOnEntity(const std::string& theMeshName, + const VISU::TEntity& theEntity, + const std::string& theFamilyName) +{ + INITMSG(MYDEBUG,"GetFamilyOnEntity"<< + "; theMeshName = '"<(aFindFamilyOnEntity);; + PMeshOnEntityImpl aMeshOnEntity = boost::get<1>(aFindFamilyOnEntity); + PFamilyImpl aFamily = boost::get<2>(aFindFamilyOnEntity); + //Main part of code +#ifndef _DEXCEPT_ try{ - if(aSource.GetPointer() == NULL){ - aSource = TOutput::New(); - aSource->Delete(); +#endif + if(!aFamily->myIsVTKDone){ + const TVTKSource& aSource = aFamily->GetSource(); if(MYVTKDEBUG) aSource->DebugOn(); - LoadMeshOnEntity(aMeshOnEntity,theFamilyName); - GetPoints(aSource,aMesh); - GetCellsOnEntity(aSource,aMeshOnEntity,theFamilyName); + + GetMeshOnEntity(theMeshName,theEntity); + + LoadFamilyOnEntity(aMesh,aMeshOnEntity,aFamily); + aSource->SetPoints(GetPoints(aMesh)); + GetCellsOnFamily(aSource,aMeshOnEntity,aFamily); + + aFamily->myNamedPointCoords = aMesh->myNamedPointCoords; + + aFamily->myIsVTKDone = true; + if(MYDEBUGWITHFILES){ - string aMeshName = QString(theMeshName.c_str()).simplifyWhiteSpace().latin1(); - string aFamilyName = QString(theFamilyName.c_str()).simplifyWhiteSpace().latin1(); - string aFileName = string("/users/")+getenv("USER")+"/"+getenv("USER")+"-"; + std::string aMeshName = QString(theMeshName.c_str()).simplifyWhiteSpace().latin1(); + std::string aFamilyName = QString(theFamilyName.c_str()).simplifyWhiteSpace().latin1(); + std::string aFileName = string(getenv("HOME"))+"/"+getenv("USER")+"-"; aFileName += aMeshName + dtos("-%d-",int(theEntity)) + aFamilyName + "-Conv.vtk"; VISU::WriteToFile(aSource.GetPointer(),aFileName); } + + if(MYVTKDEBUG){ + GetFamilyOnEntitySize(theMeshName,theEntity,theFamilyName); + PrintMemorySize(aSource.GetPointer()); + } } - if(MYVTKDEBUG){ - GetMeshOnEntitySize(theMeshName,theEntity,theFamilyName); - vtkUnstructuredGrid* aDataSet = aSource.GetPointer(); - aDataSet->Update(); - MSG(MYVTKDEBUG,"GetMeshOnEntity - GetPoints() = "<GetPoints()->GetActualMemorySize()*1000)); - MSG(MYVTKDEBUG,"GetMeshOnEntity - GetCells() = "<GetCells()->GetActualMemorySize()*1000)); - MSG(MYVTKDEBUG,"GetMeshOnEntity - GetCellTypesArray() = "<GetCellTypesArray()->GetActualMemorySize()*1000)); - MSG(MYVTKDEBUG,"GetMeshOnEntity - GetCellLocationsArray() = "<GetCellLocationsArray()->GetActualMemorySize()*1000)); - aDataSet->BuildLinks(); - MSG(MYVTKDEBUG,"GetMeshOnEntity - GetCellLinks() = "<GetCellLinks()->GetActualMemorySize()*1000)); - MSG(MYVTKDEBUG,"GetMeshOnEntity - GetActualMemorySize() = "<GetActualMemorySize()*1000)); - } + +#ifndef _DEXCEPT_ }catch(...){ - aSource = vtkSmartPointerBase(); throw; } - return aSource.GetPointer(); +#endif + + return aFamily; } -VISU_Convertor::TOutput* -VISU_Convertor_impl::GetMeshOnGroup(const string& theMeshName, - const string& theGroupName) + +//--------------------------------------------------------------- +VISU::PIDMapper +VISU_Convertor_impl +::GetMeshOnGroup(const string& theMeshName, + const string& theGroupName) { - MSG(MYDEBUG,"GetMeshOnGroup - theMeshName = '"<(aFindMeshOnGroup); PGroupImpl aGroup = boost::get<1>(aFindMeshOnGroup); - const VISU::TFamilyAndEntitySet& aFamilyAndEntitySet = aGroup->myFamilyAndEntitySet; - VISU::TVTKSource& aSource = aGroup->myStorage; + //Main part of code +#ifndef _DEXCEPT_ try{ - if(aSource.GetPointer() == NULL){ - aSource = TOutput::New(); - aSource->Delete(); - LoadMeshOnGroup(aMesh,aFamilyAndEntitySet); - GetPoints(aSource,aMesh); - GetCellsOnGroup(aSource,aMesh,aFamilyAndEntitySet); +#endif + if(!aGroup->myIsVTKDone){ + const TVTKAppendFilter& anAppendFilter = aGroup->GetFilter(); + const VISU::TFamilySet& aFamilySet = aGroup->myFamilySet; + + LoadMeshOnGroup(aMesh,aFamilySet); + anAppendFilter->SetPoints(GetPoints(aMesh)); + + TFamilySet::const_iterator anIter = aFamilySet.begin(); + + TID2ID& anElemObj2VTKID = aGroup->myElemObj2VTKID; + TFamilyArr& aFamilyArr = aGroup->myFamilyArr; + aFamilyArr.resize(aFamilySet.size()); + + for(vtkIdType anID = 0; anIter != aFamilySet.end(); anIter++){ + PFamilyImpl aFamily = *anIter; + const std::string& aFamilyName = aFamily->myName; + const VISU::TEntity& anEntity = aFamily->myEntity; + + VISU::PIDMapper anIDMapper = GetFamilyOnEntity(theMeshName,anEntity,aFamilyName); + VISU::TVTKOutput* anOutput = anIDMapper->GetVTKOutput(); + anAppendFilter->AddInput(anOutput); + + vtkIdType aNbCells = anOutput->GetNumberOfCells(); + for(vtkIdType aCellID = 0; aCellID < aNbCells; aCellID++){ + anElemObj2VTKID[aFamily->GetElemObjID(aCellID)] = aCellID; + } + aFamilyArr[anID] = aFamily; + } + aGroup->myNamedPointCoords = aMesh->myNamedPointCoords; + + aGroup->myIsVTKDone = true; + if(MYDEBUGWITHFILES){ - string aMeshName = QString(theMeshName.c_str()).simplifyWhiteSpace().latin1(); - string aGroupName = QString(theGroupName.c_str()).simplifyWhiteSpace().latin1(); - string aFileName = string("/users/")+getenv("USER")+"/"+getenv("USER")+"-"; + std::string aMeshName = QString(theMeshName.c_str()).simplifyWhiteSpace().latin1(); + std::string aGroupName = QString(theGroupName.c_str()).simplifyWhiteSpace().latin1(); + std::string aFileName = string(getenv("HOME"))+"/"+getenv("USER")+"-"; aFileName += aMeshName + "-" + aGroupName + "-Conv.vtk"; - VISU::WriteToFile(aSource.GetPointer(),aFileName); + VISU::WriteToFile(anAppendFilter->GetOutput(),aFileName); } } +#ifndef _DEXCEPT_ }catch(...){ - aSource = vtkSmartPointerBase(); throw; } - return aSource.GetPointer(); +#endif + + return aGroup; } -VISU_Convertor::TOutput* -VISU_Convertor_impl::GetTimeStampOnMesh(const string& theMeshName, - const VISU::TEntity& theEntity, - const string& theFieldName, - int theStampsNum) + +//--------------------------------------------------------------- +VISU::PIDMapper +VISU_Convertor_impl +::GetTimeStampOnMesh(const string& theMeshName, + const VISU::TEntity& theEntity, + const string& theFieldName, + int theStampsNum) { - MSG(MYDEBUG,"GetTimeStampOnMesh - theMeshName = '"<myMeshName,aVTKMeshOnEntity->myEntity); - - anExtractFilter->SetInput(aVTKMeshOnEntity->myStorage.GetPointer()); - ::InitProfile(anExtractFilter,aMeshOnEntity,aValForTime); - } - if(!anExtractFilter->IsRemoving()){ - aSource = TOutput::New(); - aSource->Delete(); - aSource->ShallowCopy(aVTKMeshOnEntity->myStorage.GetPointer()); - ::GetTimeStamp(aSource,aField,aValForTime); - anOutput = aSource.GetPointer(); - }else{ - anAttribyteFilter = vtkFieldDataToAttributeDataFilter::New(); - anAttribyteFilter->Delete(); - //anAttribyteFilter->DebugOn(); - - VISU::TVTKMergetFilter& aMergeFilter = aValForTime->myMergeFilter; - aMergeFilter = vtkMergeDataObjectFilter::New(); - aMergeFilter->Delete(); - //aMergeFilter->DebugOn(); - - ::GetTimeStamp(anAttribyteFilter,aMergeFilter,anExtractFilter, - aField,aValForTime); - anOutput = anAttribyteFilter->GetUnstructuredGridOutput(); +#endif + if(!anIDMapperFilter->myIsVTKDone){ + LoadValForTimeOnMesh(aMesh,aMeshOnEntity,aField,aValForTime); + + try{ + LoadMeshOnEntity(aMesh,aVTKMeshOnEntity); + }catch(std::exception& exc){ + aVTKMeshOnEntity = aMeshOnEntity; + MSG(MYDEBUG,"Follow exception was occured :\n"<myMeshName,aVTKMeshOnEntity->myEntity); + + PProfileImpl aProfile = aValForTime->myProfile; + GetMeshOnProfile(aMesh,aVTKMeshOnEntity,aProfile); + + anIDMapperFilter->myIDMapper = aProfile; + TVTKOutput* anOutput = anIDMapperFilter->GetVTKOutput(); + const TVTKSource& aSource = anIDMapperFilter->mySource.GetSource(); + GetTimeStampOnProfile(aSource,aField,aValForTime); + + anIDMapperFilter->myIsVTKDone = true; + + if(MYDEBUGWITHFILES){ + string aMeshName = QString(theMeshName.c_str()).simplifyWhiteSpace().latin1(); + string aFieldName = QString(theFieldName.c_str()).simplifyWhiteSpace().latin1(); + string aPrefix = string(getenv("HOME"))+"/"+getenv("USER")+"-"; + string aFileName = aPrefix + aMeshName + dtos("-%d-",int(theEntity)) + + aFieldName + dtos("-%d",theStampsNum) + "-Conv.vtk"; + VISU::WriteToFile(anOutput,aFileName); + } + if(MYVTKDEBUG){ + GetTimeStampSize(theMeshName,theEntity,theFieldName,theStampsNum); + anOutput->Update(); + if(theEntity == VISU::NODE_ENTITY) + BEGMSG(MYVTKDEBUG,"GetPointData() = "<GetPointData()->GetActualMemorySize()*1000)<GetUnstructuredGridOutput(); - aDataSet->Update(); + anOutput->Update(); if(theEntity == VISU::NODE_ENTITY) - MSG(MYVTKDEBUG,"GetTimeStampOnMesh - GetData() = "<GetPointData()->GetActualMemorySize()*1000)); + BEGMSG(MYVTKDEBUG,"GetPointData() = "<GetPointData()->GetActualMemorySize()*1000)<> There is no mesh on the entity - "<second; - + return TFindMeshOnEntity(aMesh, - aMeshOnEntityMap[theEntity], - GetFamily(aMeshOnEntity,theFamilyName)); + aMeshOnEntity); +} + + +//--------------------------------------------------------------- +VISU_Convertor_impl::TFindFamilyOnEntity +VISU_Convertor_impl +::FindFamilyOnEntity(const string& theMeshName, + const VISU::TEntity& theEntity, + const string& theFamilyName) +{ + if(theFamilyName != ""){ + PMeshImpl aMesh = FindMesh(theMeshName); + VISU::TMeshOnEntityMap& aMeshOnEntityMap = aMesh->myMeshOnEntityMap; + VISU::TMeshOnEntityMap::const_iterator aMeshOnEntityMapIter = aMeshOnEntityMap.find(theEntity); + if(aMeshOnEntityMapIter == aMeshOnEntityMap.end()) + EXCEPTION(runtime_error,"FindFamilyOnEntity >> There is no mesh on the entity - "<second; + + TFamilyMap& aFamilyMap = aMeshOnEntity->myFamilyMap; + TFamilyMap::iterator aFamilyMapIter = aFamilyMap.find(theFamilyName); + if(aFamilyMapIter != aFamilyMap.end()){ + const PFamily& aFamily = aFamilyMapIter->second; + return TFindFamilyOnEntity(aMesh, + aMeshOnEntity, + aFamily); + } + } + return TFindFamilyOnEntity(); } -float VISU_Convertor_impl::GetSize() { +//--------------------------------------------------------------- +float +VISU_Convertor_impl +::GetSize() +{ float aResult = 0.0; const VISU::TMeshMap& aMeshMap = GetMeshMap(); VISU::TMeshMap::const_iterator aMeshMapIter = aMeshMap.begin(); @@ -757,7 +2345,7 @@ float VISU_Convertor_impl::GetSize() { VISU::TFamilyMap::const_iterator aFamilyMapIter = aFamilyMap.begin(); for(; aFamilyMapIter != aFamilyMap.end(); aFamilyMapIter++){ const string& aFamilyName = aFamilyMapIter->first; - aResult += GetMeshOnEntitySize(aMeshName,anEntity,aFamilyName); + aResult += GetFamilyOnEntitySize(aMeshName,anEntity,aFamilyName); } //Import mesh on entity aResult += GetMeshOnEntitySize(aMeshName,anEntity); @@ -768,27 +2356,65 @@ float VISU_Convertor_impl::GetSize() { } -float VISU_Convertor_impl::GetMeshOnEntitySize(const std::string& theMeshName, - const VISU::TEntity& theEntity, - const std::string& theFamilyName) +//--------------------------------------------------------------- +float +VISU_Convertor_impl +::GetMeshOnEntitySize(const std::string& theMeshName, + const VISU::TEntity& theEntity) { TFindMeshOnEntity aFindMeshOnEntity = - FindMeshOnEntity(theMeshName,theEntity,theFamilyName); + FindMeshOnEntity(theMeshName,theEntity); + PMeshImpl aMesh = boost::get<0>(aFindMeshOnEntity); - PFamilyImpl aFamily = boost::get<2>(aFindMeshOnEntity); PMeshOnEntityImpl aMeshOnEntity = boost::get<1>(aFindMeshOnEntity); vtkIdType aPointsSize = 3*aMesh->myNbPoints*sizeof(VISU::TCoord); - vtkIdType aNbCells, aCellsSize; + vtkIdType aNbCells = aMeshOnEntity->myNbCells; + vtkIdType aCellsSize = aMeshOnEntity->myCellsSize; + + vtkIdType aConnectivitySize = aCellsSize*sizeof(vtkIdType); + vtkIdType aTypesSize = aNbCells*sizeof(char); + vtkIdType aLocationsSize = aNbCells*sizeof(int); + float aNbCellsPerPoint = aCellsSize / aNbCells - 1; + vtkIdType aLinksSize = aMesh->myNbPoints * + (vtkIdType(sizeof(vtkIdType)*aNbCellsPerPoint) + sizeof(vtkCellLinks::Link)); + aLinksSize = 0; + vtkIdType aResult = aPointsSize + aConnectivitySize + aTypesSize + aLocationsSize + aLinksSize; - if(!aFamily){ - aNbCells = aMeshOnEntity->myNbCells; - aCellsSize = aMeshOnEntity->myCellsSize; - }else{ - aNbCells = aFamily->myNbCells; - aCellsSize = aFamily->myCellsSize; + MSG(MYDEBUG,"GetMeshOnEntitySize "<< + "- aResult = "<(aFindFamilyOnEntity); + PFamilyImpl aFamily = boost::get<2>(aFindFamilyOnEntity); + PMeshOnEntityImpl aMeshOnEntity = boost::get<1>(aFindFamilyOnEntity); + + vtkIdType aPointsSize = 3*aMesh->myNbPoints*sizeof(VISU::TCoord); + vtkIdType aNbCells = aFamily->myNbCells; + vtkIdType aCellsSize = aFamily->myCellsSize; + vtkIdType aConnectivitySize = aCellsSize*sizeof(vtkIdType); vtkIdType aTypesSize = aNbCells*sizeof(char); vtkIdType aLocationsSize = aNbCells*sizeof(int); @@ -797,24 +2423,30 @@ float VISU_Convertor_impl::GetMeshOnEntitySize(const std::string& theMeshName, (vtkIdType(sizeof(vtkIdType)*aNbCellsPerPoint) + sizeof(vtkCellLinks::Link)); aLinksSize = 0; vtkIdType aResult = aPointsSize + aConnectivitySize + aTypesSize + aLocationsSize + aLinksSize; + + MSG(MYDEBUG,"GetFamilyOnEntitySize "<< + "- aResult = "<myGroupMap; @@ -827,15 +2459,19 @@ VISU_Convertor_impl::FindMeshOnGroup(const std::string& theMeshName, } -float VISU_Convertor_impl::GetMeshOnGroupSize(const std::string& theMeshName, - const std::string& theGroupName) +float +VISU_Convertor_impl +::GetMeshOnGroupSize(const std::string& theMeshName, + const std::string& theGroupName) { TFindMeshOnGroup aFindMeshOnGroup = FindMeshOnGroup(theMeshName,theGroupName); PMeshImpl aMesh = boost::get<0>(aFindMeshOnGroup); PGroupImpl aGroup = boost::get<1>(aFindMeshOnGroup); vtkIdType aPointsSize = 3*aMesh->myNbPoints*sizeof(VISU::TCoord); - vtkIdType aNbCells = aGroup->myNbCells, aCellsSize = aGroup->myCellsSize; + TNbASizeCells aNbASizeCells = aGroup->GetNbASizeCells(); + vtkIdType aNbCells = aNbASizeCells.first; + vtkIdType aCellsSize = aNbASizeCells.second; vtkIdType aConnectivityAndTypesSize = aCellsSize*sizeof(vtkIdType); vtkIdType aLocationsSize = aNbCells*sizeof(int); float aNbCellsPerPoint = aCellsSize / aNbCells - 1; @@ -856,14 +2492,17 @@ float VISU_Convertor_impl::GetMeshOnGroupSize(const std::string& theMeshName, return aResult; } + VISU_Convertor_impl::TFindField -VISU_Convertor_impl::FindField(const string& theMeshName, - const VISU::TEntity& theEntity, - const string& theFieldName) +VISU_Convertor_impl +::FindField(const string& theMeshName, + const VISU::TEntity& theEntity, + const string& theFieldName) { - TFindMeshOnEntity aFindMeshOnEntity = FindMeshOnEntity(theMeshName,theEntity,""); + TFindMeshOnEntity aFindMeshOnEntity = + FindMeshOnEntity(theMeshName,theEntity); + PMeshImpl aMesh = boost::get<0>(aFindMeshOnEntity);; - PFamilyImpl aFamily = boost::get<2>(aFindMeshOnEntity); PMeshOnEntityImpl aMeshOnEntity = boost::get<1>(aFindMeshOnEntity); VISU::TMeshOnEntityMap& aMeshOnEntityMap = aMesh->myMeshOnEntityMap; @@ -892,13 +2531,15 @@ VISU_Convertor_impl::FindField(const string& theMeshName, } -float VISU_Convertor_impl::GetFieldOnMeshSize(const std::string& theMeshName, - const VISU::TEntity& theEntity, - const std::string& theFieldName) +float +VISU_Convertor_impl +::GetFieldOnMeshSize(const std::string& theMeshName, + const VISU::TEntity& theEntity, + const std::string& theFieldName) { TFindField aFindField = FindField(theMeshName,theEntity,theFieldName); PMeshOnEntityImpl aVTKMeshOnEntity = boost::get<2>(aFindField); - PField aField = boost::get<3>(aFindField); + PFieldImpl aField = boost::get<3>(aFindField); float aMeshSize = GetMeshOnEntitySize(theMeshName,aVTKMeshOnEntity->myEntity); float aFieldOnMeshSize = float(aField->myDataSize*sizeof(float)*aField->myValField.size()*ERR_SIZE_CALC); @@ -913,10 +2554,11 @@ float VISU_Convertor_impl::GetFieldOnMeshSize(const std::string& theMeshName, VISU_Convertor_impl::TFindTimeStamp -VISU_Convertor_impl::FindTimeStamp(const std::string& theMeshName, - const VISU::TEntity& theEntity, - const std::string& theFieldName, - int theStampsNum) +VISU_Convertor_impl +::FindTimeStamp(const std::string& theMeshName, + const VISU::TEntity& theEntity, + const std::string& theFieldName, + int theStampsNum) { TFindField aFindField = FindField(theMeshName,theEntity,theFieldName); PField aField = boost::get<3>(aFindField); @@ -939,15 +2581,17 @@ VISU_Convertor_impl::FindTimeStamp(const std::string& theMeshName, } -float VISU_Convertor_impl::GetTimeStampSize(const std::string& theMeshName, - const VISU::TEntity& theEntity, - const std::string& theFieldName, - int theStampsNum) +float +VISU_Convertor_impl +::GetTimeStampSize(const std::string& theMeshName, + const VISU::TEntity& theEntity, + const std::string& theFieldName, + int theStampsNum) { TFindTimeStamp aFindTimeStamp = FindTimeStamp(theMeshName,theEntity,theFieldName,theStampsNum); PMeshOnEntityImpl aVTKMeshOnEntity = boost::get<2>(aFindTimeStamp); - PField aField = boost::get<3>(aFindTimeStamp); + PFieldImpl aField = boost::get<3>(aFindTimeStamp); float aMeshSize = GetMeshOnEntitySize(theMeshName,aVTKMeshOnEntity->myEntity); float aTimeStampSize = float(aField->myDataSize*sizeof(float) * ERR_SIZE_CALC); @@ -963,9 +2607,10 @@ float VISU_Convertor_impl::GetTimeStampSize(const std::string& theMeshName, const VISU::PField -VISU_Convertor_impl::GetField(const string& theMeshName, - VISU::TEntity theEntity, - const string& theFieldName) +VISU_Convertor_impl +::GetField(const string& theMeshName, + VISU::TEntity theEntity, + const string& theFieldName) { TFindField aFindField = FindField(theMeshName,theEntity,theFieldName); PField aField = boost::get<3>(aFindField); @@ -974,10 +2619,11 @@ VISU_Convertor_impl::GetField(const string& theMeshName, const VISU::PValForTime -VISU_Convertor_impl::GetTimeStamp(const std::string& theMeshName, - const VISU::TEntity& theEntity, - const std::string& theFieldName, - int theStampsNum) +VISU_Convertor_impl +::GetTimeStamp(const std::string& theMeshName, + const VISU::TEntity& theEntity, + const std::string& theFieldName, + int theStampsNum) { TFindTimeStamp aFindTimeStamp = FindTimeStamp(theMeshName,theEntity,theFieldName,theStampsNum); diff --git a/src/CONVERTOR/VISU_Convertor_impl.hxx b/src/CONVERTOR/VISU_Convertor_impl.hxx index 46284cba..18e494cf 100644 --- a/src/CONVERTOR/VISU_Convertor_impl.hxx +++ b/src/CONVERTOR/VISU_Convertor_impl.hxx @@ -1,121 +1,868 @@ -// Copyright (C) 2003 CEA/DEN, EDF R&D +// SALOME VTKViewer : build VTK viewer into Salome desktop // +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org // // -// File : VISU_Convertor_impl.hxx -// Author : Alexey PETROV -// Module : VISU +// +// File : +// Author : +// Module : SALOME +// $Header$ #ifndef VISU_Convertor_impl_HeaderFile #define VISU_Convertor_impl_HeaderFile +#include + +#include + +class vtkCell; +class vtkPoints; +class vtkUnstructuredGrid; +class VTKViewer_AppendFilter; +class VISU_MergeFilter; + #include "VISU_Convertor.hxx" +#include "MED_SliceArray.hxx" -#include +#ifndef VISU_ENABLE_QUADRATIC +#define VISU_ENABLE_QUADRATIC +#define VISU_USE_VTK_QUADRATIC +#endif -#include -#include -#include -#include -#include "VISU_ExtractUnstructuredGrid.hxx" +namespace VISU +{ + //! Defines VISU enumeration of geometrical types + enum EGeometry {ePOINT1=1, eSEG2=102, eSEG3=103, eTRIA3=203, + eQUAD4=204, eTRIA6=206,eQUAD8=208, eTETRA4=304, + ePYRA5=305, ePENTA6=306, eHEXA8=308, eTETRA10=310, + ePYRA13=313, ePENTA15=315, eHEXA20=320, + ePOLYGONE=400, ePOLYEDRE=500, eNONE=-1}; -#include -#include + //! Get number of nodes for defined geometrical type + vtkIdType + VISUGeom2NbNodes(EGeometry theGeom); -#include + //! Maps VISU geometrical type to VTK one + vtkIdType + VISUGeom2VTK(EGeometry theGeom); -#include + //--------------------------------------------------------------- + using MED::TCSlice; + using MED::TSlice; -namespace VISU{ + typedef vtkUnstructuredGrid TDataSet; + typedef vtkSmartPointer TVTKSource; typedef vtkSmartPointer TVTKPoints; - typedef vtkSmartPointer TVTKSource; - typedef vtkSmartPointer TVTKMergetFilter; - typedef vtkSmartPointer TVTKExtractFilter; - typedef vtkSmartPointer TVTKAttribyteFilter; + typedef vtkSmartPointer TVTKMergeFilter; + + typedef vtkSmartPointer TVTKAppendFilter; typedef float TCoord; - struct TMeshImpl: TMesh{ - TVTKPoints myPoints; + //--------------------------------------------------------------- + //! Define an utility base class which is repsonsible for preventing repetion + struct TIsVTKDone: virtual TBaseStructure + { + TIsVTKDone(); + bool myIsDone; //!< Say, is the corresponding MED entity already loaded into intermediate data structure + bool myIsVTKDone; //!< Say, is the corresponding intermediate data structure already mapped into VTK representation + }; + + + //--------------------------------------------------------------- + //! Define an utility base class which allow to keep calculated number of cells and their size + struct TSizeCounter: virtual TIsVTKDone + { + TSizeCounter(); + vtkIdType myNbCells; //!< Number of cells contained into corresponding sublclass + vtkIdType myCellsSize; //!< Size of cells contained into corresponding sublclass + }; + + + //--------------------------------------------------------------- + //! Define a container for VTK representation + class TSource: public virtual TSizeCounter + { + protected: + mutable TVTKSource mySource; + public: + TSource(); + + //! This method allow to create corresponding VTK data set by demand (not at once) + const TVTKSource& + GetSource() const; + + //! Reimplement the TIDMapper::GetVTKOutput + virtual + TVTKOutput* + GetVTKOutput(); + }; + + + //--------------------------------------------------------------- + //! Define a container for VTK representation + /*! + This container allow to combine other VTK representation into single one. + */ + class TAppendFilter: public virtual TIsVTKDone, + public virtual TIDMapper + { + protected: + mutable TVTKAppendFilter myFilter; + public: + TAppendFilter(); + + //! This method allow to create corresponding VTK filter by demand (not at once) + const TVTKAppendFilter& + GetFilter() const; + + //! Reimplement the TIDMapper::GetVTKOutput + virtual + TVTKOutput* + GetVTKOutput(); + }; + + + //--------------------------------------------------------------- + //! Define a container for VTK representation + /*! + This container allow to assign data to mesh and represent them into single VTK representation + */ + class TMergeFilter: public virtual TIsVTKDone, + public virtual TIDMapper + { + protected: + mutable TVTKMergeFilter myFilter; + public: + TMergeFilter(); + + //! This method allow to create corresponding VTK filter by demand (not at once) + const TVTKMergeFilter& + GetFilter() const; + + //! Reimplement the TIDMapper::GetVTKOutput + virtual + TVTKOutput* + GetVTKOutput(); + }; + + + //--------------------------------------------------------------- + typedef TVector TCoordArray; + typedef TSlice TCoordSlice; + typedef TCSlice TCCoordSlice; + + //! This class is responsible for representation of mesh nodes + class TPointCoords: public virtual TBaseStructure + { + protected: + vtkIdType myDim; //!< Dimension of the nodal coordinates + vtkIdType myNbPoints; //!< Number of nodes in corresponding mesh + + //! An container for coordinates of the nodes + /*! + Usage of slices allow to minimize amount of memory to store the nodal coordinates and + provide unifirm way of conversation with this coordinates (independant from mesh dimension) + */ + TCoordArray myCoord; + TVTKPoints myPoints; //!< VTK representation for the mesh nodes + + public: + TPointCoords(); + + //! To initilize the class + void + Init(vtkIdType theNbPoints, + vtkIdType theDim); + + //! Get slice of coordinates for defined node (const version) + TCCoordSlice + GetCoordSlice(vtkIdType theNodeId) const; + + //! Get slice of coordinates for defined node + TCoordSlice + GetCoordSlice(vtkIdType theNodeId); + + vtkIdType + GetNbPoints() const { return myNbPoints; } + + vtkIdType + GetDim() const { return myDim; } + + vtkIdType + size() const { return GetNbPoints(); } + + const TVTKPoints& + GetPoints() const { return myPoints;} + }; + typedef SharedPtr PPointCoords; + + + //--------------------------------------------------------------- + typedef TVector TVectorID; + typedef std::map TObj2VTKID; + + //! This class is responsible for representation of mesh nodes + /*! + In additition to its base functionlity it support mapping of VTK to object numeration and + keeps names for each of nodes. + */ + class TNamedPointCoords: public virtual TPointCoords + { + protected: + typedef TVector TPointsDim; + TPointsDim myPointsDim; //!< Keeps name of each dimension + TVectorID myVectorID; //!< Keeps object¶ numeration + TObj2VTKID myObj2VTKID; //!< Keeps mapping from object number to VTK one + + public: + + //! To initilize the class (numeration of the nodes can be missed) + void + Init(vtkIdType theNbPoints, + vtkIdType theDim, + const TVectorID& theVectorID = TVectorID()); + + //! Get name for defined dimension + std::string& + GetName(vtkIdType theDim); + + //! Get name for defined dimension (const version) + const std::string& + GetName(vtkIdType theDim) const; + + //! Get object number for node by its VTK one + virtual + vtkIdType + GetObjID(vtkIdType theID) const; + + //! Get VTK number for node by its object one + virtual + vtkIdType + GetVTKID(vtkIdType theID) const; + + //! Get name of node by its object number + virtual + std::string + GetNodeName(vtkIdType theObjID) const; + }; + typedef SharedPtr PNamedPointCoords; + - typedef std::vector TPointsCoord; - TPointsCoord myPointsCoord; + //--------------------------------------------------------------- + //! Specialize TMesh to provide VTK mapping for nodes + struct TMeshImpl: virtual TMesh, + virtual TIsVTKDone + { + PNamedPointCoords myNamedPointCoords; //!< Keeps intermediate representation of the nodes - typedef std::vector TPointsDim; - TPointsDim myPointsDim; + TVTKPoints myPoints; //!< Keeps VTK representation of the nodes + vtkIdType myNbPoints; //!< Keeps number of the nodes + + TMeshImpl(); + }; + typedef SharedPtr PMeshImpl; + + + //--------------------------------------------------------------- + typedef TVector TSubMeshID; + typedef enum {eRemoveAll, eAddAll, eAddPart, eNone} ESubMeshStatus; + + //! Specialize TSubProfile to provide VTK mapping + struct TSubProfileImpl: virtual TSubProfile, + virtual TSource + { + TSubProfileImpl(); + + EGeometry myGeom; //!< Defines to what geometrical type the MED PROFILE belong to + std::string myName; //!< Keeps its name + + //! Get object number of mesh cell by its VTK one + virtual + vtkIdType + GetElemObjID(int theVtkI) const; + + //! Keeps status of the structure + /*! + In some cases MED file does not use MED PROFILES, but at VISU creates corresponding data strucutre + in order to construct mesh for MED TIEMSTAMPS in uniform way. + */ + ESubMeshStatus myStatus; + TSubMeshID mySubMeshID; //!< Keeps numbers of mesh cell which contain the MED PROFILE }; - typedef shared_ptr PMeshImpl; + typedef SharedPtr PSubProfileImpl; + + + //--------------------------------------------------------------- + struct TMeshOnEntityImpl; + + typedef std::map TID2ID; + typedef TVector TSubProfileArr; + typedef std::map TGeom2SubProfile; + + //! Specialize TProfile to provide VTK mapping for MED TIMESTAMP mesh + struct TProfileImpl: virtual TProfile, + virtual TAppendFilter + { + TProfileImpl(); + bool myIsAll; //!< Say, whether the MED TIMESTAMP defined on all MED ENTITY or not + + //! Reimplement the TIDMapper::GetNodeObjID + virtual + vtkIdType + GetNodeObjID(vtkIdType theID) const; + + //! Reimplement the TIDMapper::GetNodeVTKID + virtual + vtkIdType + GetNodeVTKID(vtkIdType theID) const; + + //! Reimplement the TIDMapper::GetNodeCoord + virtual + float* + GetNodeCoord(vtkIdType theObjID); + + //! Reimplement the TIDMapper::GetElemObjID + virtual + vtkIdType + GetElemObjID(vtkIdType theID) const; + + //! Reimplement the TIDMapper::GetElemVTKID + virtual + vtkIdType + GetElemVTKID(vtkIdType theID) const; + + //! Reimplement the TIDMapper::GetElemCell + virtual + vtkCell* + GetElemCell(vtkIdType theObjID); + + //! Reimplement the TIDMapper::GetVTKOutput + virtual + TVTKOutput* + GetVTKOutput(); + + //! Reimplement the TNamedIDMapper::GetNodeName + virtual + std::string + GetNodeName(vtkIdType theObjID) const; + + //! Reimplement the TNamedIDMapper::GetElemName + virtual + std::string + GetElemName(vtkIdType theObjID) const; + + TID2ID myElemObj2VTKID; //!< Keeps object to VTK numeration mapping + TSubProfileArr mySubProfileArr; //!< Keeps sequence of TSubProfiles as they were added into TAppendFilter + PNamedPointCoords myNamedPointCoords; //!< Keeps reference on the same TNamedPointCoords as TMesh + TMeshOnEntityImpl* myMeshOnEntity; // PProfileImpl; + + + //--------------------------------------------------------------- + //! Specialize TIDMapper to provide VTK mapping for MED TIMESTAMP mesh + struct TIDMapperFilter: virtual TMergeFilter + { + TAppendFilter myIDMapper; //!< Responsible for numbering + TSource mySource; //!< Keeps assigned data + + //! Reimplement the TIDMapper::GetNodeObjID + virtual + vtkIdType + GetNodeObjID(vtkIdType theID) const; + + //! Reimplement the TIDMapper::GetNodeVTKID + virtual + vtkIdType + GetNodeVTKID(vtkIdType theID) const; + + //! Reimplement the TIDMapper::GetNodeCoord + virtual + float* + GetNodeCoord(vtkIdType theObjID); + + //! Reimplement the TIDMapper::GetElemObjID + virtual + vtkIdType + GetElemObjID(vtkIdType theID) const; + + //! Reimplement the TIDMapper::GetElemVTKID + virtual + vtkIdType + GetElemVTKID(vtkIdType theID) const; + + //! Reimplement the TIDMapper::GetElemCell + virtual + vtkCell* + GetElemCell(vtkIdType theObjID); + + //! Reimplement the TIDMapper::GetVTKOutput + virtual + TVTKOutput* + GetVTKOutput(); + }; + typedef SharedPtr PIDMapperFilter; + + + //--------------------------------------------------------------- + struct TGaussImpl; + typedef SharedPtr PGaussImpl; + + //! Specialize TGauss to provide more detail information of the MED GAUSS entity for VTK mapping + struct TGaussImpl: virtual TGauss + { + EGeometry myGeom; //!< Define, to which geometrical type the MED GAUSS entity belongs + std::string myName; //!< Keeps name of the MED GAUSS entity + vtkIdType myNbPoints; // TConnect; - typedef std::vector TConnForCellType; - typedef std::map TCellsConn; - TCellsConn myCellsConn; + //! To define a way to implement more detail comparision of the TGaussSubMesh instances + virtual + void + LessThan(const PGaussImpl& theGauss, + bool& theResult) const; }; - typedef shared_ptr PMeshOnEntityImpl; - struct TFamilyImpl: TFamily{ - TVTKSource myStorage; - typedef std::set TSubMeshOnCellType; - typedef std::map TSubMesh; - TSubMesh mySubMesh; + //--------------------------------------------------------------- + //! Specialize TGaussSubMesh to provide VTK mapping for the entity + struct TGaussSubMeshImpl: virtual TGaussSubMesh, + virtual TSource + { + TGaussSubMeshImpl(); + + //! To implement the TGaussPtsIDMapper::GetObjID + virtual + TGaussPointID + GetObjID(vtkIdType theID) const; + + PGaussImpl myGauss; // PFamilyImpl; + typedef SharedPtr PGaussSubMeshImpl; + + + //--------------------------------------------------------------- + typedef TVector TGaussSubMeshArr; + typedef std::map TGeom2GaussSubMesh; + + //! Specialize TGaussMesh to provide VTK mapping for the entity + struct TGaussMeshImpl: virtual TGaussMesh, + virtual TAppendFilter + { + TGaussMeshImpl(); + + //! Reimplement the TGaussPtsIDMapper::GetObjID + virtual + TGaussPointID + GetObjID(vtkIdType theID) const; + + //! Reimplement the TIDMapper::GetVTKOutput + virtual + TVTKOutput* + GetVTKOutput(); + + //! Reimplement the TGaussPtsIDMapper::GetParent + virtual + TNamedIDMapper* + GetParent(); + + TSource mySource; //!< Keeps VTK representation of the Gauss Points + TNamedIDMapper* myParent; //!< Refer to parent mesh + TGaussSubMeshArr myGaussSubMeshArr; //!< Keeps sequence of TGaussSubMesh as they were added into TAppendFilter + TGeom2GaussSubMesh myGeom2GaussSubMesh; //!< Keeps TGaussSubMesh according to their geometrical type + }; + typedef SharedPtr PGaussMeshImpl; + + + //--------------------------------------------------------------- + //! Specialize TGaussPtsIDMapper to provide VTK mapping for MED TIMESTAMP mesh + struct TGaussPtsIDFilter: virtual TIDMapperFilter, + virtual TGaussPtsIDMapper + { + PGaussPtsIDMapper myGaussPtsIDMapper; - struct TGroupImpl: TGroup{ - TVTKSource myStorage; + //! Reimplement the TGaussPtsIDMapper::GetObjID + virtual + TGaussPointID + GetObjID(vtkIdType theID) const; + + //! Reimplement the TGaussPtsIDMapper::GetParent + virtual + TNamedIDMapper* + GetParent(); }; - typedef shared_ptr PGroupImpl; + typedef SharedPtr PGaussPtsIDFilter; + - struct TFieldImpl: TField{ - TVTKExtractFilter myExtractFilter; - ~TFieldImpl() - { - if(myExtractFilter.GetPointer()) - myExtractFilter->UnRegisterAllOutputs(); - } + //--------------------------------------------------------------- + typedef TVector TConnect; + typedef TVector TCell2Connect; + + //! The class is responsible for mapping of cells of defined geometrical type + struct TSubMeshImpl: virtual TSource + { + + //! To implement the TIDMapper::GetElemObjID + virtual + vtkIdType + GetElemObjID(vtkIdType theID) const; + + //! To implement the TNamedIDMapper::GetElemName + virtual + std::string + GetElemName(vtkIdType theObjID) const; + + vtkIdType myStartID; + TCell2Connect myCell2Connect; //!< Contains connectivity for the cells + }; + typedef SharedPtr PSubMeshImpl; + + + //--------------------------------------------------------------- + typedef std::map TGeom2SubMesh; + typedef TVector TSubMeshArr; + + //! Specialize TMeshOnEntity to provide VTK mapping for the entity + struct TMeshOnEntityImpl: virtual TMeshOnEntity, + virtual TAppendFilter, + virtual TSizeCounter + { + //! Reimplement the TIDMapper::GetNodeVTKID + virtual + vtkIdType + GetNodeVTKID(vtkIdType theID) const; + + //! Reimplement the TIDMapper::GetNodeObjID + virtual + vtkIdType + GetNodeObjID(vtkIdType theID) const; + + //! Reimplement the TIDMapper::GetElemVTKID + virtual + vtkIdType + GetElemVTKID(vtkIdType theID) const; + + //! Reimplement the TIDMapper::GetElemObjID + virtual + vtkIdType + GetElemObjID(vtkIdType theID) const; + + //! Reimplement the TNamedIDMapper::GetNodeName + virtual + std::string + GetNodeName(vtkIdType theObjID) const; + + //! Reimplement the TNamedIDMapper::GetElemName + virtual + std::string + GetElemName(vtkIdType theObjID) const; + + TID2ID myElemObj2VTKID; //!< To support object to VTK number mapping + TSubMeshArr mySubMeshArr; //!< Keeps sequence of TSubMeshImpl as they were added into TAppendFilter + PNamedPointCoords myNamedPointCoords; //!< Share the same instance with TMesh to implement nodal mapping + + TGeom2SubMesh myGeom2SubMesh; //!< Keeps TSubMeshImpl according to their geometrical type }; - typedef shared_ptr PFieldImpl; + typedef SharedPtr PMeshOnEntityImpl; - struct TValForTimeImpl: TValForTime{ - TVTKAttribyteFilter myAttribyteFilter; - TVTKMergetFilter myMergeFilter; - TVTKSource myStorage; - typedef std::vector TValForCellsWithType; - typedef std::map TValForCells; - TValForCells myValForCells; + //--------------------------------------------------------------- + typedef std::map TGeom2SubMeshID; - ~TValForTimeImpl() - { - if(myMergeFilter.GetPointer()) - myMergeFilter->UnRegisterAllOutputs(); - if(myAttribyteFilter.GetPointer()) - myAttribyteFilter->UnRegisterAllOutputs(); - } + //! Specialize TFamily to provide VTK mapping for the entity + struct TFamilyImpl: virtual TFamily, + virtual TSource + { + //! Reimplement the TIDMapper::GetNodeObjID + vtkIdType + GetNodeObjID(vtkIdType theID) const ; + + //! Reimplement the TIDMapper::GetNodeVTKID + virtual + vtkIdType + GetNodeVTKID(vtkIdType theID) const ; + + //! Reimplement the TIDMapper::GetElemVTKID + virtual + vtkIdType + GetElemVTKID(vtkIdType theID) const; + + //! Reimplement the TIDMapper::GetElemObjID + virtual + vtkIdType + GetElemObjID(vtkIdType theID) const; + + //! Reimplement the TIDMapper::GetVTKOutput + virtual + TVTKOutput* + GetVTKOutput(); + + PNamedPointCoords myNamedPointCoords; //!< Share the same instance with TMesh to implement nodal mapping + TID2ID myElemObj2VTKID; //!< To support object to VTK number mapping + TSubMeshID myMeshID; //!< Keeps numbers of mesh elements that belongs to the MED FAMILY + + TGeom2SubMeshID myGeom2SubMeshID; //!< Keeps TSubMeshID according to their geometrical type + }; + typedef SharedPtr PFamilyImpl; + + + //--------------------------------------------------------------- + typedef std::pair TNbASizeCells; + typedef TVector TFamilyArr; + + //! Specialize TGroup to provide VTK mapping for the entity + struct TGroupImpl: virtual TGroup, + virtual TAppendFilter + { + //! Calculate pair of values - number of cells and its size + TNbASizeCells + GetNbASizeCells() const; + + //! Reimplement the TIDMapper::GetElemVTKID + virtual + vtkIdType + GetElemVTKID(vtkIdType theID) const; + + //! Reimplement the TIDMapper::GetElemObjID + virtual + vtkIdType + GetElemObjID(vtkIdType theID) const; + + //! Reimplement the TIDMapper::GetNodeObjID + virtual + vtkIdType + GetNodeObjID(vtkIdType theID) const; + + //! Reimplement the TIDMapper::GetNodeVTKID + virtual + vtkIdType + GetNodeVTKID(vtkIdType theID) const; + + TID2ID myElemObj2VTKID; //!< To support object to VTK number mapping + TFamilyArr myFamilyArr; //!< Keeps sequence of TFamily as they were added into TAppendFilter + PNamedPointCoords myNamedPointCoords; //!< Share the same instance with TMesh to implement nodal mapping + }; + typedef SharedPtr PGroupImpl; + + + //--------------------------------------------------------------- + typedef TVector TMinMaxArr; + + //! Specialize TField to provide VTK mapping for the entity + struct TFieldImpl: virtual TField + { + vtkIdType myDataSize; //!< Keeps size of the assigned data + + TMinMaxArr myMinMaxArr; //!< Keeps min/max values for each component of the MED FIELD + + //! Implement the TField::GetMinMax + virtual + TMinMax + GetMinMax(vtkIdType theCompID); + + //! To initialize the data structure + void + InitArrays(vtkIdType theNbComp); + + TFieldImpl(); }; - typedef shared_ptr PValForTimeImpl; + typedef SharedPtr PFieldImpl; + + + //--------------------------------------------------------------- + typedef TVector TValue; + typedef TSlice TValueSlice; + typedef TCSlice TCValueSlice; + + typedef TVector TCValueSliceArr; + typedef TVector TValueSliceArr; + //! Define a container to get access to data assigned to mesh + struct TMeshValue + { + TValue myValue; //!< Keeps all values as one dimensional sequence + + vtkIdType myNbElem; //!< Defines number of mesh elements where the data assigned to + vtkIdType myNbComp; //!< Keeps number of components of corresponding MED FIELD + vtkIdType myNbGauss; //!< Defines number of Gauss Points + vtkIdType myStep; //! Internal variable + + //! To intitilize the data strucutre + void + Init(vtkIdType theNbElem, + vtkIdType theNbGauss, + vtkIdType theNbComp); + + //! To get assigned values first by Gauss Points and then by components (constant version) + TCValueSliceArr + GetGaussValueSliceArr(vtkIdType theElemId) const; + + //! To get assigned values first by Gauss Points and then by components + TValueSliceArr + GetGaussValueSliceArr(vtkIdType theElemId); + + //! To get assigned values first by components and then by Gauss Points (constant version) + TCValueSliceArr + GetCompValueSliceArr(vtkIdType theElemId) const; + + //! To get assigned values first by components and then by Gauss Points + TValueSliceArr + GetCompValueSliceArr(vtkIdType theElemId); + }; + + + //--------------------------------------------------------------- + typedef std::map TGeom2Value; + typedef std::map TGeom2NbGauss; + + //! Specialize TValForTime to provide VTK mapping for the entity + struct TValForTimeImpl: virtual TValForTime + { + PGaussPtsIDFilter myGaussPtsIDFilter; //!< Keep VTK representation for mesh and data on Gauss Points + PIDMapperFilter myIDMapperFilter; //!< Keep VTK representation for ordinary mesh and data + TGeom2Value myGeom2Value; //!< Keep value that is assigned to the mesh + TGeom2NbGauss myGeom2NbGauss; //!< Keep number of Gauss Points + + TValForTimeImpl(); + + //! Get mesh data for defined geometrical type (constant version) + const TMeshValue& + GetMeshValue(EGeometry theGeom) const; + + //! Get mesh data for defined geometrical type + TMeshValue& + GetMeshValue(EGeometry theGeom); + + //! Get number of Gauss Points for defined geometrical type + virtual + int + GetNbGauss(EGeometry theGeom) const; + }; + typedef SharedPtr PValForTimeImpl; } -class VISU_Convertor_impl: public VISU_Convertor{ + +//! This class perfroms mapping of intermediate data strucutres into corresponding VTK representation +/*! + It implements VISU_Convertor public interface and declare new pure virtual functions + to fill its intermediate data structure from a MED source +*/ +class VISU_Convertor_impl: public VISU_Convertor +{ public: - virtual float GetSize() ; + VISU_Convertor_impl(); + virtual + ~VISU_Convertor_impl(); + + //! Just to define default behaviour + virtual + VISU_Convertor* + Build(); + + //! Just to define default behaviour + virtual + VISU_Convertor* + BuildEntities(); + + //! Just to define default behaviour + virtual + VISU_Convertor* + BuildFields(); + + //! Just to define default behaviour + virtual + VISU_Convertor* + BuildMinMax(); + + //! Just to define default behaviour + virtual + VISU_Convertor* + BuildGroups(); + + //! Implemention of the VISU_Convertor::GetSize + virtual + float + GetSize(); + + //! Implemention of the VISU_Convertor::GetMeshOnEntity + virtual + VISU::PNamedIDMapper + GetMeshOnEntity(const std::string& theMeshName, + const VISU::TEntity& theEntity); + + //! Implemention of the VISU_Convertor::GetMeshOnEntitySize virtual float GetMeshOnEntitySize(const std::string& theMeshName, - const VISU::TEntity& theEntity, - const std::string& theFamilyName = ""); + const VISU::TEntity& theEntity); + + //! Implemention of the VISU_Convertor::GetFamilyOnEntity + virtual + VISU::PIDMapper + GetFamilyOnEntity(const std::string& theMeshName, + const VISU::TEntity& theEntity, + const std::string& theFamilyName); + //! Implemention of the VISU_Convertor::GetFamilyOnEntitySize + virtual + float + GetFamilyOnEntitySize(const std::string& theMeshName, + const VISU::TEntity& theEntity, + const std::string& theFamilyName); + + //! Implemention of the VISU_Convertor::GetMeshOnGroup + virtual + VISU::PIDMapper + GetMeshOnGroup(const std::string& theMeshName, + const std::string& theGroupName); + + //! Implemention of the VISU_Convertor::GetMeshOnGroupSize virtual float GetMeshOnGroupSize(const std::string& theMeshName, const std::string& theGroupName); + //! Implemention of the VISU_Convertor::GetTimeStampOnMesh + virtual + VISU::PIDMapper + GetTimeStampOnMesh(const std::string& theMeshName, + const VISU::TEntity& theEntity, + const std::string& theFieldName, + int theStampsNum); + + //! Implemention of the VISU_Convertor::GetTimeStampSize virtual float GetTimeStampSize(const std::string& theMeshName, @@ -123,18 +870,29 @@ public: const std::string& theFieldName, int theStampsNum); + //! Implemention of the VISU_Convertor::GetTimeStampOnGaussPts + virtual + VISU::PGaussPtsIDMapper + GetTimeStampOnGaussPts(const std::string& theMeshName, + const VISU::TEntity& theEntity, + const std::string& theFieldName, + int theStampsNum); + + //! Implemention of the VISU_Convertor::GetFieldOnMeshSize virtual float GetFieldOnMeshSize(const std::string& theMeshName, const VISU::TEntity& theEntity, const std::string& theFieldName); + //! Implemention of the VISU_Convertor::GetField virtual const VISU::PField GetField(const std::string& theMeshName, VISU::TEntity theEntity, const std::string& theFieldName); + //! Implemention of the VISU_Convertor::GetTimeStamp virtual const VISU::PValForTime GetTimeStamp(const std::string& theMeshName, @@ -142,46 +900,31 @@ public: const std::string& theFieldName, int theStampsNum); -public: - VISU_Convertor_impl(); - - virtual ~VISU_Convertor_impl(); - - virtual VISU_Convertor* Build() { return this;}; - - virtual - TOutput* - GetMeshOnEntity(const std::string& theMeshName, - const VISU::TEntity& theEntity, - const std::string& theFamilyName = ""); - - virtual - TOutput* - GetMeshOnGroup(const std::string& theMeshName, - const std::string& theGroupName); - - virtual - TOutput* - GetTimeStampOnMesh(const std::string& theMeshName, - const VISU::TEntity& theEntity, - const std::string& theFieldName, - int theStampsNum); - protected: + //! An utility method to find TMesh by its name VISU::PMeshImpl FindMesh(const std::string& theMeshName); - typedef boost::tuple TFindMeshOnEntity; + //! An utility method to find TMeshOnEntity by name of its parent mesh and entity + typedef boost::tuple TFindMeshOnEntity; TFindMeshOnEntity FindMeshOnEntity(const std::string& theMeshName, - const VISU::TEntity& theEntity, - const std::string& theFamilyName); + const VISU::TEntity& theEntity); + + //! An utility method to find TFamily by name of its parent mesh, corresponding entity and its name + typedef boost::tuple TFindFamilyOnEntity; + TFindFamilyOnEntity + FindFamilyOnEntity(const std::string& theMeshName, + const VISU::TEntity& theEntity, + const std::string& theFamilyName); + //! An utility method to find Group by name of its parent mesh and its name typedef boost::tuple TFindMeshOnGroup; TFindMeshOnGroup FindMeshOnGroup(const std::string& theMeshName, const std::string& theGroupName); + //! An utility method to find TField by name of its parent mesh, corresponding entity and its name typedef boost::tuple + +namespace VISU +{ + //--------------------------------------------------------------- + float* + TIDMapper + ::GetNodeCoord(vtkIdType theObjID) + { + vtkIdType aVTKID = GetNodeVTKID(theObjID); + return GetVTKOutput()->GetPoint(aVTKID); + } + + vtkIdType + TIDMapper + ::GetNodeVTKID(vtkIdType theID) const + { + return theID; + } + + vtkIdType + TIDMapper + ::GetNodeObjID(vtkIdType theID) const + { + return theID; + } + + vtkCell* + TIDMapper + ::GetElemCell(int theObjID) + { + vtkIdType aVtkID = GetElemVTKID(theObjID); + return GetVTKOutput()->GetCell(aVtkID); + } + + vtkIdType + TIDMapper + ::GetElemVTKID(vtkIdType theID) const + { + return theID; + } + + vtkIdType + TIDMapper + ::GetElemObjID(vtkIdType theID) const + { + return theID; + } +} diff --git a/src/CONVERTOR/VISU_IDMapper.hxx b/src/CONVERTOR/VISU_IDMapper.hxx new file mode 100644 index 00000000..57cf9ee7 --- /dev/null +++ b/src/CONVERTOR/VISU_IDMapper.hxx @@ -0,0 +1,150 @@ +// VISU CONVERTOR : +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// File : VISU_Convertor.hxx +// Author : Alexey PETROV +// Module : VISU + +#ifndef VISU_IDMapper_HeaderFile +#define VISU_IDMapper_HeaderFile + +/*! + \file VISU_IDMapper.hxx + \brief The file contains declarations for basic interfaces that defines mapping of mesh elements +*/ + +#include "MED_SharedPtr.hxx" + +#include +#include + +class vtkUnstructuredGrid; +class vtkCell; + +namespace VISU +{ + using MED::SharedPtr; + + //--------------------------------------------------------------- + //! Defines a basic class for intemediate data structures + struct TBaseStructure + { + //! Just to provide possibility of dynamic navigation through the class hierarchy + virtual ~TBaseStructure() + {} + + std::string myEntry; //!< To simplify publication of the object tree + }; + typedef SharedPtr PBaseStructure; + + //--------------------------------------------------------------- + typedef vtkUnstructuredGrid TVTKOutput; + + //! Defines a basic abstract interface for VTK to object ID's and backward mapping + /*! + Where object ID means ID which attached to corresponding MED entity. + For example, each MED node can have its own ID as well as any other mesh cell + */ + struct TIDMapper: virtual TBaseStructure + { + //! Get node object ID for corresponding VTK ID + virtual + vtkIdType + GetNodeObjID(vtkIdType theID) const; + + //! Get node VTK ID for corresponding object ID + virtual + vtkIdType + GetNodeVTKID(vtkIdType theID) const; + + //! Get coordinates of node for corresponding object ID + virtual + float* + GetNodeCoord(vtkIdType theObjID); + + //! Get cell object ID for corresponding VTK ID + virtual + vtkIdType + GetElemObjID(vtkIdType theID) const; + + //! Get cell VTK ID for corresponding object ID + virtual + vtkIdType + GetElemVTKID(vtkIdType theID) const; + + //! Get VTK representation of mesh cell for corresponding object ID + virtual + vtkCell* + GetElemCell(vtkIdType theObjID); + + //! Get VTK representation of mesh for corresponding MED entity + virtual + TVTKOutput* + GetVTKOutput() = 0; + }; + typedef SharedPtr PIDMapper; + + + //--------------------------------------------------------------- + //! Defines an abstract interface for VTK to object ID's and backward mapping + /*! + This class defines some additional methods that allow get names for corresponding mesh elements + */ + struct TNamedIDMapper: virtual TIDMapper + { + //! Get name of mesh node for corresponding object ID + virtual + std::string + GetNodeName(vtkIdType theObjID) const = 0; + + //! Get name of mesh cell for corresponding object ID + virtual + std::string + GetElemName(vtkIdType theObjID) const = 0; + }; + typedef SharedPtr PNamedIDMapper; + + + //--------------------------------------------------------------- + typedef vtkIdType TCellID; + typedef vtkIdType TLocalPntID; + //! Defines a type that represent complex ID for defined Gauss Point + typedef std::pair TGaussPointID; + + struct TGaussPtsIDMapper: virtual TIDMapper + { + //! Gets complex Gauss Point ID by its VTK ID + virtual + TGaussPointID + GetObjID(vtkIdType theID) const = 0; + + //! Gets parent TNamedIDMapper, which contains reference mesh cells + virtual + TNamedIDMapper* + GetParent() = 0; + }; + typedef SharedPtr PGaussPtsIDMapper; + + //--------------------------------------------------------------- +} + +#endif diff --git a/src/CONVERTOR/VISU_MedConvertor.cxx b/src/CONVERTOR/VISU_MedConvertor.cxx index 5c47189b..1d51be10 100644 --- a/src/CONVERTOR/VISU_MedConvertor.cxx +++ b/src/CONVERTOR/VISU_MedConvertor.cxx @@ -31,606 +31,1590 @@ #include "MED_Factory.hxx" #include "MED_Algorithm.hxx" +#include "MED_GaussUtils.hxx" #include "MED_Utilities.hxx" -#include +#include +#include -#define _EDF_NODE_IDS_ +#include using namespace std; -using namespace MED; using namespace VISU; +using MED::TInt; +using MED::TFloat; +using MED::EBooleen; + #ifdef _DEBUG_ static int MYDEBUG = 0; +static int MYVALUEDEBUG = 0; +static int MY_FAMILY_DEBUG = 0; +static int MY_GROUP_DEBUG = 0; +//#define _DEXCEPT_ #else static int MYDEBUG = 0; +static int MYVALUEDEBUG = 0; +static int MY_FAMILY_DEBUG = 0; +static int MY_GROUP_DEBUG = 0; #endif +#define _LOAD_FAMILIES_ +#define _EDF_NODE_IDS_ -namespace{ - - using namespace MED; - using namespace VISU; - - int MEDGeom2NbNodes(MED::EGeometrieElement theMEDGeomType) +namespace +{ + //--------------------------------------------------------------- + vtkIdType + MEDGeom2NbNodes(MED::EGeometrieElement theMEDGeomType) { return theMEDGeomType % 100; } - int MEDGeomToVTK(MED::EGeometrieElement theMEDGeomType) - { - switch(theMEDGeomType){ - case ePOINT1: return VTK_VERTEX; - case eSEG2: return VTK_LINE; - case eSEG3: return VTK_LINE; - case eTRIA3: return VTK_TRIANGLE; - case eTRIA6: return VTK_TRIANGLE; - case eQUAD4: return VTK_QUAD; - case eQUAD8: return VTK_QUAD; - case eTETRA4: return VTK_TETRA; - case eTETRA10: return VTK_TETRA; - case eHEXA8: return VTK_HEXAHEDRON; - case eHEXA20: return VTK_HEXAHEDRON; - case ePENTA6: return VTK_WEDGE; - case ePENTA15: return VTK_WEDGE; - case ePYRA5: return VTK_PYRAMID; - case ePYRA13: return VTK_PYRAMID; - case ePOLYGONE: return VTK_POLYGON; - case ePOLYEDRE: return VTK_CONVEX_POINT_SET; - } - return -1; - } - int VTKGeom2NbNodes(int theVTKGeomType) + //--------------------------------------------------------------- + VISU::EGeometry + MEDGeom2VISU(MED::EGeometrieElement theGeom) { - switch(theVTKGeomType){ - case VTK_VERTEX: return 1; - case VTK_LINE: return 2; - case VTK_TRIANGLE: return 3; - case VTK_QUAD: return 4; - case VTK_TETRA: return 4; - case VTK_HEXAHEDRON: return 8; - case VTK_WEDGE: return 6; - case VTK_PYRAMID: return 5; + switch(theGeom){ + case MED::ePOINT1: return VISU::ePOINT1; + case MED::eSEG2: return VISU::eSEG2; + case MED::eTRIA3: return VISU::eTRIA3; + case MED::eQUAD4: return VISU::eQUAD4; + case MED::eTETRA4: return VISU::eTETRA4; + case MED::eHEXA8: return VISU::eHEXA8; + case MED::ePENTA6: return VISU::ePENTA6; + case MED::ePYRA5: return VISU::ePYRA5; + + case MED::eSEG3: return VISU::eSEG3; + case MED::eTRIA6: return VISU::eTRIA6; + case MED::eQUAD8: return VISU::eQUAD8; + case MED::eTETRA10: return VISU::eTETRA10; + case MED::eHEXA20: return VISU::eHEXA20; + case MED::ePENTA15: return VISU::ePENTA15; + case MED::ePYRA13: return VISU::ePYRA13; + + case MED::ePOLYGONE: return VISU::ePOLYGONE; + case MED::ePOLYEDRE: return VISU::ePOLYEDRE; } - return -1; + return VISU::eNONE; } - MED::EGeometrieElement VTKGeomToMED(int theVTKGeomType) + + //--------------------------------------------------------------- + MED::EGeometrieElement + VISUGeom2MED(int theGeom) { - switch(theVTKGeomType){ - case VTK_VERTEX: return ePOINT1; - case VTK_LINE: return eSEG2; - case VTK_TRIANGLE: return eTRIA3; - case VTK_QUAD: return eQUAD4; - case VTK_TETRA: return eTETRA4; - case VTK_HEXAHEDRON: return eHEXA8; - case VTK_WEDGE: return ePENTA6; - case VTK_PYRAMID: return ePYRA5; - case VTK_POLYGON: return ePOLYGONE; - case VTK_CONVEX_POINT_SET: return ePOLYEDRE; + switch(theGeom){ + case VISU::ePOINT1: return MED::ePOINT1; + case VISU::eSEG2: return MED::eSEG2; + case VISU::eTRIA3: return MED::eTRIA3; + case VISU::eQUAD4: return MED::eQUAD4; + case VISU::eTETRA4: return MED::eTETRA4; + case VISU::eHEXA8: return MED::eHEXA8; + case VISU::ePENTA6: return MED::ePENTA6; + case VISU::ePYRA5: return MED::ePYRA5; + + case VISU::eSEG3: return MED::eSEG3; + case VISU::eTRIA6: return MED::eTRIA6; + case VISU::eQUAD8: return MED::eQUAD8; + case VISU::eTETRA10: return MED::eTETRA10; + case VISU::eHEXA20: return MED::eHEXA20; + case VISU::ePENTA15: return MED::ePENTA15; + case VISU::ePYRA13: return MED::ePYRA13; + + case VISU::ePOLYGONE: return MED::ePOLYGONE; + case VISU::ePOLYEDRE: return MED::ePOLYEDRE; } - return EGeometrieElement(-1); + return MED::EGeometrieElement(-1); } - TEntity MEDEntityToVTK(MED::EEntiteMaillage theMEDEntity) + + //--------------------------------------------------------------- + VISU::TEntity + MEDEntityToVTK(MED::EEntiteMaillage theMEDEntity) { switch(theMEDEntity){ - case eNOEUD: return NODE_ENTITY; - case eARETE: return EDGE_ENTITY; - case eFACE: return FACE_ENTITY; - case eMAILLE: return CELL_ENTITY; + case MED::eNOEUD: return NODE_ENTITY; + case MED::eARETE: return EDGE_ENTITY; + case MED::eFACE: return FACE_ENTITY; + case MED::eMAILLE: return CELL_ENTITY; } - return TEntity(-1); + return VISU::TEntity(-1); } - MED::EEntiteMaillage VTKEntityToMED(TEntity theVTKEntity) + + //--------------------------------------------------------------- + MED::EEntiteMaillage + VTKEntityToMED(TEntity theVTKEntity) { switch(theVTKEntity){ - case NODE_ENTITY: return eNOEUD; - case EDGE_ENTITY: return eARETE; - case FACE_ENTITY: return eFACE; - case CELL_ENTITY: return eMAILLE; + case NODE_ENTITY: return MED::eNOEUD; + case EDGE_ENTITY: return MED::eARETE; + case FACE_ENTITY: return MED::eFACE; + case CELL_ENTITY: return MED::eMAILLE; } return MED::EEntiteMaillage(-1); } -} - -extern "C" -VISU_Convertor* CreateConvertor(const string& theFileName) -{ - return new VISU_MedConvertor(theFileName); -} - -VISU_MedConvertor::VISU_MedConvertor(const string& theFileName) { - myFileInfo.setFile(QString(theFileName.c_str())); - myName = myFileInfo.baseName().latin1(); -} -VISU_Convertor* VISU_MedConvertor::Build() { - PWrapper aMed = CrWrapper(myFileInfo.absFilePath().latin1()); - TInt aNbMeshes = aMed->GetNbMeshes(); - TMeshMap& aMeshMap = myMeshMap; + //--------------------------------------------------------------- + PMEDSubProfile + CrSubProfile(const MED::PWrapper& theMEDWrapper, + const MED::PMeshInfo& theMeshInfo, + MED::EEntiteMaillage theMEntity, + MED::EGeometrieElement theMGeom, + const MED::TGeom2Size& theGeom2Size, + const MED::TGeom2Profile& theGeom2Profile) + { + VISU::EGeometry aEGeom = MEDGeom2VISU(theMGeom); + vtkIdType aVNbNodes = VISUGeom2NbNodes(aEGeom); + + PMEDSubProfile aSubProfile(new TMEDSubProfile()); + aSubProfile->myGeom = aEGeom; + aSubProfile->myMGeom = theMGeom; + aSubProfile->myStatus = eAddAll; + + MED::TGeom2Size::const_iterator aTimeStampIter = theGeom2Size.find(theMGeom); + if(aTimeStampIter == theGeom2Size.end()) + aSubProfile->myStatus = eRemoveAll; + else{ + MED::TGeom2Profile::const_iterator aProfileIter = theGeom2Profile.find(theMGeom); + if(aProfileIter != theGeom2Profile.end()){ + MED::PProfileInfo aProfileInfo = aProfileIter->second; + + aSubProfile->myName = aProfileInfo->GetName(); + aSubProfile->myStatus = eAddPart; + + const MED::TElemNum& anElemNum = aProfileInfo->myElemNum; + TInt aNbElem = anElemNum.size(); + aSubProfile->myNbCells = aNbElem; + switch(theMGeom){ + case MED::ePOLYGONE: { + MED::PPolygoneInfo aPolygoneInfo = + theMEDWrapper->GetPPolygoneInfo(theMeshInfo,theMEntity,theMGeom); + for(TInt anElemId = 0; anElemId < aNbElem ; anElemId++){ + TInt aNbConn = aPolygoneInfo->GetNbConn(anElemNum[anElemId]); + aSubProfile->myCellsSize += aNbConn; + } + break; + } + case MED::ePOLYEDRE: { + MED::PPolyedreInfo aPolyedreInfo = + theMEDWrapper->GetPPolyedreInfo(theMeshInfo,theMEntity,theMGeom); + for(TInt anElemId = 0; anElemId < aNbElem ; anElemId++){ + MED::TCConnSliceArr aConnSliceArr = + aPolyedreInfo->GetConnSliceArr(anElemNum[anElemId]); + TInt aNbFaces = aConnSliceArr.size(); + TInt aCellSize = 0; + for(TInt iFace = 0; iFace < aNbFaces; iFace++){ + MED::TCConnSlice aConnSlice = aConnSliceArr[iFace]; + TInt aNbConn = aConnSlice.size(); + aCellSize += aNbConn; + } + aSubProfile->myCellsSize += aCellSize; + } + break; + } + default: { + aSubProfile->myCellsSize = aSubProfile->myNbCells*aVNbNodes; + }} + }else{ + TInt aNbElem = aTimeStampIter->second; + aSubProfile->myNbCells = aNbElem; + switch(theMGeom){ + case MED::ePOLYGONE: { + MED::PPolygoneInfo aPolygoneInfo = + theMEDWrapper->GetPPolygoneInfo(theMeshInfo,theMEntity,theMGeom); + for(TInt anElemId = 0; anElemId < aNbElem ; anElemId++){ + TInt aNbConn = aPolygoneInfo->GetNbConn(anElemId); + aSubProfile->myCellsSize += aNbConn; + } + break; + } + case MED::ePOLYEDRE: { + MED::PPolyedreInfo aPolyedreInfo = + theMEDWrapper->GetPPolyedreInfo(theMeshInfo,theMEntity,theMGeom); + for(TInt anElemId = 0; anElemId < aNbElem ; anElemId++){ + MED::TCConnSliceArr aConnSliceArr = + aPolyedreInfo->GetConnSliceArr(anElemId); + TInt aNbFaces = aConnSliceArr.size(); + TInt aCellSize = 0; + for(TInt iFace = 0; iFace < aNbFaces; iFace++){ + MED::TCConnSlice aConnSlice = aConnSliceArr[iFace]; + TInt aNbConn = aConnSlice.size(); + aCellSize += aNbConn; + } + aSubProfile->myCellsSize += aCellSize; + } + break; + } + default: { + aSubProfile->myCellsSize = aSubProfile->myNbCells*aVNbNodes; + }} + } + } + INITMSG(MYDEBUG, + "- aMGeom = "<GetPMeshInfo(iMesh); + //--------------------------------------------------------------- + TProfileKey + GetProfileKey(const MED::PWrapper& theMEDWrapper, + const MED::PMeshInfo& theMeshInfo, + const MED::TTimeStampVal& theTimeStampVal, + const VISU::TMEDMeshOnEntity& theMeshOnEntity, + MED::EEntiteMaillage theMEntity, + const MED::TGeom2Size& theGeom2Size) + { + INITMSG(MYDEBUG,"GetProfileKey"<first; + PSubProfile aSubProfile = CrSubProfile(theMEDWrapper, + theMeshInfo, + theMEntity, + aMGeom, + theGeom2Size, + aGeom2Profile); + aProfileKey.insert(aSubProfile); + } + + return aProfileKey; + } + - PNodeInfo aNodeInfo = aMed->GetPNodeInfo(aMeshInfo); + //--------------------------------------------------------------- + void + InitProfile(const MED::PWrapper& theMEDWrapper, + const MED::PMeshInfo& theMeshInfo, + MED::TTimeStampVal& theTimeStampVal, + VISU::TMEDMeshOnEntity& theMeshOnEntity, + MED::EEntiteMaillage theMEntity, + const MED::TGeom2Size& theGeom2Size, + VISU::TMEDValForTime& theValForTime) + { + TTimerLog aTimerLog(MYDEBUG,"InitProfile"); + INITMSG(MYDEBUG,"InitProfile"<GetEntityInfo(aMeshInfo); + TProfileKey aProfileKey = GetProfileKey(theMEDWrapper, + theMeshInfo, + theTimeStampVal, + theMeshOnEntity, + theMEntity, + theGeom2Size); - TElemGroup aElemGroup = GetElemsByEntity(aMed,aMeshInfo,aEntityInfo); + TProfileMap::const_iterator anIter = aProfileMap.find(aProfileKey); + if(anIter != aProfileMap.end()){ + theValForTime.myProfile = anIter->second; + INITMSG(MYDEBUG,"aProfileMap.find(aProfileKey)"<myGeom2SubProfile; + + TProfileKey::const_iterator anIter = aProfileKey.begin(); + for(; anIter != aProfileKey.end(); anIter++){ + PMEDSubProfile aSubProfile(*anIter); - TFamilyGroup aFamilyGroup = GetFamilies(aMed,aMeshInfo); + if(aProfile->myIsAll && aSubProfile->myStatus != eAddAll) + aProfile->myIsAll = false; - TFamilyByEntity aFamilyByEntity = GetFamiliesByEntity(aMed,aElemGroup,aFamilyGroup); + VISU::EGeometry aEGeom = aSubProfile->myGeom; + aGeom2SubProfile[aEGeom] = aSubProfile; + } - TGroupInfo aGroupInfo = GetFamiliesByGroup(aFamilyGroup); + aProfileMap[aProfileKey] = aProfile; + theValForTime.myProfile = aProfile; + } + } - // creating TMesh structure and TMeshOnEntityMap - typedef map TFamilyCounterMap; - TFamilyCounterMap aFamilyNbCellsCounterMap, aFamilyCellsSizeCounterMap; - TInt aDim = aMeshInfo->GetDim(); - const string& aMeshName = aMeshInfo->GetName(); - - PMEDMesh aMesh = aMeshMap[aMeshName](new TMEDMesh()); - aMesh->myDim = aDim; - aMesh->myName = aMeshName; - aMesh->myNbPoints = aNodeInfo->GetNbElem(); - aMesh->myMeshInfo = aMeshInfo; - aMesh->myEntityInfo = aEntityInfo; - - INITMSG(MYDEBUG,"aMeshName = '"<myGeom2SubProfile; + + const MED::TTimeStampInfo& aTimeStampInfo = theTimeStampVal.GetTimeStampInfo(); + const MED::TGeom2Gauss& aGeom2Gauss = aTimeStampInfo.GetGeom2Gauss(); + + const MED::TGeom2Size& aGeom2Size = theMeshOnEntity.myGeom2Size; + MED::TGeom2Size::const_iterator anIter = aGeom2Size.begin(); + for(; anIter != aGeom2Size.end(); anIter++){ + MED::EGeometrieElement aMGeom = anIter->first; + VISU::EGeometry aEGeom = MEDGeom2VISU(aMGeom); + + TGeom2SubProfile::iterator anIter2 = aGeom2SubProfile.find(aEGeom); + if(anIter2 == aGeom2SubProfile.end()){ + INITMSG(MYDEBUG,"anIter2 == aGeom2SubProfile.end!!"<second; + + MED::TGeom2Size::const_iterator aTimeStampIter = theGeom2Size.find(aMGeom); + if(aTimeStampIter != theGeom2Size.end()){ + TInt aNbCells = aTimeStampIter->second; + if(aSubProfile->myStatus == eAddPart) + aNbCells = aSubProfile->myNbCells; + + PMEDGaussSubMesh aGaussSubMesh(new TMEDGaussSubMesh()); + aGaussSubMesh->mySubProfile = aSubProfile; + aGaussSubMesh->myStatus = aSubProfile->myStatus; + + PMEDGauss aGauss(new TMEDGauss()); + aGaussSubMesh->myGauss = aGauss; + aGauss->myGeom = aEGeom; + aGauss->myNbPoints = 1; + + MED::TGeom2Gauss::const_iterator aGaussIter = aGeom2Gauss.find(aMGeom); + if(aGaussIter != aGeom2Gauss.end()){ + MED::PGaussInfo aGaussInfo = aGaussIter->second; + aGauss->myGaussInfo = aGaussInfo; + aGauss->myName = aGaussInfo->GetName(); + aGauss->myNbPoints = aGaussInfo->GetNbGauss(); + } + + aGaussSubMesh->myNbCells = aNbCells*aGauss->myNbPoints; + aGaussSubMesh->myCellsSize = aGaussSubMesh->myNbCells*2; + + aGaussKey.insert(aGaussSubMesh); + + INITMSGA(MYDEBUG,0, + "- aEGeom = "<myGeom<< + "; aName = '"<myName<<"'"<< + "; aNbGauss = "<myNbPoints<< + "; aStatus = "<myStatus<< + "; aNbCells = "<myNbCells<< + "; aCellsSize = "<myCellsSize<< + endl); + } + } + + return aGaussKey; + } + + + //--------------------------------------------------------------- + void + InitGaussMesh(MED::TTimeStampVal& theTimeStampVal, + VISU::TMEDMeshOnEntity& theMeshOnEntity, + const MED::TGeom2Size& theGeom2Size, + VISU::TMEDValForTime& theValForTime) + { + TTimerLog aTimerLog(MYDEBUG,"InitGaussMesh"); + INITMSG(MYDEBUG,"InitGaussMesh"<second; + INITMSG(MYDEBUG,"aGaussMeshMap.find(aGaussKey)"<myGeom2GaussSubMesh; + { + TGaussKey::const_iterator anIter = aGaussKey.begin(); + for(; anIter != aGaussKey.end(); anIter++){ + PMEDGaussSubMesh aGaussSubMesh(*anIter); + PMEDGauss aGauss = aGaussSubMesh->myGauss; + VISU::EGeometry aEGeom = aGauss->myGeom; + aGeom2GaussSubMesh[aEGeom] = aGaussSubMesh; + } + } + { + TGaussSubMeshArr& aGaussSubMeshArr = aGaussMesh->myGaussSubMeshArr; + aGaussSubMeshArr.resize(aGeom2GaussSubMesh.size()); + TGeom2GaussSubMesh::const_iterator anIter = aGeom2GaussSubMesh.begin(); + for(TInt anID = 0; anIter != aGeom2GaussSubMesh.end(); anIter++, anID++){ + const PGaussSubMeshImpl& aGaussSubMesh = anIter->second; + aGaussSubMeshArr[anID] = aGaussSubMesh; + } + } + INITMSG(MYDEBUG,"aGaussMeshMap[aGaussKey] = aGaussMesh"<myMeshOnEntityMap; - MED::TEntityInfo::iterator anEntityIter = aEntityInfo.begin(); - for(; anEntityIter != aEntityInfo.end(); anEntityIter++){ - const EEntiteMaillage& aMEntity = anEntityIter->first; - const MED::TGeom& aTGeom = anEntityIter->second; + //--------------------------------------------------------------- + void + InitGaussProfile(const MED::PWrapper& theMEDWrapper, + const MED::PMeshInfo& theMeshInfo, + MED::TTimeStampVal& theTimeStampVal, + VISU::TMEDMeshOnEntity& theMeshOnEntity, + MED::EEntiteMaillage theMEntity, + const MED::TGeom2Size& theGeom2Size, + VISU::TMEDValForTime& theValForTime) + { + TTimerLog aTimerLog(MYDEBUG,"InitGaussProfile"); + INITMSG(MYDEBUG,"InitGaussProfile"<myMeshInfo; + const std::string& aMeshName = theMesh->myName; + TMeshOnEntityMap& aMeshOnEntityMap = theMesh->myMeshOnEntityMap; + MED::TEntityInfo::const_iterator anEntityIter = theEntityInfo.begin(); + for(; anEntityIter != theEntityInfo.end(); anEntityIter++){ + const MED::EEntiteMaillage& aMEntity = anEntityIter->first; + const MED::TGeom2Size& aGeom2Size = anEntityIter->second; + TEntity aVEntity = MEDEntityToVTK(aMEntity); PMEDMeshOnEntity aMeshOnEntity = aMeshOnEntityMap[aVEntity](new TMEDMeshOnEntity()); aMeshOnEntity->myEntity = aVEntity; aMeshOnEntity->myMeshName = aMeshName; - aMeshOnEntity->myGeom = aTGeom; + aMeshOnEntity->myGeom2Size = aGeom2Size; + TFamilyID2CellsSize& aFamilyID2CellsSize = aMeshOnEntity->myFamilyID2CellsSize; - INITMSG(MYDEBUG,"aMEntity = "<myNbCells = aMesh->myNbPoints; - aMeshOnEntity->myCellsSize = 2*aMesh->myNbPoints; + INITMSG(MYDEBUG, + "- aMEntity = "<GetFamNum(iElem); - if(aFamId != 0){ - aFamilyNbCellsCounterMap[aFamId] += 1; - ADDMSG(MYDEBUG,"aFamId="<GetNbConn(iElem) + 1; - } - } - ADDMSG(MYDEBUG,endl); - break; - } - case ePOLYEDRE: - { - PPolyedreInfo aPolyedreInfo = aMed->GetPPolyedreInfo(aMeshInfo,aMEntity,aGeom); - TInt aNbElem = aPolyedreInfo->GetNbElem(); - TElemNum aConn = aPolyedreInfo->GetConnectivite(); - TElemNum aIndex = aPolyedreInfo->GetIndex(); - TInt aNbIndex = aIndex.size(); - TInt aNbConn = aConn.size(); - - aMeshOnEntity->myNbCells += aNbElem; - - for (int ii = 0; iiGetNbConn(ii); - aMeshOnEntity->myCellsSize += aNbConnii; - } - INITMSG(MYDEBUG,"aGeom = "<GetFamNum(iElem); - std::string aName = aPolyedreInfo->GetElemName(iElem); - if(aFamId != 0){ - aFamilyNbCellsCounterMap[aFamId] += 1; - ADDMSG(MYDEBUG,"(aFamId="<GetNbConn(iElem) + 1; - } - } - ADDMSG(MYDEBUG,endl); - break; + for(; aGeom2SizeIter != aGeom2Size.end(); aGeom2SizeIter++){ + const MED::EGeometrieElement& aMGeom = aGeom2SizeIter->first; + + switch(aMGeom){ + case MED::ePOLYGONE: { + MED::PPolygoneInfo aPolygoneInfo = theMEDWrapper->GetPPolygoneInfo(aMeshInfo,aMEntity,aMGeom); + TInt aNbElem = aPolygoneInfo->GetNbElem(); + + INITMSG(MYDEBUG, + "- aMGeom = "<GetFamNum(iElem); - if(aFamId != 0){ - aFamilyNbCellsCounterMap[aFamId] += 1; - ADDMSG(MYDEBUG,"aFamId = "<GetPPolyedreInfo(aMeshInfo,aMEntity,aMGeom); + TInt aNbElem = aPolyedreInfo->GetNbElem(); + + INITMSG(MYDEBUG, + "- aMGeom = "<first; - const TFamilyGroup& aFamilyGroup = aFamilyByEntityIter->second; + } - TEntity aVEntity = MEDEntityToVTK(aMEntity); - VISU::PMEDMeshOnEntity aMeshOnEntity = aMesh->myMeshOnEntityMap[aVEntity]; - VISU::TFamilyMap& aFamilyMap = aMeshOnEntity->myFamilyMap; + + //--------------------------------------------------------------- + void + BuildFieldMap(PMEDMesh theMesh, + const MED::TEntityInfo& theEntityInfo, + MED::PWrapper theMEDWrapper) + { + TTimerLog aTimerLog(MYDEBUG,"BuildFieldMap"); + TInt aNbFields = theMEDWrapper->GetNbFields(); + MED::PMeshInfo aMeshInfo = theMesh->myMeshInfo; + const std::string& aMeshName = theMesh->myName; + INITMSG(MYDEBUG,"BuildFieldMap: aNbFields = "<GetPFieldInfo(aMeshInfo,iField); + TInt aNbComp = aFieldInfo->GetNbComp(); + std::string aFieldName = aFieldInfo->GetName(); - if(aFamilyGroup.empty()) + MED::TGeom2Size aGeom2Size; + MED::EEntiteMaillage aMEntity; + TInt aNbTimeStamps = theMEDWrapper->GetNbTimeStamps(aFieldInfo, + theEntityInfo, + aMEntity, + aGeom2Size); + if(aNbTimeStamps < 1) continue; + + TEntity aVEntity = MEDEntityToVTK(aMEntity); + PMEDMeshOnEntity aMeshOnEntity = theMesh->myMeshOnEntityMap[aVEntity]; + TFieldMap& aFieldMap = aMeshOnEntity->myFieldMap; + PMEDField aField = aFieldMap[aFieldName](new TMEDField()); + aField->myId = iField; + aField->InitArrays(aNbComp); + aField->myEntity = aVEntity; + aField->myName = aFieldName; + aField->myMeshName = aMeshName; + aField->myDataSize = aMeshOnEntity->myNbCells * aNbComp; + + INITMSG(MYDEBUG,"myName = '"<myName<<"'"<< + "; myId = "<myId<< + "; myEntity = "<myEntity<< + "; myDataSize = "<myDataSize<< + "; myNbComp = "<myNbComp<<"\n"); + + for(TInt iComp = 0; iComp < aNbComp; iComp++){ + aField->myCompNames[iComp] = aFieldInfo->GetCompName(iComp); + aField->myUnitNames[iComp] = aFieldInfo->GetUnitName(iComp); + } + + for(TInt iTimeStamp = 1; iTimeStamp <= aNbTimeStamps; iTimeStamp++){ + TTimerLog aTimerLog(MYDEBUG,"GetPTimeStampInfo"); + MED::PTimeStampInfo aTimeStampInfo = theMEDWrapper->GetPTimeStampInfo(aFieldInfo, + aMEntity, + aGeom2Size, + iTimeStamp); + TFloat aDt = aTimeStampInfo->GetDt(); + std::string anUnitDt = aTimeStampInfo->GetUnitDt(); + + TValField& aValField = aField->myValField; + PMEDValForTime aValForTime = aValField[iTimeStamp](new TMEDValForTime()); + aValForTime->myId = iTimeStamp; + aValForTime->myFieldName = aField->myName; + aValForTime->myEntity = aField->myEntity; + aValForTime->myMeshName = aField->myMeshName; + aValForTime->myTime = VISU::TTime(aDt,anUnitDt); + INITMSG(MYDEBUG,"aDt = '"<myGeom2NbGauss; + const MED::TGeom2NbGauss& aMGeom2NbGauss = aTimeStampInfo->myGeom2NbGauss; + MED::TGeom2NbGauss::const_iterator anIter = aMGeom2NbGauss.begin(); + for(; anIter != aMGeom2NbGauss.end(); anIter++){ + const MED::EGeometrieElement& aMGeom = anIter->first; + EGeometry aEGeom = MEDGeom2VISU(aMGeom); + TInt aNbGauss = anIter->second; + aVGeom2NbGauss[aEGeom] = aNbGauss; + } + } + } + } + - INITMSG(MYDEBUG,"aMEntity = "<GetId() == 0) + //--------------------------------------------------------------- + void + BuildFamilyMap(PMEDMesh theMesh, + const MED::TEntityInfo& theEntityInfo, + const MED::TEntity2TGeom2ElemInfo& theEntity2TGeom2ElemInfo, + const MED::TFamilyInfoSet& theFamilyInfoSet, + MED::PWrapper theMEDWrapper) + { + TTimerLog aTimerLog(MYDEBUG,"BuildFamilyMap"); + INITMSG(MYDEBUG,"BuildFamilyMap\n"); + + MED::PMeshInfo aMeshInfo = theMesh->myMeshInfo; + MED::TEntity2FamilySet aEntity2FamilySet = MED::GetEntity2FamilySet(theMEDWrapper,theEntity2TGeom2ElemInfo,theFamilyInfoSet); + MED::TEntity2FamilySet::const_iterator aEntity2FamilySetIter = aEntity2FamilySet.begin(); + for(; aEntity2FamilySetIter != aEntity2FamilySet.end(); aEntity2FamilySetIter++){ + const MED::EEntiteMaillage& aMEntity = aEntity2FamilySetIter->first; + const MED::TFamilyTSizeSet& aFamilyTSizeSet = aEntity2FamilySetIter->second; + + TEntity aVEntity = MEDEntityToVTK(aMEntity); + PMEDMeshOnEntity aMeshOnEntity = theMesh->myMeshOnEntityMap[aVEntity]; + const TFamilyID2CellsSize& aFamilyID2CellsSize = aMeshOnEntity->myFamilyID2CellsSize; + TFamilyMap& aFamilyMap = aMeshOnEntity->myFamilyMap; + + if(aFamilyTSizeSet.empty()) + continue; + + INITMSG(MY_FAMILY_DEBUG, + "- aMEntity = "<myGroups; + "; myCellsSize = "<myCellsSize<< + endl); +#ifdef _DEBUG_ const TInt aNbGroup = aFamilyInfo->GetNbGroup(); for(TInt i = 0; i < aNbGroup; i++){ - const string& aGroupName = aFamilyInfo->GetGroupName(i); - aBindGroups.insert(aGroupName); - INITMSG(MYDEBUG,"aGroupName = '"<GetGroupName(i); + INITMSG(MY_FAMILY_DEBUG,"- aGroupName = '"<myGroupMap; - TGroupInfo::const_iterator aGroupInfoIter = aGroupInfo.begin(); - for(;aGroupInfoIter != aGroupInfo.end(); aGroupInfoIter++){ - const string& aGroupName = aGroupInfoIter->first; - const TFamilyGroup& aFamilyGroup = aGroupInfoIter->second; - PMEDGroup aGroup(new TMEDGroup()); - aGroup->myName = aGroupName; - aGroup->myMeshName = aMesh->myName; - INITMSG(MYDEBUG,"aGroup->myName = '"<myName<<"'\n"); + //--------------------------------------------------------------- + void + BuildGroupMap(PMEDMesh theMesh, + const MED::TFamilyInfoSet& theFamilyInfoSet) + { + TTimerLog aTimerLog(MYDEBUG,"BuildGroupMap"); + INITMSG(MYDEBUG,"BuildGroupMap\n"); - TFamilyGroup::const_iterator aFamilyIter = aFamilyGroup.begin(); - for(; aFamilyIter != aFamilyGroup.end(); aFamilyIter++){ - const PFamilyInfo& aFamilyInfo = *aFamilyIter; - const string& aFamilyName = aFamilyInfo->GetName(); + TGroupMap& aGroupMap = theMesh->myGroupMap; + MED::TGroupInfo aGroupInfo = MED::GetGroupInfo(theFamilyInfoSet); + MED::TGroupInfo::const_iterator aGroupInfoIter = aGroupInfo.begin(); + for(; aGroupInfoIter != aGroupInfo.end(); aGroupInfoIter++){ + const std::string& aGroupName = aGroupInfoIter->first; + INITMSG(MY_GROUP_DEBUG,"aGroupName = '"<myFamilySet; + const MED::TFamilyInfoSet& aFamilyInfoSet = aGroupInfoIter->second; + MED::TFamilyInfoSet::const_iterator aFamilyIter = aFamilyInfoSet.begin(); + for(; aFamilyIter != aFamilyInfoSet.end(); aFamilyIter++){ + const MED::PFamilyInfo& aFamilyInfo = *aFamilyIter; + std::string aFamilyName = aFamilyInfo->GetName(); + + TEntity aVEntity = TEntity(-1); + PMEDFamily aFamily; + // Find aVisuEntity - const TMeshOnEntityMap& aMeshOnEntityMap = aMesh->myMeshOnEntityMap; + const TMeshOnEntityMap& aMeshOnEntityMap = theMesh->myMeshOnEntityMap; TMeshOnEntityMap::const_iterator aMeshOnEntityIter = aMeshOnEntityMap.begin(); for(; aMeshOnEntityIter != aMeshOnEntityMap.end(); aMeshOnEntityIter++){ const PMeshOnEntity& aMeshOnEntity = aMeshOnEntityIter->second; const TFamilyMap& aFamilyMap = aMeshOnEntity->myFamilyMap; TFamilyMap::const_iterator aFamilyMapIter = aFamilyMap.begin(); - for (; aFamilyMapIter != aFamilyMap.end(); aFamilyMapIter++){ - const string& aName = aFamilyMapIter->first; + for(; aFamilyMapIter != aFamilyMap.end(); aFamilyMapIter++){ + const std::string& aName = aFamilyMapIter->first; aFamily = aFamilyMapIter->second; if(aName == aFamilyName){ aVEntity = aFamily->myEntity; goto exit_lable; } } - } + } exit_lable: if(aFamily && aVEntity >= 0){ - aGroup->myFamilyAndEntitySet.insert(TFamilyAndEntity(aFamilyName,aVEntity)); - INITMSG(MYDEBUG,"aFamilyName = '"<myName<<"'; aVEntity = "<myNbCells += aFamily->myNbCells; - aGroup->myCellsSize += aFamily->myCellsSize; + aFamilySet.insert(aFamily); + INITMSG(MY_GROUP_DEBUG, + "- aFamilyName = '"<myFamilyAndEntitySet.empty() && aGroup->myNbCells > 0){ - BEGMSG(MYDEBUG,"myNbCells = "<myNbCells<< - "; myCellsSize = "<myCellsSize<<"\n\n"); + if(!aFamilySet.empty()) aGroupMap.insert(VISU::TGroupMap::value_type(aGroupName,aGroup)); - } } - - TInt aNbFields = aMed->GetNbFields(); - BEGMSG(MYDEBUG,"VISU::TField: NbFields="<GetPFieldInfo(aMeshInfo,iField); - TInt aNbComp = aFieldInfo->GetNbComp(); - const string& aFieldName = aFieldInfo->GetName(); + } - MED::TErr anErr; - MED::TGeom aTGeom; - EEntiteMaillage aMEntity; - TInt aNbTimeStamps = aMed->GetNbTimeStamps(aFieldInfo,aEntityInfo,aMEntity,aTGeom,&anErr); - if (anErr < 0 || aNbTimeStamps < 1) - continue; - TEntity aVEntity = MEDEntityToVTK(aMEntity); - VISU::PMeshOnEntity aMeshOnEntity = aMesh->myMeshOnEntityMap[aVEntity]; - TFieldMap& aFieldMap = aMeshOnEntity->myFieldMap; - PMEDField aField = aFieldMap[aFieldName](new TMEDField()); - aField->myId = iField; - aField->myNbComp = aNbComp; - aField->myEntity = aVEntity; - aField->myName = aFieldName; - aField->myMeshName = aMeshName; - aField->myDataSize = aMeshOnEntity->myNbCells * aNbComp; - aField->myCompNames.resize(aNbComp); - aField->myUnitNames.resize(aNbComp); + //--------------------------------------------------------------- + void + TMEDNamedPointCoords + ::Init(vtkIdType theNbPoints, + vtkIdType theDim, + const MED::PNodeInfo& theNodeInfo) + { + if(theNodeInfo->IsElemNum()) + TNamedPointCoords::Init(theNbPoints,theDim,theNodeInfo->myElemNum); + else + TNamedPointCoords::Init(theNbPoints,theDim); + if(theNodeInfo->IsElemNames()) + myNodeInfo = theNodeInfo; + } - INITMSG(MYDEBUG,"myName = '"<myName<< - "'; myId = "<myId<< - "; myEntity = "<myEntity<< - "; myDataSize = "<myDataSize<< - "; myNbComp = "<myNbComp<<"\n"); + std::string + TMEDNamedPointCoords + ::GetNodeName(vtkIdType theObjID) const + { + if(myNodeInfo) + return myNodeInfo->GetElemName(theObjID); + return TNamedPointCoords::GetNodeName(theObjID); + } - for(TInt iComp = 0; iComp < aNbComp; iComp++){ - aField->myCompNames[iComp] = aFieldInfo->GetCompName(iComp); - aField->myUnitNames[iComp] = aFieldInfo->GetUnitName(iComp); - } - for(TInt iTimeStamp = 1; iTimeStamp <= aNbTimeStamps; iTimeStamp++){ - PTimeStampInfo aTimeStamp = aMed->GetPTimeStampInfo(aFieldInfo, - aMEntity, - aTGeom, - iTimeStamp, - &anErr); - if (anErr < 0) - continue; - - TFloat aDt = aTimeStamp->GetDt(); - const string& anUnitDt = aTimeStamp->GetUnitDt(); - PTimeStampVal aTimeStampVal = aMed->GetPTimeStampVal(aTimeStamp,&anErr); - TValField& aValField = aField->myValField; - PMEDValForTime aValForTime = aValField[iTimeStamp](new TMEDValForTime()); - aValForTime->myId = iTimeStamp; - aValForTime->myFieldName = aField->myName; - aValForTime->myEntity = aField->myEntity; - aValForTime->myMeshName = aField->myMeshName; - aValForTime->myNbComp = aField->myNbComp; - aValForTime->myTime = VISU::TTime(aDt,anUnitDt); - INITMSG(MYDEBUG,"aDt = "<myGaussInfo; + theResult = MED::TGaussInfo::TLess()(aLeft,aReight); } } - } catch (std::runtime_error& exc){ - MSG(MYDEBUG,"Follow exception wqs occured in:\n"<myNbPoints; + TCellID aCellID = theID / aNbPoints; + if(myIsElemNum) + aCellID = myElemNum[aCellID]; + + TLocalPntID aLocalPntID = theID % aNbPoints; + + return TGaussPointID(aCellID,aLocalPntID); } + - return this; -} + //--------------------------------------------------------------- + void + TMEDSubMesh + ::Init(const MED::PElemInfo& theElemInfo) + { + myIsElemNum = theElemInfo->IsElemNum(); + myElemNum = theElemInfo->myElemNum; + if(theElemInfo->IsElemNames()) + myElemInfo = theElemInfo; + } -int VISU_MedConvertor::LoadMeshOnEntity(VISU::PMeshOnEntityImpl theMeshOnEntity, - const string& theFamilyName) -{ - PWrapper aMed = CrWrapper(myFileInfo.absFilePath().latin1()); - const string& aMeshName = theMeshOnEntity->myMeshName; - const VISU::TEntity& anEntity = theMeshOnEntity->myEntity; - PMeshImpl aMesh = myMeshMap[aMeshName]; - int isPointsUpdated; - if(anEntity == VISU::NODE_ENTITY) - isPointsUpdated = LoadPoints(aMed,aMesh,theFamilyName); - else - isPointsUpdated = LoadPoints(aMed,aMesh); - int isCellsOnEntityUpdated = LoadCellsOnEntity(aMed,aMesh,theMeshOnEntity,theFamilyName); + vtkIdType + TMEDSubMesh + ::GetElemObjID(vtkIdType theID) const + { + if(myIsElemNum) + return myElemNum[theID]; + else + return TSubMeshImpl::GetElemObjID(theID); + } - return (isPointsUpdated || isCellsOnEntityUpdated); -} + std::string + TMEDSubMesh + ::GetElemName(vtkIdType theObjID) const + { + if(myElemInfo) + return myElemInfo->GetElemName(theObjID); + return TSubMeshImpl::GetElemName(theObjID); + } -int VISU_MedConvertor::LoadMeshOnGroup(VISU::PMeshImpl theMesh, - const VISU::TFamilyAndEntitySet& theFamilyAndEntitySet) -{ - PWrapper aMed = CrWrapper(myFileInfo.absFilePath().latin1()); - int isPointsUpdated = 0, isCellsOnEntityUpdated = 0; - VISU::TFamilyAndEntitySet::const_iterator aFamilyAndEntitySetIter = theFamilyAndEntitySet.begin(); - for(; aFamilyAndEntitySetIter != theFamilyAndEntitySet.end(); aFamilyAndEntitySetIter++){ - const string& aFamilyName = aFamilyAndEntitySetIter->first; - const VISU::TEntity& anEntity = aFamilyAndEntitySetIter->second; - const VISU::PMEDMeshOnEntity aMeshOnEntity = theMesh->myMeshOnEntityMap[anEntity]; - if(anEntity == VISU::NODE_ENTITY){ - isPointsUpdated += LoadPoints(aMed,theMesh,aFamilyName); - isCellsOnEntityUpdated += LoadCellsOnEntity(aMed,theMesh,aMeshOnEntity); - }else{ - isPointsUpdated += LoadPoints(aMed,theMesh); - isCellsOnEntityUpdated += LoadCellsOnEntity(aMed,theMesh,aMeshOnEntity,aFamilyName); + struct TSetIsDone + { + bool& myIsDone; + TSetIsDone(bool& theIsDone): + myIsDone(theIsDone) + {} + + ~TSetIsDone() + { + myIsDone = true; } - } - return (isPointsUpdated || isCellsOnEntityUpdated); + }; } -int VISU_MedConvertor::LoadFieldOnMesh(VISU::PMeshImpl theMesh, - VISU::PMeshOnEntityImpl theMeshOnEntity, - VISU::PFieldImpl theField, - VISU::PValForTimeImpl theValForTime) + +//--------------------------------------------------------------- +extern "C" +VISU_Convertor* +CreateConvertor(const string& theFileName) { - PWrapper aMed = CrWrapper(myFileInfo.absFilePath().latin1()); - int isPointsUpdated = LoadPoints(aMed,theMesh); - int isCellsOnEntityUpdated = LoadCellsOnEntity(aMed,theMesh,theMeshOnEntity); - int isFieldUpdated = LoadField(aMed,theMesh,theMeshOnEntity,theField,theValForTime); - - return (isPointsUpdated || isCellsOnEntityUpdated || isFieldUpdated); + return new VISU_MedConvertor(theFileName); } - -int -VISU_MedConvertor::LoadPoints(const MED::PWrapper& theMed, - VISU::PMEDMesh theMesh, - const string& theFamilyName) +VISU_MedConvertor +::VISU_MedConvertor(const string& theFileName): + myIsEntitiesDone(false), + myIsFieldsDone(false), + myIsGroupsDone(false), + myIsMinMaxDone(false) { - try{ - //Check on existing family - VISU::PMEDMeshOnEntity aMeshOnEntity = theMesh->myMeshOnEntityMap[VISU::NODE_ENTITY]; - aMeshOnEntity->myEntity = VISU::NODE_ENTITY; + myFileInfo.setFile(QString(theFileName.c_str())); + myName = myFileInfo.baseName().latin1(); +} + + +//--------------------------------------------------------------- +VISU_Convertor* +VISU_MedConvertor +::BuildEntities() +{ + if(myIsEntitiesDone) + return this; + + TSetIsDone aSetIsDone(myIsEntitiesDone); + TTimerLog aTimerLog(MYDEBUG,"BuildEntities"); + MED::PWrapper aMed = MED::CrWrapper(myFileInfo.absFilePath().latin1()); + + TInt aNbMeshes = aMed->GetNbMeshes(); + TMeshMap& aMeshMap = myMeshMap; + + INITMSG(MYDEBUG,"BuildEntities aNbMeshes = "<GetPMeshInfo(iMesh); + std::string aMeshName = aMeshInfo->GetName(); + TInt aDim = aMeshInfo->GetDim(); + + MED::PNodeInfo aNodeInfo = aMed->GetPNodeInfo(aMeshInfo); + + MED::TEntityInfo anEntityInfo = aMed->GetEntityInfo(aMeshInfo); + + // creating TMesh structure and TMeshOnEntityMap + PMEDMesh aMesh = aMeshMap[aMeshName](new TMEDMesh()); + aMesh->myDim = aDim; + aMesh->myName = aMeshName; + aMesh->myNbPoints = aNodeInfo->GetNbElem(); + aMesh->myMeshInfo = aMeshInfo; + aMesh->myEntityInfo = anEntityInfo; + aMesh->myNamedPointCoords(new TMEDNamedPointCoords()); + + INITMSG(MYDEBUG,"aMeshName = '"<GetNbMeshes(); + TMeshMap& aMeshMap = myMeshMap; + + INITMSG(MYDEBUG,"BuildFields - aNbMeshes = "<GetPMeshInfo(iMesh); + std::string aMeshName = aMeshInfo->GetName(); + + TMeshMap::const_iterator anIter = aMeshMap.find(aMeshName); + if(anIter == aMeshMap.end()) + continue; + PMEDMesh aMesh = anIter->second; + + INITMSG(MYDEBUG,"aMeshName = '"<GetEntityInfo(aMeshInfo); + + BuildFieldMap(aMesh, + anEntityInfo, + aMed); +#ifndef _DEXCEPT_ + }catch(std::exception& exc){ + MSG(MYDEBUG,"Follow exception was occured in:\n"<GetNbMeshes(); + TMeshMap& aMeshMap = myMeshMap; + + INITMSG(MYDEBUG,"BuildMinMax - aNbMeshes = "<GetPMeshInfo(iMesh); + std::string aMeshName = aMeshInfo->GetName(); + + TMeshMap::const_iterator anIter = aMeshMap.find(aMeshName); + if(anIter == aMeshMap.end()) + continue; + PMEDMesh aMesh = anIter->second; + +#ifndef _DEXCEPT_ + try{ +#endif + TInt aNbFields = aMed->GetNbFields(); + + INITMSG(MYDEBUG, + "- aMeshName = '"<GetEntityInfo(aMeshInfo); + + for(TInt iField = 1; iField <= aNbFields; iField++){ + TTimerLog aTimerLog(MYDEBUG,"BuildMinMax - GetPFieldInfo()"); + MED::PFieldInfo aFieldInfo = aMed->GetPFieldInfo(aMeshInfo,iField); + std::string aFieldName = aFieldInfo->GetName(); + INITMSG(MYDEBUG,"- aFieldName = '"<GetNbTimeStamps(aFieldInfo, + anEntityInfo, + aMEntity, + aGeom2Size); + if(aNbTimeStamps < 1) + continue; + + TEntity aVEntity = MEDEntityToVTK(aMEntity); + PMEDMeshOnEntity aMeshOnEntity = aMesh->myMeshOnEntityMap[aVEntity]; + TFieldMap& aFieldMap = aMeshOnEntity->myFieldMap; + PMEDField aField = aFieldMap[aFieldName]; + + TInt aNbComp = aField->myNbComp; + int aNbComp2 = aNbComp; + if(aNbComp == 2 || aNbComp == 4) + aNbComp2 = 2; + else if(aNbComp > 4) + aNbComp2 = 3; + + TMinMaxArr& aMinMaxArr = aField->myMinMaxArr; + TSetIsDone aSetIsDone(aField->myIsMinMaxInitilized); + for(TInt iTimeStamp = aNbTimeStamps; iTimeStamp >= 1; iTimeStamp--){ + TTimerLog aTimerLog(MYDEBUG,"BuildMinMax - GetPTimeStampInfo()"); + INITMSG(MYDEBUG,"- iTimeStamp = "<GetPTimeStampInfo(aFieldInfo, + aMEntity, + aGeom2Size, + iTimeStamp); + + MED::PTimeStampVal aTimeStampVal = aMed->GetPTimeStampVal(aTimeStampInfo, + aMKey2Profile, + aKey2Gauss); + + const MED::TGeom2Gauss& aGeom2Gauss = aTimeStampInfo->GetGeom2Gauss(); + + const MED::TTimeStampVal& aTimeStampValRef = aTimeStampVal; + + const MED::TGeom2Value& aGeom2Value = aTimeStampValRef.myGeom2Value; + MED::TGeom2Value::const_iterator anIter = aGeom2Value.begin(); + for(; anIter != aGeom2Value.end(); anIter++){ + const MED::TMeshValue& aMMeshValue = anIter->second; + MED::EGeometrieElement aMGeom = anIter->first; + + TInt aNbElem = aMMeshValue.myNbElem; + TInt aNbGauss = aMMeshValue.myNbGauss; + + MED::TGeom2Gauss::const_iterator aGaussIter = aGeom2Gauss.find(aMGeom); + if(aGaussIter == aGeom2Gauss.end()) + aNbGauss = 1; + + INITMSG(MYDEBUG, + "- aMGeom = "<GetMinMax(iComp); + INITMSG(MYDEBUG,"- "<GetNbMeshes(); + TMeshMap& aMeshMap = myMeshMap; + + INITMSG(MYDEBUG,"BuildGroups - aNbMeshes = "<GetPMeshInfo(iMesh); + std::string aMeshName = aMeshInfo->GetName(); + + TMeshMap::const_iterator anIter = aMeshMap.find(aMeshName); + if(anIter == aMeshMap.end()) + continue; + PMEDMesh aMesh = anIter->second; + + INITMSG(MYDEBUG,"aMeshName = '"<GetEntityInfo(aMeshInfo); + + MED::TEntity2TGeom2ElemInfo anEntity2TGeom2ElemInfo = + MED::GetEntity2TGeom2ElemInfo(aMed,aMeshInfo,anEntityInfo); + +#ifndef _DEXCEPT_ + try{ +#endif + MED::TFamilyInfoSet aFamilyInfoSet = MED::GetFamilyInfoSet(aMed,aMeshInfo); + + BuildFamilyMap(aMesh, + anEntityInfo, + anEntity2TGeom2ElemInfo, + aFamilyInfoSet, + aMed); + + BuildGroupMap(aMesh, + aFamilyInfoSet); +#ifndef _DEXCEPT_ + }catch(std::exception& exc){ + MSG(MYDEBUG,"Follow exception was occured in:\n"<myEntity; + + int isPointsUpdated = 0, isCellsOnEntityUpdated = 0; + if(anEntity == NODE_ENTITY){ + isPointsUpdated += LoadPoints(aMed,theMesh); + }else{ + isPointsUpdated += LoadPoints(aMed,theMesh); + isCellsOnEntityUpdated += LoadCellsOnEntity(aMed,theMesh,theMeshOnEntity); + } + + return (isPointsUpdated || isCellsOnEntityUpdated); +} + + +//--------------------------------------------------------------- +int +VISU_MedConvertor +::LoadFamilyOnEntity(VISU::PMeshImpl theMesh, + VISU::PMeshOnEntityImpl theMeshOnEntity, + VISU::PFamilyImpl theFamily) +{ + TTimerLog aTimerLog(MYDEBUG,"LoadFamilyOnEntity"); + INITMSG(MYDEBUG,"LoadFamilyOnEntity"<myEntity; + + int isPointsUpdated = 0, isCellsOnEntityUpdated = 0; + if(anEntity == NODE_ENTITY){ + isPointsUpdated += LoadPointsOnFamily(aMed,theMesh,theFamily); + }else{ + isPointsUpdated += LoadPoints(aMed,theMesh); + isCellsOnEntityUpdated += LoadCellsOnFamily(aMed,theMesh,theMeshOnEntity,theFamily); + } + + return (isPointsUpdated || isCellsOnEntityUpdated); +} + + +//--------------------------------------------------------------- +int +VISU_MedConvertor +::LoadMeshOnGroup(VISU::PMeshImpl theMesh, + const VISU::TFamilySet& theFamilySet) +{ + TTimerLog aTimerLog(MYDEBUG,"LoadMeshOnGroup"); + INITMSG(MYDEBUG,"LoadMeshOnGroup"<myEntity; + const PMEDMeshOnEntity aMeshOnEntity = theMesh->myMeshOnEntityMap[anEntity]; + if(anEntity == NODE_ENTITY){ + isPointsUpdated += LoadPointsOnFamily(aMed,theMesh,aFamily); + }else{ + isPointsUpdated += LoadPoints(aMed,theMesh); + isCellsOnEntityUpdated += LoadCellsOnFamily(aMed,theMesh,aMeshOnEntity,aFamily); + } + } + + return (isPointsUpdated || isCellsOnEntityUpdated); +} + + +//--------------------------------------------------------------- +int +VISU_MedConvertor +::LoadValForTimeOnMesh(VISU::PMeshImpl theMesh, + VISU::PMeshOnEntityImpl theMeshOnEntity, + VISU::PFieldImpl theField, + VISU::PValForTimeImpl theValForTime) +{ + TTimerLog aTimerLog(MYDEBUG,"LoadValForTimeOnMesh"); + INITMSG(MYDEBUG,"LoadValForTimeOnMesh"<myEntity; + int isPointsUpdated = 0, isCellsOnEntityUpdated = 0; + isPointsUpdated += LoadPoints(aMed,theMesh); + if(anEntity != NODE_ENTITY) + isCellsOnEntityUpdated += LoadCellsOnEntity(aMed,theMesh,theMeshOnEntity); + int isFieldUpdated = LoadValForTimeOnMesh(aMed,theMesh,theMeshOnEntity,theField,theValForTime); + + return (isPointsUpdated || isCellsOnEntityUpdated || isFieldUpdated); +} + + +//--------------------------------------------------------------- +int +VISU_MedConvertor +::LoadValForTimeOnGaussPts(VISU::PMeshImpl theMesh, + VISU::PMeshOnEntityImpl theMeshOnEntity, + VISU::PFieldImpl theField, + VISU::PValForTimeImpl theValForTime) +{ + TTimerLog aTimerLog(MYDEBUG,"LoadValForTimeOnGaussPts"); + INITMSG(MYDEBUG,"LoadValForTimeOnGaussPts"<myEntity; + int isPointsUpdated = 0, isCellsOnEntityUpdated = 0; + if(anEntity != NODE_ENTITY) + isCellsOnEntityUpdated += LoadCellsOnEntity(aMed,theMesh,theMeshOnEntity); + int isFieldUpdated = LoadValForTimeOnGaussPts(aMed,theMesh,theMeshOnEntity,theField,theValForTime); + + return (isPointsUpdated || isCellsOnEntityUpdated || isFieldUpdated); +} + + +//--------------------------------------------------------------- +int +VISU_MedConvertor +::LoadPoints(const MED::PWrapper& theMed, + VISU::PMEDMesh theMesh) +{ + TTimerLog aTimerLog(MYDEBUG,"LoadPoints"); + try{ + //Check on existing family + PMEDMeshOnEntity aMeshOnEntity = theMesh->myMeshOnEntityMap[VISU::NODE_ENTITY]; aMeshOnEntity->myMeshName = theMesh->myName; - PFamilyImpl aFamily = GetFamily(aMeshOnEntity,theFamilyName); - //Check on loading already done - bool isPointsLoaded = !theMesh->myPointsCoord.empty(); - if(isPointsLoaded) - if(!aFamily) - return 0; - else if(!aFamily->mySubMesh.empty()) - return 0; + aMeshOnEntity->myEntity = NODE_ENTITY; - INITMSG(MYDEBUG,"LoadPoints - isPointsLoaded = "<myIsDone = "<myIsDone<<"'\n"); + + //Check on loading already done + if(theMesh->myIsDone) + return 0; //Main part of code - PNodeInfo aNodeInfo = theMed->GetPNodeInfo(theMesh->myMeshInfo); + MED::PNodeInfo aNodeInfo = theMed->GetPNodeInfo(theMesh->myMeshInfo); TInt aNbElem = aNodeInfo->GetNbElem(); + TInt aDim = theMesh->myDim; - if(!isPointsLoaded){ - VISU::TMeshImpl::TPointsDim& aPointsDim = theMesh->myPointsDim; - aPointsDim.resize(theMesh->myDim); - for(int iDim = 0; iDim < theMesh->myDim; iDim++) - aPointsDim[iDim] = aNodeInfo->GetCoordName(iDim); - - VISU::TMeshImpl::TPointsCoord& aPointsCoord = theMesh->myPointsCoord; - aPointsCoord.resize(aNbElem*theMesh->myDim); - for (int iElem = 0; iElem < aNbElem; iElem++) - for(int iDim = 0, iElem2Dim = iElem*theMesh->myDim; iDim < theMesh->myDim; iDim++, iElem2Dim++) - aPointsCoord[iElem2Dim] = aNodeInfo->GetNodeCoord(iElem,iDim); - - VISU::TMeshOnEntityImpl::TConnForCellType& aConnForCellType = aMeshOnEntity->myCellsConn[VTK_VERTEX]; - aConnForCellType.resize(aNbElem); - for (int iElem = 0; iElem < aNbElem; iElem++) - aConnForCellType[iElem] = VISU::TMeshOnEntityImpl::TConnect(1,iElem); + PMEDNamedPointCoords aNamedPointCoords = theMesh->myNamedPointCoords; + TMEDNamedPointCoords& aCoords = aNamedPointCoords; + aCoords.Init(aNbElem,aDim,aNodeInfo); + + for(int iDim = 0; iDim < aDim; iDim++) + aCoords.GetName(iDim) = aNodeInfo->GetCoordName(iDim); + + for(int iElem = 0; iElem < aNbElem; iElem++){ + TCoordSlice aVCoordSlice = aCoords.GetCoordSlice(iElem); + MED::TCCoordSlice aMCoordSlice = aNodeInfo->GetCoordSlice(iElem); + for(int iDim = 0; iDim < aDim; iDim++) + aVCoordSlice[iDim] = aMCoordSlice[iDim]; } - if(aFamily && aNbElem > 0){ - VISU::TFamilyImpl::TSubMeshOnCellType& aSubMeshOnCellType = aFamily->mySubMesh[VTK_VERTEX]; - for (int iElem = 0; iElem < aNbElem; iElem++) - if(aNodeInfo->GetFamNum(iElem) == aFamily->myId) - aSubMeshOnCellType.insert(iElem); + + TGeom2SubMesh& aGeom2SubMesh = aMeshOnEntity->myGeom2SubMesh; + PMEDSubMesh aSubMesh = aGeom2SubMesh[VISU::ePOINT1](new TMEDSubMesh()); + + aSubMesh->Init(aNodeInfo); + aSubMesh->myNbCells = theMesh->myNbPoints; + aSubMesh->myCellsSize = 2*theMesh->myNbPoints; + + TCell2Connect& aCell2Connect = aSubMesh->myCell2Connect; + aCell2Connect.resize(aNbElem); + for (int iElem = 0; iElem < aNbElem; iElem++) + aCell2Connect[iElem] = VISU::TConnect(1,iElem); + + theMesh->myIsDone = true; + + return 1; + + }catch(std::exception& exc){ + throw; + }catch(...){ + EXCEPTION(runtime_error,"Unknown exception !!!"); + } + + return 0; +} + + +//--------------------------------------------------------------- +int +VISU_MedConvertor +::LoadPointsOnFamily(const MED::PWrapper& theMed, + const VISU::PMEDMesh theMesh, + const VISU::PMEDFamily theFamily) +{ + TTimerLog aTimerLog(MYDEBUG,"LoadPointsOnFamily"); + try{ + if(theFamily->myIsDone) + return 0; + + //Main part of code + MED::PNodeInfo aNodeInfo = theMed->GetPNodeInfo(theMesh->myMeshInfo); + TInt aNbElem = aNodeInfo->GetNbElem(); + + if(aNbElem > 0){ + TInt anId = theFamily->myId; + TSubMeshID& aSubMeshID = theFamily->myGeom2SubMeshID[VISU::ePOINT1]; + for(TInt iElem = 0; iElem < aNbElem; iElem++) + if(aNodeInfo->GetFamNum(iElem) == anId) + aSubMeshID.push_back(iElem); } + + theFamily->myIsDone = true; + return 1; - }catch(std::runtime_error& exc){ - theMesh->myPointsCoord.clear(); + + }catch(std::exception& exc){ throw; }catch(...){ - theMesh->myPointsCoord.clear(); EXCEPTION(runtime_error,"Unknown exception !!!"); } + return 0; } +//--------------------------------------------------------------- int -VISU_MedConvertor::LoadCellsOnEntity(const MED::PWrapper& theMed, - VISU::PMEDMesh theMesh, - VISU::PMEDMeshOnEntity theMeshOnEntity, - const string& theFamilyName) +VISU_MedConvertor +::LoadCellsOnEntity(const MED::PWrapper& theMed, + const VISU::PMEDMesh theMesh, + const VISU::PMEDMeshOnEntity theMeshOnEntity) { + TTimerLog aTimerLog(MYDEBUG,"LoadCellsOnEntity"); +#ifndef _DEXCEPT_ try{ - //Check on existing family - PFamilyImpl aFamily = GetFamily(theMeshOnEntity,theFamilyName); - //Check on loading already done - bool isCellsLoaded = !theMeshOnEntity->myCellsConn.empty(); - if(isCellsLoaded) - if(!aFamily) - return 0; - else if(!aFamily->mySubMesh.empty()) - return 0; +#endif + const TEntity& aVEntity = theMeshOnEntity->myEntity; + const MED::EEntiteMaillage& aMEntity = VTKEntityToMED(aVEntity); - INITMSG(MYDEBUG,"LoadCellsOnEntity - theFamilyName = '"<myEntity; - const EEntiteMaillage& aMEntity = VTKEntityToMED(aVEntity); + if(theMeshOnEntity->myIsDone) + return 0; - const PMeshInfo& aMeshInfo = theMesh->myMeshInfo; - PNodeInfo aNodeInfo = theMed->GetPNodeInfo(aMeshInfo); + const MED::PMeshInfo& aMeshInfo = theMesh->myMeshInfo; + MED::PNodeInfo aNodeInfo = theMed->GetPNodeInfo(aMeshInfo); TInt aNbPoints = aNodeInfo->GetNbElem(); std::map aNodeIdMap; #ifdef _EDF_NODE_IDS_ - EBooleen anIsNodeNum = eFAUX; + EBooleen anIsNodeNum = MED::eFAUX; #else EBooleen anIsNodeNum = aNodeInfo->IsElemNum(); if(anIsNodeNum){ @@ -640,235 +1624,715 @@ VISU_MedConvertor::LoadCellsOnEntity(const MED::PWrapper& theMed, } #endif - const MED::TGeom& aTGeom = theMeshOnEntity->myGeom; - MED::TGeom::const_iterator anTGeomIter = aTGeom.begin(); - TMeshOnEntityImpl::TCellsConn& aCellsConn = theMeshOnEntity->myCellsConn; - - for(; anTGeomIter != aTGeom.end(); anTGeomIter++){ - const EGeometrieElement& aGeom = anTGeomIter->first; - int aVTKGeomType = MEDGeomToVTK(aGeom); - ADDMSG(MYDEBUG,"LoadCellsOnEntity aGeom="<GetPPolygoneInfo(aMeshInfo,aMEntity,aGeom); - TInt aNbElem = aPolygoneInfo->GetNbElem(); + const MED::TGeom2Size& aGeom2Size = theMeshOnEntity->myGeom2Size; + MED::TGeom2Size::const_iterator aGeom2SizeIter = aGeom2Size.begin(); + TGeom2SubMesh& aGeom2SubMesh = theMeshOnEntity->myGeom2SubMesh; + + for(; aGeom2SizeIter != aGeom2Size.end(); aGeom2SizeIter++){ + const MED::EGeometrieElement& aMGeom = aGeom2SizeIter->first; + VISU::EGeometry aEGeom = MEDGeom2VISU(aMGeom); + INITMSG(MYDEBUG,"aMGeom = "<GetPPolygoneInfo(aMeshInfo,aMEntity,aMGeom); + TInt aNbElem = aPolygoneInfo->GetNbElem(); + if(aNbElem > 0){ + PMEDSubMesh aSubMesh = aGeom2SubMesh[aEGeom](new TMEDSubMesh()); - if(!isCellsLoaded){ - VISU::TMeshOnEntityImpl::TConnForCellType& aConnForPolygoneType = aCellsConn[aVTKGeomType]; - aConnForPolygoneType.resize(aNbElem); - - int aMNbNodes = aPolygoneInfo->GetConnDim(); - - vector aConnect(aMNbNodes); - vector aIndex = aPolygoneInfo->GetIndex(); + aSubMesh->Init(aPolygoneInfo); + aSubMesh->myNbCells = aNbElem; - for (int iElem = 0; iElem < aNbElem; iElem++) { - VISU::TMeshOnEntityImpl::TConnect& anArray = aConnForPolygoneType[iElem]; - int aNbConn = aPolygoneInfo->GetNbConn(iElem); - - anArray.resize(aNbConn); - - aConnect = aPolygoneInfo->GetConnectivite(); - - for (int i=0;imySubMesh[aVTKGeomType]; - for(int iElem = 0; iElem < aNbElem; iElem++) - if(aPolygoneInfo->GetFamNum(iElem) == aFamily->myId) - aSubMeshOnCellType.insert(iElem); + TCell2Connect& aCell2Connect = aSubMesh->myCell2Connect; + aCell2Connect.resize(aNbElem); + + for(TInt iElem = 0; iElem < aNbElem; iElem++) { + MED::TCConnSlice aConnSlice = aPolygoneInfo->GetConnSlice(iElem); + TInt aNbConn = aPolygoneInfo->GetNbConn(iElem); + aSubMesh->myCellsSize += aNbConn; + TConnect& anArray = aCell2Connect[iElem]; + anArray.resize(aNbConn); + for(TInt iConn = 0; iConn < aNbConn; iConn++) + anArray[iConn] = aConnSlice[iConn] - 1; } - break; } - case ePOLYEDRE: - { - PPolyedreInfo aPolyedreInfo = theMed->GetPPolyedreInfo(aMeshInfo,aMEntity,aGeom); - TInt aNbElem = aPolyedreInfo->GetNbElem(); - - int aMNbNodes = aPolyedreInfo->GetNbConn(); - vector aConnect(aMNbNodes); - aConnect = aPolyedreInfo->GetConnectivite(); + break; + } + case MED::ePOLYEDRE: { + MED::PPolyedreInfo aPolyedreInfo = theMed->GetPPolyedreInfo(aMeshInfo,aMEntity,aMGeom); + TInt aNbElem = aPolyedreInfo->GetNbElem(); + + if(aNbElem > 0){ + PMEDSubMesh aSubMesh = aGeom2SubMesh[aEGeom](new TMEDSubMesh()); - if(!isCellsLoaded){ - VISU::TMeshOnEntityImpl::TConnForCellType& aConnForPolyedreType = aCellsConn[aVTKGeomType]; - aConnForPolyedreType.resize(aNbElem); - - vector aFacesIndex = aPolyedreInfo->GetFacesIndex(); - vector aIndex = aPolyedreInfo->GetIndex(); - - for (int iElem = 0; iElem < aNbElem; iElem++) { - set aArrayNew; - VISU::TMeshOnEntityImpl::TConnect& anArray = aConnForPolyedreType[iElem]; - - int aInd1 = aIndex[iElem]-1; - int aInd2 = aIndex[iElem+1]-2; - - for (int i=aInd1;i<=aInd2;i++){ - for (int j=aFacesIndex[i]-1;j::iterator aIter = aArrayNew.begin(); - for (int i=0; aIter!=aArrayNew.end();aIter++, i++) - anArray[i] = (*aIter)-1; + aSubMesh->Init(aPolyedreInfo); + aSubMesh->myNbCells = aNbElem; + TCell2Connect& aCell2Connect = aSubMesh->myCell2Connect; + aCell2Connect.resize(aNbElem); + + for(TInt iElem = 0; iElem < aNbElem; iElem++){ + MED::TCConnSliceArr aConnSliceArr = aPolyedreInfo->GetConnSliceArr(iElem); + TConnect& anArray = aCell2Connect[iElem]; + typedef std::set TConnectSet; + TConnectSet aConnectSet; + TInt aNbFaces = aConnSliceArr.size(); + for(TInt iFace = 0; iFace < aNbFaces; iFace++){ + MED::TCConnSlice aConnSlice = aConnSliceArr[iFace]; + TInt aNbConn = aConnSlice.size(); + aSubMesh->myCellsSize += aNbConn; + for(TInt iConn = 0; iConn < aNbConn; iConn++){ + aConnectSet.insert(aConnSlice[iConn]); + } + } + + int aNbConn = aConnectSet.size(); + anArray.resize(aNbConn); + TConnectSet::iterator anIter = aConnectSet.begin(); + for(int i = 0; anIter != aConnectSet.end(); anIter++, i++){ + TInt anId = *anIter; + anArray[i] = anId - 1; } } - if(aFamily){ - VISU::TFamilyImpl::TSubMeshOnCellType& aSubMeshOnCellType = aFamily->mySubMesh[aVTKGeomType]; - for(int iElem = 0; iElem < aNbElem; iElem++) - if(aPolyedreInfo->GetFamNum(iElem) == aFamily->myId) - aSubMeshOnCellType.insert(iElem); - } - break; } - default: - { - int aVNbNodes = VTKGeom2NbNodes(aVTKGeomType); - - PCellInfo aCellInfo = theMed->GetPCellInfo(aMeshInfo,aMEntity,aGeom); - TInt aNbElem = aCellInfo->GetNbElem(); + + break; + } + default: { + vtkIdType aVNbNodes = VISUGeom2NbNodes(aEGeom); + INITMSG(MYDEBUG,"aVNbNodes = "<GetPCellInfo(aMeshInfo,aMEntity,aMGeom); + TInt aNbElem = aCellInfo->GetNbElem(); + + if(aNbElem > 0){ + PMEDSubMesh aSubMesh = aGeom2SubMesh[aEGeom](new TMEDSubMesh()); - if(!isCellsLoaded){ - VISU::TMeshOnEntityImpl::TConnForCellType& aConnForCellType = aCellsConn[aVTKGeomType]; - aConnForCellType.resize(aNbElem); + aSubMesh->Init(aCellInfo); + aSubMesh->myNbCells = aNbElem; + aSubMesh->myCellsSize = aNbElem*(aVNbNodes+1); + + TCell2Connect& aCell2Connect = aSubMesh->myCell2Connect; + aCell2Connect.resize(aNbElem); + + TInt aMNbNodes = MEDGeom2NbNodes(aMGeom); + TVector aConnect(aMNbNodes); + + for(TInt iElem = 0; iElem < aNbElem; iElem++) { + MED::TCConnSlice aConnSlice = aCellInfo->GetConnSlice(iElem); + TConnect& anArray = aCell2Connect[iElem]; + anArray.resize(aVNbNodes); - int aMNbNodes = MEDGeom2NbNodes(aGeom); - vector aConnect(aMNbNodes); - - for (int iElem = 0; iElem < aNbElem; iElem++) { - VISU::TMeshOnEntityImpl::TConnect& anArray = aConnForCellType[iElem]; - anArray.resize(aVNbNodes); - - if(anIsNodeNum){ - for(int i = 0; i < aMNbNodes; i++){ - aConnect[i] = aNodeIdMap[aCellInfo->GetConn(iElem,i)-1]; - } - }else{ - for(int i = 0; i < aMNbNodes; i++){ - aConnect[i] = aCellInfo->GetConn(iElem,i)-1; - } + if(anIsNodeNum){ + for(TInt iConn = 0; iConn < aMNbNodes; iConn++){ + aConnect[iConn] = aNodeIdMap[aConnSlice[iConn] - 1]; } - - switch(aGeom){ - case eTETRA4: - case eTETRA10: - anArray[0] = aConnect[0]; - anArray[1] = aConnect[1]; - anArray[2] = aConnect[3]; - anArray[3] = aConnect[2]; - break; - case ePYRA5: - case ePYRA13: - anArray[0] = aConnect[0]; - anArray[1] = aConnect[3]; - anArray[2] = aConnect[2]; - anArray[3] = aConnect[1]; - anArray[4] = aConnect[4]; - break; - default: - for(int iNode = 0; iNode < aVNbNodes; iNode++) - anArray[iNode] = aConnect[iNode]; + }else{ + for(int iConn = 0; iConn < aMNbNodes; iConn++){ + aConnect[iConn] = aConnSlice[iConn] - 1; } + } + + switch(aMGeom){ +#if !(defined(VTK_QUADRATIC_EDGE) && defined(VISU_USE_VTK_QUADRATIC)) && defined(VISU_ENABLE_QUADRATIC) + case MED::eSEG3: + anArray[0] = aConnect[0]; + anArray[2] = aConnect[1]; + + anArray[1] = aConnect[2]; + break; +#endif +#if !(defined(VTK_QUADRATIC_TRIANGLE) && defined(VISU_USE_VTK_QUADRATIC)) && defined(VISU_ENABLE_QUADRATIC) + case MED::eTRIA6: + anArray[0] = aConnect[0]; + anArray[2] = aConnect[1]; + anArray[4] = aConnect[2]; + + anArray[1] = aConnect[3]; + anArray[3] = aConnect[4]; + anArray[5] = aConnect[5]; + break; +#endif +#if !(defined(VTK_QUADRATIC_QUAD) && defined(VISU_USE_VTK_QUADRATIC)) && defined(VISU_ENABLE_QUADRATIC) + case MED::eQUAD8: + anArray[0] = aConnect[0]; + anArray[2] = aConnect[1]; + anArray[4] = aConnect[2]; + anArray[6] = aConnect[3]; + + anArray[1] = aConnect[4]; + anArray[3] = aConnect[5]; + anArray[5] = aConnect[6]; + anArray[7] = aConnect[7]; + break; +#endif +#if (defined(VTK_QUADRATIC_TETRA) && defined(VISU_USE_VTK_QUADRATIC)) && defined(VISU_ENABLE_QUADRATIC) + case MED::eTETRA10: + anArray[0] = aConnect[0]; + anArray[1] = aConnect[2]; + anArray[2] = aConnect[1]; + anArray[3] = aConnect[3]; + + anArray[4] = aConnect[6]; + anArray[5] = aConnect[5]; + anArray[6] = aConnect[4]; + + anArray[7] = aConnect[7]; + anArray[8] = aConnect[9]; + anArray[9] = aConnect[8]; + break; +#endif + case MED::eTETRA4: + anArray[0] = aConnect[0]; + anArray[1] = aConnect[2]; + anArray[2] = aConnect[1]; + anArray[3] = aConnect[3]; + break; +#if (defined(VTK_QUADRATIC_PYRAMID) && defined(VISU_USE_VTK_QUADRATIC)) && defined(VISU_ENABLE_QUADRATIC) + case MED::ePYRA13: + anArray[0] = aConnect[0]; + anArray[1] = aConnect[3]; + anArray[2] = aConnect[2]; + anArray[3] = aConnect[1]; + anArray[4] = aConnect[4]; + + anArray[5] = aConnect[5]; + anArray[6] = aConnect[8]; + anArray[7] = aConnect[7]; + anArray[8] = aConnect[6]; + + anArray[9] = aConnect[9]; + anArray[10] = aConnect[12]; + anArray[11] = aConnect[11]; + anArray[12] = aConnect[10]; + break; +#endif + case MED::ePYRA5: + anArray[0] = aConnect[0]; + anArray[1] = aConnect[3]; + anArray[2] = aConnect[2]; + anArray[3] = aConnect[1]; + anArray[4] = aConnect[4]; + break; + default: for(int iNode = 0; iNode < aVNbNodes; iNode++) - if(anArray[iNode] < 0 || aNbPoints <= anArray[iNode]) - EXCEPTION(runtime_error,"ImportCells >> aNbPoints("<mySubMesh[aVTKGeomType]; - for(int iElem = 0; iElem < aNbElem; iElem++) - if(aCellInfo->GetFamNum(iElem) == aFamily->myId) - aSubMeshOnCellType.insert(iElem); + } + }} + } + + theMeshOnEntity->myIsDone = true; + + return 1; + +#ifndef _DEXCEPT_ + }catch(std::exception& exc){ + throw; + }catch(...){ + EXCEPTION(runtime_error,"Unknown exception !!!"); + } +#endif + + return 0; +} + + +//--------------------------------------------------------------- +int +VISU_MedConvertor +::LoadCellsOnFamily(const MED::PWrapper& theMed, + const VISU::PMEDMesh theMesh, + const VISU::PMEDMeshOnEntity theMeshOnEntity, + const VISU::PMEDFamily theFamily) +{ + TTimerLog aTimerLog(MYDEBUG,"LoadCellsOnFamily"); +#ifndef _DEXCEPT_ + try{ +#endif + const TEntity& aVEntity = theMeshOnEntity->myEntity; + const MED::EEntiteMaillage& aMEntity = VTKEntityToMED(aVEntity); + + INITMSG(MYDEBUG,"LoadCellsOnFamily - aVEntity = "<myIsDone) + return 0; + + TInt anId = theFamily->myId; + + const MED::PMeshInfo& aMeshInfo = theMesh->myMeshInfo; + TGeom2SubMeshID& aGeom2SubMeshID = theFamily->myGeom2SubMeshID; + + const MED::TGeom2Size& aGeom2Size = theMeshOnEntity->myGeom2Size; + MED::TGeom2Size::const_iterator aGeom2SizeIter = aGeom2Size.begin(); + for(; aGeom2SizeIter != aGeom2Size.end(); aGeom2SizeIter++){ + const MED::EGeometrieElement& aMGeom = aGeom2SizeIter->first; + MED::PElemInfo anElemInfo; + switch(aMGeom){ + case MED::ePOLYGONE: { + anElemInfo = theMed->GetPPolygoneInfo(aMeshInfo,aMEntity,aMGeom); + break; + } + case MED::ePOLYEDRE: { + anElemInfo = theMed->GetPPolyedreInfo(aMeshInfo,aMEntity,aMGeom); + break; + } + default: { + anElemInfo = theMed->GetPCellInfo(aMeshInfo,aMEntity,aMGeom); + break; + }} + if(anElemInfo){ + if(TInt aNbElem = anElemInfo->GetNbElem()){ + TSubMeshID aSubMeshID; + for(TInt iElem = 0; iElem < aNbElem; iElem++) + if(anElemInfo->GetFamNum(iElem) == anId) + aSubMeshID.push_back(iElem); + if(!aSubMeshID.empty()){ + VISU::EGeometry aEGeom = MEDGeom2VISU(aMGeom); + INITMSG(MYDEBUG,"aMGeom = "<myIsDone = true; + return 1; - }catch(std::runtime_error& exc){ - theMeshOnEntity->myCellsConn.clear(); + +#ifndef _DEXCEPT_ + }catch(std::exception& exc){ throw; }catch(...){ - theMeshOnEntity->myCellsConn.clear(); EXCEPTION(runtime_error,"Unknown exception !!!"); } +#endif + return 0; } +//--------------------------------------------------------------- +void +LoadProfile(const MED::PWrapper& theMed, + VISU::PMEDMesh theMesh, + MED::TTimeStampVal& theTimeStampVal, + VISU::TMEDValForTime& theValForTime, + VISU::TMEDMeshOnEntity& theMeshOnEntity) +{ + TTimerLog aTimerLog(MYDEBUG,"LoadProfile"); + INITMSG(MYDEBUG,"LoadProfile"<myIsDone) + return; + + const TGeom2SubProfile& aGeom2SubProfile = aProfile->myGeom2SubProfile; + const MED::TGeom2Profile& aGeom2Profile = theTimeStampVal.GetGeom2Profile(); + MED::TGeom2Profile::const_iterator anIter = aGeom2Profile.begin(); + for(; anIter != aGeom2Profile.end(); anIter++){ + MED::PProfileInfo aProfileInfo = anIter->second; + MED::EGeometrieElement aMGeom = anIter->first; + VISU::EGeometry aEGeom = MEDGeom2VISU(aMGeom); + + TGeom2SubProfile::const_iterator anIter2 = aGeom2SubProfile.find(aEGeom); + if(anIter2 != aGeom2SubProfile.end()){ + PMEDSubProfile aSubProfile = anIter2->second; + + MED::TElemNum& anElemNum = aProfileInfo->myElemNum; + if(!anElemNum.empty()){ + TSubMeshID& aSubMeshID = aSubProfile->mySubMeshID; + TInt aSize = anElemNum.size(); + aSubMeshID.resize(aSize); + for(TInt anId = 0; anId < aSize; anId++) + aSubMeshID[anId] = anElemNum[anId] - 1; + } + + INITMSG(MYDEBUG, + "- aEGeom = "<myIsDone) + return; + + const MED::PMeshInfo& aMeshInfo = theMesh->myMeshInfo; + MED::PNodeInfo aNodeInfo = theMed->GetPNodeInfo(aMeshInfo); + + TEntity aVEntity = theMeshOnEntity.myEntity; + MED::EEntiteMaillage aMEntity = VTKEntityToMED(aVEntity); + + const TGeom2GaussSubMesh& aGeom2GaussSubMesh = aGaussMesh->myGeom2GaussSubMesh; + const MED::TTimeStampInfo& aTimeStampInfo = theTimeStampVal.GetTimeStampInfo(); + const MED::TGeom2Gauss& aGeom2Gauss = aTimeStampInfo.GetGeom2Gauss(); + + TGeom2GaussSubMesh::const_iterator aSubMeshIter = aGeom2GaussSubMesh.begin(); + for(; aSubMeshIter != aGeom2GaussSubMesh.end(); aSubMeshIter++){ + PMEDGaussSubMesh aGaussSubMesh = aSubMeshIter->second; + VISU::EGeometry aEGeom = aSubMeshIter->first; + + if(aGaussSubMesh->myIsDone) + continue; + + PMEDSubProfile aSubProfile = aGaussSubMesh->mySubProfile; + const TSubMeshID& aSubMeshID = aSubProfile->mySubMeshID; + MED::EGeometrieElement aMGeom = aSubProfile->myMGeom; + + MED::PPolygoneInfo aPolygoneInfo; + MED::PPolyedreInfo aPolyedreInfo; + MED::PCellInfo aCellInfo; + MED::PElemInfo anElemInfo; + + switch(aMGeom){ + case MED::ePOLYGONE: + aPolygoneInfo = theMed->GetPPolygoneInfo(aMeshInfo, + aMEntity, + aMGeom); + anElemInfo = aPolygoneInfo; + break; + case MED::ePOLYEDRE: + aPolyedreInfo = theMed->GetPPolyedreInfo(aMeshInfo, + aMEntity, + aMGeom); + anElemInfo = aPolyedreInfo; + break; + default: + aCellInfo = theMed->GetPCellInfo(aMeshInfo, + aMEntity, + aMGeom); + anElemInfo = aCellInfo; + } + aGaussSubMesh->myIsElemNum = anElemInfo->IsElemNum(); + aGaussSubMesh->myElemNum = anElemInfo->myElemNum; + + std::string aName; + MED::TGaussCoord aGaussCoord; + bool anIsGaussCoord3D = false; + + MED::TGeom2Gauss::const_iterator aGaussIter = aGeom2Gauss.find(aMGeom); + if(aGaussIter != aGeom2Gauss.end()){ + PMEDGauss aGauss = aGaussSubMesh->myGauss; + MED::PGaussInfo aGaussInfo = aGauss->myGaussInfo; + if(aGaussInfo){ + aName = aGaussInfo->GetName(); + if(!aSubMeshID.empty()){ + const std::string& aProfileName = aSubProfile->myName; + MED::PProfileInfo aProfileInfo = MED::GetProfileInfo(theMed, + aProfileName); + if(aProfileInfo){ + const MED::TElemNum& anElemNum = aProfileInfo->myElemNum; + anIsGaussCoord3D = MED::GetGaussCoord3D(aGaussInfo, + aCellInfo, + aNodeInfo, + aGaussCoord, + anElemNum); + } + }else + anIsGaussCoord3D = MED::GetGaussCoord3D(aGaussInfo, + aCellInfo, + aNodeInfo, + aGaussCoord); + } + }else{ + if(!aSubMeshID.empty()){ + const std::string& aProfileName = aSubProfile->myName; + MED::PProfileInfo aProfileInfo = MED::GetProfileInfo(theMed, + aProfileName); + if(aProfileInfo){ + const MED::TElemNum& anElemNum = aProfileInfo->myElemNum; + switch(aMGeom){ + case MED::ePOLYGONE: + anIsGaussCoord3D = MED::GetBaryCenter(aPolygoneInfo, + aNodeInfo, + aGaussCoord, + anElemNum); + break; + case MED::ePOLYEDRE: + anIsGaussCoord3D = MED::GetBaryCenter(aPolyedreInfo, + aNodeInfo, + aGaussCoord, + anElemNum); + break; + default: + anIsGaussCoord3D = MED::GetBaryCenter(aCellInfo, + aNodeInfo, + aGaussCoord, + anElemNum); + } + } + }else + switch(aMGeom){ + case MED::ePOLYGONE: + anIsGaussCoord3D = MED::GetBaryCenter(aPolygoneInfo, + aNodeInfo, + aGaussCoord); + break; + case MED::ePOLYEDRE: + anIsGaussCoord3D = MED::GetBaryCenter(aPolyedreInfo, + aNodeInfo, + aGaussCoord); + break; + default: + anIsGaussCoord3D = MED::GetBaryCenter(aCellInfo, + aNodeInfo, + aGaussCoord); + } + } + + if(anIsGaussCoord3D){ + TPointCoords& aCoords = aGaussSubMesh->myPointCoords; + TInt aNbGauss = aGaussCoord.GetNbGauss(); + TInt aNbElem = aGaussCoord.GetNbElem(); + TInt aDim = aGaussCoord.GetDim(); + vtkIdType aNbCells = aNbElem*aNbGauss; + aCoords.Init(aNbCells,aDim); + for(TInt anElemId = 0, aNodeId = 0; anElemId < aNbElem; anElemId++){ + MED::TCoordSliceArr aCoordSliceArr = aGaussCoord.GetCoordSliceArr(anElemId); + for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++, aNodeId++){ + MED::TCoordSlice aCoordSlice = aCoordSliceArr[aGaussId]; + TCoordSlice aSlice = aCoords.GetCoordSlice(aNodeId); + for(TInt aDimId = 0; aDimId < aDim; aDimId++) + aSlice[aDimId] = aCoordSlice[aDimId]; + } + } + + aGaussSubMesh->myIsDone = true;; + + INITMSG(MYDEBUG, + "- aEGeom = "<myIsTrimmed = anIsTrimmed; + + theIsDone = true; + return 1; } + + +//--------------------------------------------------------------- +int +VISU_MedConvertor +::LoadValForTimeOnMesh(const MED::PWrapper& theMed, + VISU::PMEDMesh theMesh, + VISU::PMEDMeshOnEntity theMeshOnEntity, + VISU::PMEDField theField, + VISU::PMEDValForTime theValForTime) +{ + PIDMapperFilter anIDMapperFilter = theValForTime->myIDMapperFilter; + return LoadValForTime(theMed, + theMesh, + theMeshOnEntity, + theField, + theValForTime, + false, + anIDMapperFilter->myIsVTKDone); +} + + +//--------------------------------------------------------------- +int +VISU_MedConvertor +::LoadValForTimeOnGaussPts(const MED::PWrapper& theMed, + VISU::PMEDMesh theMesh, + VISU::PMEDMeshOnEntity theMeshOnEntity, + VISU::PMEDField theField, + VISU::PMEDValForTime theValForTime) +{ + PGaussPtsIDFilter aGaussPtsIDFilter = theValForTime->myGaussPtsIDFilter; + return LoadValForTime(theMed, + theMesh, + theMeshOnEntity, + theField, + theValForTime, + true, + aGaussPtsIDFilter->myIsVTKDone); +} diff --git a/src/CONVERTOR/VISU_MedConvertor.hxx b/src/CONVERTOR/VISU_MedConvertor.hxx index c93ac341..abcb6ad7 100644 --- a/src/CONVERTOR/VISU_MedConvertor.hxx +++ b/src/CONVERTOR/VISU_MedConvertor.hxx @@ -12,73 +12,260 @@ #include "VISU_Convertor_impl.hxx" #include "MED_Common.hxx" +#include "MED_Structures.hxx" -namespace VISU{ +#include +#include - struct TMEDMesh: TMeshImpl{ +namespace VISU +{ + typedef TVector TNames; + + //--------------------------------------------------------------- + class TMEDNamedPointCoords: public virtual TNamedPointCoords + { + MED::PNodeInfo myNodeInfo; + TNames myPointNames; + public: + void + Init(vtkIdType theNbPoints, + vtkIdType theDim, + const MED::PNodeInfo& theNodeInfo); + + virtual + std::string + GetNodeName(vtkIdType theObjID) const; + }; + typedef SharedPtr PMEDNamedPointCoords; + + + //--------------------------------------------------------------- + struct TMEDMesh: virtual TMeshImpl + { MED::PMeshInfo myMeshInfo; MED::TEntityInfo myEntityInfo; }; - typedef shared_ptr PMEDMesh; + typedef SharedPtr PMEDMesh; + - struct TMEDMeshOnEntity: TMeshOnEntityImpl{ - MED::TGeom myGeom; + //--------------------------------------------------------------- + struct TMEDSubProfile: virtual TSubProfileImpl + { + MED::EGeometrieElement myMGeom; + + TMEDSubProfile(): + myIsElemNum(MED::eFAUX) + {} + + MED::EBooleen myIsElemNum; + MED::TElemNum myElemNum; + + virtual + vtkIdType + GetElemObjID(vtkIdType theID) const; }; - typedef shared_ptr PMEDMeshOnEntity; + typedef SharedPtr PMEDSubProfile; + + + //--------------------------------------------------------------- + struct TMEDProfile: virtual TProfileImpl + {}; + typedef SharedPtr PMEDProfile; + - struct TMEDFamily: TFamilyImpl{ + //--------------------------------------------------------------- + struct TMEDGauss: virtual TGaussImpl + { + MED::PGaussInfo myGaussInfo; + + //! To define a way to implement more detail comparision of the TGaussSubMesh instances + virtual + void + LessThan(const PGaussImpl& theGauss, + bool& theResult) const; }; - typedef shared_ptr PMEDFamily; - - struct TMEDGroup: TGroupImpl{ + typedef SharedPtr PMEDGauss; + + + //--------------------------------------------------------------- + struct TMEDGaussSubMesh: virtual TGaussSubMeshImpl + { + TMEDGaussSubMesh(): + myIsElemNum(MED::eFAUX) + {} + + MED::EBooleen myIsElemNum; + MED::TElemNum myElemNum; + + virtual + TGaussPointID + GetObjID(vtkIdType theID) const; }; - typedef shared_ptr PMEDGroup; + typedef SharedPtr PMEDGaussSubMesh; + + + //--------------------------------------------------------------- + struct TMEDGaussMesh: virtual TGaussMeshImpl + {}; + typedef SharedPtr PMEDGaussMesh; + + + //--------------------------------------------------------------- + struct TMEDSubMesh: virtual TSubMeshImpl + { + TMEDSubMesh(): + myIsElemNum(MED::eFAUX) + {} + + MED::EBooleen myIsElemNum; + MED::TElemNum myElemNum; + MED::PElemInfo myElemInfo; + + void + Init(const MED::PElemInfo& theElemInfo); - struct TMEDField: TFieldImpl{ + virtual + vtkIdType + GetElemObjID(vtkIdType theID) const; + + virtual + std::string + GetElemName(vtkIdType theObjID) const; }; - typedef shared_ptr PMEDField; + typedef SharedPtr PMEDSubMesh; + + + //--------------------------------------------------------------- + typedef std::map TFamilyID2CellsSize; - struct TMEDValForTime: TValForTimeImpl{ + struct TMEDMeshOnEntity: virtual TMeshOnEntityImpl + { + TFamilyID2CellsSize myFamilyID2CellsSize; + MED::TGeom2Size myGeom2Size; }; - typedef shared_ptr PMEDValForTime; + typedef SharedPtr PMEDMeshOnEntity; + + + //--------------------------------------------------------------- + struct TMEDFamily: virtual TFamilyImpl + {}; + typedef SharedPtr PMEDFamily; + + + //--------------------------------------------------------------- + struct TMEDGroup: virtual TGroupImpl + {}; + typedef SharedPtr PMEDGroup; + + + //--------------------------------------------------------------- + struct TMEDField: virtual TFieldImpl + {}; + typedef SharedPtr PMEDField; + + + //--------------------------------------------------------------- + struct TMEDValForTime: virtual TValForTimeImpl + {}; + typedef SharedPtr PMEDValForTime; } -class VISU_MedConvertor: public VISU_Convertor_impl{ +class VISU_MedConvertor: public VISU_Convertor_impl +{ VISU_MedConvertor(); VISU_MedConvertor(const VISU_MedConvertor&); + + bool myIsEntitiesDone; + bool myIsFieldsDone; + bool myIsGroupsDone; + bool myIsMinMaxDone; + public: - VISU_MedConvertor(const std::string& theFileName) ; - virtual VISU_Convertor* Build() ; + VISU_MedConvertor(const std::string& theFileName); + + virtual + VISU_Convertor* + BuildEntities(); + + virtual + VISU_Convertor* + BuildFields(); + + virtual + VISU_Convertor* + BuildMinMax(); + + virtual + VISU_Convertor* + BuildGroups(); + protected: QFileInfo myFileInfo; - virtual int LoadMeshOnEntity(VISU::PMeshOnEntityImpl theMeshOnEntity, - const std::string& theFamilyName = ""); + virtual + int + LoadMeshOnEntity(VISU::PMeshImpl theMesh, + VISU::PMeshOnEntityImpl theMeshOnEntity); + + virtual + int + LoadFamilyOnEntity(VISU::PMeshImpl theMesh, + VISU::PMeshOnEntityImpl theMeshOnEntity, + VISU::PFamilyImpl theFamily); - virtual int LoadMeshOnGroup(VISU::PMeshImpl theMesh, - const VISU::TFamilyAndEntitySet& theFamilyAndEntitySet); + virtual + int + LoadMeshOnGroup(VISU::PMeshImpl theMesh, + const VISU::TFamilySet& theFamilySet); + + virtual + int + LoadValForTimeOnMesh(VISU::PMeshImpl theMesh, + VISU::PMeshOnEntityImpl theMeshOnEntity, + VISU::PFieldImpl theField, + VISU::PValForTimeImpl theValForTime); + + virtual + int + LoadValForTimeOnGaussPts(VISU::PMeshImpl theMesh, + VISU::PMeshOnEntityImpl theMeshOnEntity, + VISU::PFieldImpl theField, + VISU::PValForTimeImpl theValForTime); - virtual int LoadFieldOnMesh(VISU::PMeshImpl theMesh, - VISU::PMeshOnEntityImpl theMeshOnEntity, - VISU::PFieldImpl theField, - VISU::PValForTimeImpl theValForTime); + int + LoadPoints(const MED::PWrapper& theMed, + const VISU::PMEDMesh theMesh); + + int + LoadPointsOnFamily(const MED::PWrapper& theMed, + const VISU::PMEDMesh theMesh, + const VISU::PMEDFamily theFamily); + + int + LoadCellsOnEntity(const MED::PWrapper& theMed, + const VISU::PMEDMesh theMesh, + const VISU::PMEDMeshOnEntity theMeshOnEntity); - int LoadPoints(const MED::PWrapper& theMed, - VISU::PMEDMesh theMesh, - const std::string& theFamilyName = ""); - - int LoadCellsOnEntity(const MED::PWrapper& theMed, - VISU::PMEDMesh theMesh, - VISU::PMEDMeshOnEntity theMeshOnEntity, - const std::string& theFamilyName = ""); + int + LoadCellsOnFamily(const MED::PWrapper& theMed, + const VISU::PMEDMesh theMesh, + const VISU::PMEDMeshOnEntity theMeshOnEntity, + const VISU::PMEDFamily theFamily); - int LoadField(const MED::PWrapper& theMed, - VISU::PMEDMesh theMesh, - VISU::PMEDMeshOnEntity theMeshOnEntity, - VISU::PMEDField theField, - VISU::PMEDValForTime theValForTime); + int + LoadValForTimeOnMesh(const MED::PWrapper& theMed, + VISU::PMEDMesh theMesh, + VISU::PMEDMeshOnEntity theMeshOnEntity, + VISU::PMEDField theField, + VISU::PMEDValForTime theValForTime); + int + LoadValForTimeOnGaussPts(const MED::PWrapper& theMed, + VISU::PMEDMesh theMesh, + VISU::PMEDMeshOnEntity theMeshOnEntity, + VISU::PMEDField theField, + VISU::PMEDValForTime theValForTime); }; #endif diff --git a/src/CONVERTOR/VISU_MergeFilter.cxx b/src/CONVERTOR/VISU_MergeFilter.cxx new file mode 100644 index 00000000..aa48a46a --- /dev/null +++ b/src/CONVERTOR/VISU_MergeFilter.cxx @@ -0,0 +1,418 @@ +// SALOME VTKViewer : build VTK viewer into Salome desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : +// Author : +// Module : SALOME +// $Header$ + +#include "VISU_MergeFilter.hxx" + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace VISU +{ + + class TFieldNode + { + public: + TFieldNode(const char* name, vtkDataSet* ptr=0) + { + int length = static_cast(strlen(name)); + if (length > 0) { + this->Name = new char[length+1]; + strcpy(this->Name, name); + } else { + this->Name = 0; + } + this->Ptr = ptr; + this->Next = 0; + } + ~TFieldNode() + { + delete[] this->Name; + } + + const char* GetName() + { + return Name; + } + vtkDataSet* Ptr; + TFieldNode* Next; + private: + TFieldNode(const TFieldNode&) {} + void operator=(const TFieldNode&) {} + char* Name; + }; + + class TFieldList + { + public: + TFieldList() + { + this->First = 0; + this->Last = 0; + } + ~TFieldList() + { + TFieldNode* node = this->First; + TFieldNode* next; + while(node){ + next = node->Next; + delete node; + node = next; + } + } + + + void Add(const char* name, vtkDataSet* ptr) + { + TFieldNode* newNode = new TFieldNode(name, ptr); + if (!this->First) { + this->First = newNode; + this->Last = newNode; + } else { + this->Last->Next = newNode; + this->Last = newNode; + } + } + + friend class TFieldListIterator; + + private: + TFieldNode* First; + TFieldNode* Last; + }; + + class TFieldListIterator + { + public: + TFieldListIterator(TFieldList* list) + { + this->List = list; + this->Position = 0; + } + void Begin() + { + this->Position = this->List->First; + } + void Next() + { + if (this->Position) { + this->Position = this->Position->Next; + } + } + int End() + { + return this->Position ? 0 : 1; + } + TFieldNode* Get() + { + return this->Position; + } + + private: + TFieldNode* Position; + TFieldList* List; + }; + +} + +//------------------------------------------------------------------------------ +vtkStandardNewMacro(VISU_MergeFilter); + +//------------------------------------------------------------------------------ + +// Create object with no input or output. +VISU_MergeFilter::VISU_MergeFilter() +{ + this->FieldList = new VISU::TFieldList; +} + +VISU_MergeFilter::~VISU_MergeFilter() +{ + delete this->FieldList; +} + +void VISU_MergeFilter::SetScalars(vtkDataSet *input) +{ + this->vtkProcessObject::SetNthInput(1, input); +} +vtkDataSet *VISU_MergeFilter::GetScalars() +{ + if (this->NumberOfInputs < 2) + { + return NULL; + } + return (vtkDataSet *)(this->Inputs[1]); +} + +void VISU_MergeFilter::SetVectors(vtkDataSet *input) +{ + this->vtkProcessObject::SetNthInput(2, input); +} +vtkDataSet *VISU_MergeFilter::GetVectors() +{ + if (this->NumberOfInputs < 3) + { + return NULL; + } + return (vtkDataSet *)(this->Inputs[2]); +} + +void VISU_MergeFilter::SetNormals(vtkDataSet *input) +{ + this->vtkProcessObject::SetNthInput(3, input); +} +vtkDataSet *VISU_MergeFilter::GetNormals() +{ + if (this->NumberOfInputs < 4) + { + return NULL; + } + return (vtkDataSet *)(this->Inputs[3]); +} + +void VISU_MergeFilter::SetTCoords(vtkDataSet *input) +{ + this->vtkProcessObject::SetNthInput(4, input); +} +vtkDataSet *VISU_MergeFilter::GetTCoords() +{ + if (this->NumberOfInputs < 5) + { + return NULL; + } + return (vtkDataSet *)(this->Inputs[4]); +} + +void VISU_MergeFilter::SetTensors(vtkDataSet *input) +{ + this->vtkProcessObject::SetNthInput(5, input); +} +vtkDataSet *VISU_MergeFilter::GetTensors() +{ + if (this->NumberOfInputs < 6) + { + return NULL; + } + return (vtkDataSet *)(this->Inputs[5]); +} + +void VISU_MergeFilter::AddField(const char* name, vtkDataSet* input) +{ + this->FieldList->Add(name, input); +} + +void VISU_MergeFilter::Execute() +{ + vtkIdType numPts, numScalars=0, numVectors=0, numNormals=0, numTCoords=0; + vtkIdType numTensors=0; + vtkIdType numCells, numCellScalars=0, numCellVectors=0, numCellNormals=0; + vtkIdType numCellTCoords=0, numCellTensors=0; + vtkPointData *pd; + vtkDataArray *scalars = NULL; + vtkDataArray *vectors = NULL; + vtkDataArray *normals = NULL; + vtkDataArray *tcoords = NULL; + vtkDataArray *tensors = NULL; + vtkCellData *cd; + vtkDataArray *cellScalars = NULL; + vtkDataArray *cellVectors = NULL; + vtkDataArray *cellNormals = NULL; + vtkDataArray *cellTCoords = NULL; + vtkDataArray *cellTensors = NULL; + vtkDataSet *output = this->GetOutput(); + vtkPointData *outputPD = output->GetPointData(); + vtkCellData *outputCD = output->GetCellData(); + + vtkDebugMacro(<<"Merging data!"); + + // geometry needs to be copied + output->CopyStructure(this->GetInput()); + if ( (numPts = this->GetInput()->GetNumberOfPoints()) < 1 ) + { + vtkWarningMacro(<<"Nothing to merge!"); + } + numCells = this->GetInput()->GetNumberOfCells(); + + if ( this->GetScalars() ) + { + pd = this->GetScalars()->GetPointData(); + scalars = pd->GetScalars(); + if ( scalars != NULL ) + { + numScalars = scalars->GetNumberOfTuples(); + } + cd = this->GetScalars()->GetCellData(); + cellScalars = cd->GetScalars(); + if ( cellScalars != NULL ) + { + numCellScalars = cellScalars->GetNumberOfTuples(); + } + } + + if ( this->GetVectors() ) + { + pd = this->GetVectors()->GetPointData(); + vectors = pd->GetVectors(); + if ( vectors != NULL ) + { + numVectors= vectors->GetNumberOfTuples(); + } + cd = this->GetVectors()->GetCellData(); + cellVectors = cd->GetVectors(); + if ( cellVectors != NULL ) + { + numCellVectors = cellVectors->GetNumberOfTuples(); + } + } + + if ( this->GetNormals() ) + { + pd = this->GetNormals()->GetPointData(); + normals = pd->GetNormals(); + if ( normals != NULL ) + { + numNormals= normals->GetNumberOfTuples(); + } + cd = this->GetNormals()->GetCellData(); + cellNormals = cd->GetNormals(); + if ( cellNormals != NULL ) + { + numCellNormals = cellNormals->GetNumberOfTuples(); + } + } + + if ( this->GetTCoords() ) + { + pd = this->GetTCoords()->GetPointData(); + tcoords = pd->GetTCoords(); + if ( tcoords != NULL ) + { + numTCoords= tcoords->GetNumberOfTuples(); + } + cd = this->GetTCoords()->GetCellData(); + cellTCoords = cd->GetTCoords(); + if ( cellTCoords != NULL ) + { + numCellTCoords = cellTCoords->GetNumberOfTuples(); + } + } + + if ( this->GetTensors() ) + { + pd = this->GetTensors()->GetPointData(); + tensors = pd->GetTensors(); + if ( tensors != NULL ) + { + numTensors = tensors->GetNumberOfTuples(); + } + cd = this->GetTensors()->GetCellData(); + cellTensors = cd->GetTensors(); + if ( cellTensors != NULL ) + { + numCellTensors = cellTensors->GetNumberOfTuples(); + } + } + + // merge data only if it is consistent + if ( numPts == numScalars ) + { + outputPD->SetScalars(scalars); + } + if ( numCells == numCellScalars ) + { + outputCD->SetScalars(cellScalars); + } + + if ( numPts == numVectors ) + { + outputPD->SetVectors(vectors); + } + if ( numCells == numCellVectors ) + { + outputCD->SetVectors(cellVectors); + } + + if ( numPts == numNormals ) + { + outputPD->SetNormals(normals); + } + if ( numCells == numCellNormals ) + { + outputCD->SetNormals(cellNormals); + } + + if ( numPts == numTCoords ) + { + outputPD->SetTCoords(tcoords); + } + if ( numCells == numCellTCoords ) + { + outputCD->SetTCoords(cellTCoords); + } + + if ( numPts == numTensors ) + { + outputPD->SetTensors(tensors); + } + if ( numCells == numCellTensors ) + { + outputCD->SetTensors(cellTensors); + } + + VISU::TFieldListIterator it(this->FieldList); + vtkDataArray* da; + const char* name; + vtkIdType num; + for(it.Begin(); !it.End() ; it.Next()) + { + pd = it.Get()->Ptr->GetPointData(); + cd = it.Get()->Ptr->GetCellData(); + name = it.Get()->GetName(); + if ( (da=pd->GetArray(name)) ) + { + num = da->GetNumberOfTuples(); + if (num == numPts) + { + outputPD->AddArray(da); + } + } + if ( (da=cd->GetArray(name)) ) + { + num = da->GetNumberOfTuples(); + if (num == numCells) // To fix a VTK bug + { + outputCD->AddArray(da); + } + } + } +} diff --git a/src/CONVERTOR/VISU_MergeFilter.hxx b/src/CONVERTOR/VISU_MergeFilter.hxx new file mode 100644 index 00000000..1d15cd3b --- /dev/null +++ b/src/CONVERTOR/VISU_MergeFilter.hxx @@ -0,0 +1,99 @@ +// SALOME VTKViewer : build VTK viewer into Salome desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : +// Author : +// Module : SALOME +// $Header$ + +#ifndef VISU_MergeFilter_H +#define VISU_MergeFilter_H + +#include + +namespace VISU +{ + class TFieldList; +} + +// Following class was redefined in order to fix VTK bug +// (see code for more details) + +class VISU_MergeFilter : public vtkDataSetToDataSetFilter +{ +public: + static VISU_MergeFilter *New(); + vtkTypeMacro(VISU_MergeFilter,vtkDataSetToDataSetFilter); + + // Description: + // Specify object from which to extract geometry information. + void SetGeometry(vtkDataSet *input) {this->SetInput(input);}; + vtkDataSet *GetGeometry() {return this->GetInput();}; + + // Description: + // Specify object from which to extract scalar information. + void SetScalars(vtkDataSet *); + vtkDataSet *GetScalars(); + + // Description: + // Set / get the object from which to extract vector information. + void SetVectors(vtkDataSet *); + vtkDataSet *GetVectors(); + + // Description: + // Set / get the object from which to extract normal information. + void SetNormals(vtkDataSet *); + vtkDataSet *GetNormals(); + + // Description: + // Set / get the object from which to extract texture coordinates + // information. + void SetTCoords(vtkDataSet *); + vtkDataSet *GetTCoords(); + + // Description: + // Set / get the object from which to extract tensor data. + void SetTensors(vtkDataSet *); + vtkDataSet *GetTensors(); + + // Description: + // Set the object from which to extract a field and the name + // of the field + void AddField(const char* name, vtkDataSet* input); + +protected: + VISU_MergeFilter(); + ~VISU_MergeFilter(); + + // Usual data generation method + void Execute(); + + VISU::TFieldList* FieldList; +private: + VISU_MergeFilter(const VISU_MergeFilter&); // Not implemented. + void operator=(const VISU_MergeFilter&); // Not implemented. +}; + +#endif + + diff --git a/src/ENGINE/VISU_Engine_i.cc b/src/ENGINE/VISU_Engine_i.cc index 63ccfd1f..45dc68bc 100644 --- a/src/ENGINE/VISU_Engine_i.cc +++ b/src/ENGINE/VISU_Engine_i.cc @@ -162,6 +162,11 @@ namespace VISU{ } + Result_ptr VISU_Gen_i::CreateResult(const char* theFileName){ + return myVisuGen->CreateResult(theFileName); + } + + Result_ptr VISU_Gen_i::CopyAndImportFile(const char* theFileName){ return myVisuGen->CopyAndImportFile(theFileName); } @@ -212,6 +217,16 @@ namespace VISU{ } + GaussPoints_ptr VISU_Gen_i::GaussPointsOnField(Result_ptr theResult, + const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + CORBA::Double theIteration) + { + return myVisuGen->GaussPointsOnField(theResult,theMeshName,theEntity,theFieldName,theIteration); + } + + DeformedShape_ptr VISU_Gen_i::DeformedShapeOnField(Result_ptr theResult, const char* theMeshName, VISU::Entity theEntity, diff --git a/src/ENGINE/VISU_Engine_i.hh b/src/ENGINE/VISU_Engine_i.hh index 841c0198..d9c665ac 100644 --- a/src/ENGINE/VISU_Engine_i.hh +++ b/src/ENGINE/VISU_Engine_i.hh @@ -57,6 +57,7 @@ namespace VISU{ //Create Result virtual Result_ptr ImportFile(const char* theFileName); + virtual Result_ptr CreateResult(const char* theFileName); virtual Result_ptr CopyAndImportFile(const char* theFileName); virtual Result_ptr ImportMed(SALOMEDS::SObject_ptr theMedSObject); virtual Result_ptr ImportMedField(SALOME_MED::FIELD_ptr theField); @@ -69,6 +70,8 @@ namespace VISU{ virtual ScalarMap_ptr ScalarMapOnField(Result_ptr theResult, const char* theMeshName, VISU::Entity theEntity, const char* theFieldName, CORBA::Double theIteration); + virtual GaussPoints_ptr GaussPointsOnField(Result_ptr theResult, const char* theMeshName, VISU::Entity theEntity, + const char* theFieldName, CORBA::Double theIteration); virtual DeformedShape_ptr DeformedShapeOnField(Result_ptr theResult, const char* theMeshName, VISU::Entity theEntity, const char* theFieldName, CORBA::Double theIteration); virtual Vectors_ptr VectorsOnField(Result_ptr theResult, const char* theMeshName, VISU::Entity theEntity, diff --git a/src/Makefile.in b/src/Makefile.in index b8b86f6e..7e207ca1 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -32,6 +32,6 @@ VPATH=.:@srcdir@ @COMMENCE@ -SUBDIRS = CONVERTOR PIPELINE OBJECT ENGINE GUITOOLS VISU_I VISUGUI VISU_SWIG +SUBDIRS = CONVERTOR PIPELINE OBJECT VVTK GUITOOLS VISU_I VISUGUI VISU_SWIG ENGINE @MODULE@ diff --git a/src/OBJECT/Makefile.in b/src/OBJECT/Makefile.in index 6c2ba23c..e73a5816 100644 --- a/src/OBJECT/Makefile.in +++ b/src/OBJECT/Makefile.in @@ -32,12 +32,28 @@ VPATH=.:@srcdir@:@top_srcdir@/idl @COMMENCE@ -EXPORT_HEADERS = VISU_Actor.h VISU_MeshAct.h VISU_ScalarMapAct.h VISU_VectorsAct.h +EXPORT_HEADERS = \ + VISU_ActorFactory.h \ + VISU_GaussPtsSettings.h \ + VISU_GaussPtsActorFactory.h \ + VISU_Event.h \ + VISU_Actor.h \ + VISU_MeshAct.h \ + VISU_ScalarMapAct.h \ + VISU_GaussPtsAct.h \ + VISU_VectorsAct.h # Libraries targets LIB = libVisuObject.la -LIB_SRC = VISU_Actor.cxx VISU_MeshAct.cxx VISU_ScalarMapAct.cxx VISU_VectorsAct.cxx +LIB_SRC = \ + VISU_Actor.cxx \ + VISU_MeshAct.cxx \ + VISU_ScalarMapAct.cxx \ + VISU_GaussPtsDeviceActor.cxx \ + VISU_GaussPtsSettings.cxx \ + VISU_GaussPtsAct.cxx \ + VISU_VectorsAct.cxx LIB_CLIENT_IDL = @@ -45,9 +61,24 @@ LIB_CLIENT_IDL = BIN = BIN_SRC = -CPPFLAGS+= $(OCC_INCLUDES) $(VTK_INCLUDES) $(QT_INCLUDES) \ - -I${KERNEL_ROOT_DIR}/include/salome -I${GUI_ROOT_DIR}/include/salome -LDFLAGS+= $(VTK_LIBS) -lSalomeObject -lVisuPipeLine \ - -L${KERNEL_ROOT_DIR}/lib/salome -L${GUI_ROOT_DIR}/lib/salome +CPPFLAGS+= \ + $(OCC_INCLUDES) \ + $(VTK_INCLUDES) \ + $(BOOST_CPPFLAGS) \ + -I${MED_ROOT_DIR}/include/salome \ + -I${GUI_ROOT_DIR}/include/salome \ + -I${KERNEL_ROOT_DIR}/include/salome + +LDFLAGS+= \ + $(VTK_LIBS) \ + $(BOOST_LIBS) \ + -L${GUI_ROOT_DIR}/lib/salome \ + -L${KERNEL_ROOT_DIR}/lib/salome + +LIBS+= \ + -lboost_signals-mt \ + -lSalomeObject \ + -lVisuPipeLine \ + -lSVTK @CONCLUDE@ diff --git a/src/OBJECT/VISU_Actor.cxx b/src/OBJECT/VISU_Actor.cxx index e38b8cd3..90e3009f 100644 --- a/src/OBJECT/VISU_Actor.cxx +++ b/src/OBJECT/VISU_Actor.cxx @@ -21,8 +21,8 @@ // // // -// File : VISU_Actor.cxx -// Author : Laurent CORNABE with help of Nicolas REJNERI +// File : +// Author : // Module : VISU // $Header$ @@ -33,10 +33,20 @@ #include "VTKViewer_PassThroughFilter.h" #include +#include // VTK Includes #include - +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -48,6 +58,8 @@ #include #include +#include + #include "utilities.h" using namespace std; @@ -60,103 +72,211 @@ static int MYDEBUG = 1; static int MYDEBUG = 0; #endif -//======================================================================= +//#define ENABLE_ANNOTATION +//---------------------------------------------------------------------------- vtkStandardNewMacro(VISU_Actor); -VISU_Actor::VISU_Actor(){ - SetDebug(MYVTKDEBUG); - myParent = this; - myPipeLine = NULL; - myPrs3d = NULL; +//---------------------------------------------------------------------------- +VISU_Actor +::VISU_Actor(): + myIsVTKMapping(false), + myPrs3d(NULL), + myActorFactory(NULL), + myMapper(vtkDataSetMapper::New()), + myIsShrunk(false), + myIsShrinkable(false), + myShrinkFilter(VTKViewer_ShrinkFilter::New()), + myAnnotationMapper(vtkTextMapper::New()), + myAnnotationActor(vtkTextActor::New()) +{ + if(MYDEBUG) MESSAGE("VISU_Actor::VISU_Actor - this = "<Delete(); + myShrinkFilter->Delete(); myStoreMapping = true; - myIsShrunk = false; - myIsShrinkable = false; - myShrinkFilter = VTKViewer_ShrinkFilter::New(); myShrinkFilter->SetStoreMapping(true); - SetShrinkFactor(); - - myMapper = vtkDataSetMapper::New(); - myIO = NULL; - myName = ""; + myAnnotationMapper->Delete(); + myAnnotationActor->SetMapper(myAnnotationMapper.GetPointer()); + + myAnnotationActor->Delete(); + myAnnotationActor->SetVisibility(0); +} + +//---------------------------------------------------------------------------- +void +VISU_Actor +::ShallowCopy(vtkProp *prop) +{ + VISU_Actor *anActor = VISU_Actor::SafeDownCast(prop); + if(anActor != NULL){ + setName(anActor->getName()); + if(anActor->hasIO()) setIO(anActor->getIO()); + } + Superclass::ShallowCopy(prop); } -VISU_Actor::~VISU_Actor(){ - SALOME_Actor::SetProperty(NULL); +void +VISU_Actor +::ShallowCopyPL(VISU_PipeLine* thePipeLine) +{ + myPipeLine->ShallowCopy(thePipeLine); - myMapper->RemoveAllInputs(); - myMapper->Delete(); + vtkDataSet* aDatsSet = myMapper->GetInput(); + GetMapper()->ShallowCopy(thePipeLine->GetMapper()); - if(myPipeLine) - myPipeLine->UnRegister(this); + // To restore mapper input from pipeline + myMapper->SetInput(aDatsSet); +} - myShrinkFilter->UnRegisterAllOutputs(); - myShrinkFilter->Delete(); +//---------------------------------------------------------------------------- +VISU_Actor +::~VISU_Actor() +{ + if(MYDEBUG) MESSAGE("~VISU_Actor() - this = "<getName(); } -void VISU_Actor::SetPrs3d(VISU::Prs3d_i* thePrs3d){ +//---------------------------------------------------------------------------- +void +VISU_Actor +::SetPrs3d(VISU::Prs3d_i* thePrs3d) +{ myPrs3d = thePrs3d; } -void VISU_Actor::SetPipeLine(VISU_PipeLine* thePipeLine) { - if (myPipeLine != thePipeLine){ - if (myPipeLine != NULL) myPipeLine->UnRegister(this); - myPipeLine = thePipeLine; - if (myPipeLine != NULL) myPipeLine->Register(this); - this->Modified(); - vtkMapper *aMapper = myPipeLine->GetMapper(); - vtkDataSet *aDataSet = aMapper->GetInput(); - - //This code has been moved into VISU::Prs3d_i::UpdateActor() for bug 9808 - //if(!aDataSet) - // throw std::runtime_error("VISU_Actor::SetPipeLine >> There is no input data !!!"); - //aDataSet->Update(); - //static float eps = VTK_LARGE_FLOAT * 0.1 ; - //if(aDataSet->GetLength() > eps) - // throw std::runtime_error("VISU_Actor::SetPipeLine >> Diagonal of the actor is too large !!!"); - //if(!aDataSet->GetNumberOfCells()) - // throw std::runtime_error("VISU_Actor::SetPipeLine >> There is no visible elements"); - - //Bug SAL4221: Mesh with less than 10 cells : shrink mode disable - //SetShrinkable(aDataSet->GetNumberOfCells() > 10); - SetShrinkable(thePipeLine->IsShrinkable()); - //Now, we use vtkShrinkPolyData (not vtkShrinkFilter), - //and the class there is no such limitation. - - myMapper->SetInput(aDataSet); - SetMapper(myMapper); - } +VISU::Prs3d_i* +VISU_Actor +::GetPrs3d() +{ + return myPrs3d; } -void VISU_Actor::SetParent(VISU_Actor* theParent){ - myParent = theParent; +//---------------------------------------------------------------------------- +VISU::TActorFactory* +VISU_Actor +::GetFactory() +{ + return myActorFactory; } -void VISU_Actor::SetRepresentation(int theMode) { - SALOME_Actor::SetRepresentation(theMode); - if(myRepresentation == VTK_POINTS) - UnShrink(); +void +VISU_Actor +::SetFactory(VISU::TActorFactory* theActorFactory) +{ + using namespace VISU; + + if(myActorFactory == theActorFactory) + return; + + if(theActorFactory) + myDestroySignal.connect(boost::bind(&TActorFactory::RemoveActor, + theActorFactory, + _1)); + + myActorFactory = theActorFactory; } -void VISU_Actor::SetOpacity(float theValue){ - GetProperty()->SetOpacity(theValue); +//---------------------------------------------------------------------------- +void +VISU_Actor +::UpdateFromFactory() +{ + myActorFactory->UpdateActor(this); + Update(); } -float VISU_Actor::GetOpacity(){ - return GetProperty()->GetOpacity(); +void +VISU_Actor +::RemoveFromRender() +{ + RemoveFromRender(GetRenderer()); +} + +//---------------------------------------------------------------------------- +void +VISU_Actor +::SetMapperInput(vtkDataSet* theDataSet) +{ + myMapper->SetInput(theDataSet); + SetMapper(myMapper.GetPointer()); +} + +void +VISU_Actor +::SetPipeLine(VISU_PipeLine* thePipeLine) +{ + myPipeLine = thePipeLine; + if(thePipeLine){ + if(vtkMapper *aMapper = myPipeLine->GetMapper()){ + if(vtkDataSet *aDataSet = aMapper->GetInput()){ + if(!aDataSet) + throw std::runtime_error("VISU_Actor::SetPipeLine >> There is no input data !!!"); + + aDataSet->Update(); + + static float EPS = VTK_LARGE_FLOAT * 0.1 ; + if(aDataSet->GetLength() > EPS) + throw std::runtime_error("VISU_Actor::SetPipeLine >> Diagonal of the actor is too large !!!"); + + if(!aDataSet->GetNumberOfCells()) + throw std::runtime_error("VISU_Actor::SetPipeLine >> There is no visible elements"); + + SetShrinkable(thePipeLine->IsShrinkable()); + + SetMapperInput(aDataSet); + } + } + } + this->Modified(); } +VISU_PipeLine* +VISU_Actor +::GetPipeLine() +{ + return myPipeLine.GetPointer(); +} + +VISU_PipeLine* +VISU_Actor +::GetCurrentPL() +{ + return GetPipeLine(); +} -void VISU_Actor::SetShrink(){ - if(!myIsShrinkable) return; + +//---------------------------------------------------------------------------- +void +VISU_Actor +::SetRepresentation(int theMode) +{ + Superclass::SetRepresentation(theMode); + if(myRepresentation == VTK_POINTS) + UnShrink(); +} + + +//---------------------------------------------------------------------------- +void +VISU_Actor +::SetShrink() +{ + if(!myIsShrinkable) + return; if(vtkDataSet* aDataSet = myPassFilter[0]->GetOutput()){ myShrinkFilter->SetInput(aDataSet); myPassFilter[1]->SetInput(myShrinkFilter->GetOutput()); @@ -164,8 +284,12 @@ void VISU_Actor::SetShrink(){ } } -void VISU_Actor::UnShrink(){ - if(!myIsShrunk) return; +void +VISU_Actor +::UnShrink() +{ + if(!myIsShrunk) + return; if(vtkDataSet* aDataSet = myPassFilter[0]->GetOutput()){ myPassFilter[1]->SetInput(aDataSet); myPassFilter[1]->Modified(); @@ -174,54 +298,298 @@ void VISU_Actor::UnShrink(){ } } -void VISU_Actor::SetShrinkable(bool theIsShrinkable){ +bool +VISU_Actor +::IsShrunk() +{ + return myIsShrunk; +} + +void +VISU_Actor +::SetShrinkable(bool theIsShrinkable) +{ myIsShrinkable = theIsShrinkable; } -void VISU_Actor::SetShrinkFactor(float theValue){ +bool +VISU_Actor +::IsShrunkable() +{ + return myIsShrinkable; +} + +void +VISU_Actor +::SetShrinkFactor(float theValue) +{ myShrinkFilter->SetShrinkFactor(theValue); Modified(); } -float VISU_Actor::GetShrinkFactor(){ +float +VISU_Actor +::GetShrinkFactor() +{ return myShrinkFilter->GetShrinkFactor(); } //---------------------------------------------------------------------------- -void VISU_Actor::SetVisibility(int theMode){ - SALOME_Actor::SetVisibility(theMode); +void +VISU_Actor +::SetOpacity(float theValue) +{ + GetProperty()->SetOpacity(theValue); } -int VISU_Actor::GetVisibility(){ - return SALOME_Actor::GetVisibility(); +float +VISU_Actor +::GetOpacity() +{ + return GetProperty()->GetOpacity(); } -void VISU_Actor::SetLineWidth(float theLineWidth){ +void +VISU_Actor +::SetLineWidth(float theLineWidth) +{ GetProperty()->SetLineWidth(theLineWidth); } -float VISU_Actor::GetLineWidth(){ +float +VISU_Actor +::GetLineWidth() +{ return GetProperty()->GetLineWidth(); } +//================================================================== +// function: AddToRender +// purpose : +//================================================================== +void +VISU_Actor +::AddToRender(vtkRenderer* theRenderer) +{ + Superclass::AddToRender(theRenderer); + theRenderer->AddActor(myAnnotationActor.GetPointer()); +} + +//================================================================== +// function: RemoveFromRender +// purpose : +//================================================================== +void +VISU_Actor +::RemoveFromRender(vtkRenderer* theRenderer) +{ + theRenderer->RemoveActor(myAnnotationActor.GetPointer()); + Superclass::RemoveFromRender(theRenderer); + myDestroySignal(this); +} + //---------------------------------------------------------------------------- -void VISU_Actor::ShallowCopy(vtkProp *prop){ - VISU_Actor *anActor = VISU_Actor::SafeDownCast(prop); - if(anActor != NULL){ - setName(anActor->getName()); - if(anActor->hasIO()) setIO(anActor->getIO()); - } - SALOME_Actor::ShallowCopy(prop); +void +VISU_Actor +::SetVTKMapping(bool theIsVTKMapping) +{ + myIsVTKMapping = theIsVTKMapping; +} + +bool +VISU_Actor +::IsVTKMapping() const +{ + return myIsVTKMapping; } //---------------------------------------------------------------------------- -int VISU_Actor::GetNodeObjId(int theVtkID){ - if ( myIsShrunk ) - return myShrinkFilter->GetNodeObjId(theVtkID); - return theVtkID; +vtkDataSet* +VISU_Actor +::GetInput() +{ + if(myIsVTKMapping) + return Superclass::GetInput(); + + return GetCurrentPL()->GetOutput(); } -int VISU_Actor::GetElemObjId(int theVtkID){ - return myGeomFilter->GetElemObjId(theVtkID); +//---------------------------------------------------------------------------- +vtkIdType +VISU_Actor +::GetNodeObjId(vtkIdType theID) +{ + if(myIsVTKMapping) + return Superclass::GetNodeObjId(theID); + + vtkIdType anID = myGeomFilter->GetNodeObjId(theID); + + if(myIsShrunk) + anID = myShrinkFilter->GetNodeObjId(anID); + + return GetCurrentPL()->GetNodeObjID(anID); +} + +vtkIdType +VISU_Actor +::GetNodeVTKID(vtkIdType theID) +{ + if(myIsVTKMapping) + return theID; + + return GetCurrentPL()->GetNodeVTKID(theID); +} + +float* +VISU_Actor +::GetNodeCoord(int theObjID) +{ + if(myIsVTKMapping) + return Superclass::GetNodeCoord(theObjID); + + return GetCurrentPL()->GetNodeCoord(theObjID); +} + + +//---------------------------------------------------------------------------- +vtkIdType +VISU_Actor +::GetElemObjId(vtkIdType theID) +{ + if(myIsVTKMapping) + return Superclass::GetElemObjId(theID); + + vtkIdType anID = myGeomFilter->GetElemObjId(theID); + + if(myIsShrunk) + anID = myShrinkFilter->GetElemObjId(anID); + + return GetCurrentPL()->GetElemObjID(anID); +} + +vtkIdType +VISU_Actor +::GetElemVTKID(vtkIdType theID) +{ + if(myIsVTKMapping) + return theID; + + return GetCurrentPL()->GetElemVTKID(theID); +} + +vtkCell* +VISU_Actor +::GetElemCell(vtkIdType theObjID) +{ + if(myIsVTKMapping) + return Superclass::GetElemCell(theObjID); + + return GetCurrentPL()->GetElemCell(theObjID); +} + + +//---------------------------------------------------------------------------- +bool +VISU_Actor +::PreHighlight(vtkInteractorStyle* theInteractorStyle, + SVTK_SelectionEvent* theSelectionEvent, + bool theIsHighlight) +{ + bool aRet = Superclass::PreHighlight(theInteractorStyle, + theSelectionEvent, + theIsHighlight); +#ifndef ENABLE_ANNOTATION + return aRet; +#endif + // + myAnnotationActor->SetVisibility(0); + if(theIsHighlight){ + switch(mySelectionMode){ + case CellSelection:{ + vtkRenderer* aRenderer = theInteractorStyle->GetCurrentRenderer(); + myCellPicker->Pick(theSelectionEvent->myX, + theSelectionEvent->myY, + 0.0, + aRenderer); + + if(myCellPicker->GetActor() != this) + return false; + + vtkIdType aVTKId = myCellPicker->GetCellId(); + if(aVTKId >= 0 && mySelector->IsValid(this,aVTKId,true) && hasIO()){ + vtkIdType anObjId = GetElemObjId(aVTKId); + if(vtkCell* aCell = GetElemCell(anObjId)){ + vtkPoints* aPts = aCell->GetPoints(); + if(int aNbPts = aCell->GetNumberOfPoints()){ + float aCoord[3] = {0.0, 0.0, 0.0}; + for(int i = 0; i < aNbPts; i++){ + float *aPntCoord = aPts->GetPoint(i); + aCoord[0] += aPntCoord[0]; + aCoord[1] += aPntCoord[1]; + aCoord[2] += aPntCoord[2]; + } + // Display coordinates + float aWorldCoord[4] = {aCoord[0]/aNbPts, aCoord[1]/aNbPts, aCoord[2]/aNbPts, 1.0}; + aRenderer->SetWorldPoint(aWorldCoord); + aRenderer->WorldToDisplay(); + float aSelectionPoint[3]; + aRenderer->GetDisplayPoint(aSelectionPoint); + myAnnotationActor->SetPosition(aSelectionPoint); + // + // To prepare the annotation text + std::ostringstream aStr; + aStr<<"Cell ID: "<< anObjId; + std::string aString = aStr.str(); + myAnnotationMapper->SetInput(aString.c_str()); + + myAnnotationActor->SetVisibility(1); + return true; + } + } + } + break; + } + case NodeSelection:{ + vtkRenderer* aRenderer = theInteractorStyle->GetCurrentRenderer(); + myPointPicker->Pick(theSelectionEvent->myX, + theSelectionEvent->myY, + 0.0, + aRenderer); + + if(myPointPicker->GetActor() != this) + return false; + + vtkIdType aVtkId = myPointPicker->GetPointId(); + if(aVtkId >= 0 && mySelector->IsValid(this,aVtkId,true) && hasIO()){ + vtkIdType anObjId = GetNodeObjId( aVtkId ); + if(float* aCoord = GetNodeCoord(anObjId)){ + // Display coordinates + float aWorldCoord[4] = {aCoord[0], aCoord[1], aCoord[2], 1.0}; + aRenderer->SetWorldPoint(aWorldCoord); + aRenderer->WorldToDisplay(); + float aSelectionPoint[3]; + aRenderer->GetDisplayPoint(aSelectionPoint); + myAnnotationActor->SetPosition(aSelectionPoint); + // + // To prepare the annotation text + std::ostringstream aStr; + aStr<<"Node ID: "<< anObjId; + std::string aString = aStr.str(); + myAnnotationMapper->SetInput(aString.c_str()); + + myAnnotationActor->SetVisibility(1); + return true; + } + } + break; + } + case EdgeOfCellSelection: + break; + default: + break; + } + } + + return aRet; } diff --git a/src/OBJECT/VISU_Actor.h b/src/OBJECT/VISU_Actor.h index 01cf5c67..ffeab72e 100644 --- a/src/OBJECT/VISU_Actor.h +++ b/src/OBJECT/VISU_Actor.h @@ -21,8 +21,8 @@ // // // -// File : VISU_Actor.h -// Author : Laurent CORNABE with the help of Nicolas REJNERI +// File : +// Author : // Module : VISU // $Header$ @@ -30,78 +30,225 @@ #define VISU_ACTOR_H #include "SALOME_Actor.h" +#include "VISU_ActorFactory.h" #include +#include +#include +#include class vtkProp; class vtkProperty; class vtkDataSetMapper; - +class vtkTextMapper; +class vtkTextActor; +class vtkInteractorStyle; class VTKViewer_ShrinkFilter; class VISU_PipeLine; -namespace VISU { - class Prs3d_i; -} - #ifdef _WIN_32 #define VTKOCC_EXPORT __declspec (dllexport) #else #define VTKOCC_EXPORT VTK_EXPORT #endif -class VTKOCC_EXPORT VISU_Actor : public SALOME_Actor { +namespace VISU +{ + class Prs3d_i; +} + +//---------------------------------------------------------------------------- +class VTKOCC_EXPORT VISU_Actor : + public SALOME_Actor, + public boost::bsignals::trackable +{ public: vtkTypeMacro(VISU_Actor,SALOME_Actor); - void ShallowCopy(vtkProp *prop); - static VISU_Actor* New(); - virtual ~VISU_Actor(); - - virtual void setIO(const Handle(SALOME_InteractiveObject)& theIO); - - VISU::Prs3d_i* GetPrs3d(){ return myPrs3d;} - virtual void SetPrs3d(VISU::Prs3d_i* thePrs3d); - - virtual VISU_PipeLine* GetPipeLine() { return myPipeLine;} - virtual void SetPipeLine(VISU_PipeLine* thePipeLine) ; - - VISU_Actor* GetParent(){ return myParent;} - virtual void SetParent(VISU_Actor* theParent); - virtual void SetOpacity(float theValue); - virtual float GetOpacity(); - - virtual void SetRepresentation(int theMode); - - virtual bool IsShrunkable() { return myIsShrinkable;} - virtual bool IsShrunk() { return myIsShrunk;} - virtual void SetShrink(); - virtual void UnShrink(); - - virtual void SetShrinkable(bool theIsShrinkable); - virtual void SetShrinkFactor(float theFactor = 0.8); - virtual float GetShrinkFactor(); - - virtual void SetVisibility(int theMode); - virtual int GetVisibility(); - - virtual void SetLineWidth(float theLineWidth); - virtual float GetLineWidth(); + static + VISU_Actor* + New(); + + void + ShallowCopy(vtkProp *prop); + + virtual + void + ShallowCopyPL(VISU_PipeLine* thePipeLine); + + //---------------------------------------------------------------------------- + virtual + void + setIO(const Handle(SALOME_InteractiveObject)& theIO); + + //---------------------------------------------------------------------------- + VISU::Prs3d_i* + GetPrs3d(); + + virtual + void + SetPrs3d(VISU::Prs3d_i* thePrs3d); + + //---------------------------------------------------------------------------- + VISU::TActorFactory* + GetFactory(); + + virtual + void + SetFactory(VISU::TActorFactory* theActorFactory); + + //---------------------------------------------------------------------------- + virtual + void + UpdateFromFactory(); + + virtual + void + RemoveFromRender(); + + //---------------------------------------------------------------------------- + virtual + VISU_PipeLine* + GetPipeLine(); + + virtual + void + SetPipeLine(VISU_PipeLine* thePipeLine); + + //---------------------------------------------------------------------------- + virtual + void + SetRepresentation(int theMode); + + //---------------------------------------------------------------------------- + virtual + bool + IsShrunkable(); + + virtual + bool + IsShrunk(); + + virtual + void + SetShrink(); + + virtual + void + UnShrink(); + + virtual + void + SetShrinkable(bool theIsShrinkable); + + virtual + void + SetShrinkFactor(float theFactor = 0.8); + + virtual + float + GetShrinkFactor(); + + //---------------------------------------------------------------------------- + virtual + void + SetOpacity(float theValue); + + virtual + float + GetOpacity(); + + virtual + void + SetLineWidth(float theLineWidth); + + virtual + float + GetLineWidth(); - virtual int GetNodeObjId(int theVtkID); - virtual int GetElemObjId(int theVtkID); - + //---------------------------------------------------------------------------- + virtual + void + AddToRender( vtkRenderer* ); + + virtual + void + RemoveFromRender( vtkRenderer* ); + + //---------------------------------------------------------------------------- + virtual + bool + PreHighlight(vtkInteractorStyle* theInteractorStyle, + SVTK_SelectionEvent* theSelectionEvent, + bool theIsHighlight); + + virtual + void + SetVTKMapping(bool theIsVTKMapping); + + virtual + bool + IsVTKMapping() const; + + virtual + vtkDataSet* + GetInput(); + + //---------------------------------------------------------------------------- + virtual + vtkIdType + GetNodeObjId(vtkIdType theID); + + virtual + vtkIdType + GetNodeVTKID(vtkIdType theID); + + virtual + float* + GetNodeCoord(vtkIdType theObjID); + + virtual + vtkIdType + GetElemObjId(vtkIdType theID); + + virtual + vtkIdType + GetElemVTKID(vtkIdType theID); + + virtual + vtkCell* + GetElemCell(vtkIdType theObjID); + + //---------------------------------------------------------------------------- protected: VISU_Actor(); + + virtual + ~VISU_Actor(); - VISU_Actor* myParent; + virtual + void + SetMapperInput(vtkDataSet* theDataSet); + + virtual + VISU_PipeLine* + GetCurrentPL(); + + //---------------------------------------------------------------------------- + bool myIsVTKMapping; VISU::Prs3d_i* myPrs3d; - VISU_PipeLine* myPipeLine; - vtkDataSetMapper* myMapper; + vtkSmartPointer myPipeLine; + vtkSmartPointer myMapper; - VTKViewer_ShrinkFilter* myShrinkFilter; + VISU::TActorFactory* myActorFactory; + boost::signal1 myDestroySignal; + + vtkSmartPointer myShrinkFilter; bool myIsShrinkable; bool myIsShrunk; + + vtkSmartPointer myAnnotationMapper; + vtkSmartPointer myAnnotationActor; }; #endif //VISU_ACTOR_H diff --git a/src/OBJECT/VISU_ActorFactory.h b/src/OBJECT/VISU_ActorFactory.h new file mode 100644 index 00000000..97cee603 --- /dev/null +++ b/src/OBJECT/VISU_ActorFactory.h @@ -0,0 +1,68 @@ +// VISU OBJECT : interactive object for VISU entities implementation +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : +// Author : +// Module : VISU +// $Header$ + +#ifndef VISU_ACTOR_FACTORY_H +#define VISU_ACTOR_FACTORY_H + +#include + +class VISU_Actor; + +//---------------------------------------------------------------------------- +namespace VISU +{ + //! This class defines an abstaract interface to manage actors + /*! + Actors are created by corresponding presentations and published in the defined view. + Each actor can be published only into one view but one presentation can have many actors. + Due to the complexity of the actor presentation interaction the new interface defines common + and simply way to manage them properly. + @note + This interface inherits from boost::bsignals::trackable in order to provide automatic + diconnection from defined signals if the object is destroyed. + */ + struct TActorFactory: public virtual boost::bsignals::trackable + { + //! Just to make this class virtual + virtual + ~TActorFactory() + {} + + //! To update the actor + virtual + void + UpdateActor(VISU_Actor* theActor) = 0; + + //! To unregister the actor + virtual + void + RemoveActor(VISU_Actor* theActor) = 0; + }; +} + +#endif //VISU_ACTOR_FACTORY_H diff --git a/src/OBJECT/VISU_Event.h b/src/OBJECT/VISU_Event.h new file mode 100644 index 00000000..7c613cf2 --- /dev/null +++ b/src/OBJECT/VISU_Event.h @@ -0,0 +1,47 @@ +// SALOME VTKViewer : build VTK viewer into Salome desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : +// Author : +// Module : SALOME +// $Header$ + +#ifndef VISU_Event_h +#define VISU_Event_h + +#include "SVTK_Event.h" +#include "SVTK_Selection.h" + +namespace VISU +{ + enum Event + { + SetSMDecreaseMagnificationEvent = SVTK::LastEvent + 100, + SetSMIncreaseMagnificationEvent, + LastEvent + }; +} + +const Selection_Mode GaussPointSelection = 100; + +#endif diff --git a/src/OBJECT/VISU_GaussPtsAct.cxx b/src/OBJECT/VISU_GaussPtsAct.cxx new file mode 100644 index 00000000..f5da6b21 --- /dev/null +++ b/src/OBJECT/VISU_GaussPtsAct.cxx @@ -0,0 +1,1511 @@ +// VISU OBJECT : interactive object for VISU entities implementation +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : VISU_MeshAct.hxx +// Author : Laurent CORNABE with the help of Nicolas REJNERI +// Module : VISU +// $Header$ + +#include "VISU_GaussPtsAct.h" +#include "VISU_GaussPointsPL.hxx" +#include "VISU_GaussPtsSettings.h" +#include "VISU_GaussPtsDeviceActor.h" +#include "VISU_WidgetCtrl.hxx" +#include "VISU_SphereWidget.hxx" +#include "VISU_OpenGLPointSpriteMapper.hxx" +#include "VISU_ScalarBarCtrl.hxx" +#include "VISU_ScalarBarActor.hxx" + +#include "SALOME_ExtractGeometry.h" + +#include "VISU_Event.h" +#include "SVTK_Actor.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include "utilities.h" + +#ifdef _DEBUG_ +static int MYDEBUG = 0; +static int MYDEBUG1 = 0; +static int MYDEBUG2 = 0; +#else +static int MYDEBUG = 0; +static int MYDEBUG1 = 0; +static int MYDEBUG2 = 0; +#endif + + +//============================================================================ +vtkStandardNewMacro(VISU_GaussPtsAct); + +//---------------------------------------------------------------------------- +VISU_GaussPtsAct +::VISU_GaussPtsAct(): + myEventCallbackCommand(vtkCallbackCommand::New()), + myPriority(0.0), + myDeviceActor(VISU_GaussPtsDeviceActor::New()), + myWidgetCtrl(NULL), + myGaussPointsPL(NULL), + myLastObjPointID(-1), + myTextActor(VISU_FramedTextActor::New()), + myCursorPyramid(VISU_CursorPyramid::New()), + myCursorPyramidSelected(VISU_CursorPyramid::New()), + myCellSource(vtkUnstructuredGrid::New()), + myCellActor(SVTK_Actor::New()), + myScalarBarCtrl(VISU_ScalarBarCtrl::New()), + myBarVisibility(true), + myPickingSettings(NULL), + myInsideCursorSettings(NULL), + myCurrentPL(NULL) +{ + if(MYDEBUG) MESSAGE("VISU_GaussPtsAct::VISU_GaussPtsAct - this = "<Delete(); + myDeviceActor->Delete(); + myTextActor->Delete(); + + myCursorPyramid->Delete(); + myCursorPyramid->SetPickable(0); + myCursorPyramid->SetVisibility(0); + + myCursorPyramidSelected->Delete(); + myCursorPyramidSelected->SetPickable(0); + myCursorPyramidSelected->SetVisibility(0); + + myCellSource->Delete(); + myCellActor->Delete(); + + myEventCallbackCommand->SetClientData(this); + myEventCallbackCommand->SetCallback(VISU_GaussPtsAct::ProcessEvents); + + myDeviceActor->SetProperty(GetProperty()); + myDeviceActor->SetVisibility(true); + myDeviceActor->SetPickable(false); + + myTextActor->SetVisibility(false); + myTextActor->SetPickable(false); + + myCellSource->Allocate(); + myCellActor->Initialize(); + myCellActor->SetRepresentation(VTK_WIREFRAME); + myCellActor->SetSource(myCellSource.GetPointer()); + + myCellActor->SetVisibility(0); + myCellActor->SetPickable(0); + myCellActor->GetProperty()->SetAmbient(1.0); + myCellActor->GetProperty()->SetDiffuse(0.0); + + myScalarBarCtrl->Delete(); +} + +VISU_GaussPtsAct +::~VISU_GaussPtsAct() +{ + if(MYDEBUG) MESSAGE("VISU_GaussPtsAct::~VISU_GaussPtsAct - this = "<= 0){ + float *aNodeCoord = GetNodeCoord(anObjId); + float aWorldCoord[4] = {aNodeCoord[0], aNodeCoord[1], aNodeCoord[2], 1.}; + // + vtkDataSet* aDataSet = GetInput(); + vtkCellData* aDataSetAttributes = aDataSet->GetCellData(); + // + if(vtkDataArray* aScalarArray = aDataSetAttributes->GetScalars()){ + float aVal = aScalarArray->GetTuple1(aVtkId); + // + GetScalarBarCtrl()->SetIsMarked(true); + GetScalarBarCtrl()->SetMarkValue(aVal); + GetScalarBarCtrl()->Update(); + // + float aPyramidHeight = myPickingSettings->GetPyramidHeight(); + aPyramidHeight = aPyramidHeight*myGaussPointsPL->GetMaxPointSize(); + myCursorPyramidSelected->Init(aPyramidHeight, + myPickingSettings->GetCursorSize(), + GetRadius(anObjId,aVtkId,aScalarArray), + GetMagnification(anObjId), + GetClamp(anObjId), + aNodeCoord, + myHighlightActor->GetProperty()->GetColor()); + myCursorPyramidSelected->SetVisibility(anIsVisible && theIsHighlight); + // + const VISU::PGaussPtsIDMapper& aGaussPtsIDMapper = + myGaussPointsPL->GetGaussPtsIDMapper(); + VISU::TNamedIDMapper* aParent = aGaussPtsIDMapper->GetParent(); + + VISU::TGaussPointID aGaussPointID = myGaussPointsPL->GetObjID(anObjId); + VISU::TCellID aCellID = aGaussPointID.first; + VISU::TLocalPntID aLocalPntID = aGaussPointID.second; + aStr<<"\nParentCellID: "<GetElemName(aCellID); + if(aParentName != "") { + aStr<<"\nParentCellName: '"<GetArray("VISU_FIELD")){ + if(vtkFloatArray *aFloatArray = dynamic_cast(aFieldArray)){ + int aNbComp = aFloatArray->GetNumberOfComponents(); + aStr<<"\nData: {"; + int anId = 0; + while(anId < aNbComp){ + float aComp = aFloatArray->GetComponent(aVtkId,anId++); + aStr<SetModePosition(myPickingSettings->GetInfoWindowPosition()); + myTextActor->SetTransparency(myPickingSettings->GetInfoWindowTransparency()); + myTextActor->SetWorldPoint(aWorldCoord); + myTextActor->SetText(aString.c_str()); + myTextActor->SetVisibility(anIsVisible && theIsHighlight); + // + // myCellActor + if(myPickingSettings->GetDisplayParentMesh()){ + const VISU::PGaussPtsIDMapper& aGaussPtsIDMapper = + myGaussPointsPL->GetGaussPtsIDMapper(); + VISU::TNamedIDMapper* aParent = aGaussPtsIDMapper->GetParent(); + + myCellSource->Reset(); + myCellSource->Modified(); // a VTK bug + myCellSource->SetPoints(aParent->GetVTKOutput()->GetPoints()); + + VISU::TGaussPointID aGaussPointID = aGaussPtsIDMapper->GetObjID(anObjId); + vtkIdType aCellID = aGaussPointID.first; + vtkCell* aCell = aParent->GetElemCell(aCellID); + myCellSource->InsertNextCell(aCell->GetCellType(),aCell->GetPointIds()); + myCellActor->SetVisibility(anIsVisible && theIsHighlight); + myCellActor->SetRepresentation(VTK_WIREFRAME); + } + } +} + + +//---------------------------------------------------------------- +void +VISU_GaussPtsAct +::SetPickingSettings(VISU_PickingSettings* thePickingSettings) +{ + if(myPickingSettings == thePickingSettings) + return; + + if(myPickingSettings) + myPickingSettings->RemoveObserver(myEventCallbackCommand.GetPointer()); + + myPickingSettings = thePickingSettings; + + if(thePickingSettings) + { + thePickingSettings->AddObserver(VISU::UpdatePickingSettingsEvent, + myEventCallbackCommand.GetPointer(), + myPriority); + this->UpdatePickingSettings(); + } +} + +void +VISU_GaussPtsAct +::UpdatePickingSettings() +{ + if(!myPickingSettings || myPickingSettings->GetInitial()) + return; + + myTextActor->SetModePosition(myPickingSettings->GetInfoWindowPosition()); + myTextActor->SetTransparency(myPickingSettings->GetInfoWindowTransparency()); + + float aHeight = myGaussPointsPL->GetMaxPointSize()*myPickingSettings->GetPyramidHeight(); + float aCursorSize = myPickingSettings->GetCursorSize(); + myCursorPyramid->SetPreferences(aHeight,aCursorSize); + myCursorPyramidSelected->SetPreferences(aHeight,aCursorSize); + + myHighlightActor->GetProperty()->SetColor( myPickingSettings->GetColor() ); + myPointPicker->SetTolerance( myPickingSettings->GetPointTolerance() ); + + Highlight(isHighlighted()); + + Update(); +} + +//---------------------------------------------------------------- +void +VISU_GaussPtsAct +::SetInsideCursorSettings(VISU_InsideCursorSettings* theInsideCursorSettings) +{ + if(myInsideCursorSettings == theInsideCursorSettings) + return; + + if(myInsideCursorSettings) + myInsideCursorSettings->RemoveObserver(myEventCallbackCommand.GetPointer()); + + myInsideCursorSettings = theInsideCursorSettings; + + if(theInsideCursorSettings){ + theInsideCursorSettings->AddObserver(VISU::UpdateInsideSettingsEvent, + myEventCallbackCommand.GetPointer(), + myPriority); + UpdateInsideCursorSettings(); + } +} + +void +VISU_GaussPtsAct +::UpdateInsideCursorSettings() +{ + UpdateInsideCursorSettings( myDeviceActor ); +} + +void +VISU_GaussPtsAct +::UpdateInsideCursorSettings( PDeviceActor theActor ) +{ + if(!myInsideCursorSettings || myInsideCursorSettings->GetInitial()) + return; + + if(!IsSegmentationEnabled()) + return; + + VISU_GaussPointsPL* aPipeline = theActor->GetPipeLine(); + + SALOME_ExtractGeometry* anExtractGeometry = aPipeline->GetExtractGeometryFilter(); + vtkImplicitFunction* anImplicitFunction = anExtractGeometry->GetImplicitFunction(); + + aPipeline->ShallowCopy(GetGaussPointsPL()); + + aPipeline->SetImplicitFunction(anImplicitFunction); // To restore + + aPipeline->SetPrimitiveType( myInsideCursorSettings->GetPrimitiveType() ); + aPipeline->SetClamp( myInsideCursorSettings->GetClamp() ); + aPipeline->SetImageData( myInsideCursorSettings->GetTexture() ); + aPipeline->SetAlphaThreshold( myInsideCursorSettings->GetAlphaThreshold() ); + aPipeline->SetResolution( myInsideCursorSettings->GetResolution() ); + aPipeline->SetMinSize( myInsideCursorSettings->GetMinSize() ); + aPipeline->SetMaxSize( myInsideCursorSettings->GetMaxSize() ); + aPipeline->SetMagnification( myInsideCursorSettings->GetMagnification() ); + aPipeline->SetMagnificationIncrement( myInsideCursorSettings->GetIncrement() ); + + if( myInsideCursorSettings->GetPrimitiveType() != VISU_OpenGLPointSpriteMapper::GeomSphere ) + theActor->GetProperty()->SetRepresentation( VTK_POINTS ); + else + theActor->GetProperty()->SetRepresentation( VTK_SURFACE ); + + aPipeline->Update(); + + Highlight(isHighlighted()); + + Update(); +} + +//============================================================================== +vtkStandardNewMacro(VISU_GaussPtsAct1); + + +//---------------------------------------------------------------------------- +VISU_GaussPtsAct1 +::VISU_GaussPtsAct1(): + myInsideDeviceActor(VISU_GaussPtsDeviceActor::New()), + myOutsideDeviceActor(VISU_GaussPtsDeviceActor::New()), + myOutsideCursorSettings(NULL) +{ + if(MYDEBUG1) MESSAGE("VISU_GaussPtsAct1::VISU_GaussPtsAct1 - this = "<SetCallback(VISU_GaussPtsAct1::ProcessEvents); + + myInsideDeviceActor->SetVisibility(false); + myInsideDeviceActor->SetPickable(false); + myInsideDeviceActor->Delete(); + + myOutsideDeviceActor->SetVisibility(false); + myOutsideDeviceActor->SetPickable(false); + myOutsideDeviceActor->Delete(); +} + +VISU_GaussPtsAct1 +::~VISU_GaussPtsAct1() +{ + if(MYDEBUG1) MESSAGE("VISU_GaussPtsAct1::~VISU_GaussPtsAct1 - this = "< +#include + +class VISU_GaussPointsPL; +class VISU_WidgetCtrl; +class VISU_OpenGLPointSpriteMapper; + +class vtkTextMapper; +class vtkTextActor; + +class vtkSphereSource; +class vtkPolyDataMapper; +class vtkActor; +class vtkImageData; +class vtkInteractorStyle; + +class VISU_GaussPtsDeviceActor; +class VISU_CursorPyramid; +class VISU_FramedTextActor; + +class vtkUnstructuredGrid; +class vtkDataSetMapper; + +class vtkInteractorObserver; +class vtkCallbackCommand; + +class VISU_ScalarBarCtrl; +class VISU_PickingSettings; +class VISU_InsideCursorSettings; +class VISU_OutsideCursorSettings; + + +//============================================================================ +//! Base class for Gauss Points Actors. +/*! + The actor is responsible for representation of Gauss Points. + It render corresponding presentation by usage of corresponding VISU_GaussPtsDeviceActor. + Usage of such technic of rendering gives addititional flexibility to change its behaviour in run-time. + Also, the base class implements the following functionality: + - implements a highlight and prehighlight functionality; + - defining a way to handle VISU_ImplicitFunctionWidget; + - global / local scalar bar mamangement. +*/ +class VTKOCC_EXPORT VISU_GaussPtsAct : public VISU_Actor +{ + public: + vtkTypeMacro(VISU_GaussPtsAct,VISU_Actor); + typedef vtkSmartPointer PDeviceActor; + + static + VISU_GaussPtsAct* + New(); + + //---------------------------------------------------------------------------- + virtual + void + SetPipeLine(VISU_PipeLine* thePipeLine) ; + + VISU_GaussPointsPL* + GetGaussPointsPL(); + + virtual + void + ShallowCopyPL(VISU_PipeLine* thePipeLine); + + //---------------------------------------------------------------------------- + //! Redefined method of getting a native mapper of the actor. + virtual + vtkMapper* + GetMapper(); + + //! Redefined method of getting an actor bounds. + virtual + float* + GetBounds(); + + //! Redefined method of getting an actor input. + virtual + vtkDataSet* + GetInput(); + + //---------------------------------------------------------------------------- + virtual + void + SetFactory(VISU::TActorFactory* theActorFactory); + + VISU::TGaussPtsActorFactory* + GetGaussPtsFactory(); + + //---------------------------------------------------------------------------- + //! Add actor to the renderer. + virtual + void + AddToRender(vtkRenderer* theRenderer); + + //! Remove actor from the renderer. + virtual + void + RemoveFromRender(vtkRenderer* theRenderer); + + //! Set the Render Window Interactor to the actor. + virtual + void + SetInteractor(vtkRenderWindowInteractor* theInteractor); + + //! Apply the transform on the actor. + virtual + void + SetTransform(VTKViewer_Transform* theTransform); + + //! Redefined method of rendering the Opaque Geometry. + virtual + int + RenderOpaqueGeometry(vtkViewport *viewport); + + //! Redefined method of rendering the Translucent Geometry. + virtual + int + RenderTranslucentGeometry(vtkViewport *viewport); + + //---------------------------------------------------------------------------- + //! Set actor visibility. + virtual + void + SetVisibility(int theMode); + + //! Get segmentation visibility. + virtual + int + IsSegmentationEnabled(); + + //! Set Scalar Bar Control to the actor. + VISU_ScalarBarCtrl* + GetScalarBarCtrl(); + + //! Set the Scalar Bar Control visibility. + void + SetBarVisibility(bool theMode); + + //! Get the Scalar Bar Control visibility. + bool + GetBarVisibility(); + + virtual void SetWidgetCtrl(VISU_WidgetCtrl* theWidgetCtrl); + + //! Return the information about pipeline magnification changing. + /*! True indicates that magnification is increased, false - decreased. */ + bool + GetChangeMagnification(); + + //! Change the pipeline magnification. + virtual + void + ChangeMagnification( bool ); + + //---------------------------------------------------------------------------- + //! Internal highlight. + virtual + void + Highlight(bool theIsHighlight); + + //! Redefined method of the actor's prehighlighting + virtual + bool + PreHighlight(vtkInteractorStyle* theInteractorStyle, + SVTK_SelectionEvent* theSelectionEvent, + bool theIsHighlight); + + //! Redefined method of the actor's highlighting + virtual + bool + Highlight(vtkInteractorStyle* theInteractorStyle, + SVTK_SelectionEvent* theSelectionEvent, + bool theIsHighlight); + + //---------------------------------------------------------------------------- + //! Set the picking settings to the actor. + void + SetInsideCursorSettings(VISU_InsideCursorSettings* theInsideCursorSettings); + + virtual void + UpdateInsideCursorSettings(); + + virtual void + UpdateInsideCursorSettings( PDeviceActor ); + + //---------------------------------------------------------------------------- + void + SetPickingSettings(VISU_PickingSettings* thePickingSettings); + + //! Apply the picking settings on the actor. + void + UpdatePickingSettings(); + + virtual + bool + IsInfinitive(); + + protected: + //---------------------------------------------------------------------------- + VISU_GaussPtsAct(); + + virtual + ~VISU_GaussPtsAct(); + + // Redefined method of setting mapper input. + virtual + void + SetMapperInput(vtkDataSet* theDataSet); + + virtual + VISU_PipeLine* + GetCurrentPL(); + + //! To get current value of the radius of the Point Sprite + virtual + float + GetRadius(vtkIdType theObjID, + vtkIdType theVTKID, + vtkDataArray *theScalarArray); + + //! To get current value of the magnification + virtual + float + GetMagnification(vtkIdType theObjID); + + //! To get current value of the clamp + virtual + float + GetClamp(vtkIdType theObjID); + + //---------------------------------------------------------------------------- + vtkSmartPointer myEventCallbackCommand; + + //! Main process VTK event method + static + void + ProcessEvents(vtkObject* theObject, + unsigned long theEvent, + void* theClientData, + void* theCallData); + + // To process VTK event method + virtual + void + OnInteractorEvent(unsigned long theEvent); + + float myPriority; + bool myChangeMagnification; + VISU::TGaussPtsActorFactory* myGaussPtsActorFactory; + boost::signal1 myUpdatePrs3dSignal; + + //---------------------------------------------------------------------------- + PDeviceActor myDeviceActor; + + VISU_WidgetCtrl* myWidgetCtrl; + + VISU_GaussPointsPL* myCurrentPL; + vtkSmartPointer myGaussPointsPL; + + vtkIdType myLastObjPointID; + + vtkSmartPointer myTextActor; + + vtkSmartPointer myCursorPyramid; + vtkSmartPointer myCursorPyramidSelected; + + vtkSmartPointer myCellSource; + vtkSmartPointer myCellActor; + + bool myBarVisibility; + vtkSmartPointer myScalarBarCtrl; + + VISU_InsideCursorSettings* myInsideCursorSettings; + VISU_PickingSettings* myPickingSettings; +}; + + +//============================================================================ +class VISU_GaussPtsAct2; + +//! Gauss Points Actor, displayed in the Base View. +/*! + * Contains device actor (VISU_GaussPtsDeviceActor), + * which has two representation modes - outside and + * inside segmentation cursor. + */ +class VTKOCC_EXPORT VISU_GaussPtsAct1 : public VISU_GaussPtsAct +{ + public: + vtkTypeMacro(VISU_GaussPtsAct1,VISU_GaussPtsAct); + + static + VISU_GaussPtsAct1* + New(); + + virtual + void + ShallowCopyPL(VISU_PipeLine* thePipeLine); + + //---------------------------------------------------------------------------- + //! Set actor visibility. + virtual + void + SetVisibility(int theMode); + + virtual + void + Connect(VISU_GaussPtsAct2* theActor); + + //---------------------------------------------------------------------------- + virtual void + UpdateInsideCursorSettings(); + + //---------------------------------------------------------------------------- + //! Set the Outside Cursor Gauss Points settings to the actor. + void + SetOutsideCursorSettings(VISU_OutsideCursorSettings* theOutsideCursorSettings); + + //! Apply the Outside Cursor Gauss Points settings on the actor. + void + UpdateOutsideCursorSettings(); + + //---------------------------------------------------------------------------- + //! Add actor to the renderer. + virtual + void + AddToRender(vtkRenderer* theRenderer); + + //! Remove actor from the renderer. + virtual + void + RemoveFromRender(vtkRenderer* theRenderer); + + //! Apply the transform on the actor. + virtual + void + SetTransform(VTKViewer_Transform* theTransform); + + virtual void SetWidgetCtrl(VISU_WidgetCtrl* theWidgetCtrl); + + protected: + //---------------------------------------------------------------------------- + VISU_GaussPtsAct1(); + + virtual + ~VISU_GaussPtsAct1(); + + // Redefined method of setting mapper input. + virtual + void + SetMapperInput(vtkDataSet* theDataSet); + + //! To get current value of the radius of the Point Sprite + virtual + float + GetRadius(vtkIdType theObjID, + vtkIdType theVTKID, + vtkDataArray *theScalarArray); + + //! To get current value of the magnification + virtual + float + GetMagnification(vtkIdType theObjID); + + //! To get current value of the clamp + virtual + float + GetClamp(vtkIdType theObjID); + + //---------------------------------------------------------------------------- + // Main process VTK event method + static + void + ProcessEvents(vtkObject* theObject, + unsigned long theEvent, + void* theClientData, + void* theCallData); + + // To process VTK event method + virtual + void + OnInteractorEvent(unsigned long theEvent); + + boost::signal1 mySetVisibilitySignal; + VISU_OutsideCursorSettings* myOutsideCursorSettings; + + //---------------------------------------------------------------------------- + PDeviceActor myInsideDeviceActor; + PDeviceActor myOutsideDeviceActor; +}; + + +//! Gauss Points Actor, displayed in the Segmented View. +class VTKOCC_EXPORT VISU_GaussPtsAct2 : public VISU_GaussPtsAct +{ + public: + vtkTypeMacro(VISU_GaussPtsAct2,VISU_GaussPtsAct); + + static + VISU_GaussPtsAct2* + New(); + + // Redefined method of setting mapper input. + virtual + void + SetMapperInput(vtkDataSet* theDataSet); + + virtual + void + ShallowCopyPL(VISU_PipeLine* thePipeLine); + + //---------------------------------------------------------------------------- + //! Set actor visibility. + virtual + void + SetVisibility(int theMode); + + virtual void SetWidgetCtrl(VISU_WidgetCtrl* theWidgetCtrl); + + protected: + //---------------------------------------------------------------------------- + VISU_GaussPtsAct2(); + + virtual + ~VISU_GaussPtsAct2(); + + //---------------------------------------------------------------------------- + // To process VTK event method + virtual + void + OnInteractorEvent(unsigned long theEvent); +}; + + +#endif diff --git a/src/OBJECT/VISU_GaussPtsActorFactory.h b/src/OBJECT/VISU_GaussPtsActorFactory.h new file mode 100644 index 00000000..ba785efc --- /dev/null +++ b/src/OBJECT/VISU_GaussPtsActorFactory.h @@ -0,0 +1,57 @@ +// VISU OBJECT : interactive object for VISU entities implementation +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : VISU_ScalarMapAct.h +// Author : Laurent CORNABE with help of Nicolas REJNERI +// Module : VISU +// $Header$ + +#ifndef VISU_GAUSSPTS_ACTOR_FACTORY_H +#define VISU_GAUSSPTS_ACTOR_FACTORY_H + +#include "VISU_ActorFactory.h" + +class VISU_GaussPtsAct; +class VISU_GaussPtsAct1; +class VISU_GaussPtsAct2; + +//---------------------------------------------------------------------------- +namespace VISU +{ + //! Extend an abstaract interface to manage Gauss points actors + struct TGaussPtsActorFactory: virtual TActorFactory + { + //! To create VISU_GaussPtsAct2 actor (segemented representation) from VISU_GaussPtsAct1 (basic representation) + virtual + VISU_GaussPtsAct2* + CloneActor(VISU_GaussPtsAct1* theActor) = 0; + + //! The VISU_GaussPtsAct can update its presentation + virtual + void + UpdateFromActor(VISU_GaussPtsAct* theActor) = 0; + }; +} + + +#endif diff --git a/src/OBJECT/VISU_GaussPtsDeviceActor.cxx b/src/OBJECT/VISU_GaussPtsDeviceActor.cxx new file mode 100644 index 00000000..a59f4f20 --- /dev/null +++ b/src/OBJECT/VISU_GaussPtsDeviceActor.cxx @@ -0,0 +1,686 @@ +// 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 : +// Author : +// Module : +// $Header$ + + +#include "VISU_GaussPtsDeviceActor.h" + +#include "VISU_GaussPointsPL.hxx" +#include "VISU_OpenGLPointSpriteMapper.hxx" + +#include "VTKViewer_Transform.h" +#include "VTKViewer_TransformFilter.h" +#include "VTKViewer_PassThroughFilter.h" + +#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(VISU_GaussPtsDeviceActor); + + +VISU_GaussPtsDeviceActor +::VISU_GaussPtsDeviceActor(): + myGeomFilter(VTKViewer_GeometryFilter::New()), + myTransformFilter(VTKViewer_TransformFilter::New()) +{ + if(MYDEBUG) MESSAGE("VISU_GaussPtsDeviceActor - "<Delete(); + myTransformFilter->Delete(); + + for(int i = 0; i < 3; i++){ + PPassThroughFilter aFilter(VTKViewer_PassThroughFilter::New()); + myPassFilter.push_back(aFilter); + aFilter->Delete(); + } +} + + +VISU_GaussPtsDeviceActor +::~VISU_GaussPtsDeviceActor() +{ + if(MYDEBUG) MESSAGE("~VISU_GaussPtsDeviceActor - "<Mapper == NULL) + { + vtkErrorMacro("No mapper for actor."); + return; + } + + // render the property + if (!this->Property) + { + // force creation of a property + this->GetProperty(); + } + this->Property->Render(this, ren); + if (this->BackfaceProperty) + { + this->BackfaceProperty->BackfaceRender(this, ren); + this->Device->SetBackfaceProperty(this->BackfaceProperty); + } + this->Device->SetProperty(this->Property); + + // render the texture + if (this->Texture) + { + this->Texture->Render(ren); + } + + // make sure the device has the same matrix + vtkMatrix4x4 *matrix = this->Device->GetUserMatrix(); + this->GetMatrix(matrix); + + this->Device->Render(ren,Mapper); + this->EstimatedRenderTime = Mapper->GetTimeToDraw(); +} + + +//---------------------------------------------------------------- +void +VISU_GaussPtsDeviceActor +::AddToRender(vtkRenderer* theRenderer) +{ + theRenderer->AddActor(this); +} + +void +VISU_GaussPtsDeviceActor +::RemoveFromRender(vtkRenderer* theRenderer) +{ + theRenderer->RemoveActor(this); +} + +void +VISU_GaussPtsDeviceActor +::SetTransform(VTKViewer_Transform* theTransform) +{ + myTransformFilter->SetTransform(theTransform); +} + +VISU_OpenGLPointSpriteMapper* +VISU_GaussPtsDeviceActor +::GetPSMapper() +{ + return myMapper.GetPointer(); +} + + +//---------------------------------------------------------------------------- +void +VISU_GaussPtsDeviceActor +::SetPipeLine(VISU_GaussPointsPL* thePipeLine) +{ + myPipeLine = thePipeLine; + myMapper = thePipeLine->GetPSMapper(); + vtkPolyData* aDataSet = myMapper->GetInput(); + + int anId = 0; + myPassFilter[ anId ]->SetInput( aDataSet ); + myPassFilter[ anId + 1 ]->SetInput( myPassFilter[ anId ]->GetOutput() ); + + anId++; + myTransformFilter->SetInput( myPassFilter[ anId ]->GetPolyDataOutput() ); + + anId++; + myPassFilter[ anId ]->SetInput( myTransformFilter->GetOutput() ); + + myMapper->SetInput( myPassFilter[ anId ]->GetPolyDataOutput() ); + + Superclass::SetMapper( myMapper.GetPointer() ); +} + +VISU_GaussPointsPL* +VISU_GaussPtsDeviceActor +::GetPipeLine() +{ + return myPipeLine.GetPointer(); +} + +void +VISU_GaussPtsDeviceActor +::ShallowCopyPL(VISU_GaussPointsPL* thePipeLine) +{ + myPipeLine->ShallowCopy(thePipeLine); +} + + +//============================================================================ +#include +#include +#include +#include +#include + + +//---------------------------------------------------------------------------- +vtkStandardNewMacro(VISU_CursorPyramid); + +//---------------------------------------------------------------------------- +VISU_CursorPyramid +::VISU_CursorPyramid(): + myHeight(10.0), + myRadius(5.0), + myMagnification(1.0), + myClamp(256.0), + myNbCones(6), + myAppendFilter(vtkAppendPolyData::New()), + myMapper(vtkPolyDataMapper::New()) +{ + myAppendFilter->Delete(); + myMapper->Delete(); + + myMapper->SetInput(myAppendFilter->GetOutput()); + + for(int i = 0; i < myNbCones; i++){ + vtkConeSource* aConeSource = vtkConeSource::New(); + myAppendFilter->AddInput(aConeSource->GetOutput()); + aConeSource->SetResolution(4); + mySources[i] = aConeSource; + aConeSource->Delete(); + } +} + + +//---------------------------------------------------------------------------- +void +VISU_CursorPyramid +::Render(vtkRenderer *ren, vtkMapper *vtkNotUsed(m)) +{ + if (ren == NULL) + { + vtkErrorMacro("No mapper for actor."); + return; + } + + this->SetScale(1.0); + float aMRadius = myRadius*myMagnification; + Init(myHeight,aMRadius*myCursorSize); + + if(myClamp > 0.0f){ + float aPoint1[3] = {0.0, 0.0, 0.0}; + ren->SetDisplayPoint(aPoint1); + ren->DisplayToWorld(); + ren->GetWorldPoint(aPoint1); + + float aPoint2[3] = {0.0, myClamp, 0.0}; + ren->SetDisplayPoint(aPoint2); + ren->DisplayToWorld(); + ren->GetWorldPoint(aPoint2); + + float aWorldClamp = + (aPoint2[0] - aPoint1[0])*(aPoint2[0] - aPoint1[0]) + + (aPoint2[1] - aPoint1[1])*(aPoint2[1] - aPoint1[1]) + + (aPoint2[2] - aPoint1[2])*(aPoint2[2] - aPoint1[2]); + + aWorldClamp = sqrt(aWorldClamp); + float aMDiameter = 2.0 * aMRadius; + float aCoeff = aWorldClamp / aMDiameter; + + if(aCoeff < 1.0){ + this->SetScale(aCoeff); + //Init(myHeight/aCoeff,aMRadius*aCoeff); + } + } + + if (this->Mapper == NULL) + { + vtkErrorMacro("No mapper for actor."); + return; + } + + // render the property + if (!this->Property) + { + // force creation of a property + this->GetProperty(); + } + this->Property->Render(this, ren); + if (this->BackfaceProperty) + { + this->BackfaceProperty->BackfaceRender(this, ren); + this->Device->SetBackfaceProperty(this->BackfaceProperty); + } + this->Device->SetProperty(this->Property); + + // render the texture + if (this->Texture) + { + this->Texture->Render(ren); + } + + // make sure the device has the same matrix + vtkMatrix4x4 *matrix = this->Device->GetUserMatrix(); + this->GetMatrix(matrix); + + this->Device->Render(ren,Mapper); + this->EstimatedRenderTime = Mapper->GetTimeToDraw(); +} + + +//---------------------------------------------------------------------------- +void +VISU_CursorPyramid +::AddToRender(vtkRenderer* theRenderer) +{ + theRenderer->AddActor(this); +} + +void +VISU_CursorPyramid +::RemoveFromRender(vtkRenderer* theRenderer) +{ + theRenderer->RemoveActor(this); +} + +//---------------------------------------------------------------------------- +void +VISU_CursorPyramid +::SetPreferences(float theHeight, + float theCursorSize) +{ + Init(theHeight, theCursorSize, myRadius, myMagnification, myClamp, GetPosition(), GetProperty()->GetColor()); +} + +//---------------------------------------------------------------------------- +void +VISU_CursorPyramid +::Init(float theHeight, + float theCursorSize, + float theRadius, + float theMagnification, + float theClamp, + float thePos[3], + float theColor[3]) +{ + Init(theHeight,theRadius*theMagnification*theCursorSize); + SetPosition(thePos[0],thePos[1],thePos[2]); + GetProperty()->SetColor(theColor); + SetMapper(myMapper.GetPointer()); + + myHeight = theHeight; + myCursorSize = theCursorSize; + + myRadius = theRadius; + myMagnification = theMagnification; + + myClamp = theClamp; +} + + +void +VISU_CursorPyramid +::Init(float theHeight, + float theRadius) +{ + for(int i = 0; i < myNbCones; ++i){ + vtkConeSource* aSource = mySources[i].GetPointer(); + aSource->SetHeight(theHeight); + // Set the angle of the cone. As a side effect, the angle plus height sets + // the base radius of the cone. + aSource->SetAngle(20.0); + } + + float aDisplacement = -0.5*theHeight - theRadius; + + // X + mySources[0]->SetDirection(1.0, 0.0, 0.0); + mySources[0]->SetCenter(aDisplacement, 0.0, 0.0); + + // It is impossible to inverse direction around X axis (VTK bug) + mySources[1]->SetDirection(-VTK_LARGE_FLOAT, 1.0, 0.0); // A workaround + mySources[1]->SetCenter(-aDisplacement, 0.0, 0.0); + + // Y + mySources[2]->SetDirection(0.0, 1.0, 0.0); + mySources[2]->SetCenter(0.0, aDisplacement, 0.0); + + mySources[3]->SetDirection(0.0, -1.0, 0.0); + mySources[3]->SetCenter(0.0, -aDisplacement, 0.0); + + // Z + mySources[4]->SetDirection(0.0, 0.0, 1.0); + mySources[4]->SetCenter(0.0, 0.0, aDisplacement); + + mySources[5]->SetDirection(0.0, 0.0, -1.0); + mySources[5]->SetCenter(0.0, 0.0, -aDisplacement); +} + + +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//================================================================== +vtkCxxRevisionMacro(VISU_FramedTextActor, "$Revision$"); +vtkStandardNewMacro(VISU_FramedTextActor); + +//================================================================== +// function : VISU_FramedTextActor +// purpose : +//================================================================== +VISU_FramedTextActor::VISU_FramedTextActor() +{ + PositionCoordinate->SetCoordinateSystemToNormalizedViewport(); + + myTransparency=0.; + myBar = vtkPolyData::New(); + myBarMapper = vtkPolyDataMapper2D::New(); + myBarMapper->SetInput(myBar); + myBarActor = vtkActor2D::New(); + myBarActor->SetMapper(myBarMapper); + myBarActor->GetProperty()->SetOpacity(1.-myTransparency); + myBarActor->GetProperty()->SetColor(.5, .5, .5); + // + myTextProperty = vtkTextProperty::New(); + myTextProperty->SetFontSize(12); + myTextProperty->SetBold(0); + myTextProperty->SetItalic(0); + myTextProperty->SetShadow(1); + myTextProperty->SetFontFamilyToArial(); + // + myTextMapper=vtkTextMapper::New(); + myTextMapper->SetInput("some text"); + myTextMapper->GetTextProperty()->ShallowCopy(myTextProperty); + myTextActor=vtkActor2D::New(); + myTextActor->SetMapper(myTextMapper); + // + myBarActor->SetVisibility(1); + myTextActor->SetVisibility(1); + myBarActor->SetPickable(0); + myTextActor->SetPickable(0); + //---------------------------------------------------------- + myModePosition=0;// 0 -centered below the point + // 1 -top left corner of the 3D view window + // + for(int i=0; i<4; i++) { + myWorldPoint[i] = 0.; + } + myDistance=10.; + // +} +//================================================================== +// function : ~ +// purpose : +//================================================================== +VISU_FramedTextActor::~VISU_FramedTextActor() +{ + myTextActor->Delete(); + myTextMapper->Delete(); + myTextProperty->Delete(); + myBarActor->Delete(); + myBarMapper->Delete(); + myBar->Delete(); +} +//================================================================== +// function : SetVisibility +// purpose : +//================================================================== +void VISU_FramedTextActor::SetVisibility (int theVisibility) +{ + myBarActor->SetVisibility(theVisibility); + myTextActor->SetVisibility(theVisibility); +} +//================================================================== +// function : GetVisibility +// purpose : +//================================================================== +int VISU_FramedTextActor::GetVisibility() +{ + return myBarActor->GetVisibility(); +} +//================================================================== +// function : SetPickable +// purpose : +//================================================================== +void VISU_FramedTextActor::SetPickable (int thePickability) +{ + myBarActor->SetPickable(thePickability); + myTextActor->SetPickable(thePickability); +} +//================================================================== +// function : GetPickable +// purpose : +//================================================================== +int VISU_FramedTextActor::GetPickable() +{ + return myBarActor->GetPickable(); +} +//================================================================== +// function : SetTransparency +// purpose : +//================================================================== +void VISU_FramedTextActor::SetTransparency(const float theTransparency) +{ + if (theTransparency>=0. && theTransparency<=1.){ + myTransparency=theTransparency; + myBarActor->GetProperty()->SetOpacity(1.-myTransparency); + Modified(); + } +} +//================================================================== +// function : GetTransparency +// purpose : +//================================================================== +float VISU_FramedTextActor::GetTransparency()const +{ + return myTransparency; +} +//================================================================== +// function : SetText +// purpose : +//================================================================== +void VISU_FramedTextActor::SetText(const char* theText) +{ + myTextMapper->SetInput(theText); + Modified(); +} +//================================================================== +// function : GetText +// purpose : +//================================================================== +char* VISU_FramedTextActor::GetText() +{ + return myTextMapper->GetInput(); +} +//================================================================== +// function : SetModePosition +// purpose : +//================================================================== +void VISU_FramedTextActor::SetModePosition(const int theMode) +{ + myModePosition=theMode; + Modified(); +} +//================================================================== +// function : GetModePosition +// purpose : +//================================================================== +int VISU_FramedTextActor::GetModePosition()const +{ + return myModePosition; +} +//================================================================== +// function : SetWorldPoint +// purpose : +//================================================================== +void VISU_FramedTextActor::SetWorldPoint(const float theWorldPoint[4]) +{ + for(int i = 0; i<4; ++i) { + myWorldPoint[i] = theWorldPoint[i]; + } + Modified(); +} +//================================================================== +// function : GetWorldPoint +// purpose : +//================================================================== +const float* VISU_FramedTextActor::GetWorldPoint()const +{ + return myWorldPoint; +} +//================================================================== +// function : SetDistance +// purpose : +//================================================================== +void VISU_FramedTextActor::SetDistance(const float theDistance) +{ + myDistance=theDistance; +} +//================================================================== +// function : GetDistance +// purpose : +//================================================================== +float VISU_FramedTextActor::GetDistance()const +{ + return myDistance; +} +//================================================================== +// function : ReleaseGraphicsResources +// purpose : +//================================================================== +void VISU_FramedTextActor::ReleaseGraphicsResources(vtkWindow *win) +{ + myTextActor->ReleaseGraphicsResources(win); + myBarActor->ReleaseGraphicsResources(win); +} +//================================================================== +// function : RenderOverlay +// purpose : +//================================================================== +int VISU_FramedTextActor::RenderOverlay(vtkViewport *viewport) +{ + int renderedSomething = 0; + myBarActor->RenderOverlay(viewport); + renderedSomething +=myTextActor->RenderOverlay(viewport); + return renderedSomething; +} +//================================================================== +// function : RenderOpaqueGeometry +// purpose : +//================================================================== +int +VISU_FramedTextActor +::RenderOpaqueGeometry(vtkViewport *theViewport) +{ + int anIsRenderedSomething = 0; + int* aViewportSize = theViewport->GetSize(); + if(aViewportSize[0] == 1 || aViewportSize[1] == 1) + return anIsRenderedSomething; + + myBar->Initialize(); + + int aNbPoints = 4; + vtkPoints *aPoints = vtkPoints::New(); + aPoints->SetNumberOfPoints(aNbPoints); + myBar->SetPoints(aPoints); + aPoints->Delete(); + + vtkCellArray *aPolys = vtkCellArray::New(); + aPolys->Allocate(aPolys->EstimateSize(1,4)); + vtkIdType aPointsIds[4] = {0, 1, 3, 2}; + aPolys->InsertNextCell(4,aPointsIds); + myBar->SetPolys(aPolys); + aPolys->Delete(); + + int aTextSize[2]; + myTextMapper->GetSize(theViewport, aTextSize); + int aBarWidth = aTextSize[0]; + int aBarHeight = aTextSize[1]; + + if (myModePosition==0) { + theViewport->SetWorldPoint(myWorldPoint); + theViewport->WorldToDisplay(); + + float aSelectionPoint[3]; + theViewport->GetDisplayPoint(aSelectionPoint); + float u = aSelectionPoint[0]; + float v = aSelectionPoint[1] - myDistance; + theViewport->ViewportToNormalizedViewport(u, v); + PositionCoordinate->SetValue(u, v); + // + myTextProperty->SetJustificationToCentered(); + myTextProperty->SetVerticalJustificationToTop(); + // + aBarWidth /= 2; + aPoints->SetPoint(0, -aBarWidth, 0.0, 0.0); + aPoints->SetPoint(1, -aBarWidth, -aBarHeight, 0.0); + aPoints->SetPoint(2, aBarWidth, 0.0, 0.0); + aPoints->SetPoint(3, aBarWidth, -aBarHeight, 0.0); + } + else {//if (myModePosition==1) { + PositionCoordinate->SetValue(0.0, 1.0); + myTextProperty->SetJustificationToLeft(); + myTextProperty->SetVerticalJustificationToTop(); + // + aPoints->SetPoint(0, 0.0, 0.0, 0.0); + aPoints->SetPoint(1, 0.0, -aBarHeight, 0.0); + aPoints->SetPoint(2, aBarWidth, 0.0, 0.0); + aPoints->SetPoint(3, aBarWidth, -aBarHeight, 0.0); + } + // + myTextMapper->GetTextProperty()->ShallowCopy(myTextProperty); + myBarActor ->GetPositionCoordinate()->SetReferenceCoordinate(PositionCoordinate); + myTextActor->GetPositionCoordinate()->SetReferenceCoordinate(PositionCoordinate); + // + myBuildTime.Modified(); + // + return anIsRenderedSomething; +} diff --git a/src/OBJECT/VISU_GaussPtsDeviceActor.h b/src/OBJECT/VISU_GaussPtsDeviceActor.h new file mode 100644 index 00000000..e25e9256 --- /dev/null +++ b/src/OBJECT/VISU_GaussPtsDeviceActor.h @@ -0,0 +1,236 @@ +// 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 : +// Author : +// Module : +// $Header$ + +#ifndef VISU_GAUSS_PTS_DEVICE_ACTOR_H +#define VISU_GAUSS_PTS_DEVICE_ACTOR_H + +#include "VTKViewer_GeometryFilter.h" + +#include +#include + +class VTKViewer_Transform; +class VTKViewer_TransformFilter; +class VTKViewer_PassThroughFilter; + +class VISU_OpenGLPointSpriteMapper; +class VISU_GaussPointsPL; + + +//============================================================================ +class VISU_GaussPtsDeviceActor: public vtkLODActor +{ + public: + vtkTypeMacro(VISU_GaussPtsDeviceActor,vtkLODActor); + + static + VISU_GaussPtsDeviceActor* + New(); + + virtual + void + Render(vtkRenderer *, vtkMapper *); + + //---------------------------------------------------------------------------- + void + AddToRender(vtkRenderer* theRenderer); + + void + RemoveFromRender(vtkRenderer* theRenderer); + + void + SetTransform(VTKViewer_Transform* theTransform); + + //---------------------------------------------------------------------------- + VISU_GaussPointsPL* + GetPipeLine(); + + void + SetPipeLine(VISU_GaussPointsPL* thePipeLine) ; + + void + ShallowCopyPL(VISU_GaussPointsPL* thePipeLine); + + VISU_OpenGLPointSpriteMapper* + GetPSMapper(); + + protected: + //---------------------------------------------------------------------------- + vtkSmartPointer myPipeLine; + vtkSmartPointer myMapper; + vtkSmartPointer myGeomFilter; + vtkSmartPointer myTransformFilter; + + typedef vtkSmartPointer PPassThroughFilter; + std::vector myPassFilter; + + VISU_GaussPtsDeviceActor(); + ~VISU_GaussPtsDeviceActor(); + + private: + VISU_GaussPtsDeviceActor(const VISU_GaussPtsDeviceActor&); // Not implemented + void operator=(const VISU_GaussPtsDeviceActor&); // Not implemented +}; + + +//============================================================================ +class vtkActor; +class vtkConeSource; +class vtkAppendPolyData; +class vtkPolyDataMapper; + +#include + +class VISU_CursorPyramid : public vtkLODActor +{ +public: + vtkTypeMacro(VISU_CursorPyramid, vtkObject); + + static + VISU_CursorPyramid* + New(); + + virtual + void + Render(vtkRenderer *, vtkMapper *); + + void + AddToRender(vtkRenderer* theRenderer); + + void + RemoveFromRender(vtkRenderer* theRenderer); + + void + Init(float theHeight, + float theCursorSize, + float theRadius, + float theMagnification, + float theClamp, + float thePos[3], + float theColor[3]); + + void SetPreferences(float theHeight, + float theCursorSize); + +protected: + VISU_CursorPyramid(); + + void + Init(float theHeight, + float theRadius); + + int myNbCones; + vtkSmartPointer mySources[6]; + vtkSmartPointer myAppendFilter; + vtkSmartPointer myMapper; + // + float myHeight; + float myCursorSize; + float myRadius; + float myMagnification; + float myClamp; + + private: + VISU_CursorPyramid(const VISU_CursorPyramid&); // Not implemented + void operator=(const VISU_CursorPyramid&); // Not implemented +}; + + +//================================================================== +// class VISU_FramedTextActor +// +#include +// +class vtkViewport; +class vtkProp; +class vtkWindow; +class vtkPolyData; +class vtkPolyDataMapper2D; +class vtkActor2D; +class vtkTimeStamp; +class vtkTextProperty; +class vtkTextMapper; + +class VISU_FramedTextActor : public vtkActor2D +{ +public: + // vtks + vtkTypeRevisionMacro(VISU_FramedTextActor,vtkActor2D); + static VISU_FramedTextActor *New(); + // + virtual int RenderOpaqueGeometry(vtkViewport* viewport); + virtual int RenderTranslucentGeometry(vtkViewport*) { return 0; }; + virtual int RenderOverlay(vtkViewport* viewport); + virtual void ReleaseGraphicsResources(vtkWindow *); + virtual void SetVisibility (int ); + virtual int GetVisibility() ; + virtual void SetPickable (int ) ; + virtual int GetPickable(); + // + // selectors + void SetText(const char* theText); + char* GetText(); + // + void SetModePosition(const int theMode); + int GetModePosition()const; + // + void SetWorldPoint(const float theWorldPoint[4]); + const float* GetWorldPoint()const; + // + void SetDistance(const float theDistance); + float GetDistance()const; + // + void SetTransparency(const float theTransparency); + float GetTransparency()const; + // +protected: + VISU_FramedTextActor(); + ~VISU_FramedTextActor(); + +protected: + vtkPolyData *myBar; + vtkPolyDataMapper2D *myBarMapper; + vtkActor2D *myBarActor; + // + vtkTextProperty *myTextProperty; + vtkTextMapper *myTextMapper; + vtkActor2D *myTextActor; + // + vtkTimeStamp myBuildTime; + // + int myModePosition; + float myWorldPoint[4]; + float myDistance; + float myTransparency; + +private: + VISU_FramedTextActor(const VISU_FramedTextActor&); // Not implemented. + void operator=(const VISU_FramedTextActor&); // Not implemented. +}; + +#endif //VISU_GAUSS_PTS_DEVICE_ACTOR_H diff --git a/src/OBJECT/VISU_GaussPtsSettings.cxx b/src/OBJECT/VISU_GaussPtsSettings.cxx new file mode 100644 index 00000000..b95b1627 --- /dev/null +++ b/src/OBJECT/VISU_GaussPtsSettings.cxx @@ -0,0 +1,106 @@ +// VISU OBJECT : interactive object for VISU entities implementation +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : +// Author : +// Module : VISU +// $Header$ + +#include "VISU_GaussPtsSettings.h" + +#include +#include + +//---------------------------------------------------------------- +vtkStandardNewMacro( VISU_GaussPtsSettings ); +vtkStandardNewMacro( VISU_InsideCursorSettings ); +vtkStandardNewMacro( VISU_OutsideCursorSettings ); +vtkStandardNewMacro( VISU_PickingSettings ); + +//---------------------------------------------------------------- +VISU_GaussPtsSettings::VISU_GaussPtsSettings() +{ + this->Initial = true; + + this->PrimitiveType = -1; + this->Clamp = -1; + this->Texture = NULL; + this->AlphaThreshold = -1; + this->Resolution = -1; + this->Magnification = -1; + this->Increment = -1; +} + +VISU_GaussPtsSettings::~VISU_GaussPtsSettings() +{ + this->SetTexture( NULL ); +} + +//---------------------------------------------------------------- +VISU_InsideCursorSettings::VISU_InsideCursorSettings() : + VISU_GaussPtsSettings() +{ + this->MinSize = -1; + this->MaxSize = -1; +} + +VISU_InsideCursorSettings::~VISU_InsideCursorSettings() +{ +} + +//---------------------------------------------------------------- +VISU_OutsideCursorSettings::VISU_OutsideCursorSettings() : + VISU_GaussPtsSettings() +{ + this->Size = -1; + this->Uniform = false; + this->Color[0] = -1; + this->Color[1] = -1; + this->Color[2] = -1; +} + +VISU_OutsideCursorSettings::~VISU_OutsideCursorSettings() +{ +} + +//---------------------------------------------------------------- +VISU_PickingSettings::VISU_PickingSettings() +{ + this->Initial = true; + + this->PyramidHeight = -1; + this->CursorSize = -1; + this->PointTolerance = -1; + this->Color[0] = -1; + this->Color[1] = -1; + this->Color[2] = -1; + this->InfoWindowTransparency = -1; + this->InfoWindowPosition = -1; + this->ZoomFactor = -1; + this->StepNumber = -1; + this->DisplayParentMesh = false; +} + +VISU_PickingSettings::~VISU_PickingSettings() +{ +} diff --git a/src/OBJECT/VISU_GaussPtsSettings.h b/src/OBJECT/VISU_GaussPtsSettings.h new file mode 100644 index 00000000..1778521d --- /dev/null +++ b/src/OBJECT/VISU_GaussPtsSettings.h @@ -0,0 +1,231 @@ +// VISU OBJECT : interactive object for VISU entities implementation +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : +// Author : +// Module : VISU +// $Header$ + +#ifndef VISU_GaussPtsSettings_HeaderFile +#define VISU_GaussPtsSettings_HeaderFile + +#include +#include + +class vtkImageData; + + +//============================================================================ +namespace VISU +{ + const vtkIdType UpdateFromSettingsEvent = vtkCommand::UserEvent + 100; + const vtkIdType UpdateInsideSettingsEvent = vtkCommand::UserEvent + 101; + const vtkIdType UpdateOutsideSettingsEvent = vtkCommand::UserEvent + 102; + const vtkIdType UpdatePickingSettingsEvent = vtkCommand::UserEvent + 103; +} + + +//! Base class of Gauss Points settings. +class VISU_GaussPtsSettings : public vtkObject +{ + public: + vtkTypeMacro( VISU_GaussPtsSettings, vtkObject ); + + VISU_GaussPtsSettings(); + virtual ~VISU_GaussPtsSettings(); + + static + VISU_GaussPtsSettings* + New(); + + vtkSetMacro( Initial, bool ); + vtkGetMacro( Initial, bool ); + + vtkSetMacro( PrimitiveType, int ); + vtkGetMacro( PrimitiveType, int ); + + vtkSetMacro( Clamp, float ); + vtkGetMacro( Clamp, float ); + + vtkSetMacro( Texture, vtkImageData* ); + vtkGetMacro( Texture, vtkImageData* ); + + vtkSetMacro( AlphaThreshold, float ); + vtkGetMacro( AlphaThreshold, float ); + + vtkSetMacro( Resolution, int ); + vtkGetMacro( Resolution, int ); + + vtkSetMacro( Magnification, float ); + vtkGetMacro( Magnification, float ); + + vtkSetMacro( Increment, float ); + vtkGetMacro( Increment, float ); + + protected: + bool Initial; + + int PrimitiveType; + float Clamp; + vtkImageData* Texture; + float AlphaThreshold; + int Resolution; + float Magnification; + float Increment; +}; + + +//! Class of Inside Cursor Gauss Points settings. +/*! + * Contains information about the point sprite parameters: + * Clamp, Texture, Alpha threshold, Const size and Color. + * Used by Gauss Points Actor. + */ +class VISU_InsideCursorSettings : public VISU_GaussPtsSettings +{ + public: + vtkTypeMacro( VISU_InsideCursorSettings, vtkObject ); + + VISU_InsideCursorSettings(); + virtual ~VISU_InsideCursorSettings(); + + static + VISU_InsideCursorSettings* + New(); + + vtkSetMacro( MinSize, float ); + vtkGetMacro( MinSize, float ); + + vtkSetMacro( MaxSize, float ); + vtkGetMacro( MaxSize, float ); + + protected: + float MinSize; + float MaxSize; +}; + + +//============================================================================ +//! Class of Outside Cursor Gauss Points settings. +/*! + * Contains information about the point sprite parameters: + * Clamp, Texture, Alpha threshold, Const size and Color. + * Used by Gauss Points Actor. + */ +class VISU_OutsideCursorSettings : public VISU_GaussPtsSettings +{ + public: + vtkTypeMacro( VISU_OutsideCursorSettings, vtkObject ); + + VISU_OutsideCursorSettings(); + virtual ~VISU_OutsideCursorSettings(); + + static + VISU_OutsideCursorSettings* + New(); + + vtkSetMacro( Size, float ); + vtkGetMacro( Size, float ); + + vtkSetMacro( Uniform, bool ); + vtkGetMacro( Uniform, bool ); + + vtkSetVector3Macro( Color, float ); + vtkGetVector3Macro( Color, float ); + + protected: + float Size; + bool Uniform; + float Color[3]; +}; + + +//! Class of Picking settings. +/*! + * Contains information about the following parameters: + * Cursor Pyramid height, Info Window transparency, + * Info Window position, Zoom factor on first selected point, + * Camera movement steps number and Display parent mesh. + * Used by Gauss Points Actor. + */ +class VISU_PickingSettings : public vtkObject +{ + public: + enum { BelowPoint = 0, TopLeftCorner }; + + public: + vtkTypeMacro( VISU_PickingSettings, vtkObject ); + + VISU_PickingSettings(); + virtual ~VISU_PickingSettings(); + + static + VISU_PickingSettings* + New(); + + vtkSetMacro( Initial, bool ); + vtkGetMacro( Initial, bool ); + + vtkSetMacro( PyramidHeight, float ); + vtkGetMacro( PyramidHeight, float ); + + vtkSetMacro( CursorSize, float ); + vtkGetMacro( CursorSize, float ); + + vtkSetVector3Macro( Color, float ); + vtkGetVector3Macro( Color, float ); + + vtkSetMacro( PointTolerance, float ); + vtkGetMacro( PointTolerance, float ); + + vtkSetMacro( InfoWindowTransparency, float ); + vtkGetMacro( InfoWindowTransparency, float ); + + vtkSetMacro( InfoWindowPosition, int ); + vtkGetMacro( InfoWindowPosition, int ); + + vtkSetMacro( ZoomFactor, float ); + vtkGetMacro( ZoomFactor, float ); + + vtkSetMacro( StepNumber, int ); + vtkGetMacro( StepNumber, int ); + + vtkSetMacro( DisplayParentMesh, bool ); + vtkGetMacro( DisplayParentMesh, bool ); + +private: + bool Initial; + + float PyramidHeight; + float CursorSize; + float PointTolerance; + float Color[3]; + float InfoWindowTransparency; + int InfoWindowPosition; + float ZoomFactor; + int StepNumber; + bool DisplayParentMesh; +}; + + +#endif diff --git a/src/OBJECT/VISU_MeshAct.cxx b/src/OBJECT/VISU_MeshAct.cxx index 68f7446a..b6b812d9 100644 --- a/src/OBJECT/VISU_MeshAct.cxx +++ b/src/OBJECT/VISU_MeshAct.cxx @@ -22,12 +22,12 @@ // // // File : VISU_MeshAct.cxx -// Author : Laurent CORNABE with the help of Nicolas REJNERI +// Author : // Module : VISU // $Header$ #include "VISU_MeshAct.h" -#include "VTKViewer_PassThroughFilter.h" +#include "SVTK_DeviceActor.h" #include #include @@ -39,351 +39,233 @@ #include #include + +//---------------------------------------------------------------------------- vtkStandardNewMacro(VISU_MeshAct); -VISU_MeshAct::VISU_MeshAct(){ +//---------------------------------------------------------------------------- +VISU_MeshAct +::VISU_MeshAct() +{ vtkMatrix4x4 *m; m = vtkMatrix4x4::New(); - mySurfaceActor = VISU_Actor::New(); - mySurfaceActor->SetParent(this); - mySurfaceActor->GetProperty()->FrontfaceCullingOff(); - mySurfaceActor->GetProperty()->BackfaceCullingOff(); + mySurfaceActor = SVTK_DeviceActor::New(); + mySurfaceActor->SetRepresentation(SVTK::Representation::Surface); mySurfaceActor->SetUserMatrix(m); - mySurfaceActor->SetRepresentation(2); //SURFACE - myEdgeActor = VISU_Actor::New(); - myEdgeActor->SetParent(this); - myEdgeActor->PickableOff(); - myEdgeActor->GetProperty()->FrontfaceCullingOff(); - myEdgeActor->GetProperty()->BackfaceCullingOff(); + myEdgeActor = SVTK_DeviceActor::New(); + myEdgeActor->SetRepresentation(SVTK::Representation::Wireframe); myEdgeActor->SetUserMatrix(m); - myEdgeActor->SetRepresentation(1); //WIREFRAME - - myNodeActor = VISU_Actor::New(); - myNodeActor->SetParent(this); - myNodeActor->PickableOff(); - myNodeActor->GetProperty()->SetPointSize(SALOME_POINT_SIZE); - myNodeActor->GetProperty()->FrontfaceCullingOff(); - myNodeActor->GetProperty()->BackfaceCullingOff(); + + myNodeActor = SVTK_DeviceActor::New(); + myNodeActor->SetRepresentation(SVTK::Representation::Points); myNodeActor->SetUserMatrix(m); - myNodeActor->SetRepresentation(0); //POINT m->Delete(); - SetRepresentation(2); //SURFACE + SetRepresentation(SVTK::Representation::Surface); } -VISU_MeshAct::~VISU_MeshAct(){ +VISU_MeshAct +::~VISU_MeshAct() +{ mySurfaceActor->Delete(); myEdgeActor->Delete(); myNodeActor->Delete(); } -void VISU_MeshAct::setIO(const Handle(SALOME_InteractiveObject)& theIO){ - VISU_Actor::setIO(theIO); - mySurfaceActor->setIO(theIO); - myEdgeActor->setIO(theIO); - myNodeActor->setIO(theIO); -} -void VISU_MeshAct::SetPrs3d(VISU::Prs3d_i* thePrs3d){ - if(thePrs3d){ - VISU_Actor::SetPrs3d(thePrs3d); - mySurfaceActor->SetPrs3d(thePrs3d); - myEdgeActor->SetPrs3d(thePrs3d); - myNodeActor->SetPrs3d(thePrs3d); - } -} +//---------------------------------------------------------------------------- +void +VISU_MeshAct +::SetMapperInput(vtkDataSet* theDataSet) +{ + Superclass::SetMapperInput(theDataSet); -void VISU_MeshAct::AddToRender(vtkRenderer* theRenderer){ - VISU_Actor::AddToRender(theRenderer); - theRenderer->AddActor(myEdgeActor); + mySurfaceActor->SetInput(theDataSet); + myEdgeActor->SetInput(theDataSet); + myNodeActor->SetInput(theDataSet); } -void VISU_MeshAct::RemoveFromRender(vtkRenderer* theRenderer){ - VISU_Actor::RemoveFromRender(theRenderer); - theRenderer->RemoveActor(myEdgeActor); -} -void VISU_MeshAct::SetPipeLine(VISU_PipeLine* thePipeLine) { - VISU_Actor::SetPipeLine(thePipeLine); - mySurfaceActor->SetPipeLine(thePipeLine); - myEdgeActor->SetPipeLine(thePipeLine); - myNodeActor->SetPipeLine(thePipeLine); -} +//---------------------------------------------------------------------------- +void +VISU_MeshAct +::SetTransform(VTKViewer_Transform* theTransform) +{ + Superclass::SetTransform(theTransform); -void VISU_MeshAct::SetTransform(VTKViewer_Transform* theTransform){ - VISU_Actor::SetTransform(theTransform); mySurfaceActor->SetTransform(theTransform); myEdgeActor->SetTransform(theTransform); myNodeActor->SetTransform(theTransform); } -void VISU_MeshAct::SetShrinkable(bool theIsShrinkable){ - VISU_Actor::SetShrinkable(theIsShrinkable); + +//---------------------------------------------------------------------------- +void +VISU_MeshAct +::SetShrinkable(bool theIsShrinkable) +{ + Superclass::SetShrinkable(theIsShrinkable); + mySurfaceActor->SetShrinkable(theIsShrinkable); myEdgeActor->SetShrinkable(theIsShrinkable); - myNodeActor->SetShrinkable(theIsShrinkable); } -void VISU_MeshAct::SetShrinkFactor(float theValue){ - VISU_Actor::SetShrinkFactor(theValue); +void +VISU_MeshAct +::SetShrinkFactor(float theValue) +{ + Superclass::SetShrinkFactor(theValue); + mySurfaceActor->SetShrinkFactor(theValue); myEdgeActor->SetShrinkFactor(theValue); } -vtkProperty* VISU_MeshAct::GetSurfaceProperty(){ - return mySurfaceActor->GetProperty(); -} -void VISU_MeshAct::SetSurfaceProperty(vtkProperty* theProperty){ - mySurfaceActor->SetProperty(theProperty); +//---------------------------------------------------------------------------- +vtkProperty* +VISU_MeshAct +::GetSurfaceProperty() +{ + return mySurfaceActor->GetProperty(); } -vtkProperty* VISU_MeshAct::GetEdgeProperty(){ +vtkProperty* +VISU_MeshAct +::GetEdgeProperty() +{ return myEdgeActor->GetProperty(); } -void VISU_MeshAct::SetEdgeProperty(vtkProperty* theProperty){ - myEdgeActor->SetProperty(theProperty); -} - -vtkProperty* VISU_MeshAct::GetNodeProperty(){ +vtkProperty* +VISU_MeshAct +::GetNodeProperty() +{ return myNodeActor->GetProperty(); } -void VISU_MeshAct::SetNodeProperty(vtkProperty* theProperty){ - myNodeActor->SetProperty(theProperty); -} - -void VISU_MeshAct::SetOpacity(float theValue){ +//---------------------------------------------------------------------------- +void +VISU_MeshAct +::SetOpacity(float theValue) +{ GetSurfaceProperty()->SetOpacity(theValue); } -float VISU_MeshAct::GetOpacity(){ +float +VISU_MeshAct +::GetOpacity() +{ return GetSurfaceProperty()->GetOpacity(); } -void VISU_MeshAct::SetLineWidth(float theLineWidth){ +//---------------------------------------------------------------------------- +void +VISU_MeshAct +::SetLineWidth(float theLineWidth) +{ GetEdgeProperty()->SetLineWidth(theLineWidth); } -float VISU_MeshAct::GetLineWidth(){ +float +VISU_MeshAct::GetLineWidth() +{ return GetEdgeProperty()->GetLineWidth(); } -void VISU_MeshAct::SetShrink(){ +//---------------------------------------------------------------------------- +void +VISU_MeshAct +::SetShrink() +{ if(myRepresentation == VTK_POINTS) return; - VISU_Actor::SetShrink(); + + Superclass::SetShrink(); + mySurfaceActor->SetShrink(); myEdgeActor->SetShrink(); - //SetRepresentation(GetRepresentation()); } -void VISU_MeshAct::UnShrink(){ - VISU_Actor::UnShrink(); +void +VISU_MeshAct +::UnShrink() +{ + Superclass::UnShrink(); + mySurfaceActor->UnShrink(); myEdgeActor->UnShrink(); - //SetRepresentation(GetRepresentation()); } -void VISU_MeshAct::SetRepresentation(int theMode) + +//---------------------------------------------------------------------------- +void +VISU_MeshAct +::SetRepresentation(int theMode) { - SALOME_Actor::SetRepresentation(theMode); - - if (!GetVisibility()) return; // Fix IPAL9555 - - mySurfaceActor->VisibilityOff(); - myEdgeActor->VisibilityOff(); - myNodeActor->VisibilityOff(); - myEdgeActor->PickableOff(); - myNodeActor->PickableOff(); - switch (theMode) { - case VTK_POINTS: - myNodeActor->VisibilityOn(); - myNodeActor->PickableOn(); - break; - case VTK_WIREFRAME: - myEdgeActor->VisibilityOn(); - myEdgeActor->SetRepresentation(1); - myEdgeActor->PickableOn(); - break; - case VTK_SURFACE: - mySurfaceActor->VisibilityOn(); - break; - case 3: //INSIDEFRAME - myEdgeActor->VisibilityOn(); - myEdgeActor->SetRepresentation(3); - myEdgeActor->PickableOn(); - break; - case 4: //SURFACEFRAME - myEdgeActor->VisibilityOn(); - myEdgeActor->SetRepresentation(1); - mySurfaceActor->VisibilityOn(); - break; - } - if (myRepresentation == VTK_POINTS) - UnShrink(); -} + Superclass::SetRepresentation(theMode); -void VISU_MeshAct::SetVisibility(int theMode){ - VISU_Actor::SetVisibility(theMode); - if(GetVisibility()) - SetRepresentation(GetRepresentation()); - else{ - myNodeActor->VisibilityOff(); - myEdgeActor->VisibilityOff(); - mySurfaceActor->VisibilityOff(); - } + if(theMode == SVTK::Representation::Insideframe) + myEdgeActor->SetRepresentation(SVTK::Representation::Insideframe); + else + myEdgeActor->SetRepresentation(SVTK::Representation::Wireframe); } -// From vtkLODActor -void VISU_MeshAct::Render(vtkRenderer *ren, vtkMapper *vtkNotUsed(m)) +//---------------------------------------------------------------------------- +int +VISU_MeshAct +::RenderOpaqueGeometry(vtkViewport *ren) { - float myTime, bestTime, tempTime; - vtkMatrix4x4 *matrix; - vtkMapper *mapper, *bestMapper; - - if (this->Mapper == NULL) - { - vtkErrorMacro("No mapper for actor."); - return; - } - - // first time through create lods if non have been added - if (this->LODMappers->GetNumberOfItems() == 0) - { - this->CreateOwnLODs(); - } - - // If the actor has changed or the primary mapper has changed ... - // Is this the correct test? - if (this->MediumMapper) - { - if (this->GetMTime() > this->BuildTime || - this->Mapper->GetMTime() > this->BuildTime) - { - this->UpdateOwnLODs(); - } - } - - // figure out how much time we have to render - myTime = this->AllocatedRenderTime; - - // Figure out which resolution to use - // none is a valid resolution. Do we want to have a lowest: - // bbox, single point, ... - // There is no order to the list, so it is assumed that mappers that take - // longer to render are better quality. - // Timings might become out of date, but we rely on - - bestMapper = this->Mapper; - bestTime = bestMapper->GetTimeToDraw(); - if (bestTime > myTime) - { - this->LODMappers->InitTraversal(); - while ((mapper = this->LODMappers->GetNextItem()) != NULL && - bestTime != 0.0) - { - tempTime = mapper->GetTimeToDraw(); - - // If the LOD has never been rendered, select it! - if (tempTime == 0.0) - { - bestMapper = mapper; - bestTime = 0.0; - } - else - { - if (bestTime > myTime && tempTime < bestTime) - { - bestMapper = mapper; - bestTime = tempTime; - } - if (tempTime > bestTime && tempTime < myTime) - { - bestMapper = mapper; - bestTime = tempTime; - } - } - } - } + GetMatrix(myNodeActor->GetUserMatrix()); + GetMatrix(myEdgeActor->GetUserMatrix()); + GetMatrix(mySurfaceActor->GetUserMatrix()); + using namespace SVTK::Representation; switch(GetRepresentation()){ - case 0: //POINTS - myNodeActor->GetProperty()->Render(this, ren); - break; - case 1: //WIREFRAME - //PAL5268: myEdgeActor->GetProperty()->Render(this, ren); + case Points : + myNodeActor->RenderOpaqueGeometry(ren); break; - case 2: //SURFACE - mySurfaceActor->GetProperty()->Render(this, ren); + case Wireframe : + case Insideframe : + myEdgeActor->RenderOpaqueGeometry(ren); break; - case 3: //INSIDEFRAME - //PAL5268: myEdgeActor->GetProperty()->Render(this, ren); + case Surface : + mySurfaceActor->RenderOpaqueGeometry(ren); break; - case 4: //SURFACEFRAME - //PAL5268: myEdgeActor->GetProperty()->Render(this, ren); - mySurfaceActor->GetProperty()->Render(this, ren); + case Surfaceframe : + mySurfaceActor->RenderOpaqueGeometry(ren); + myEdgeActor->RenderOpaqueGeometry(ren); break; } + return 1; +} - // render the texture - if (this->Texture) - { - this->Texture->Render(ren); - } - - switch(GetRepresentation()){ - case 0: //POINTS - matrix = myNodeActor->GetUserMatrix(); - break; - case 1: //WIREFRAME - matrix = myEdgeActor->GetUserMatrix(); - break; - case 2: //SURFACE - matrix = mySurfaceActor->GetUserMatrix(); - break; - case 3: //INSIDEFRAME - matrix = myEdgeActor->GetUserMatrix(); - break; - case 4: //SURFACEFRAME - matrix = myEdgeActor->GetUserMatrix(); - this->GetMatrix(matrix); - matrix = mySurfaceActor->GetUserMatrix(); - break; - } - this->GetMatrix(matrix); +int +VISU_MeshAct +::RenderTranslucentGeometry(vtkViewport *ren) +{ + GetMatrix(myNodeActor->GetUserMatrix()); + GetMatrix(myEdgeActor->GetUserMatrix()); + GetMatrix(mySurfaceActor->GetUserMatrix()); + using namespace SVTK::Representation; switch(GetRepresentation()){ - case 0: //POINTS - myNodeActor->Render(ren,bestMapper); + case Points : + myNodeActor->RenderTranslucentGeometry(ren); break; - case 1: //WIREFRAME - //PAL5268: myEdgeActor->Render(ren,bestMapper); + case Wireframe : + case Insideframe : + myEdgeActor->RenderTranslucentGeometry(ren); break; - case 2: //SURFACE - mySurfaceActor->Render(ren,bestMapper); + case Surface : + mySurfaceActor->RenderTranslucentGeometry(ren); break; - case 3: //INSIDEFRAME - //PAL5268: myEdgeActor->Render(ren,bestMapper); - break; - case 4: //SURFACEFRAME - //PAL5268: myEdgeActor->Render(ren,bestMapper); - mySurfaceActor->Render(ren,bestMapper); + case Surfaceframe : + mySurfaceActor->RenderTranslucentGeometry(ren); + myEdgeActor->RenderTranslucentGeometry(ren); break; } - - this->EstimatedRenderTime = bestMapper->GetTimeToDraw(); -} - -// From vtkLODActor -void VISU_MeshAct::Modified() -{ - myNodeActor->Modified(); - //PAL5268: myEdgeActor->Modified(); - mySurfaceActor->Modified(); - this->vtkActor::Modified(); + return 1; } diff --git a/src/OBJECT/VISU_MeshAct.h b/src/OBJECT/VISU_MeshAct.h index bacc15c3..9dafb348 100644 --- a/src/OBJECT/VISU_MeshAct.h +++ b/src/OBJECT/VISU_MeshAct.h @@ -30,54 +30,94 @@ #define VISU_MeshAct_HeaderFile #include "VISU_Actor.h" -class vtkDataSetMapper; - -class VTKOCC_EXPORT VISU_MeshAct : public VISU_Actor { +#include "SVTK_DeviceActor.h" + +namespace SVTK +{ + namespace Representation + { + const Type Surfaceframe = Insideframe + 1; + } +} + +class VTKOCC_EXPORT VISU_MeshAct : public VISU_Actor +{ public: vtkTypeMacro(VISU_MeshAct,VISU_Actor); static VISU_MeshAct* New(); - ~VISU_MeshAct(); - virtual void setIO(const Handle(SALOME_InteractiveObject)& theIO); - virtual void SetPrs3d(VISU::Prs3d_i* thePrs3d); + //! Apply view transformation + virtual + void + SetTransform(VTKViewer_Transform* theTransform); + + virtual + vtkProperty* + GetSurfaceProperty(); + + virtual + vtkProperty* + GetEdgeProperty(); - virtual void AddToRender(vtkRenderer* theRenderer); - virtual void RemoveFromRender(vtkRenderer* theRenderer); + virtual + vtkProperty* + GetNodeProperty(); - virtual void SetPipeLine(VISU_PipeLine* thePipeLine) ; - virtual void SetTransform(VTKViewer_Transform* theTransform); + virtual + void + SetOpacity(float theValue); - virtual vtkProperty* GetSurfaceProperty(); - virtual void SetSurfaceProperty(vtkProperty* theProperty); + virtual + float + GetOpacity(); - virtual vtkProperty* GetEdgeProperty(); - virtual void SetEdgeProperty(vtkProperty* theProperty); + virtual + void + SetLineWidth(float theLineWidth); - virtual vtkProperty* GetNodeProperty(); - virtual void SetNodeProperty(vtkProperty* theProperty); + virtual + float + GetLineWidth(); - virtual void SetOpacity(float theValue); - virtual float GetOpacity(); + virtual + void + SetRepresentation(int theMode); - virtual void SetLineWidth(float theLineWidth); - virtual float GetLineWidth(); + virtual + void + SetShrinkable(bool theIsShrinkable); - virtual void SetRepresentation(int theMode); + virtual + void + SetShrinkFactor(float theFactor = 0.8); - virtual void SetVisibility(int theMode); + virtual + void + SetShrink(); - virtual void SetShrinkable(bool theIsShrinkable); - virtual void SetShrinkFactor(float theFactor = 0.8); + virtual + void + UnShrink(); - virtual void SetShrink(); - virtual void UnShrink(); + virtual + int + RenderOpaqueGeometry(vtkViewport *ren); - virtual void Render(vtkRenderer *, vtkMapper *); - void Modified(); + virtual + int + RenderTranslucentGeometry(vtkViewport *ren); protected: VISU_MeshAct(); - VISU_Actor *mySurfaceActor, *myEdgeActor, *myNodeActor; + ~VISU_MeshAct(); + + virtual + void + SetMapperInput(vtkDataSet* theDataSet); + + SVTK_DeviceActor *mySurfaceActor; + SVTK_DeviceActor *myEdgeActor; + SVTK_DeviceActor *myNodeActor; }; #endif diff --git a/src/OBJECT/VISU_ScalarMapAct.cxx b/src/OBJECT/VISU_ScalarMapAct.cxx index c34a8e7f..527f726f 100644 --- a/src/OBJECT/VISU_ScalarMapAct.cxx +++ b/src/OBJECT/VISU_ScalarMapAct.cxx @@ -35,7 +35,9 @@ vtkStandardNewMacro(VISU_ScalarMapAct); -VISU_ScalarMapAct::VISU_ScalarMapAct(){ +VISU_ScalarMapAct +::VISU_ScalarMapAct() +{ myScalarBar = VISU_ScalarBarActor::New(); vtkProperty* aProperty = GetProperty(); @@ -49,32 +51,49 @@ VISU_ScalarMapAct::VISU_ScalarMapAct(){ myProperty->DeepCopy(aProperty); } -VISU_ScalarMapAct::~VISU_ScalarMapAct(){ +VISU_ScalarMapAct +::~VISU_ScalarMapAct() +{ myScalarBar->Delete(); } -void VISU_ScalarMapAct::AddToRender(vtkRenderer* theRenderer){ - SALOME_Actor::AddToRender(theRenderer); +void +VISU_ScalarMapAct +::AddToRender(vtkRenderer* theRenderer) +{ + VISU_Actor::AddToRender(theRenderer); if(myScalarBar) theRenderer->AddActor2D(myScalarBar); } -void VISU_ScalarMapAct::RemoveFromRender(vtkRenderer* theRenderer){ - SALOME_Actor::RemoveFromRender(theRenderer); +void +VISU_ScalarMapAct +::RemoveFromRender(vtkRenderer* theRenderer) +{ + VISU_Actor::RemoveFromRender(theRenderer); if(myScalarBar) theRenderer->RemoveActor(myScalarBar); } -void VISU_ScalarMapAct::SetVisibility(int theMode){ - SALOME_Actor::SetVisibility(theMode); +void +VISU_ScalarMapAct +::SetVisibility(int theMode) +{ + VISU_Actor::SetVisibility(theMode); if(myScalarBar) myScalarBar->SetVisibility(myBarVisibility && theMode); } -int VISU_ScalarMapAct::GetVisibility(){ - return SALOME_Actor::GetVisibility(); +int +VISU_ScalarMapAct +::GetVisibility() +{ + return VISU_Actor::GetVisibility(); } -void VISU_ScalarMapAct::SetBarVisibility(bool theMode){ +void +VISU_ScalarMapAct +::SetBarVisibility(bool theMode) +{ myBarVisibility = theMode; if(myScalarBar) myScalarBar->SetVisibility(myBarVisibility); } diff --git a/src/OBJECT/VISU_VectorsAct.cxx b/src/OBJECT/VISU_VectorsAct.cxx index 4cb16c27..e568a9d4 100644 --- a/src/OBJECT/VISU_VectorsAct.cxx +++ b/src/OBJECT/VISU_VectorsAct.cxx @@ -36,43 +36,68 @@ #include #include -using namespace std; - -//======================================================================= +//---------------------------------------------------------------------------- vtkStandardNewMacro(VISU_VectorsAct); -VISU_VectorsAct::VISU_VectorsAct(){} +//---------------------------------------------------------------------------- +VISU_VectorsAct +::VISU_VectorsAct(): + myVectorsPL(NULL) +{} -VISU_VectorsAct::~VISU_VectorsAct(){} +//---------------------------------------------------------------------------- +VISU_VectorsAct +::~VISU_VectorsAct() +{} -void VISU_VectorsAct::SetPipeLine(VISU_PipeLine* thePipeLine) { - if((myPipeLine = dynamic_cast(thePipeLine))){ - VISU_Actor::SetPipeLine(myPipeLine); - myPipeLine->Delete(); - } +//---------------------------------------------------------------------------- +void +VISU_VectorsAct +::SetPipeLine(VISU_PipeLine* thePipeLine) +{ + myVectorsPL = dynamic_cast(thePipeLine); + VISU_Actor::SetPipeLine(myVectorsPL); + myVectorsPL->Delete(); +} + + +//---------------------------------------------------------------------------- +vtkDataSet* +VISU_VectorsAct +::GetInput() +{ + return GetCurrentPL()->GetOutput(); } -void VISU_VectorsAct::SetTransform(VTKViewer_Transform* theTransform){ - myPipeLine->SetTransform(theTransform); - Modified(); +//---------------------------------------------------------------------------- +void +VISU_VectorsAct +::SetTransform(VTKViewer_Transform* theTransform) +{ + Superclass::SetTransform(theTransform); + myVectorsPL->SetTransform(theTransform); } -void VISU_VectorsAct::SetMapper(vtkMapper* theMapper){ +//---------------------------------------------------------------------------- +void +VISU_VectorsAct +::SetMapper(vtkMapper* theMapper) +{ if(theMapper){ myPassFilter[0]->SetInput(theMapper->GetInput()); - myPassFilter[0]->Update(); + myPassFilter[1]->SetInput(myPassFilter[0]->GetPolyDataOutput()); - myPassFilter[1]->Update(); + myPassFilter[2]->SetInput(myPassFilter[1]->GetPolyDataOutput()); - myPassFilter[2]->Update(); + myPassFilter[3]->SetInput(myPassFilter[2]->GetPolyDataOutput()); - myPassFilter[3]->Update(); + if(vtkDataSetMapper* aMapper = dynamic_cast(theMapper)) aMapper->SetInput(myPassFilter[3]->GetPolyDataOutput()); else if(vtkPolyDataMapper* aMapper = dynamic_cast(theMapper)) diff --git a/src/OBJECT/VISU_VectorsAct.h b/src/OBJECT/VISU_VectorsAct.h index ae5bc694..921b0fc6 100644 --- a/src/OBJECT/VISU_VectorsAct.h +++ b/src/OBJECT/VISU_VectorsAct.h @@ -37,19 +37,32 @@ class VISU_VectorsPL; class VTKOCC_EXPORT VISU_VectorsAct : public VISU_ScalarMapAct { public: vtkTypeMacro(VISU_VectorsAct,VISU_ScalarMapAct); - static VISU_VectorsAct* New(); - ~VISU_VectorsAct(); - virtual void SetPipeLine(VISU_PipeLine* thePipeLine); + static + VISU_VectorsAct* + New(); + + virtual + void + SetPipeLine(VISU_PipeLine* thePipeLine); - virtual void SetTransform(VTKViewer_Transform* theTransform); + virtual + vtkDataSet* + GetInput(); - virtual void SetMapper(vtkMapper* theMapper); + virtual + void + SetTransform(VTKViewer_Transform* theTransform); + + virtual + void + SetMapper(vtkMapper* theMapper); protected: VISU_VectorsAct(); + ~VISU_VectorsAct(); - VISU_VectorsPL* myPipeLine; + VISU_VectorsPL* myVectorsPL; }; #endif diff --git a/src/PIPELINE/Makefile.in b/src/PIPELINE/Makefile.in index 5b46996d..cc97361b 100644 --- a/src/PIPELINE/Makefile.in +++ b/src/PIPELINE/Makefile.in @@ -32,44 +32,79 @@ VPATH=.:@srcdir@ @COMMENCE@ -EXPORT_HEADERS = VISU_PipeLine.hxx VISU_PipeLineUtils.hxx \ - VISU_MeshPL.hxx VISU_ScalarMapPL.hxx \ - VISU_CutPlanesPL.hxx VISU_CutLinesPL.hxx \ - VISU_IsoSurfacesPL.hxx VISU_DeformedShapePL.hxx \ - VISU_VectorsPL.hxx VISU_StreamLinesPL.hxx \ - VISU_LookupTable.hxx VISU_ScalarBarActor.hxx \ - VISU_Extractor.hxx VISU_FieldTransform.hxx \ - VISU_UsedPointsFilter.hxx VISU_Plot3DPL.hxx +EXPORT_HEADERS = \ + VISU_PipeLine.hxx \ + VISU_PipeLineUtils.hxx \ + VISU_MeshPL.hxx \ + VISU_ScalarMapPL.hxx \ + VISU_CutPlanesPL.hxx \ + VISU_CutLinesPL.hxx \ + VISU_IsoSurfacesPL.hxx \ + VISU_DeformedShapePL.hxx \ + VISU_VectorsPL.hxx \ + VISU_StreamLinesPL.hxx \ + VISU_LookupTable.hxx \ + VISU_ScalarBarActor.hxx \ + VISU_Extractor.hxx \ + VISU_FieldTransform.hxx \ + VISU_UsedPointsFilter.hxx \ + VISU_GaussPointsPL.hxx \ + VISU_Plot3DPL.hxx \ + VISU_OpenGLPointSpriteMapper.hxx \ + VISU_ImplicitFunctionWidget.hxx \ + SALOME_ExtractGeometry.h \ + VISU_ScalarBarCtrl.hxx \ + VISU_PlanesWidget.hxx \ + VISU_SphereWidget.hxx \ + VISU_WidgetCtrl.hxx # Libraries targets LIB = libVisuPipeLine.la -LIB_SRC = VISU_PipeLine.cxx VISU_PipeLineUtils.cxx \ - VISU_MeshPL.cxx VISU_ScalarMapPL.cxx \ - VISU_CutPlanesPL.cxx VISU_CutLinesPL.cxx \ - VISU_IsoSurfacesPL.cxx VISU_DeformedShapePL.cxx \ - VISU_VectorsPL.cxx VISU_StreamLinesPL.cxx \ - VISU_LookupTable.cxx VISU_ScalarBarActor.cxx \ - VISU_Extractor.cxx VISU_FieldTransform.cxx \ - VISU_UsedPointsFilter.cxx VISU_Plot3DPL.cxx \ - SALOME_ExtractGeometry.cxx +LIB_SRC = \ + VISU_PipeLine.cxx \ + VISU_PipeLineUtils.cxx \ + VISU_MeshPL.cxx \ + VISU_ScalarMapPL.cxx \ + VISU_CutPlanesPL.cxx \ + VISU_CutLinesPL.cxx \ + VISU_IsoSurfacesPL.cxx \ + VISU_DeformedShapePL.cxx \ + VISU_VectorsPL.cxx \ + VISU_StreamLinesPL.cxx \ + VISU_LookupTable.cxx \ + VISU_ScalarBarActor.cxx \ + VISU_Extractor.cxx \ + VISU_FieldTransform.cxx \ + VISU_UsedPointsFilter.cxx \ + VISU_GaussPointsPL.cxx \ + VISU_Plot3DPL.cxx \ + SALOME_ExtractGeometry.cxx \ + VISU_OpenGLPointSpriteMapper.cxx \ + VISU_ImplicitFunctionWidget.cxx \ + VISU_PlanesWidget.cxx \ + VISU_SphereWidget.cxx \ + VISU_WidgetCtrl.cxx \ + VISU_ScalarBarCtrl.cxx # Executables targets -BIN = VISUPipeLine +BIN = VISUPipeLine VISU_img2vti BIN_SRC = -CPPFLAGS+= $(VTK_INCLUDES) \ +CPPFLAGS+= \ + $(VTK_INCLUDES) \ -I${KERNEL_ROOT_DIR}/include/salome \ -I${GUI_ROOT_DIR}/include/salome \ -I${MED_ROOT_DIR}/include/salome \ $(HDF5_INCLUDES) $(BOOST_CPPFLAGS) -LDFLAGS+= $(VTK_LIBS) -lVTKViewer -lVisuConvertor \ +LDFLAGS+= \ + $(VTK_LIBS) -lVTKViewer -lVisuConvertor \ -L${KERNEL_ROOT_DIR}/lib/salome -lSALOMELocalTrace \ -L${GUI_ROOT_DIR}/lib/salome \ -L${MED_ROOT_DIR}/lib/salome -LDFLAGSFORBIN=$(LDFLAGS) -lOpUtil -lMEDWrapper -lMEDWrapper_V2_2 -lMEDWrapper_V2_1 -lMEDWrapperBase -lsuit -lqtx -lSALOMEBasics +LDFLAGSFORBIN=$(LDFLAGS) -lOpUtil -lMEDWrapper -lMEDWrapper_V2_2 -lMEDWrapper_V2_1 -lMEDWrapperBase -lmed_V2_1 -lsuit -lqtx -lSALOMEBasics @CONCLUDE@ diff --git a/src/PIPELINE/SALOME_ExtractGeometry.cxx b/src/PIPELINE/SALOME_ExtractGeometry.cxx index 13655093..5a1762e8 100755 --- a/src/PIPELINE/SALOME_ExtractGeometry.cxx +++ b/src/PIPELINE/SALOME_ExtractGeometry.cxx @@ -41,80 +41,158 @@ using namespace std; #endif +//---------------------------------------------------------------------------- vtkStandardNewMacro(SALOME_ExtractGeometry); -SALOME_ExtractGeometry::SALOME_ExtractGeometry() +//---------------------------------------------------------------------------- +SALOME_ExtractGeometry +::SALOME_ExtractGeometry(): + myStoreMapping(false), + myIsDoneShallowCopy(false) {} -SALOME_ExtractGeometry::~SALOME_ExtractGeometry() +SALOME_ExtractGeometry +::~SALOME_ExtractGeometry() {} -vtkIdType SALOME_ExtractGeometry::GetElemObjId(int theVtkID) + +//---------------------------------------------------------------------------- +unsigned long int +SALOME_ExtractGeometry +::GetMTime() { - if (myElemVTK2ObjIds.empty()) - return theVtkID; + unsigned long int aTime = vtkExtractGeometry::GetMTime(); + return aTime; +} - if (theVtkID < 0 || myElemVTK2ObjIds.size() <= theVtkID) - return -1; -#if defined __GNUC_2__ - return myElemVTK2ObjIds[theVtkID]; -#else - return myElemVTK2ObjIds.at(theVtkID); -#endif +//---------------------------------------------------------------------------- +vtkImplicitBoolean* +SALOME_ExtractGeometry +::GetImplicitBoolean() +{ + return myImplicitBoolean.GetPointer(); } -vtkIdType SALOME_ExtractGeometry::GetNodeObjId(int theVtkID) +void +SALOME_ExtractGeometry +::SetImplicitFunction(vtkImplicitFunction* theImplicitFunction) { - if (myNodeVTK2ObjIds.empty()) - return theVtkID; + myImplicitBoolean = dynamic_cast(theImplicitFunction); + vtkExtractGeometry::SetImplicitFunction(theImplicitFunction); +} - if (theVtkID < 0 || myNodeVTK2ObjIds.size() <= theVtkID) - return -1; -#if defined __GNUC_2__ - return myNodeVTK2ObjIds[theVtkID]; -#else - return myNodeVTK2ObjIds.at(theVtkID); -#endif +//---------------------------------------------------------------------------- +void +SALOME_ExtractGeometry +::SetStoreMapping(bool theStoreMapping) +{ + myStoreMapping = theStoreMapping; + Modified(); +} + +bool +SALOME_ExtractGeometry +::GetStoreMapping() const +{ + return myStoreMapping; } -void SALOME_ExtractGeometry::SetImplicitBoolean(vtkImplicitBoolean* theImplicitBoolean) +//---------------------------------------------------------------------------- +vtkIdType +SALOME_ExtractGeometry +::GetElemVTKId(vtkIdType theID) +{ + if(!myStoreMapping||myIsDoneShallowCopy){ + return theID; + } + vtkIdType iEnd = myElemVTK2ObjIds.size(); + for(vtkIdType i = 0; i < iEnd; i++) + if(myElemVTK2ObjIds[i] == theID) + return i; + + return -1; +} + +vtkIdType +SALOME_ExtractGeometry +::GetNodeVTKId(vtkIdType theID) { - myImplicitBoolean = theImplicitBoolean; - SetImplicitFunction(theImplicitBoolean); + if (!myStoreMapping||myIsDoneShallowCopy){ + return theID; + } + vtkIdType iEnd = myNodeVTK2ObjIds.size(); + for(vtkIdType i = 0; i < iEnd; i++) + if(myNodeVTK2ObjIds[i] == theID) + return i; + + return -1; } -void SALOME_ExtractGeometry::SetStoreMapping(bool theStoreMapping) +//---------------------------------------------------------------------------- +vtkIdType +SALOME_ExtractGeometry +::GetElemObjId(int theVtkID) { - myStoreMapping = theStoreMapping; - Modified(); + if (!myStoreMapping||myIsDoneShallowCopy){ + return theVtkID; + } + // + if (theVtkIDImplicitFunction; + + if(!myIsDoneShallowCopy && myImplicitBoolean.GetPointer()){ if(vtkImplicitFunctionCollection* aFunction = myImplicitBoolean->GetFunction()){ - if(aFunction->GetNumberOfItems() == 0){ - myElemVTK2ObjIds.clear(); - myNodeVTK2ObjIds.clear(); - - vtkDebugMacro(<< "Extracting geometry - ShallowCopy"); - GetOutput()->ShallowCopy(GetInput()); - Modified(); - return; - } + myIsDoneShallowCopy = aFunction->GetNumberOfItems() == 0; } } + + if(myIsDoneShallowCopy){ + GetOutput()->ShallowCopy(GetInput()); + Modified(); + return; + } + Execute2(); } -void SALOME_ExtractGeometry::Execute2() +void +SALOME_ExtractGeometry +::Execute2() { vtkIdType ptId, numPts, numCells, i, cellId, newCellId, newId, *pointMap; vtkIdList *cellPts; @@ -134,8 +212,6 @@ void SALOME_ExtractGeometry::Execute2() numCells = input->GetNumberOfCells(); numPts = input->GetNumberOfPoints(); - vtkDebugMacro(<< "Extracting geometry"); - if ( ! this->ImplicitFunction ) { vtkErrorMacro(<<"No implicit function specified"); @@ -171,9 +247,7 @@ void SALOME_ExtractGeometry::Execute2() vtkFloatArray *newScalars = NULL; if(myStoreMapping){ - myElemVTK2ObjIds.clear(); myElemVTK2ObjIds.reserve(numCells); - myNodeVTK2ObjIds.clear(); myNodeVTK2ObjIds.reserve(numPts); } @@ -186,7 +260,8 @@ void SALOME_ExtractGeometry::Execute2() { newId = newPts->InsertNextPoint(x); pointMap[ptId] = newId; - myNodeVTK2ObjIds.push_back(ptId); + if(myStoreMapping) + myNodeVTK2ObjIds.push_back(ptId); outputPD->CopyData(pd,ptId,newId); } } @@ -209,7 +284,8 @@ void SALOME_ExtractGeometry::Execute2() { newId = newPts->InsertNextPoint(x); pointMap[ptId] = newId; - myNodeVTK2ObjIds.push_back(ptId); + if(myStoreMapping) + myNodeVTK2ObjIds.push_back(ptId); outputPD->CopyData(pd,ptId,newId); } } @@ -262,7 +338,8 @@ void SALOME_ExtractGeometry::Execute2() x = input->GetPoint(ptId); newId = newPts->InsertNextPoint(x); pointMap[ptId] = newId; - myNodeVTK2ObjIds.push_back(ptId); + if(myStoreMapping) + myNodeVTK2ObjIds.push_back(ptId); outputPD->CopyData(pd,ptId,newId); } newCellPts->InsertId(i,pointMap[ptId]); @@ -273,7 +350,8 @@ void SALOME_ExtractGeometry::Execute2() if ( npts >= numCellPts || (this->ExtractBoundaryCells && npts > 0) ) { newCellId = output->InsertNextCell(cell->GetCellType(),newCellPts); - myElemVTK2ObjIds.push_back(cellId); + if(myStoreMapping) + myElemVTK2ObjIds.push_back(cellId); outputCD->CopyData(cd,cellId,newCellId); } }//for all cells diff --git a/src/PIPELINE/SALOME_ExtractGeometry.h b/src/PIPELINE/SALOME_ExtractGeometry.h index 74c1ec30..b225434f 100755 --- a/src/PIPELINE/SALOME_ExtractGeometry.h +++ b/src/PIPELINE/SALOME_ExtractGeometry.h @@ -22,11 +22,10 @@ #include #include -#include #include -//class vtkImplicitBoolean; +class vtkImplicitBoolean; class SALOME_ExtractGeometry : public vtkExtractGeometry { @@ -35,18 +34,37 @@ public: static SALOME_ExtractGeometry *New(); - void SetImplicitBoolean(vtkImplicitBoolean* theImplicitBoolean); - vtkImplicitBoolean* GetImplicitBoolean() const { - return myImplicitBoolean.GetPointer(); - } + virtual + void + SetImplicitFunction(vtkImplicitFunction* theImplicitFunction); - void SetStoreMapping(bool theStoreMapping); - bool GetStoreMapping() const { - return myStoreMapping; - } + virtual + unsigned long int + GetMTime(); - virtual vtkIdType GetNodeObjId(int theID); - virtual vtkIdType GetElemObjId(int theID); + vtkImplicitBoolean* + GetImplicitBoolean(); + + bool + GetStoreMapping() const; + void + SetStoreMapping(bool theStoreMapping); + + virtual + vtkIdType + GetNodeObjId(vtkIdType theID); + + virtual + vtkIdType + GetElemObjId(vtkIdType theID); + + virtual + vtkIdType + GetNodeVTKId(vtkIdType theID); + + virtual + vtkIdType + GetElemVTKId(vtkIdType theID); protected: SALOME_ExtractGeometry(); @@ -57,6 +75,7 @@ protected: private: bool myStoreMapping; + bool myIsDoneShallowCopy; typedef std::vector TVectorId; TVectorId myElemVTK2ObjIds; TVectorId myNodeVTK2ObjIds; diff --git a/src/PIPELINE/VISUPipeLine.cxx b/src/PIPELINE/VISUPipeLine.cxx index e1f35eaa..d1ac8fe3 100644 --- a/src/PIPELINE/VISUPipeLine.cxx +++ b/src/PIPELINE/VISUPipeLine.cxx @@ -33,15 +33,17 @@ #include "VISU_DeformedShapePL.hxx" #include "VISU_VectorsPL.hxx" #include "VISU_StreamLinesPL.hxx" +#include "VISU_GaussPointsPL.hxx" #include "VISU_Plot3DPL.hxx" -typedef VISU_Plot3DPL TPresent; +typedef VISU_GaussPointsPL TPresent; #include #include #include #include +#include #include #include #include @@ -64,6 +66,9 @@ int main(int argc, char** argv){ vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New(); iren->SetRenderWindow(renWin); VISU_Convertor* aConvertor = CreateConvertor(argv[1]); + aConvertor->BuildEntities(); + aConvertor->BuildFields(); + aConvertor->BuildMinMax(); const VISU::TMeshMap& aMeshMap = aConvertor->GetMeshMap(); VISU::TMeshMap::const_iterator aMeshMapIter = aMeshMap.begin(); if(aMeshMapIter == aMeshMap.end()) return 0; @@ -74,7 +79,10 @@ int main(int argc, char** argv){ if(isOnlyMesh){ const VISU::TEntity& anEntity = VISU::CELL_ENTITY; aMeshOnEntityMapIter = aMeshOnEntityMap.find(anEntity); - vtkUnstructuredGrid* aDataSet = aConvertor->GetMeshOnEntity(aMeshName,anEntity); + + VISU::PIDMapper anIDMapper = + aConvertor->GetMeshOnEntity(aMeshName,anEntity); + VISU::TVTKOutput* aDataSet = anIDMapper->GetVTKOutput(); VISU_MeshPL* aPresent = VISU_MeshPL::New(); aPresent->SetInput(aDataSet); @@ -100,23 +108,43 @@ int main(int argc, char** argv){ VISU::TFieldMap::const_iterator aFieldMapIter = aFieldMap.begin(); for(; aFieldMapIter != aFieldMap.end(); aFieldMapIter++){ const VISU::PField aField = aFieldMapIter->second; - if(aField->myNbComp == 1) continue; + /* + if(aField->myNbComp == 1) + continue; + */ const string& aFieldName = aFieldMapIter->first; const VISU::TValField& aValField = aField->myValField; VISU::TValField::const_iterator aValFieldIter = aValField.begin(); if(aValFieldIter == aValField.end()) return 0; int aTimeStamp = aValFieldIter->first; - vtkUnstructuredGrid* aDataSet = aConvertor->GetTimeStampOnMesh(aMeshName,anEntity,aFieldName,aTimeStamp); TPresent* aPresent = TPresent::New(); - aPresent->SetInput(aDataSet); + VISU::PIDMapper anIDMapper; + if(anEntity != VISU::NODE_ENTITY){ + VISU::PGaussPtsIDMapper aGaussPtsIDMapper = aConvertor->GetTimeStampOnGaussPts(aMeshName,anEntity,aFieldName,aTimeStamp); + aPresent->SetGaussPtsIDMapper(aGaussPtsIDMapper); + }else{ + continue; + VISU::PIDMapper anIDMapper = aConvertor->GetTimeStampOnMesh(aMeshName,anEntity,aFieldName,aTimeStamp); + aPresent->SetIDMapper(anIDMapper); + } + aPresent->Build(); aPresent->Init(); - aPresent->SetSourceRange(); - //aPresent->SetNumberOfContours(50); - //aPresent->SetNbParts(1); - //aPresent->SetOrientation(VISU_CutPlanesPL::XY,0.0,0.0); - //aPresent->SetScaling(VTK_SCALE_LOG10); + + char aMainTexture[80]; + strcpy( aMainTexture, getenv( "VISU_ROOT_DIR" ) ); + strcat( aMainTexture, "/share/salome/resources/sprite_texture.vti" ); + //cout << aMainTexture << endl; + + char anAlphaTexture[80]; + strcpy( anAlphaTexture, getenv( "VISU_ROOT_DIR" ) ); + strcat( anAlphaTexture, "/share/salome/resources/sprite_alpha.vti" ); + //cout << anAlphaTexture << endl; + + vtkSmartPointer aTextureValue = VISU_GaussPointsPL::MakeTexture( aMainTexture, anAlphaTexture ); + aPresent->SetImageData( aTextureValue.GetPointer() ); + aPresent->Update(); vtkActor* anActor = vtkActor::New(); @@ -125,8 +153,6 @@ int main(int argc, char** argv){ VISU_ScalarBarActor * aScalarBar = VISU_ScalarBarActor::New(); aScalarBar->SetLookupTable(aPresent->GetBarTable()); - aPresent->Build(); - ren->AddActor(anActor); ren->AddActor2D(aScalarBar); diff --git a/src/PIPELINE/VISU_CutLinesPL.cxx b/src/PIPELINE/VISU_CutLinesPL.cxx index eb7b71d2..b518dfad 100644 --- a/src/PIPELINE/VISU_CutLinesPL.cxx +++ b/src/PIPELINE/VISU_CutLinesPL.cxx @@ -37,7 +37,6 @@ vtkStandardNewMacro(VISU_CutLinesPL); VISU_CutLinesPL::VISU_CutLinesPL(){} void VISU_CutLinesPL::ShallowCopy(VISU_PipeLine *thePipeLine){ - VISU_CutPlanesPL::ShallowCopy(thePipeLine); if(VISU_CutLinesPL *aPipeLine = dynamic_cast(thePipeLine)){ SetOrientation(aPipeLine->GetPlaneOrientation(1), aPipeLine->GetRotateX(1),aPipeLine->GetRotateY(1),1); @@ -45,6 +44,7 @@ void VISU_CutLinesPL::ShallowCopy(VISU_PipeLine *thePipeLine){ SetDefault(); if (!aPipeLine->IsDefault()) SetPosition(aPipeLine->GetPosition()); } + VISU_CutPlanesPL::ShallowCopy(thePipeLine); } void VISU_CutLinesPL::Init(){ diff --git a/src/PIPELINE/VISU_CutPlanesPL.cxx b/src/PIPELINE/VISU_CutPlanesPL.cxx index 32fb5612..63dd3e5a 100644 --- a/src/PIPELINE/VISU_CutPlanesPL.cxx +++ b/src/PIPELINE/VISU_CutPlanesPL.cxx @@ -49,7 +49,6 @@ VISU_CutPlanesPL::~VISU_CutPlanesPL(){ } void VISU_CutPlanesPL::ShallowCopy(VISU_PipeLine *thePipeLine){ - VISU_ScalarMapPL::ShallowCopy(thePipeLine); if(VISU_CutPlanesPL *aPipeLine = dynamic_cast(thePipeLine)){ SetOrientation(aPipeLine->GetPlaneOrientation(), aPipeLine->GetRotateX(),aPipeLine->GetRotateY()); @@ -58,6 +57,7 @@ void VISU_CutPlanesPL::ShallowCopy(VISU_PipeLine *thePipeLine){ for (int i = 0, iend = GetNbParts(); i < iend; i++) if(!aPipeLine->IsPartDefault(i)) SetPartPosition(i, aPipeLine->GetPartPosition(i)); } + VISU_ScalarMapPL::ShallowCopy(thePipeLine); } void VISU_CutPlanesPL::Init(){ diff --git a/src/PIPELINE/VISU_DeformedShapePL.cxx b/src/PIPELINE/VISU_DeformedShapePL.cxx index c276548d..0b8e3462 100644 --- a/src/PIPELINE/VISU_DeformedShapePL.cxx +++ b/src/PIPELINE/VISU_DeformedShapePL.cxx @@ -47,10 +47,10 @@ VISU_DeformedShapePL::~VISU_DeformedShapePL(){ } void VISU_DeformedShapePL::ShallowCopy(VISU_PipeLine *thePipeLine){ - VISU_ScalarMapPL::ShallowCopy(thePipeLine); if(VISU_DeformedShapePL *aPipeLine = dynamic_cast(thePipeLine)){ SetScale(aPipeLine->GetScale()); } + VISU_ScalarMapPL::ShallowCopy(thePipeLine); } float VISU_DeformedShapePL::GetScaleFactor(vtkDataSet* theDataSet){ @@ -74,20 +74,27 @@ float VISU_DeformedShapePL::GetScaleFactor(vtkDataSet* theDataSet){ void VISU_DeformedShapePL::SetScale(float theScale) { - if(myScaleFactor == theScale) return; + myWarpVector->SetScaleFactor(theScale); myScaleFactor = theScale; - myWarpVector->SetScaleFactor(myScaleFactor); Modified(); } float VISU_DeformedShapePL::GetScale() { - return myWarpVector->GetScaleFactor(); + return myScaleFactor; } void VISU_DeformedShapePL::Init(){ VISU_ScalarMapPL::Init(); float aScalarRange[2]; GetSourceRange(aScalarRange); - SetScale(GetScaleFactor(GetInput2())/aScalarRange[1]); + + vtkDataSet* aDataSet = GetInput2(); + float aScaleFactor = VISU_DeformedShapePL::GetScaleFactor( aDataSet ); + + static double EPS = 1.0 / VTK_LARGE_FLOAT; + if(fabs(aScalarRange[1]) > EPS) + SetScale(aScaleFactor / aScalarRange[1]); + else + SetScale(0.0); } VISU_ScalarMapPL::THook* VISU_DeformedShapePL::DoHook(){ diff --git a/src/PIPELINE/VISU_Extractor.cxx b/src/PIPELINE/VISU_Extractor.cxx index f4bcfabb..b6423a39 100644 --- a/src/PIPELINE/VISU_Extractor.cxx +++ b/src/PIPELINE/VISU_Extractor.cxx @@ -33,53 +33,64 @@ #include #include #include +#include using namespace std; vtkStandardNewMacro(VISU_Extractor); -VISU_Extractor::VISU_Extractor(){ - myScalarMode = 0; +VISU_Extractor::VISU_Extractor() +{ + myScalarMode = 1; } -VISU_Extractor::~VISU_Extractor(){ -} +VISU_Extractor::~VISU_Extractor() +{} -void VISU_Extractor::SetScalarMode(int theScalarMode){ +void VISU_Extractor::SetScalarMode(int theScalarMode) +{ if(myScalarMode != theScalarMode){ myScalarMode = theScalarMode; Modified(); } } - template void -execute(int theNbComp, int theScalarMode, TypeData* theInputData, TypeData* theOutputData){ - vtkDataArray *inVectors = theInputData->GetVectors(); - if ( !inVectors || theNbComp < 1 ) +execute(int theNbElems, + int theScalarMode, + TypeData* theInputData, + TypeData* theOutputData) +{ + if(theNbElems < 1 ) return; - vtkFloatArray *newScalars = vtkFloatArray::New(); - ostringstream aName; - aName<GetName(); aName<<", "; aName<SetName(aName.str().c_str()); - newScalars->SetNumberOfComponents(1); - newScalars->SetNumberOfTuples(theNbComp); - for (int ptId = 0; ptId < theNbComp; ptId++) { - float v[3], s; - inVectors->GetTuple(ptId,v); - if ( theScalarMode < 1 || theScalarMode > 3) - s = sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); - else - s = v[theScalarMode - 1]; - newScalars->SetTuple1(ptId, s); + vtkDataArray* aFieldArray = theInputData->GetArray("VISU_FIELD"); + if(vtkFloatArray *aFloatArray = dynamic_cast(aFieldArray)){ + int aNbComp = aFloatArray->GetNumberOfComponents(); + std::vector anArray(aNbComp < 3? 3: aNbComp); + // + vtkFloatArray *aScalars = vtkFloatArray::New(); + aScalars->SetNumberOfTuples(theNbElems); + aScalars->SetNumberOfComponents(1); + // + if(!theScalarMode){ + for(int anId = 0; anId < theNbElems; anId++){ + aFloatArray->GetTuple(anId,&anArray[0]); + float aVector[3] = {anArray[0], anArray[1], anArray[2]}; + float aScalar = sqrt(aVector[0]*aVector[0] + aVector[1]*aVector[1] + aVector[2]*aVector[2]); + aScalars->SetTuple1(anId,aScalar); + } + }else{ + for(int anId = 0; anId < theNbElems; anId++){ + aFloatArray->GetTuple(anId,&anArray[0]); + aScalars->SetTuple1(anId,anArray[theScalarMode - 1]); + } + } + theOutputData->SetScalars(aScalars); + aScalars->Delete(); } - theOutputData->SetScalars(newScalars); - //theOutputData->SetActiveScalars(newScalars->GetName()); - newScalars->Delete(); } - void VISU_Extractor::Execute(){ vtkDataSet *input = this->GetInput(), *output = this->GetOutput(); output->CopyStructure(input); @@ -87,21 +98,23 @@ void VISU_Extractor::Execute(){ output->GetCellData()->CopyAllOff(); if(input->GetPointData()->GetNumberOfArrays()){ output->GetPointData()->CopyVectorsOn(); - int nbComp = input->GetNumberOfPoints(); + int aNbElems = input->GetNumberOfPoints(); vtkPointData *inData = input->GetPointData(), *outData = output->GetPointData(); if(inData->GetAttribute(vtkDataSetAttributes::VECTORS)) - execute(nbComp,myScalarMode,inData,outData); + execute(aNbElems,myScalarMode,inData,outData); else output->GetPointData()->CopyScalarsOn(); outData->PassData(inData); + outData->AddArray(inData->GetArray("VISU_FIELD")); }else{ output->GetCellData()->CopyVectorsOn(); - int nbComp = input->GetNumberOfCells(); + int aNbElems = input->GetNumberOfCells(); vtkCellData *inData = input->GetCellData(), *outData = output->GetCellData(); if(inData->GetAttribute(vtkDataSetAttributes::VECTORS)) - execute(nbComp,myScalarMode,inData,outData); + execute(aNbElems,myScalarMode,inData,outData); else output->GetCellData()->CopyScalarsOn(); outData->PassData(inData); + outData->AddArray(inData->GetArray("VISU_FIELD")); } } diff --git a/src/PIPELINE/VISU_FieldTransform.cxx b/src/PIPELINE/VISU_FieldTransform.cxx index 5fd70742..195cc657 100644 --- a/src/PIPELINE/VISU_FieldTransform.cxx +++ b/src/PIPELINE/VISU_FieldTransform.cxx @@ -15,67 +15,124 @@ #include #include +static float Tolerance = 1.0 / VTK_LARGE_FLOAT; + using namespace std; vtkStandardNewMacro(VISU_FieldTransform); -double VISU_FieldTransform::Ident(double theArg){ +double +VISU_FieldTransform +::Ident(double theArg) +{ return theArg; } -double VISU_FieldTransform::Log10(double theArg){ - if(theArg <= 0.0) return -VTK_LARGE_FLOAT; + +double +VISU_FieldTransform +::Log10(double theArg) +{ + if(theArg <= 0.0) + return -VTK_LARGE_FLOAT; + return log10(theArg); } -VISU_FieldTransform::VISU_FieldTransform(){ +VISU_FieldTransform +::VISU_FieldTransform() +{ myFunction = &Ident; myTransform = NULL; + + myScalarRange[0] = VTK_LARGE_FLOAT; + myScalarRange[1] = -VTK_LARGE_FLOAT; } -VISU_FieldTransform::~VISU_FieldTransform() { +VISU_FieldTransform +::~VISU_FieldTransform() +{ SetSpaceTransform(NULL); } -void VISU_FieldTransform::Update(){ - if(myTransform && myTransform->GetMTime() > vtkSource::GetMTime()) - Modified(); +void +VISU_FieldTransform +::Update() +{ vtkSource::Update(); } -unsigned long VISU_FieldTransform::GetMTime(){ - if(myTransform && myTransform->GetMTime() > vtkSource::GetMTime()) - return myTransform->GetMTime(); - return vtkSource::GetMTime(); +unsigned long +VISU_FieldTransform +::GetMTime() +{ + unsigned long aTime = Superclass::GetMTime(); + if(myTransform) + aTime = max(aTime,myTransform->GetMTime()); + + return aTime; } -void VISU_FieldTransform::SetScalarTransform(TTransformFun theFunction) { +void +VISU_FieldTransform +::SetScalarTransform(TTransformFun theFunction) +{ + if(myFunction == theFunction) + return; + + if(theFunction == NULL) + theFunction = &Ident; + myFunction = theFunction; - if(myFunction == NULL) myFunction = &Ident; + Modified(); } void VISU_FieldTransform::SetSpaceTransform(VTKViewer_Transform* theTransform){ - if(myTransform != theTransform){ - if (myTransform != NULL) myTransform->UnRegister(this); - myTransform = theTransform; - if (myTransform != NULL) myTransform->Register(this); - this->Modified(); - } + if(myTransform == theTransform) + return; + + if(myTransform != NULL) + myTransform->UnRegister(this); + + myTransform = theTransform; + + if(theTransform != NULL) + theTransform->Register(this); + + Modified(); } -void VISU_FieldTransform::SetScalarRange(float theScalarRange[2]) { +void +VISU_FieldTransform +::SetScalarRange(float theScalarRange[2]) +{ + float aDelta = + fabs(myScalarRange[0] - theScalarRange[0]) + + fabs(myScalarRange[1] - theScalarRange[1]); + if(aDelta < Tolerance) + return; + myScalarRange[0] = theScalarRange[0]; myScalarRange[1] = theScalarRange[1]; + Modified(); } -void VISU_FieldTransform::SetScalarMin(float theValue){ + +void +VISU_FieldTransform +::SetScalarMin(float theValue) +{ float aScalarRange[2] = {theValue, GetScalarRange()[1]}; SetScalarRange(aScalarRange); } -void VISU_FieldTransform::SetScalarMax(float theValue){ + +void +VISU_FieldTransform +::SetScalarMax(float theValue) +{ float aScalarRange[2] = {GetScalarRange()[0], theValue}; SetScalarRange(aScalarRange); } @@ -144,7 +201,10 @@ ExecScalars(VISU_FieldTransform::TTransformFun theFunction, float theScalarRange newScalars->Delete(); } -void VISU_FieldTransform::Execute(){ +void +VISU_FieldTransform +::Execute() +{ vtkDataSet *input = this->GetInput(), *output = this->GetOutput(); output->CopyStructure(input); if(myFunction != &Ident || (myTransform && !myTransform->IsIdentity())){ diff --git a/src/PIPELINE/VISU_GaussPointsPL.cxx b/src/PIPELINE/VISU_GaussPointsPL.cxx new file mode 100644 index 00000000..8d1d0dff --- /dev/null +++ b/src/PIPELINE/VISU_GaussPointsPL.cxx @@ -0,0 +1,699 @@ +// VISU OBJECT : interactive object for VISU entities implementation +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File: VISU_GaussPoints.cxx +// Author: Alexey PETROV +// Module : VISU + + +#include "VISU_GaussPointsPL.hxx" +#include "VISU_DeformedShapePL.hxx" +#include "VISU_PipeLineUtils.hxx" +#include "SALOME_ExtractGeometry.h" +#include "VISU_DeformedShapePL.hxx" +#include "VISU_OpenGLPointSpriteMapper.hxx" +#include "VTKViewer_PassThroughFilter.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//---------------------------------------------------------------------------- +vtkStandardNewMacro(VISU_GaussPointsPL); + +//---------------------------------------------------------------------------- +VISU_GaussPointsPL +::VISU_GaussPointsPL(): + myIsDeformed(false), + myScaleFactor(0.0), + myResolution( 8 ), + myMagnificationIncrement(2) +{ + myExtractGeometry->SetExtractInside(0); + + myPSMapper = VISU_OpenGLPointSpriteMapper::New(); + myPSMapper->SetColorModeToMapScalars(); + myPSMapper->ScalarVisibilityOn(); + + myGeomFilter = vtkGeometryFilter::New(); + + myWarpVector = vtkWarpVector::New(); + myCellDataToPointData = vtkCellDataToPointData::New(); + myCellDataToPointData->SetPassCellData(true); + + myGlyph = vtkGlyph3D::New(); + myGlyph->SetScaleModeToScaleByScalar(); + myGlyph->SetColorModeToColorByScalar(); + myGlyph->ClampingOn(); + + myExtractor->SetInput( myExtractGeometry->GetOutput() ); + myFieldTransform->SetInput( myExtractor->GetOutput() ); + + myCellDataToPointData->SetInput( myFieldTransform->GetUnstructuredGridOutput() ); + + mySphereSource = vtkSphereSource::New(); + myGlyph->SetSource( mySphereSource->GetOutput() ); + + for(int i = 0; i < 2; i++) + myPassFilter.push_back(VTKViewer_PassThroughFilter::New()); +} + + +//---------------------------------------------------------------------------- +VISU_GaussPointsPL +::~VISU_GaussPointsPL() +{ + if (this->myPSMapper) + { + this->myPSMapper->Delete(); + this->myPSMapper = NULL; + } + if (this->myGeomFilter) + { + this->myGeomFilter->Delete(); + this->myGeomFilter = NULL; + } + + myWarpVector->Delete(); + + myCellDataToPointData->Delete(); + + myGlyph->Delete(); + + mySphereSource->Delete(); + + for(int i = 0; i < 2; i++) + myPassFilter[i]->Delete(); +} + + +//---------------------------------------------------------------------------- +void +CopyGlyph( vtkGlyph3D* source, vtkGlyph3D* dest ) +{ + dest->SetRange( source->GetRange() ); + dest->SetScaling( source->GetScaling() ); + dest->SetClamping( source->GetClamping() ); + dest->SetScaleMode( source->GetScaleMode() ); + dest->SetColorMode( source->GetColorMode() ); + dest->SetScaleFactor( source->GetScaleFactor() ); +} + + +//---------------------------------------------------------------------------- +void +VISU_GaussPointsPL +::ShallowCopy(VISU_PipeLine *thePipeLine) +{ + if(VISU_GaussPointsPL *aPipeLine = dynamic_cast(thePipeLine)){ + // To restore mapper input from pipeline + vtkPolyData* aDatsSet = myPSMapper->GetInput(); + myPSMapper->ShallowCopy(aPipeLine->GetPSMapper()); + myPSMapper->SetInput(aDatsSet); + + SetPrimitiveType(aPipeLine->GetPrimitiveType()); + SetBicolor(aPipeLine->GetBicolor()); + SetClamp(aPipeLine->GetClamp()); + SetSize(aPipeLine->GetSize()); + SetMinSize(aPipeLine->GetMinSize()); + SetMaxSize(aPipeLine->GetMaxSize()); + SetMagnification(aPipeLine->GetMagnification()); + SetMagnificationIncrement(aPipeLine->GetMagnificationIncrement()); + SetAlphaThreshold(aPipeLine->GetAlphaThreshold()); + SetResolution(aPipeLine->GetResolution()); + + SetIsDeformed( aPipeLine->GetIsDeformed() ); + SetScale( aPipeLine->GetScale() ); + + mySphereSource->SetRadius( aPipeLine->mySphereSource->GetRadius() ); + CopyGlyph( aPipeLine->myGlyph, this->myGlyph ); + } + Superclass::ShallowCopy(thePipeLine); +} + + +//---------------------------------------------------------------------------- +VISU_PipeLine::TMapper* +VISU_GaussPointsPL +::GetMapper() +{ + return GetPSMapper(); +} + +VISU_OpenGLPointSpriteMapper* +VISU_GaussPointsPL +::GetPSMapper() +{ + if(GetInput()){ + if(!myPSMapper->GetInput()){ + GetInput2()->Update(); + Build(); + Init(); + } + myPSMapper->Update(); + } + return myPSMapper; +} + +vtkDataSet* +VISU_GaussPointsPL +::GetPickableDataSet() +{ + return myGeomFilter->GetOutput(); +} + +//---------------------------------------------------------------------------- +void +VISU_GaussPointsPL +::Init() +{ + Superclass::Init(); + + vtkDataSet* aDataSet = GetParentMesh(); + float aScaleFactor = VISU_DeformedShapePL::GetScaleFactor( aDataSet ); + + float* aScalarRange = GetScalarRange(); + static double EPS = 1.0 / VTK_LARGE_FLOAT; + if(fabs(aScalarRange[1]) > EPS) + SetScale( aScaleFactor / aScalarRange[1] ); + else + SetScale(0.0); + + // Deformed Shape + myPassFilter[0]->SetInput(myCellDataToPointData->GetUnstructuredGridOutput()); + + myGeomFilter->SetInput( myPassFilter[0]->GetOutput() ); + + // Geometrical Sphere + myPassFilter[1]->SetInput(myGeomFilter->GetOutput()); + + myPSMapper->SetInput( myPassFilter[1]->GetPolyDataOutput() ); +} + +//---------------------------------------------------------------------------- +void +VISU_GaussPointsPL +::Build() +{ +} + +//---------------------------------------------------------------------------- +void +VISU_GaussPointsPL +::Update() +{ + //cout << "VISU_GaussPointsPL::Update()" << endl; + float* aScalarRange = GetScalarRange(); + mySourceScalarRange[0] = aScalarRange[0]; + mySourceScalarRange[1] = aScalarRange[1]; + myDeltaScalarRange = aScalarRange[1] - aScalarRange[0]; + + SetAverageCellSize( VISU_DeformedShapePL::GetScaleFactor( GetParentMesh() ) ); + + vtkMapper* aMapper = GetMapper(); + vtkDataSet* aDataSet = aMapper->GetInput(); + vtkCellData* aCellData = aDataSet->GetCellData(); + myScalarArray = aCellData->GetScalars(); + + myPSMapper->SetLookupTable( myMapperTable ); + myPSMapper->SetScalarRange( aScalarRange ); + + this->UpdateGlyph(); + + VISU_ScalarMapPL::Update(); +} + +//---------------------------------------------------------------------------- +void +VISU_GaussPointsPL +::UpdateGlyph() +{ + //cout << "VISU_GaussPointsPL::UpdateGlyph()" << endl; + + float* aScalarRange = GetScalarRange(); + + if( myPSMapper->GetPointSpriteMode() == 0 ) // Results + { + //cout << "Results" << endl; + myGlyph->ClampingOn(); + myGlyph->SetScaleModeToScaleByScalar(); + myGlyph->SetColorModeToColorByScalar(); + + float aRange = 0; + float aMinSize = GetMinSize(); + float aMaxSize = GetMaxSize(); + if( fabs( aMaxSize - aMinSize ) > 0.0001 ) + aRange = ( aScalarRange[1] - aScalarRange[0] ) / ( aMaxSize - aMinSize ); + float aMinRange = aScalarRange[0] - aMinSize * aRange; + float aMaxRange = aMinRange + aRange; + + myGlyph->SetRange( aMinRange, aMaxRange ); + myGlyph->SetScaleFactor( 1.0 ); + } + else if( myPSMapper->GetPointSpriteMode() == 1 ) // Geometry + { + //cout << "Geometry" << endl; + myGlyph->ClampingOff(); + myGlyph->SetScaleModeToDataScalingOff(); + myGlyph->SetColorModeToColorByScale(); + + myGlyph->SetScaleFactor( GetSize() ); + } + else if( myPSMapper->GetPointSpriteMode() == 2 ) // Outside + { + //cout << "Outside" << endl; + myGlyph->ClampingOff(); + myGlyph->SetScaleModeToDataScalingOff(); + myGlyph->SetColorModeToColorByScalar(); + + myGlyph->SetScaleFactor( GetSize() ); + } + + mySphereSource->SetRadius( GetMagnification() * GetAverageCellSize() / 2. ); +} + +//---------------------------------------------------------------------------- +VISU::TGaussPointID +VISU_GaussPointsPL +::GetObjID(vtkIdType theID) const +{ + return myGaussPtsIDMapper->GetObjID(theID); +} + +float* +VISU_GaussPointsPL +::GetNodeCoord(int theObjID) +{ + vtkIdType anID = GetNodeVTKID(theObjID); + vtkDataSet* aDataSet = myGeomFilter->GetInput(); + return aDataSet->GetPoint(anID); +} + +void +VISU_GaussPointsPL +::SetGaussPtsIDMapper(const VISU::PGaussPtsIDMapper& theGaussPtsIDMapper) +{ + myGaussPtsIDMapper = theGaussPtsIDMapper; + SetIDMapper(myGaussPtsIDMapper); +} + +const VISU::PGaussPtsIDMapper& +VISU_GaussPointsPL +::GetGaussPtsIDMapper() const +{ + return myGaussPtsIDMapper; +} + +VISU::TVTKOutput* +VISU_GaussPointsPL +::GetParentMesh() const +{ + VISU::TNamedIDMapper* aNamedIDMapper = myGaussPtsIDMapper->GetParent(); + return aNamedIDMapper->GetVTKOutput(); +} + +//---------------------------------------------------------------------------- +void +VISU_GaussPointsPL +::SetIsDeformed( bool theIsDeformed ) +{ + if( theIsDeformed ) + { + myWarpVector->SetInput( myCellDataToPointData->GetUnstructuredGridOutput() ); + myPassFilter[0]->SetInput(myWarpVector->GetOutput()); + } + else + myPassFilter[0]->SetInput(myCellDataToPointData->GetUnstructuredGridOutput()); + + myIsDeformed = theIsDeformed; + + Modified(); +} + +//---------------------------------------------------------------------------- +bool +VISU_GaussPointsPL +::GetIsDeformed() const +{ + return myIsDeformed; +} + +//---------------------------------------------------------------------------- +void +VISU_GaussPointsPL +::SetBicolor(bool theBicolor) +{ + if(GetBicolor() == theBicolor) + return; + + myMapperTable->SetBicolor( theBicolor ); + myBarTable->SetBicolor( theBicolor ); + + Modified(); +} + +//---------------------------------------------------------------------------- +bool +VISU_GaussPointsPL +::GetBicolor() +{ + return myMapperTable->GetBicolor(); +} + +//---------------------------------------------------------------------------- +void +VISU_GaussPointsPL +::SetIsColored(bool theIsColored) +{ + myPSMapper->SetPointSpriteMode( theIsColored ? 0 : 1 ); // Results / Geometry + Modified(); +} + +//---------------------------------------------------------------------------- +void +VISU_GaussPointsPL +::SetPrimitiveType(int thePrimitiveType) +{ + if( thePrimitiveType == VISU_OpenGLPointSpriteMapper::GeomSphere ) + { + myGlyph->SetInput( myGeomFilter->GetOutput() ); + myPassFilter[1]->SetInput(myGlyph->GetOutput()); + } + else + myPassFilter[1]->SetInput(myGeomFilter->GetOutput()); + + myPSMapper->SetPrimitiveType( thePrimitiveType ); + + Modified(); +} + +//---------------------------------------------------------------------------- +int +VISU_GaussPointsPL +::GetPrimitiveType() +{ + return myPSMapper->GetPrimitiveType(); +} + +//---------------------------------------------------------------------------- +float +VISU_GaussPointsPL +::GetMaximumSupportedSize() +{ + return myPSMapper->GetMaximumSupportedSize(); +} + +//---------------------------------------------------------------------------- +void +VISU_GaussPointsPL +::SetClamp(float theClamp) +{ + myPSMapper->SetPointSpriteClamp( theClamp ); + Modified(); +} + +//---------------------------------------------------------------------------- +float +VISU_GaussPointsPL +::GetClamp() +{ + return myPSMapper->GetPointSpriteClamp(); +} + +//---------------------------------------------------------------------------- +void +VISU_GaussPointsPL +::SetSize(float theSize) +{ + myPSMapper->SetPointSpriteSize( theSize ); + Modified(); +} + +//---------------------------------------------------------------------------- +float +VISU_GaussPointsPL +::GetSize() +{ + return myPSMapper->GetPointSpriteSize(); +} + +//---------------------------------------------------------------------------- +void +VISU_GaussPointsPL +::SetMinSize(float theMinSize) +{ + myPSMapper->SetPointSpriteMinSize( theMinSize ); + Modified(); +} + +//---------------------------------------------------------------------------- +float +VISU_GaussPointsPL +::GetMinSize() +{ + return myPSMapper->GetPointSpriteMinSize(); +} + +//---------------------------------------------------------------------------- +void +VISU_GaussPointsPL +::SetMaxSize(float theMaxSize) +{ + myPSMapper->SetPointSpriteMaxSize( theMaxSize ); + Modified(); +} + +//---------------------------------------------------------------------------- +float +VISU_GaussPointsPL +::GetMaxSize() +{ + return myPSMapper->GetPointSpriteMaxSize(); +} + +//---------------------------------------------------------------------------- +void +VISU_GaussPointsPL +::SetMagnification(float theMagnification) +{ + myPSMapper->SetPointSpriteMagnification( theMagnification ); + Modified(); +} + +//---------------------------------------------------------------------------- +float +VISU_GaussPointsPL +::GetMagnification() +{ + return myPSMapper->GetPointSpriteMagnification(); +} + +//---------------------------------------------------------------------------- +void +VISU_GaussPointsPL +::SetMagnificationIncrement(float theIncrement) +{ + myMagnificationIncrement = theIncrement; +} + +//---------------------------------------------------------------------------- +void +VISU_GaussPointsPL +::SetAlphaThreshold(float theAlphaThreshold) +{ + myPSMapper->SetPointSpriteAlphaThreshold( theAlphaThreshold ); + Modified(); +} + +//---------------------------------------------------------------------------- +float +VISU_GaussPointsPL +::GetAlphaThreshold() +{ + return myPSMapper->GetPointSpriteAlphaThreshold(); +} + +//---------------------------------------------------------------------------- +void +VISU_GaussPointsPL +::SetResolution(int theResolution) +{ + myResolution = theResolution; + mySphereSource->SetThetaResolution( myResolution ); + mySphereSource->SetPhiResolution( myResolution ); +} + +//---------------------------------------------------------------------------- +void +VISU_GaussPointsPL +::ChangeMagnification( bool up ) +{ + float anIncrement = up ? myMagnificationIncrement : 1.0 / myMagnificationIncrement; + SetMagnification( GetMagnification() * anIncrement ); +} + +//---------------------------------------------------------------------------- +float +VISU_GaussPointsPL +::GetPointSize(vtkIdType theID, vtkDataArray* theScalarArray) +{ + float aMaxSize = GetAverageCellSize() * GetMaxSize(); + float aMinSize = GetAverageCellSize() * GetMinSize(); + float aDelta = aMaxSize - aMinSize; + float aVal = theScalarArray->GetTuple1(theID); + + return aMinSize + aDelta*(aVal - mySourceScalarRange[0])/myDeltaScalarRange; +} + +//---------------------------------------------------------------------------- +float +VISU_GaussPointsPL +::GetMaxPointSize() +{ + return GetAverageCellSize() * GetMaxSize(); +} + +//---------------------------------------------------------------------------- +float +VISU_GaussPointsPL +::GetPointSize(vtkIdType theID) +{ + vtkMapper* aMapper = GetMapper(); + vtkDataSet* aDataSet = aMapper->GetInput(); + vtkCellData* aCellData = aDataSet->GetCellData(); + vtkDataArray* aScalarArray = aCellData->GetScalars(); + return GetPointSize(theID,aScalarArray); +} + +//---------------------------------------------------------------------------- +void +VISU_GaussPointsPL +::SetAverageCellSize(float theAverageCellSize) +{ + myPSMapper->SetAverageCellSize( theAverageCellSize ); + Modified(); +} + +//---------------------------------------------------------------------------- +float +VISU_GaussPointsPL +::GetAverageCellSize() +{ + return myPSMapper->GetAverageCellSize(); +} + +//---------------------------------------------------------------------------- +void +VISU_GaussPointsPL +::SetImageData(vtkImageData* theImageData) +{ + myPSMapper->SetImageData( theImageData ); +} + +//---------------------------------------------------------------------------- +vtkSmartPointer +VISU_GaussPointsPL +::MakeTexture( const char* theMainTexture, + const char* theAlphaTexture ) +{ + if( !theMainTexture || !theAlphaTexture ) + return 0; + + vtkXMLImageDataReader* aMainReader = vtkXMLImageDataReader::New(); + vtkXMLImageDataReader* anAlphaReader = vtkXMLImageDataReader::New(); + + aMainReader->SetFileName( theMainTexture ); + anAlphaReader->SetFileName( theAlphaTexture ); + + aMainReader->Update(); + anAlphaReader->Update(); + + vtkImageData* aMainImageData = aMainReader->GetOutput(); + vtkImageData* anAlphaImageData = anAlphaReader->GetOutput(); + + int* aMainImageSize = aMainImageData->GetDimensions(); + int* anAlphaImageSize = anAlphaImageData->GetDimensions(); + if(aMainImageSize[0] != anAlphaImageSize[0] || aMainImageSize[1] != anAlphaImageSize[1]) + return NULL; + + vtkSmartPointer aCompositeImageData = vtkImageData::New(); + aCompositeImageData->Delete(); + + int aNbCompositeComponents = 4; + aCompositeImageData->SetDimensions(aMainImageSize); + aCompositeImageData->SetScalarTypeToUnsignedChar(); + aCompositeImageData->SetNumberOfScalarComponents(aNbCompositeComponents); + aCompositeImageData->AllocateScalars(); + + unsigned char* aMainDataPtr = (unsigned char*)aMainImageData->GetScalarPointer(); + unsigned char* anAlphaDataPtr = (unsigned char*)anAlphaImageData->GetScalarPointer(); + unsigned char *aCompositeDataPtr = (unsigned char * )aCompositeImageData->GetScalarPointer(); + + int aNbMainComponents = aMainImageData->GetNumberOfScalarComponents(); + int aNbAlphaComponents = anAlphaImageData->GetNumberOfScalarComponents(); + int aCompositeSize = aMainImageSize[0] * aMainImageSize[1] * aNbCompositeComponents; + + int aMainId = 0, anAlphaId = 0, aCompositeId = 0; + for(; aCompositeId < aCompositeSize;) + { + aCompositeDataPtr[aCompositeId] = aMainDataPtr[aMainId]; + aCompositeDataPtr[aCompositeId + 1] = aMainDataPtr[aMainId + 1]; + aCompositeDataPtr[aCompositeId + 2] = aMainDataPtr[aMainId + 2]; + aCompositeDataPtr[aCompositeId + 3] = anAlphaDataPtr[anAlphaId]; + + aMainId += aNbMainComponents; + anAlphaId += aNbAlphaComponents; + aCompositeId += aNbCompositeComponents; + } + aMainReader->Delete(); + anAlphaReader->Delete(); + aCompositeImageData->Update(); + + return aCompositeImageData; +} + +void VISU_GaussPointsPL::SetScale( float theScale ) +{ + myWarpVector->SetScaleFactor( theScale ); + myScaleFactor = GetScale(); + Modified(); +} + +float VISU_GaussPointsPL::GetScale() +{ + return myWarpVector->GetScaleFactor(); +} + +void VISU_GaussPointsPL::SetMapScale( float theMapScale ) +{ + VISU_ScalarMapPL::SetMapScale( theMapScale ); + + myWarpVector->SetScaleFactor( myScaleFactor * theMapScale ); + Modified(); +} diff --git a/src/PIPELINE/VISU_GaussPointsPL.hxx b/src/PIPELINE/VISU_GaussPointsPL.hxx new file mode 100644 index 00000000..b342ab56 --- /dev/null +++ b/src/PIPELINE/VISU_GaussPointsPL.hxx @@ -0,0 +1,291 @@ +// VISU OBJECT : interactive object for VISU entities implementation +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File: VISU_GaussPointsPL.hxx +// Author: +// Module : VISU + +#ifndef VISU_GaussPointsPL_HeaderFile +#define VISU_GaussPointsPL_HeaderFile + +#include "VISU_ScalarMapPL.hxx" +#include "VISU_Convertor.hxx" + +#include + +class VTKViewer_PassThroughFilter; +class VISU_OpenGLPointSpriteMapper; + +class vtkGeometryFilter; +class vtkGlyph3D; +class vtkSphereSource; +class vtkDataArray; +class vtkImageData; +class vtkPointSet; + +class vtkCellDataToPointData; +class vtkWarpVector; +class SALOME_Transform; + +//! Pipeline for the Gauss Points presentation. +/*! + * This class uses the special mapper (VISU_OpenGLPointSpriteMapper) + * for rendering the Gauss Points as Point Sprites. + */ +class VISU_GaussPointsPL : public VISU_ScalarMapPL +{ +protected: + VISU_GaussPointsPL(); + + virtual + ~VISU_GaussPointsPL(); + +public: + vtkTypeMacro(VISU_GaussPointsPL,VISU_ScalarMapPL); + + static + VISU_GaussPointsPL* New(); + + virtual + void + ShallowCopy(VISU_PipeLine *thePipeLine); + + //! Get the native mapper. + virtual + TMapper* + GetMapper(); + + //! Get the internal #VISU_OpenGLPointSpriteMapper. + VISU_OpenGLPointSpriteMapper* + GetPSMapper(); + + //! Get an intermediate dataset that can be picked + vtkDataSet* + GetPickableDataSet(); + + //! Redefined method for initialization of the pipeline. + virtual + void + Init(); + + //! Redefined method for building the pipeline. + virtual + void + Build(); + + //! Redefined method for updating the pipeline. + virtual + void + Update(); + + //! Update glyph. + void + UpdateGlyph(); + + virtual + VISU::TGaussPointID + GetObjID(vtkIdType theID) const; + + virtual + float* + GetNodeCoord(vtkIdType theObjID); + + void + SetGaussPtsIDMapper(const VISU::PGaussPtsIDMapper& theGaussPtsIDMapper); + + const VISU::PGaussPtsIDMapper& + GetGaussPtsIDMapper() const; + + VISU::TVTKOutput* + GetParentMesh() const; + + //! Set the Bicolor mode. + /*! + * When the Bicolor parameter is set to true, scalar bars are + * drawing with two colors : red color correspoonds to positive + * scalar values, blue color - to negative values. + */ + void + SetBicolor(bool theBicolor); + + //! Get the Bicolor mode. + bool + GetBicolor(); + + //! Set the Multicolored mode. + /*! + * This parameter is using to switch between Results and Geometry + * modes. Multiple colors are using when the presentation is + * drawing in the Results mode, one color - in the Geometry mode. + */ + void + SetIsColored(bool theIsColored); + + //! Set type of the primitives. + void + SetPrimitiveType(int thePrimitiveType); + + //! Get type of the primitives. + int + GetPrimitiveType(); + + //! Get the maximum Point Sprite size, which is supported by hardware. + float + GetMaximumSupportedSize(); + + //! Redirect the request to VISU_OpenGLPointSpriteMapper::SetPointSpriteClamp. + void + SetClamp(float theClamp); + + //! Redirect the request to VISU_OpenGLPointSpriteMapper.vtkGetMacro(PointSpriteClamp, float). + float + GetClamp(); + + //! Redirect the request to VISU_OpenGLPointSpriteMapper::SetPointSpriteSize. + void + SetSize(float theSize); + + //! Redirect the request to VISU_OpenGLPointSpriteMapper.vtkGetMacro(PointSpriteSize, float). + float + GetSize(); + + //! Redirect the request to VISU_OpenGLPointSpriteMapper::SetPointSpriteMinSize. + void + SetMinSize(float theMinSize); + + //! Redirect the request to VISU_OpenGLPointSpriteMapper.vtkGetMacro(PointSpriteMinSize, float). + float + GetMinSize(); + + //! Redirect the request to VISU_OpenGLPointSpriteMapper::SetPointSpriteMinSize. + void + SetMaxSize(float theMaxSize); + + //! Redirect the request to VISU_OpenGLPointSpriteMapper.vtkGetMacro(PointSpriteMaxSize, float). + float + GetMaxSize(); + + //! Redirect the request to VISU_OpenGLPointSpriteMapper::SetPointSpriteMagnification. + void + SetMagnification(float theMagnification); + + //! Redirect the request to VISU_OpenGLPointSpriteMapper.vtkGetMacro(PointSpriteMagnification, float). + float + GetMagnification(); + + //! Set the increment of changing Magnification parameter. + void + SetMagnificationIncrement(float theIncrement); + + //! Get the increment of changing Magnification parameter. + float + GetMagnificationIncrement() { return myMagnificationIncrement; } + + //! Redirect the request to VISU_OpenGLPointSpriteMapper::SetPointSpriteAlphaThreshold. + void + SetAlphaThreshold(float theAlphaThreshold); + + //! Redirect the request to VISU_OpenGLPointSpriteMapper.vtkGetMacro(PointSpriteAlphaThreshold, float). + float + GetAlphaThreshold(); + + //! Set resolution of the Geometrical Sphere. + void + SetResolution(int theResolution); + + //! Get resolution of the Geometrical Sphere. + int + GetResolution() { return myResolution; } + + //! Method for changing the Magnification parameter. + void + ChangeMagnification( bool up ); + + //! Get the maximum size of Point Sprites in the presentation. + float + GetMaxPointSize(); + + //! Get point size by element's Id. + float + GetPointSize(vtkIdType theID); + + //! Get point size by element's Id using the specified scalar array. + float + GetPointSize(vtkIdType theID, vtkDataArray* theScalarArray); + + //! Redirect the request to VISU_OpenGLPointSpriteMapper.vtkSetMacro(AverageCellSize, float). + void + SetAverageCellSize(float AverageCellSize); + + //! Redirect the request to VISU_OpenGLPointSpriteMapper.vtkGetMacro(AverageCellSize, float). + float + GetAverageCellSize(); + + //! Set image data for the Point Sprite texture. + void + SetImageData(vtkImageData* theImageData); + + //! Make the image data for Point Sprite texture. + /*! + * First parameter - texture for shape. + * Second parameter - texture for alpha mask. + */ + static + vtkSmartPointer + MakeTexture( const char* theMainTexture, + const char* theAlphaTexture ); + +public: + virtual void SetIsDeformed( bool theIsDeformed ); + virtual bool GetIsDeformed() const; + + virtual void SetScale( float theScale ); + virtual float GetScale(); + virtual void SetMapScale( float theMapScale = 1.0 ); + +protected: + bool myIsDeformed; + float myScaleFactor; + vtkWarpVector *myWarpVector; + vtkCellDataToPointData* myCellDataToPointData; + std::vector myPassFilter; + + vtkGlyph3D* myGlyph; + vtkSphereSource* mySphereSource; + int myResolution; + +protected: + VISU_OpenGLPointSpriteMapper* myPSMapper; + VISU::PGaussPtsIDMapper myGaussPtsIDMapper; + + vtkGeometryFilter* myGeomFilter; + + vtkDataArray *myScalarArray; + float mySourceScalarRange[2]; + float myDeltaScalarRange; + + int myPrimitiveType; + float myMagnificationIncrement; +}; + +#endif diff --git a/src/PIPELINE/VISU_ImplicitFunctionWidget.cxx b/src/PIPELINE/VISU_ImplicitFunctionWidget.cxx new file mode 100644 index 00000000..3a3c21a8 --- /dev/null +++ b/src/PIPELINE/VISU_ImplicitFunctionWidget.cxx @@ -0,0 +1,136 @@ +// SALOME VTKViewer : build VTK viewer into Salome desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : VVTK_ImplicitFunctionWidget.cxx +// Author : Peter KURNEV +// Module : SALOME +// $Header$ + +#include "VISU_ImplicitFunctionWidget.hxx" +// +#include +#include +#include +#include +#include +#include +#include +#include +// +vtkStandardNewMacro(VISU_UnScaledActor); + +//==================================================================== +// function: VISU_UnScaledActor +// purpose: +//==================================================================== +VISU_UnScaledActor::VISU_UnScaledActor() +{ + for (int i=0; i<3; ++i){ + myCenter[i]=0.; + } + mySize=24; +} +//==================================================================== +// function: SetCenter +// purpose: +//==================================================================== +void VISU_UnScaledActor::SetCenter(float *pC) +{ + for (int i=0; i<3; ++i){ + myCenter[i]=pC[i]; + } +} +//==================================================================== +// function:GetBounds +// purpose: +//==================================================================== +float* VISU_UnScaledActor::GetBounds() +{ + Superclass::GetBounds(); + // + for (int i=0; i<3; ++i){ + Bounds[2*i]=myCenter[i]; + Bounds[2*i+1]=myCenter[i]; + } + return Bounds; +} +//==================================================================== +// function:Render +// purpose: +//==================================================================== +void VISU_UnScaledActor::Render(vtkRenderer *theRenderer) +{ + if(theRenderer){ + float P[2][3] = {{-1.0, -1.0, 0.0},{+1.0, +1.0, 0.0}}; + theRenderer->ViewToWorld(P[0][0],P[0][1],P[0][2]); + theRenderer->ViewToWorld(P[1][0],P[1][1],P[1][2]); + float aWorldDiag = sqrt((P[1][0]-P[0][0])*(P[1][0]-P[0][0])+ + (P[1][1]-P[0][1])*(P[1][1]-P[0][1])+ + (P[1][2]-P[0][2])*(P[1][2]-P[0][2])); + int* aSize = theRenderer->GetRenderWindow()->GetSize(); + float aWinDiag = sqrt(float(aSize[0]*aSize[0]+aSize[1]*aSize[1])); + vtkDataSet* aDataSet = GetMapper()->GetInput(); + float aLength = aDataSet->GetLength(); + float aPrecision = 1.e-3; + float anOldScale = GetScale()[0]; + float aScale = + mySize*aWorldDiag/aWinDiag/aLength*sqrt(float(aSize[0])/float(aSize[1])); + + SetOrigin(myCenter); + // + if(fabs(aScale - anOldScale)/aScale > aPrecision){ + SetScale(aScale); + } + } + vtkFollower::Render(theRenderer); + +} +//==================================================================== +// function:SetSize +// purpose: +//==================================================================== +void VISU_UnScaledActor::SetSize(int theSize) +{ + mySize = theSize; +} + +//================================================================== +// class: VISU_ImplicitFunctionWidget +// +vtkCxxRevisionMacro(VISU_ImplicitFunctionWidget, "$Revision$"); +//================================================================== +// function: VISU_ImplicitFunctionWidget +// purpose : +//================================================================== +VISU_ImplicitFunctionWidget::VISU_ImplicitFunctionWidget() +: + vtk3DWidget() +{ +} +//================================================================== +// function: ~ +// purpose : +//================================================================== +VISU_ImplicitFunctionWidget::~VISU_ImplicitFunctionWidget() +{ +} diff --git a/src/PIPELINE/VISU_ImplicitFunctionWidget.hxx b/src/PIPELINE/VISU_ImplicitFunctionWidget.hxx new file mode 100644 index 00000000..8f46e43b --- /dev/null +++ b/src/PIPELINE/VISU_ImplicitFunctionWidget.hxx @@ -0,0 +1,79 @@ +// SALOME VTKViewer : build VTK viewer into Salome desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : VISU_PlanesWidget.h +// Author : Peter KURNEV +// Module : SALOME +// $Header$ + +#ifndef __VISU_ImplicitFunctionWidget_h +#define __VISU_ImplicitFunctionWidget_h +//// +//================================================================== +// class : VISU_UnScaledActor +// purpose : +//================================================================== +#include +class VISU_UnScaledActor: public vtkFollower +{ + +public: + + vtkTypeMacro(VISU_UnScaledActor,vtkFollower); + static VISU_UnScaledActor *New(); + + + void SetCenter(float *); + virtual void SetSize(int theSize); + virtual void Render(vtkRenderer *theRenderer); + virtual float *GetBounds(); + +protected: + VISU_UnScaledActor(); + ~VISU_UnScaledActor(){} + + float myCenter[3]; + int mySize; +}; + +#include + +class vtkImplicitFunction; + +class VISU_ImplicitFunctionWidget : public vtk3DWidget +{ +public: + vtkTypeRevisionMacro(VISU_ImplicitFunctionWidget,vtk3DWidget); + + virtual vtkImplicitFunction* ImplicitFunction()=0; + +protected: + VISU_ImplicitFunctionWidget(); + ~VISU_ImplicitFunctionWidget(); + +private: + VISU_ImplicitFunctionWidget(const VISU_ImplicitFunctionWidget&); //Not implemented + void operator=(const VISU_ImplicitFunctionWidget&); //Not implemented +}; + +#endif diff --git a/src/PIPELINE/VISU_IsoSurfacesPL.cxx b/src/PIPELINE/VISU_IsoSurfacesPL.cxx index 7462ff51..8e14bca9 100644 --- a/src/PIPELINE/VISU_IsoSurfacesPL.cxx +++ b/src/PIPELINE/VISU_IsoSurfacesPL.cxx @@ -48,12 +48,12 @@ VISU_IsoSurfacesPL::~VISU_IsoSurfacesPL(){ } void VISU_IsoSurfacesPL::ShallowCopy(VISU_PipeLine *thePipeLine){ - VISU_ScalarMapPL::ShallowCopy(thePipeLine); if(VISU_IsoSurfacesPL *aPipeLine = dynamic_cast(thePipeLine)){ SetNbParts(aPipeLine->GetNbParts()); float aRange[2] = {aPipeLine->GetMin(), aPipeLine->GetMax()}; SetRange(aRange); } + VISU_ScalarMapPL::ShallowCopy(thePipeLine); } int VISU_IsoSurfacesPL::GetNbParts() { @@ -97,14 +97,13 @@ void VISU_IsoSurfacesPL::Init(){ } VISU_ScalarMapPL::THook* VISU_IsoSurfacesPL::DoHook(){ + VISU::CellDataToPoint(myContourFilter,myCellDataToPointData,GetInput2(),myFieldTransform); return myContourFilter->GetOutput(); } -void VISU_IsoSurfacesPL::Update(){ - VISU::CellDataToPoint(myContourFilter,myCellDataToPointData,GetInput2(),myFieldTransform); - SetMapScale(); - +void VISU_IsoSurfacesPL::Update() +{ VISU_ScalarMapPL::Update(); } diff --git a/src/PIPELINE/VISU_LookupTable.cxx b/src/PIPELINE/VISU_LookupTable.cxx index 06f21c5a..c15fdd27 100644 --- a/src/PIPELINE/VISU_LookupTable.cxx +++ b/src/PIPELINE/VISU_LookupTable.cxx @@ -40,7 +40,26 @@ VISU_LookupTable *VISU_LookupTable::New() { } VISU_LookupTable::VISU_LookupTable(int sze, int ext) - : vtkLookupTable(sze, ext), myScale(1.0) {} + : vtkLookupTable(sze, ext), myScale(1.0), myBicolor(false) {} + +void VISU_LookupTable::SetMapScale(float theScale) +{ + if( myScale != theScale ) + { + myScale = theScale; + Modified(); + } +} + +void VISU_LookupTable::SetBicolor( bool theBicolor ) +{ + if( myBicolor != theBicolor ) + { + myBicolor = theBicolor; + Modified(); + } +} + int VISU_LookupTable::ComputeLogRange(float inRange[2], float outRange[2]){ if(inRange[0] >= inRange[1]) @@ -65,9 +84,13 @@ unsigned char* VISU_LookupTable::MapValue(float v) { float aLowBound = log10(this->TableRange[0]); v = pow(10.0f,aLowBound + (v - aLowBound)*myScale); return vtkLookupTable::MapValue(v); - }else{ + } else if (!myBicolor) { v = this->TableRange[0] + (v - this->TableRange[0])*myScale; return vtkLookupTable::MapValue(v); + } else { + unsigned char* table = this->Table->GetPointer(0); + int index = v > 0 ? 4*static_cast(this->GetNumberOfColors()-1) : 0; + return &table[index]; } } @@ -113,29 +136,35 @@ inline float VISU_ApplyLogScale(float v, float range[2], inline unsigned char *VISU_LinearLookup(float v, unsigned char *table, float maxIndex, - float shift, float scale) + float shift, float scale, + bool bicolor) { - float findx = (v + shift)*scale; - if (findx < 0) - { - findx = 0; - } - if (findx > maxIndex) - { - findx = maxIndex; - } - return &table[4*static_cast(findx)]; - /* round - return &table[4*(int)(findx + 0.5f)]; - */ + if( !bicolor ) + { + float findx = (v + shift)*scale; + if (findx < 0) + findx = 0; + if (findx > maxIndex) + findx = maxIndex; + + return &table[4*static_cast(findx)]; + // round + //return &table[4*(int)(findx + 0.5f)]; + } + else + { + int index = v > 0 ? 4*static_cast(maxIndex) : 0; + return &table[index]; + } } // accelerate the mapping by copying the data in 32-bit chunks instead // of 8-bit chunks template void VISU_LookupTableMapData(vtkLookupTable *self, T *input, - unsigned char *output, int length, - int inIncr, int outFormat, float theMapScale) + unsigned char *output, int length, + int inIncr, int outFormat, + float theMapScale, bool bicolor) { int i = length; float *range = self->GetTableRange(); @@ -169,7 +198,7 @@ void VISU_LookupTableMapData(vtkLookupTable *self, T *input, while (--i >= 0) { val = VISU_ApplyLogScale(*input, range, logRange); - cptr = VISU_LinearLookup(val, table, maxIndex, shift, scale*theMapScale); + cptr = VISU_LinearLookup(val, table, maxIndex, shift, scale*theMapScale, bicolor); *output++ = *cptr++; *output++ = *cptr++; *output++ = *cptr++; @@ -182,7 +211,7 @@ void VISU_LookupTableMapData(vtkLookupTable *self, T *input, while (--i >= 0) { val = VISU_ApplyLogScale(*input, range, logRange); - cptr = VISU_LinearLookup(val, table, maxIndex, shift, scale*theMapScale); + cptr = VISU_LinearLookup(val, table, maxIndex, shift, scale*theMapScale, bicolor); *output++ = *cptr++; *output++ = *cptr++; *output++ = *cptr++; @@ -194,7 +223,7 @@ void VISU_LookupTableMapData(vtkLookupTable *self, T *input, while (--i >= 0) { val = VISU_ApplyLogScale(*input, range, logRange); - cptr = VISU_LinearLookup(val, table, maxIndex, shift, scale*theMapScale); + cptr = VISU_LinearLookup(val, table, maxIndex, shift, scale*theMapScale, bicolor); *output++ = static_cast(cptr[0]*0.30 + cptr[1]*0.59 + cptr[2]*0.11 + 0.5); *output++ = cptr[3]; @@ -206,7 +235,7 @@ void VISU_LookupTableMapData(vtkLookupTable *self, T *input, while (--i >= 0) { val = VISU_ApplyLogScale(*input, range, logRange); - cptr = VISU_LinearLookup(val, table, maxIndex, shift, scale*theMapScale); + cptr = VISU_LinearLookup(val, table, maxIndex, shift, scale*theMapScale, bicolor); *output++ = static_cast(cptr[0]*0.30 + cptr[1]*0.59 + cptr[2]*0.11 + 0.5); input += inIncr; @@ -233,7 +262,7 @@ void VISU_LookupTableMapData(vtkLookupTable *self, T *input, { while (--i >= 0) { - cptr = VISU_LinearLookup(*input, table, maxIndex, shift, scale*theMapScale); + cptr = VISU_LinearLookup(*input, table, maxIndex, shift, scale*theMapScale, bicolor); *output++ = *cptr++; *output++ = *cptr++; *output++ = *cptr++; @@ -245,7 +274,7 @@ void VISU_LookupTableMapData(vtkLookupTable *self, T *input, { while (--i >= 0) { - cptr = VISU_LinearLookup(*input, table, maxIndex, shift, scale*theMapScale); + cptr = VISU_LinearLookup(*input, table, maxIndex, shift, scale*theMapScale, bicolor); *output++ = *cptr++; *output++ = *cptr++; *output++ = *cptr++; @@ -256,7 +285,7 @@ void VISU_LookupTableMapData(vtkLookupTable *self, T *input, { while (--i >= 0) { - cptr = VISU_LinearLookup(*input, table, maxIndex, shift, scale*theMapScale); + cptr = VISU_LinearLookup(*input, table, maxIndex, shift, scale*theMapScale, bicolor); *output++ = static_cast(cptr[0]*0.30 + cptr[1]*0.59 + cptr[2]*0.11 + 0.5); *output++ = cptr[3]; @@ -267,7 +296,7 @@ void VISU_LookupTableMapData(vtkLookupTable *self, T *input, { while (--i >= 0) { - cptr = VISU_LinearLookup(*input, table, maxIndex, shift, scale*theMapScale); + cptr = VISU_LinearLookup(*input, table, maxIndex, shift, scale*theMapScale, bicolor); *output++ = static_cast(cptr[0]*0.30 + cptr[1]*0.59 + cptr[2]*0.11 + 0.5); input += inIncr; @@ -300,7 +329,7 @@ void VISU_LookupTableMapData(vtkLookupTable *self, T *input, while (--i >= 0) { val = VISU_ApplyLogScale(*input, range, logRange); - cptr = VISU_LinearLookup(val, table, maxIndex, shift, scale*theMapScale); + cptr = VISU_LinearLookup(val, table, maxIndex, shift, scale*theMapScale, bicolor); *output++ = *cptr++; *output++ = *cptr++; *output++ = *cptr++; @@ -313,7 +342,7 @@ void VISU_LookupTableMapData(vtkLookupTable *self, T *input, while (--i >= 0) { val = VISU_ApplyLogScale(*input, range, logRange); - cptr = VISU_LinearLookup(val, table, maxIndex, shift, scale*theMapScale); + cptr = VISU_LinearLookup(val, table, maxIndex, shift, scale*theMapScale, bicolor); *output++ = *cptr++; *output++ = *cptr++; *output++ = *cptr++; @@ -325,7 +354,7 @@ void VISU_LookupTableMapData(vtkLookupTable *self, T *input, while (--i >= 0) { val = VISU_ApplyLogScale(*input, range, logRange); - cptr = VISU_LinearLookup(val, table, maxIndex, shift, scale*theMapScale); + cptr = VISU_LinearLookup(val, table, maxIndex, shift, scale*theMapScale, bicolor); *output++ = static_cast(cptr[0]*0.30 + cptr[1]*0.59 + cptr[2]*0.11 + 0.5); *output++ = static_cast(alpha*cptr[3]); @@ -337,7 +366,7 @@ void VISU_LookupTableMapData(vtkLookupTable *self, T *input, while (--i >= 0) { val = VISU_ApplyLogScale(*input, range, logRange); - cptr = VISU_LinearLookup(val, table, maxIndex, shift, scale*theMapScale); + cptr = VISU_LinearLookup(val, table, maxIndex, shift, scale*theMapScale, bicolor); *output++ = static_cast(cptr[0]*0.30 + cptr[1]*0.59 + cptr[2]*0.11 + 0.5); input += inIncr; @@ -364,7 +393,7 @@ void VISU_LookupTableMapData(vtkLookupTable *self, T *input, { while (--i >= 0) { - cptr = VISU_LinearLookup(*input, table, maxIndex, shift, scale); + cptr = VISU_LinearLookup(*input, table, maxIndex, shift, scale, bicolor); *output++ = *cptr++; *output++ = *cptr++; *output++ = *cptr++; @@ -376,7 +405,7 @@ void VISU_LookupTableMapData(vtkLookupTable *self, T *input, { while (--i >= 0) { - cptr = VISU_LinearLookup(*input, table, maxIndex, shift, scale); + cptr = VISU_LinearLookup(*input, table, maxIndex, shift, scale, bicolor); *output++ = *cptr++; *output++ = *cptr++; *output++ = *cptr++; @@ -387,7 +416,7 @@ void VISU_LookupTableMapData(vtkLookupTable *self, T *input, { while (--i >= 0) { - cptr = VISU_LinearLookup(*input, table, maxIndex, shift, scale); + cptr = VISU_LinearLookup(*input, table, maxIndex, shift, scale, bicolor); *output++ = static_cast(cptr[0]*0.30 + cptr[1]*0.59 + cptr[2]*0.11 + 0.5); *output++ = static_cast(cptr[3]*alpha); @@ -398,7 +427,7 @@ void VISU_LookupTableMapData(vtkLookupTable *self, T *input, { while (--i >= 0) { - cptr = VISU_LinearLookup(*input, table, maxIndex, shift, scale); + cptr = VISU_LinearLookup(*input, table, maxIndex, shift, scale, bicolor); *output++ = static_cast(cptr[0]*0.30 + cptr[1]*0.59 + cptr[2]*0.11 + 0.5); input += inIncr; @@ -414,7 +443,8 @@ void VISU_LookupTableMapData(vtkLookupTable *self, T *input, template void VISU_LookupTableMapMag(vtkLookupTable *self, T *input, unsigned char *output, int length, - int inIncr, int outFormat, float theMapScale) + int inIncr, int outFormat, + float theMapScale, bool bicolor) { double tmp, sum; double *mag; @@ -433,7 +463,7 @@ void VISU_LookupTableMapMag(vtkLookupTable *self, T *input, mag[i] = sqrt(sum); } - VISU_LookupTableMapData(self, mag, output, length, 1, outFormat, theMapScale); + VISU_LookupTableMapData(self, mag, output, length, 1, outFormat, theMapScale, bicolor); delete [] mag; } @@ -455,43 +485,43 @@ void VISU_LookupTable::MapScalarsThroughTable2(void *input, break; case VTK_CHAR: VISU_LookupTableMapMag(this,static_cast(input),output, - numberOfValues,inputIncrement,outputFormat,myScale); + numberOfValues,inputIncrement,outputFormat,myScale,myBicolor); return; case VTK_UNSIGNED_CHAR: VISU_LookupTableMapMag(this,static_cast(input),output, - numberOfValues,inputIncrement,outputFormat,myScale); + numberOfValues,inputIncrement,outputFormat,myScale,myBicolor); return; case VTK_SHORT: VISU_LookupTableMapMag(this,static_cast(input),output, - numberOfValues,inputIncrement,outputFormat,myScale); + numberOfValues,inputIncrement,outputFormat,myScale,myBicolor); return; case VTK_UNSIGNED_SHORT: VISU_LookupTableMapMag(this,static_cast(input),output, - numberOfValues,inputIncrement,outputFormat,myScale); + numberOfValues,inputIncrement,outputFormat,myScale,myBicolor); return; case VTK_INT: VISU_LookupTableMapMag(this,static_cast(input),output, - numberOfValues,inputIncrement,outputFormat,myScale); + numberOfValues,inputIncrement,outputFormat,myScale,myBicolor); return; case VTK_UNSIGNED_INT: VISU_LookupTableMapMag(this,static_cast(input),output, - numberOfValues,inputIncrement,outputFormat,myScale); + numberOfValues,inputIncrement,outputFormat,myScale,myBicolor); return; case VTK_LONG: VISU_LookupTableMapMag(this,static_cast(input),output, - numberOfValues,inputIncrement,outputFormat,myScale); + numberOfValues,inputIncrement,outputFormat,myScale,myBicolor); return; case VTK_UNSIGNED_LONG: VISU_LookupTableMapMag(this,static_cast(input),output, - numberOfValues,inputIncrement,outputFormat,myScale); + numberOfValues,inputIncrement,outputFormat,myScale,myBicolor); return; case VTK_FLOAT: VISU_LookupTableMapMag(this,static_cast(input),output, - numberOfValues,inputIncrement,outputFormat,myScale); + numberOfValues,inputIncrement,outputFormat,myScale,myBicolor); return; case VTK_DOUBLE: VISU_LookupTableMapMag(this,static_cast(input),output, - numberOfValues,inputIncrement,outputFormat,myScale); + numberOfValues,inputIncrement,outputFormat,myScale,myBicolor); return; default: vtkErrorMacro(<< "MapImageThroughTable: Unknown input ScalarType"); @@ -515,7 +545,7 @@ void VISU_LookupTable::MapScalarsThroughTable2(void *input, VISU_LookupTableMapData(this, static_cast(newInput->GetPointer(0)), output,numberOfValues, - inputIncrement,outputFormat,myScale); + inputIncrement,outputFormat,myScale,myBicolor); newInput->Delete(); bitArray->Delete(); } @@ -523,52 +553,52 @@ void VISU_LookupTable::MapScalarsThroughTable2(void *input, case VTK_CHAR: VISU_LookupTableMapData(this,static_cast(input),output, - numberOfValues,inputIncrement,outputFormat,myScale); + numberOfValues,inputIncrement,outputFormat,myScale,myBicolor); break; case VTK_UNSIGNED_CHAR: VISU_LookupTableMapData(this,static_cast(input),output, - numberOfValues,inputIncrement,outputFormat,myScale); + numberOfValues,inputIncrement,outputFormat,myScale,myBicolor); break; case VTK_SHORT: VISU_LookupTableMapData(this,static_cast(input),output, - numberOfValues,inputIncrement,outputFormat,myScale); + numberOfValues,inputIncrement,outputFormat,myScale,myBicolor); break; case VTK_UNSIGNED_SHORT: VISU_LookupTableMapData(this,static_cast(input),output, - numberOfValues,inputIncrement,outputFormat,myScale); + numberOfValues,inputIncrement,outputFormat,myScale,myBicolor); break; case VTK_INT: VISU_LookupTableMapData(this,static_cast(input),output, - numberOfValues,inputIncrement,outputFormat,myScale); + numberOfValues,inputIncrement,outputFormat,myScale,myBicolor); break; case VTK_UNSIGNED_INT: VISU_LookupTableMapData(this,static_cast(input),output, - numberOfValues,inputIncrement,outputFormat,myScale); + numberOfValues,inputIncrement,outputFormat,myScale,myBicolor); break; case VTK_LONG: VISU_LookupTableMapData(this,static_cast(input),output, - numberOfValues,inputIncrement,outputFormat,myScale); + numberOfValues,inputIncrement,outputFormat,myScale,myBicolor); break; case VTK_UNSIGNED_LONG: VISU_LookupTableMapData(this,static_cast(input),output, - numberOfValues,inputIncrement,outputFormat,myScale); + numberOfValues,inputIncrement,outputFormat,myScale,myBicolor); break; case VTK_FLOAT: VISU_LookupTableMapData(this,static_cast(input),output, - numberOfValues,inputIncrement,outputFormat,myScale); + numberOfValues,inputIncrement,outputFormat,myScale,myBicolor); break; case VTK_DOUBLE: VISU_LookupTableMapData(this,static_cast(input),output, - numberOfValues,inputIncrement,outputFormat,myScale); + numberOfValues,inputIncrement,outputFormat,myScale,myBicolor); break; default: diff --git a/src/PIPELINE/VISU_LookupTable.hxx b/src/PIPELINE/VISU_LookupTable.hxx index 769ba892..20f7c23e 100644 --- a/src/PIPELINE/VISU_LookupTable.hxx +++ b/src/PIPELINE/VISU_LookupTable.hxx @@ -20,8 +20,11 @@ class VISU_LookupTable: public vtkLookupTable { int inputDataType, int numberOfValues, int inputIncrement, int outputIncrement); - float GetMapScale() { return myScale; } - void SetMapScale(float theScale = 1.0) { myScale = theScale; Modified(); } + float GetMapScale() { return myScale; } + void SetMapScale(float theScale = 1.0); + + float GetBicolor() { return myBicolor; } + void SetBicolor( bool theBicolor ); static int ComputeLogRange(float inRange[2], float outRange[2]); unsigned char *MapValue(float v); @@ -31,5 +34,7 @@ class VISU_LookupTable: public vtkLookupTable { ~VISU_LookupTable() {}; float myScale; + + bool myBicolor; }; #endif // VISU_LookupTable_H diff --git a/src/PIPELINE/VISU_OpenGLPointSpriteMapper.cxx b/src/PIPELINE/VISU_OpenGLPointSpriteMapper.cxx new file mode 100755 index 00000000..d8eb9e8a --- /dev/null +++ b/src/PIPELINE/VISU_OpenGLPointSpriteMapper.cxx @@ -0,0 +1,884 @@ +// VISU OBJECT : interactive object for VISU entities implementation +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File: VISU_OpenGLPointSpriteMapper.cxx +// Author: +// Module : VISU + +#include "VISU_OpenGLPointSpriteMapper.hxx" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include + +#ifndef VTK_IMPLEMENT_MESA_CXX +vtkCxxRevisionMacro(VISU_OpenGLPointSpriteMapper, "Revision$"); +vtkStandardNewMacro(VISU_OpenGLPointSpriteMapper); +#endif + +// some definitions for what the polydata has in it +#define VTK_PDPSM_COLORS 0x0001 +#define VTK_PDPSM_CELL_COLORS 0x0002 +#define VTK_PDPSM_POINT_TYPE_FLOAT 0x0004 +#define VTK_PDPSM_POINT_TYPE_DOUBLE 0x0008 +#define VTK_PDPSM_NORMAL_TYPE_FLOAT 0x0010 +#define VTK_PDPSM_NORMAL_TYPE_DOUBLE 0x0020 +#define VTK_PDPSM_OPAQUE_COLORS 0x0040 + +#ifndef APIENTRY +#define APIENTRY +#endif +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif + +#ifndef GL_OBJECT_INFO_LOG_LENGTH_ARB +#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 +#endif + +#ifndef GL_VERTEX_SHADER_ARB +#define GL_VERTEX_SHADER_ARB 0x8B31 +#endif + +#ifndef GL_VERTEX_PROGRAM_POINT_SIZE_ARB +#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 +#endif + +#ifndef GL_ARB_point_sprite +#define GL_POINT_SPRITE_ARB 0x8861 +#define GL_COORD_REPLACE_ARB 0x8862 +#endif + +#ifndef GL_ARB_shader_objects +typedef char GLcharARB; +#endif + +#ifndef GL_ARB_vertex_buffer_object +typedef ptrdiff_t GLsizeiptrARB; + +#define GL_ARRAY_BUFFER_ARB 0x8892 +#define GL_STATIC_DRAW_ARB 0x88E4 +#endif + +typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length); +typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); +typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); +typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); +typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); +typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); + +typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); +typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); + +static PFNGLSHADERSOURCEARBPROC vglShaderSourceARB = NULL; +static PFNGLCREATESHADEROBJECTARBPROC vglCreateShaderObjectARB = NULL; +static PFNGLCOMPILESHADERARBPROC vglCompileShaderARB = NULL; +static PFNGLCREATEPROGRAMOBJECTARBPROC vglCreateProgramObjectARB = NULL; +static PFNGLATTACHOBJECTARBPROC vglAttachObjectARB = NULL; +static PFNGLLINKPROGRAMARBPROC vglLinkProgramARB = NULL; +static PFNGLUSEPROGRAMOBJECTARBPROC vglUseProgramObjectARB = NULL; +static PFNGLGETOBJECTPARAMETERIVARBPROC vglGetObjectParameterivARB = NULL; +static PFNGLGETINFOLOGARBPROC vglGetInfoLogARB = NULL; +static PFNGLGETATTRIBLOCATIONARBPROC vglGetAttribLocationARB = NULL; +static PFNGLVERTEXATTRIB1FARBPROC vglVertexAttrib1fARB = NULL; + +static PFNGLGENBUFFERSARBPROC vglGenBuffersARB = NULL; +static PFNGLBINDBUFFERARBPROC vglBindBufferARB = NULL; +static PFNGLBUFFERDATAARBPROC vglBufferDataARB = NULL; +static PFNGLDELETEBUFFERSARBPROC vglDeleteBuffersARB = NULL; + +int InitializeARB() +{ + void* OpenGLLibrary = dlopen( "libGL.so", RTLD_LAZY ); + + vglShaderSourceARB = (PFNGLSHADERSOURCEARBPROC)dlsym( OpenGLLibrary, "glShaderSourceARB" ); + vglCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)dlsym( OpenGLLibrary, "glCreateShaderObjectARB" ); + vglCompileShaderARB = (PFNGLCOMPILESHADERARBPROC)dlsym( OpenGLLibrary, "glCompileShaderARB" ); + vglCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC)dlsym( OpenGLLibrary, "glCreateProgramObjectARB" ); + vglAttachObjectARB = (PFNGLATTACHOBJECTARBPROC)dlsym( OpenGLLibrary, "glAttachObjectARB" ); + vglLinkProgramARB = (PFNGLLINKPROGRAMARBPROC)dlsym( OpenGLLibrary, "glLinkProgramARB" ); + vglUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC)dlsym( OpenGLLibrary, "glUseProgramObjectARB" ); + vglGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC)dlsym( OpenGLLibrary, "glGetObjectParameterivARB" ); + vglGetInfoLogARB = (PFNGLGETINFOLOGARBPROC)dlsym( OpenGLLibrary, "glGetInfoLogARB" ); + vglGetAttribLocationARB = (PFNGLGETATTRIBLOCATIONARBPROC)dlsym( OpenGLLibrary, "glGetAttribLocationARB" ); + vglVertexAttrib1fARB = (PFNGLVERTEXATTRIB1FARBPROC)dlsym( OpenGLLibrary, "glVertexAttrib1fARB" ); + + vglGenBuffersARB = (PFNGLGENBUFFERSARBPROC)dlsym( OpenGLLibrary, "glGenBuffersARB" ); + vglBindBufferARB = (PFNGLBINDBUFFERARBPROC)dlsym( OpenGLLibrary, "glBindBufferARB" ); + vglBufferDataARB = (PFNGLBUFFERDATAARBPROC)dlsym( OpenGLLibrary, "glBufferDataARB" ); + vglDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC)dlsym( OpenGLLibrary, "glDeleteBuffersARB" ); + + return 1; +}; + +static int IsARBInitialized = InitializeARB(); +static float Tolerance = 1.0 / VTK_LARGE_FLOAT; + +//----------------------------------------------------------------------------- +// Construct empty object. +VISU_OpenGLPointSpriteMapper::VISU_OpenGLPointSpriteMapper() +{ + this->RenderMode = VISU_OpenGLPointSpriteMapper::Occlude; + + this->ListId = 0; + this->TotalCells = 0; + this->ExtensionsInitialized = 0; + this->DefaultPointSize = 20.0; + this->AverageCellSize = 0.0; + + this->UsePointSprites = true; + this->UseTextures = true; + this->UseShader = true; + + this->PrimitiveType = VISU_OpenGLPointSpriteMapper::PointSprite; + + this->PointSpriteMode = 0; + + this->PointSpriteClamp = 256.0; + this->PointSpriteSize = 0.2; + this->PointSpriteMinSize = 0.1; + this->PointSpriteMaxSize = 0.3; + this->PointSpriteMagnification = 1.0; + + this->PointSpriteAlphaThreshold = 0.5; + this->PointSpriteTexture = 0; + + this->UseOpenGLMapper = false; + + this->TempMapper = vtkPolyDataMapper::New(); +} +//----------------------------------------------------------------------------- +VISU_OpenGLPointSpriteMapper::~VISU_OpenGLPointSpriteMapper() +{ + glDeleteTextures( 1, &PointSpriteTexture ); + + if( this->LastWindow ) + this->ReleaseGraphicsResources(this->LastWindow); + + if( this->TempMapper ) + this->TempMapper->Delete(); +} +//----------------------------------------------------------------------------- +void VISU_OpenGLPointSpriteMapper::ShallowCopy( vtkAbstractMapper* mapper ) +{ + VISU_OpenGLPointSpriteMapper* m = VISU_OpenGLPointSpriteMapper::SafeDownCast(mapper); + if( m != NULL ) + { + this->SetPrimitiveType( m->GetPrimitiveType() ); + + this->SetPointSpriteMode( m->GetPointSpriteMode() ); + + this->SetPointSpriteClamp( m->GetPointSpriteClamp() ); + this->SetPointSpriteSize( m->GetPointSpriteSize() ); + this->SetPointSpriteMinSize( m->GetPointSpriteMinSize() ); + this->SetPointSpriteMaxSize( m->GetPointSpriteMaxSize() ); + this->SetPointSpriteMagnification( m->GetPointSpriteMagnification() ); + + this->SetImageData( m->GetImageData() ); + this->SetPointSpriteAlphaThreshold( m->GetPointSpriteAlphaThreshold() ); + } + + this->TempMapper->ShallowCopy( m ); + this->TempMapper->SetInput( this->GetInput() ); + Superclass::ShallowCopy( this->TempMapper ); + +} +//----------------------------------------------------------------------------- +char* readFromFile( std::string fileName ) +{ + FILE* file = fopen( fileName.c_str(), "r" ); + + char* content = NULL; + int count = 0; + + if( file != NULL ) + { + fseek( file, 0, SEEK_END ); + count = ftell( file ); + rewind( file ); + + if( count > 0 ) + { + content = ( char* )malloc( sizeof( char ) * ( count + 1 ) ); + count = fread( content, sizeof( char ), count, file ); + content[ count ] = '\0'; + } + fclose( file ); + } + + return content; +} +//----------------------------------------------------------------------------- +void VISU_OpenGLPointSpriteMapper::PrintInfoLog( GLhandleARB obj ) +{ + int infologLength = 0; + int charsWritten = 0; + char* infoLog; + + vglGetObjectParameterivARB( obj, GL_OBJECT_INFO_LOG_LENGTH_ARB, &infologLength ); + + if( infologLength > 0 ) + { + infoLog = ( char* )malloc( infologLength ); + vglGetInfoLogARB( obj, infologLength, &charsWritten, infoLog ); + printf( "%s\n", infoLog ); + free( infoLog ); + } +} +//----------------------------------------------------------------------------- +void VISU_OpenGLPointSpriteMapper::InitShader() +{ + //cout << "Initializing vertex program" << endl; + + std::string fileName = std::string( getenv( "VISU_ROOT_DIR") ) + + "/share/salome/resources/Vertex_Program_ARB.txt"; + + char* shader = readFromFile( fileName ); + + GLhandleARB VertexShader = vglCreateShaderObjectARB( GL_VERTEX_SHADER_ARB ); + vglShaderSourceARB( VertexShader, 1, (const GLcharARB**)&shader, NULL ); + vglCompileShaderARB( VertexShader ); + //this->PrintInfoLog( VertexShader ); + + this->VertexProgram = vglCreateProgramObjectARB(); + vglAttachObjectARB( this->VertexProgram, VertexShader ); + + vglLinkProgramARB( this->VertexProgram ); + //this->PrintInfoLog( VertexProgram ); + /* + cout << "Shader from " << fileName << endl; + for( int i = 0; i < strlen( shader ); i++ ) + cout << shader[i]; + cout << endl; + + if( glGetError() == GL_NO_ERROR ) + cout << "Loading vertex program... ok" << endl << endl; + else + cout << "Loading vertex program... failed" << endl << endl; + */ + free( shader ); +} +//----------------------------------------------------------------------------- +void VISU_OpenGLPointSpriteMapper::SetShaderVariable( const char* variable, float value ) +{ + //cout << this->VertexProgram << " "; + //cout << vglGetAttribLocationARB( this->VertexProgram, variable ) << " "; + //cout << variable << " " << value << endl; + + vglVertexAttrib1fARB( vglGetAttribLocationARB( this->VertexProgram, variable ), value ); +} +//----------------------------------------------------------------------------- +void VISU_OpenGLPointSpriteMapper::SetPrimitiveType( int thePrimitiveType ) +{ + if( this->PrimitiveType == thePrimitiveType ) + return; + + this->PrimitiveType = thePrimitiveType; +} +//----------------------------------------------------------------------------- +void VISU_OpenGLPointSpriteMapper::SetPointSpriteMode( int theMode ) +{ + if( this->PointSpriteMode == theMode ) + return; + + this->PointSpriteMode = theMode; + this->Modified(); +} +//----------------------------------------------------------------------------- +void VISU_OpenGLPointSpriteMapper::SetPointSpriteClamp( float theClamp ) +{ + if( fabs( this->PointSpriteClamp - theClamp ) < Tolerance ) + return; + + this->PointSpriteClamp = theClamp; +} +//----------------------------------------------------------------------------- +void VISU_OpenGLPointSpriteMapper::SetPointSpriteSize( float theSize ) +{ + if( fabs( this->PointSpriteSize - theSize ) < Tolerance ) + return; + + this->PointSpriteSize = theSize; +} +//----------------------------------------------------------------------------- +void VISU_OpenGLPointSpriteMapper::SetPointSpriteMinSize( float theMinSize ) +{ + if( fabs( this->PointSpriteMinSize - theMinSize ) < Tolerance ) + return; + + this->PointSpriteMinSize = theMinSize; +} +//----------------------------------------------------------------------------- +void VISU_OpenGLPointSpriteMapper::SetPointSpriteMaxSize( float theMaxSize ) +{ + if( fabs( this->PointSpriteMaxSize - theMaxSize ) < Tolerance ) + return; + + this->PointSpriteMaxSize = theMaxSize; +} +//----------------------------------------------------------------------------- +void VISU_OpenGLPointSpriteMapper::SetPointSpriteMagnification( float theMagnification ) +{ + if( fabs( this->PointSpriteMagnification - theMagnification ) < Tolerance ) + return; + + this->PointSpriteMagnification = theMagnification; +} +//----------------------------------------------------------------------------- +void VISU_OpenGLPointSpriteMapper::SetPointSpriteAlphaThreshold( float theAlphaThreshold ) +{ + if( fabs( this->PointSpriteAlphaThreshold - theAlphaThreshold ) < Tolerance ) + return; + + this->PointSpriteAlphaThreshold = theAlphaThreshold; +} +//----------------------------------------------------------------------------- +bool VISU_OpenGLPointSpriteMapper::InitExtensions() +{ + char* ext = (char*)glGetString( GL_EXTENSIONS ); + //cout << "OpenGL extensions : " << ext << endl; + + if( strstr( ext, "GL_ARB_point_sprite" ) == NULL || + strstr( ext, "GL_ARB_shader_objects" ) == NULL || + strstr( ext, "GL_ARB_vertex_buffer_object" ) == NULL ) + { + vtkWarningMacro(<<"Initializing ARB extensions failed"); + + this->UseOpenGLMapper = true; + + return false; + } + + if( this->UseShader ) + this->InitShader(); + + this->ExtensionsInitialized = 1; + return true; +} + +//----------------------------------------------------------------------------- +float ViewToDisplay( vtkRenderer* theRenderer ) +{ + float p1[3], p2[3]; + + theRenderer->SetViewPoint( 0.0, 0.0, 0.0 ); + theRenderer->ViewToDisplay(); + theRenderer->GetDisplayPoint( p1 ); + + theRenderer->SetViewPoint( 1.0, 1.0, 1.0 ); + theRenderer->ViewToDisplay(); + theRenderer->GetDisplayPoint( p2 ); + + float coefficient = sqrt( pow( p2[0] - p1[0], 2 ) + pow( p2[1] - p1[1], 2 ) ) / sqrt( 2 ); + //cout << p1[0] << " " << p1[1] << " " << p1[2] << endl; + //cout << p2[0] << " " << p2[1] << " " << p2[2] << endl; + //cout << "ZOOM : " << coefficient << endl; + + return coefficient; +} + +//----------------------------------------------------------------------------- +// +// Receives from Actor -> maps data to primitives +// +void VISU_OpenGLPointSpriteMapper::RenderPiece(vtkRenderer *ren, vtkActor *act) +{ + bool isUseThisMapper = !( this->UseOpenGLMapper || + this->PrimitiveType == VISU_OpenGLPointSpriteMapper::GeomSphere ); + + if( !this->ExtensionsInitialized && isUseThisMapper ) + { + if( !this->InitExtensions() ) + return; + } + + if( !isUseThisMapper ) + { + MAPPER_SUPERCLASS::RenderPiece( ren, act ); + return; + } + + vtkIdType numPts; + vtkPolyData *input= this->GetInput(); + + // + // make sure that we've been properly initialized + // + if (ren->GetRenderWindow()->CheckAbortStatus()) + return; + + if ( input == NULL ) + { + vtkErrorMacro(<< "No input!"); + return; + } + else + { + this->InvokeEvent(vtkCommand::StartEvent,NULL); + input->Update(); + this->InvokeEvent(vtkCommand::EndEvent,NULL); + + numPts = input->GetNumberOfPoints(); + } + + if (numPts == 0) + { + vtkDebugMacro(<< "No points!"); + return; + } + + if ( this->LookupTable == NULL ) + this->CreateDefaultLookupTable(); + + // make sure our window is current + ren->GetRenderWindow()->MakeCurrent(); + + if( this->UsePointSprites ) //&& this->PrimitiveType == VISU_OpenGLPointSpriteMapper::PointSprite ) + this->InitPointSprites(); + + // Initializing the texture for Point Sprites + if( this->UseTextures && this->PrimitiveType == VISU_OpenGLPointSpriteMapper::PointSprite ) + this->InitTextures(); + + vglUseProgramObjectARB( this->VertexProgram ); + float aViewToDisplay = ViewToDisplay( ren ); + this->SetShaderVariable( "mode", this->PointSpriteMode ); + this->SetShaderVariable( "clampSize", this->PointSpriteClamp ); + this->SetShaderVariable( "geomSize", aViewToDisplay * this->AverageCellSize * this->PointSpriteSize ); + this->SetShaderVariable( "minSize", aViewToDisplay * this->AverageCellSize * this->PointSpriteMinSize ); + this->SetShaderVariable( "maxSize", aViewToDisplay * this->AverageCellSize * this->PointSpriteMaxSize ); + this->SetShaderVariable( "magnification", this->PointSpriteMagnification ); + + // + // if something has changed regenerate colors and display lists + // if required + // + int noAbort=1; + if ( this->GetMTime() > this->BuildTime || + input->GetMTime() > this->BuildTime || + act->GetProperty()->GetMTime() > this->BuildTime || + ren->GetRenderWindow() != this->LastWindow) + { + // sets this->Colors as side effect + this->MapScalars( act->GetProperty()->GetOpacity() ); + + if (!this->ImmediateModeRendering && + !this->GetGlobalImmediateModeRendering()) + { + this->ReleaseGraphicsResources(ren->GetRenderWindow()); + this->LastWindow = ren->GetRenderWindow(); + + // get a unique display list id + this->ListId = glGenLists(1); + glNewList(this->ListId,GL_COMPILE); + + noAbort = this->Draw(ren,act); + glEndList(); + + // Time the actual drawing + this->Timer->StartTimer(); + glCallList(this->ListId); + this->Timer->StopTimer(); + } + else + { + this->ReleaseGraphicsResources(ren->GetRenderWindow()); + this->LastWindow = ren->GetRenderWindow(); + } + if (noAbort) + this->BuildTime.Modified(); + } + // if nothing changed but we are using display lists, draw it + else + { + if (!this->ImmediateModeRendering && + !this->GetGlobalImmediateModeRendering()) + { + // Time the actual drawing + this->Timer->StartTimer(); + glCallList(this->ListId); + this->Timer->StopTimer(); + } + } + + // if we are in immediate mode rendering we always + // want to draw the primitives here + if (this->ImmediateModeRendering || + this->GetGlobalImmediateModeRendering()) + { + // sets this->Colors as side effect + this->MapScalars( act->GetProperty()->GetOpacity() ); + + // Time the actual drawing + this->Timer->StartTimer(); + this->Draw(ren,act); + this->Timer->StopTimer(); + } + + this->TimeToDraw = (float)this->Timer->GetElapsedTime(); + + // If the timer is not accurate enough, set it to a small + // time so that it is not zero + if ( this->TimeToDraw == 0.0 ) + this->TimeToDraw = 0.0001; + + vglUseProgramObjectARB( 0 ); + + if( this->UsePointSprites ) //&& this->PrimitiveType == VISU_OpenGLPointSpriteMapper::PointSprite ) + this->CleanupPointSprites(); +} +//----------------------------------------------------------------------------- +float VISU_OpenGLPointSpriteMapper::GetMaximumSupportedSize() +{ + float maximumSupportedSize = 512.0; + //glGetFloatv( GL_POINT_SIZE_MAX_ARB, &maximumSupportedSize ); + + return maximumSupportedSize; +} +//----------------------------------------------------------------------------- +void VISU_OpenGLPointSpriteMapper::InitPointSprites() +{ + glEnable( GL_POINT_SPRITE_ARB ); + glEnable( GL_VERTEX_PROGRAM_POINT_SIZE_ARB ); + + switch (this->RenderMode) + { + case VISU_OpenGLPointSpriteMapper::Accumulate: + { + glDisable(GL_DEPTH_TEST); + + glEnable( GL_BLEND ); + glBlendFunc( GL_SRC_ALPHA, GL_ONE ); + + glEnable( GL_ALPHA_TEST ); + glAlphaFunc( GL_GREATER, this->PointSpriteAlphaThreshold ); + break; + } + + case VISU_OpenGLPointSpriteMapper::Occlude: + { + glDepthFunc( GL_LEQUAL ); + glEnable( GL_DEPTH_TEST ); + + glEnable( GL_ALPHA_TEST ); + glAlphaFunc( GL_GREATER, this->PointSpriteAlphaThreshold ); + + glDisable( GL_BLEND ); + break; + } + + default: + { + break; + } + } + // Disable Lighting/Shading. + glDisable( GL_LIGHTING ); + + // Disable material properties + glDisable( GL_COLOR_MATERIAL ); +} +//----------------------------------------------------------------------------- +void VISU_OpenGLPointSpriteMapper::CleanupPointSprites() +{ + // Set GL params back to normal to stop other vtkMappers displaying wrongly + glDisable( GL_ALPHA_TEST ); + + glEnable( GL_BLEND ); + + glEnable( GL_DEPTH_TEST ); + glEnable( GL_LIGHTING ); + glEnable( GL_COLOR_MATERIAL ); + + glDisable( GL_VERTEX_PROGRAM_POINT_SIZE_ARB ); + glDisable( GL_POINT_SPRITE_ARB ); +} + + +//----------------------------------------------------------------------------- +void +VISU_OpenGLPointSpriteMapper +::SetImageData( vtkImageData* theImageData ) +{ + //cout << "VISU_OpenGLPointSpriteMapper::SetImageData " << theImageData << endl; + this->ImageData = theImageData; +} + +vtkImageData* +VISU_OpenGLPointSpriteMapper +::GetImageData() +{ + return this->ImageData.GetPointer(); +} + + +//----------------------------------------------------------------------------- +void VISU_OpenGLPointSpriteMapper::InitTextures() +{ + //cout << "VISU_OpenGLPointSpriteMapper::InitTextures " << this->GetImageData() << endl; + if( !this->GetImageData() ) + return; + + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); + + int* aSize = GetImageData()->GetDimensions(); + unsigned char* dataPtr = (unsigned char*)GetImageData()->GetScalarPointer(); + glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, aSize[0], aSize[1], 0, + GL_RGBA, GL_UNSIGNED_BYTE, dataPtr ); + + //glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + glEnable( GL_TEXTURE_2D ); + glTexEnvf( GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE ); + glBindTexture( GL_TEXTURE_2D, this->PointSpriteTexture ); +} + +//----------------------------------------------------------------------------- +int ComputeHue( int r, int g, int b ) +{ + int h = 0; + + int max = r; + int whatmax = 0; + if( g > max ) { + max = g; + whatmax = 1; + } + if( b > max ) { + max = b; + whatmax = 2; + } + + int min = r; + if ( g < min ) min = g; + if ( b < min ) min = b; + int delta = max-min; + + if( delta == 0 ) + h = 0; + else if( whatmax == 0 ) { + if ( g >= b ) + h = (120*(g-b)+delta)/(2*delta); + else + h = (120*(g-b+delta)+delta)/(2*delta) + 300; + } + else if( whatmax == 1 ) { + if ( b > r ) + h = 120 + (120*(b-r)+delta)/(2*delta); + else + h = 60 + (120*(b-r+delta)+delta)/(2*delta); + } + else { + if ( r > g ) + h = 240 + (120*(r-g)+delta)/(2*delta); + else + h = 180 + (120*(r-g+delta)+delta)/(2*delta); + } + + return h + 1; +} + +//----------------------------------------------------------------------------- +struct TVertex +{ + GLfloat r, g, b, hue; + GLfloat vx, vy, vz; +}; + +//----------------------------------------------------------------------------- +void VISU_OpenGLPointSpriteMapper::DrawPoints(vtkPoints *thePoints, + vtkUnsignedCharArray *theColors, + vtkFloatArray *theAlpha, + vtkIdType &theCellNum, + int &theNoAbort, + vtkCellArray *theCells, + vtkRenderer *theRenderer, + vtkActor* theActor) +{ + //cout << "VISU_OpenGLPointSpriteMapper::DrawPoints" << endl; + + //if( this->PrimitiveType == VISU_OpenGLPointSpriteMapper::OpenGLPoint ) + // glEnable( GL_POINT_SMOOTH ); + + glPointSize( this->DefaultPointSize ); + + TVertex* aVertexArr = new TVertex[ this->TotalCells ]; + + float* aPropertyColor = theActor->GetProperty()->GetColor(); + float aColor[3] = {aPropertyColor[0], aPropertyColor[1], aPropertyColor[2]}; + + unsigned long i = 0; + vtkIdType *pts = 0; + vtkIdType npts = 0; + for( theCells->InitTraversal(); theCells->GetNextCell( npts, pts ); i++ ) + { + TVertex& aVertex = aVertexArr[i]; + vtkIdType aPointId = pts[0]; + float* aCoords = thePoints->GetPoint( aPointId ); + aVertex.vx = aCoords[0]; + aVertex.vy = aCoords[1]; + aVertex.vz = aCoords[2]; + + int aRed, aGreen, aBlue; + if( theColors && this->PointSpriteMode != 1 ) + { + unsigned char *col = theColors->GetPointer(pts[0] << 2); + aRed = int(col[0]); + aGreen = int(col[1]); + aBlue = int(col[2]); + + aColor[0] = aRed / 255.0; + aColor[1] = aGreen / 255.0; + aColor[2] = aBlue / 255.0; + } + + aVertex.r = aColor[0]; + aVertex.g = aColor[1]; + aVertex.b = aColor[2]; + aVertex.hue = ComputeHue( aRed, aGreen, aBlue ); + } + + GLuint aBufferObjectID = 0; + vglGenBuffersARB( 1, &aBufferObjectID ); + vglBindBufferARB( GL_ARRAY_BUFFER_ARB, aBufferObjectID ); + + int nArrayObjectSize = sizeof( TVertex ) * this->TotalCells; + vglBufferDataARB( GL_ARRAY_BUFFER_ARB, nArrayObjectSize, aVertexArr, GL_STATIC_DRAW_ARB ); + + delete [] aVertexArr; + + vglBindBufferARB( GL_ARRAY_BUFFER_ARB, 0 ); + vglBindBufferARB( GL_ARRAY_BUFFER_ARB, aBufferObjectID ); + + glColorPointer( 4, GL_FLOAT, sizeof(TVertex), (void*)0 ); + glVertexPointer( 3, GL_FLOAT, sizeof(TVertex), (void*)(4*sizeof(GLfloat)) ); + + glEnableClientState( GL_VERTEX_ARRAY ); + glEnableClientState( GL_COLOR_ARRAY ); + + glDrawArrays( GL_POINTS, 0, this->TotalCells ); + + glDisableClientState( GL_COLOR_ARRAY ); + glDisableClientState( GL_VERTEX_ARRAY ); + + vglDeleteBuffersARB( 1, &aBufferObjectID ); + + //if( this->PrimitiveType == VISU_OpenGLPointSpriteMapper::OpenGLPoint ) + // glDisable( GL_POINT_SMOOTH ); +} + +//----------------------------------------------------------------------------- +int VISU_OpenGLPointSpriteMapper::Draw(vtkRenderer *aren, vtkActor *act) +{ + + if( this->UseOpenGLMapper || + this->PrimitiveType == VISU_OpenGLPointSpriteMapper::GeomSphere ) + return MAPPER_SUPERCLASS::Draw( aren, act ); + + vtkOpenGLRenderer *ren = (vtkOpenGLRenderer *)aren; + vtkUnsignedCharArray *colors = NULL; + vtkFloatArray *alpha = NULL; + vtkPolyData *input = this->GetInput(); + vtkPoints *points; + int noAbort = 1; + int cellScalars = 0; + vtkIdType cellNum = 0; + float tran; + + // get the transparency + tran = act->GetProperty()->GetOpacity(); + + // if the primitives are invisable then get out of here + if (tran <= 0.0) + { + return noAbort; + } + + // and draw the display list + points = input->GetPoints(); + + // are they cell or point scalars + if ( this->Colors ) + { + colors = this->Colors; + if ( (this->ScalarMode == VTK_SCALAR_MODE_USE_CELL_DATA || + this->ScalarMode == VTK_SCALAR_MODE_USE_CELL_FIELD_DATA || + !input->GetPointData()->GetScalars() ) + && this->ScalarMode != VTK_SCALAR_MODE_USE_POINT_FIELD_DATA) + { + cellScalars = 1; + } + } + + // we need to know the total number of cells so that we can report progress + this->TotalCells = input->GetVerts()->GetNumberOfCells(); + + this->DrawPoints(points, colors, alpha, cellNum, noAbort, input->GetVerts(), ren, act); + + this->UpdateProgress(1.0); + return noAbort; +} +//----------------------------------------------------------------------------- +// Release the graphics resources used by this mapper. In this case, release +// the display list if any. +void VISU_OpenGLPointSpriteMapper::ReleaseGraphicsResources(vtkWindow *win) +{ + this->Superclass::ReleaseGraphicsResources(win); + + if (this->ListId && win) + { + win->MakeCurrent(); + glDeleteLists(this->ListId,1); + this->ListId = 0; + } + this->LastWindow = NULL; +} diff --git a/src/PIPELINE/VISU_OpenGLPointSpriteMapper.hxx b/src/PIPELINE/VISU_OpenGLPointSpriteMapper.hxx new file mode 100755 index 00000000..1ddb55ff --- /dev/null +++ b/src/PIPELINE/VISU_OpenGLPointSpriteMapper.hxx @@ -0,0 +1,285 @@ +// VISU OBJECT : interactive object for VISU entities implementation +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File: VISU_OpenGLPointSpriteMapper.hxx +// Author: +// Module : VISU + +#ifndef VISU_OpenGLPointSpriteMapper_HeaderFile +#define VISU_OpenGLPointSpriteMapper_HeaderFile + +#if defined(_MSC_VER) +# pragma warning ( disable : 4275 ) +#endif + +#include + +#include +#include + +class vtkCellArray; +class vtkPoints; +class vtkProperty; +class vtkRenderWindow; +class vtkOpenGLRenderer; +class vtkOpenGLTexture; +class vtkBMPReader; +class vtkImageData; +class vtkFloatArray; +class vtkXMLImageDataReader; + +#ifndef VTK_IMPLEMENT_MESA_CXX +#include +#define MAPPER_SUPERCLASS vtkOpenGLPolyDataMapper +#else +#include +#define MAPPER_SUPERCLASS vtkMesaPolyDataMapper +#endif + +#ifndef GL_ARB_shader_objects +typedef GLuint GLhandleARB; +#endif + +//---------------------------------------------------------------------------- +//! OpenGL Point Sprites PolyData Mapper. +/*! + * VISU_OpenGLPointSpriteMapper is a class that maps polygonal data + * (i.e., vtkPolyData) to graphics primitives. It is performing the mapping + * to the rendering/graphics hardware/software. It is now possible to set a + * memory limit for the pipeline in the mapper. If the total estimated memory + * usage of the pipeline is larger than this limit, the mapper will divide + * the data into pieces and render each in a for loop. + */ +class VISU_OpenGLPointSpriteMapper : public MAPPER_SUPERCLASS +{ +public: + //! The Point Sprites rendering mode. + /*! + * Accumulate : Uses glBlendFunc(GL_SRC_ALPHA, GL_ONE), and no depth testing + * so that points are accumulated. Suitable for Galaxy plots. + * Occlude : No blending. Particles are solid spheres and depth testing is + * used as usual. Suitable for most particle simulations without the need + * for opacity. + */ + enum RenderModes { Accumulate = 0, Occlude }; + + enum PrimitiveTypes { PointSprite = 0, OpenGLPoint, GeomSphere }; + + static VISU_OpenGLPointSpriteMapper *New(); + vtkTypeRevisionMacro(VISU_OpenGLPointSpriteMapper,MAPPER_SUPERCLASS); + + void ShallowCopy(vtkAbstractMapper*); + + //! Set the initial point size to be used. + /*! + * This value forms the base upon which the distance attenuation acts. + * Usually the pointsize is set to the maximum supported by the graphics + * card for sprite display, then the quadratic factors are adjusted to + * bring the size down. + */ + vtkSetMacro(DefaultPointSize, float); + + //! Get the initial point size to be used. + vtkGetMacro(DefaultPointSize, float); + + //! Set Average Cell Size. + vtkSetMacro(AverageCellSize, float); + + //! Get Average Cell Size. + vtkGetMacro(AverageCellSize, float); + + //! Set the Render Mode for the mapper. + vtkSetMacro(RenderMode, int); + + //! Get the Render Mode for the mapper. + vtkGetMacro(RenderMode, int); + + //! Implement superclass render method. + virtual void RenderPiece(vtkRenderer *ren, vtkActor *a); + + //! Release any graphics resources that are being consumed by this mapper. + void ReleaseGraphicsResources(vtkWindow *); + + //! Draw method for OpenGL. + virtual int Draw(vtkRenderer *ren, vtkActor *a); + + //! Return the maximum point size supported by the graphics hardware. + static float GetMaximumSupportedSize(); + + //! Set usage of #vtkOpenGLPolyDataMapper. + /*! + * This flags prevents using of the VISU_OpenGLPointSpriteMapper + * (#vtkOpenGLPolyDataMapper is using instead). + */ + vtkSetMacro(UseOpenGLMapper, bool); + + //! Get usage of #vtkOpenGLPolyDataMapper. + vtkGetMacro(UseOpenGLMapper, bool); + + //! Set usage of Point Sprites. + vtkSetMacro(UsePointSprites, bool); + + //! Get usage of Point Sprites. + vtkGetMacro(UsePointSprites, bool); + + //! Set usage of textures for Point Sprites. + /*! Works only if usage of Point Sprites is turned on. */ + vtkSetMacro(UseTextures, bool); + + //! Get usage of textures for Point Sprites. + vtkGetMacro(UseTextures, bool); + + //! Set usage of vertex shader. + /*! Works only if usage of Point Sprites is turned on. */ + vtkSetMacro(UseShader, bool); + + //! Get usage of vertex shader. + vtkGetMacro(UseShader, bool); + + //! Point Sprite drawing mode + /*! + * 0 - Results - different colors, different sizes. + * 1 - Geometry - fixed color, fixed size. + * 2 - Outside - different colors, fixed size. + */ + vtkGetMacro(PointSpriteMode, int); + void SetPointSpriteMode( int ); + + //! Get the Primitive type + vtkGetMacro(PrimitiveType, int); + + //! Set the Primitive type + void SetPrimitiveType( int ); + + //! Set Point Sprite Clamp. + void SetPointSpriteClamp( float ); + + //! Get Point Sprite Clamp. + vtkGetMacro(PointSpriteClamp, float); + + //! Set Point Sprite Const Size. + void SetPointSpriteSize( float ); + + //! Get Point Sprite Const Size. + vtkGetMacro(PointSpriteSize, float); + + //! Set Point Sprite Minimum Size. + void SetPointSpriteMinSize( float ); + + //! Get Point Sprite Minimum Size. + vtkGetMacro(PointSpriteMinSize, float); + + //! Set Point Sprite Maximum Size. + void SetPointSpriteMaxSize( float ); + + //! Get Point Sprite Maximum Size. + vtkGetMacro(PointSpriteMaxSize, float); + + //! Set Point Sprite Magnification. + void SetPointSpriteMagnification( float ); + + //! Get Point Sprite Magnification. + vtkGetMacro(PointSpriteMagnification, float); + + //! Set Point Sprite AlphaThreshold. + void SetPointSpriteAlphaThreshold( float ); + + //! Get Point Sprite AlphaThreshold. + vtkGetMacro(PointSpriteAlphaThreshold, float); + + //! Set ImageData for Point Sprite Texture. + void SetImageData(vtkImageData* theImageData); + + //! Get ImageData for Point Sprite Texture. + vtkImageData* GetImageData(); + +protected: + VISU_OpenGLPointSpriteMapper(); + ~VISU_OpenGLPointSpriteMapper(); + + //! Internal method of the Point Sprites drawing. + void DrawPoints(vtkPoints *p, + vtkUnsignedCharArray *c, + vtkFloatArray *alpha, + vtkIdType &cellNum, + int &noAbort, + vtkCellArray *ca, + vtkRenderer *ren, + vtkActor *act); + + //! Initializing OpenGL extensions. + bool InitExtensions(); + + //! Activate Point Sprites. + void InitPointSprites(); + + //! Deactivate Point Sprites. + void CleanupPointSprites(); + + //! Initializing textures for Point Sprites. + void InitTextures(); + + //! Initializing of the Vertex Shader. + void InitShader(); + + //! Set Vertex Shader variable. + void SetShaderVariable( const char* variable, float value ); + + //! Getting information about Vertex Shader compiling and linking. + void PrintInfoLog( GLhandleARB ); + +private: + bool UseOpenGLMapper; + + bool UsePointSprites; + bool UseTextures; + bool UseShader; + + int RenderMode; + int ListId; + vtkIdType TotalCells; + int ExtensionsInitialized; + float DefaultPointSize; + + GLhandleARB VertexProgram; + + int PrimitiveType; + + int PointSpriteMode; + + float PointSpriteClamp; + float PointSpriteSize; + float PointSpriteMinSize; + float PointSpriteMaxSize; + float PointSpriteMagnification; + + GLuint PointSpriteTexture; + float PointSpriteAlphaThreshold; + + float AverageCellSize; + + vtkSmartPointer ImageData; + vtkPolyDataMapper* TempMapper; +}; + +#endif diff --git a/src/PIPELINE/VISU_PipeLine.cxx b/src/PIPELINE/VISU_PipeLine.cxx index d670a681..9fcd66fd 100644 --- a/src/PIPELINE/VISU_PipeLine.cxx +++ b/src/PIPELINE/VISU_PipeLine.cxx @@ -40,6 +40,7 @@ #include #include #include +#include #include #include @@ -51,70 +52,115 @@ static int MYDEBUG = 0; static int MYDEBUG = 0; #endif -VISU_PipeLine::VISU_PipeLine() +VISU_PipeLine +::VISU_PipeLine(): + myMapper(vtkDataSetMapper::New()), + myExtractGeometry(SALOME_ExtractGeometry::New()) { - if(MYDEBUG) MESSAGE("VISU_PipeLine - "<Delete(); + // Clipping planes - myExtractGeometry = SALOME_ExtractGeometry::New(); - //myExtractGeometry->SetReleaseDataFlag(true); myExtractGeometry->Delete(); - //myExtractGeometry->DebugOn(); + myExtractGeometry->SetStoreMapping(true); vtkImplicitBoolean* anImplicitBoolean = vtkImplicitBoolean::New(); - myExtractGeometry->SetImplicitBoolean(anImplicitBoolean); + myExtractGeometry->SetImplicitFunction(anImplicitBoolean); anImplicitBoolean->SetOperationTypeToIntersection(); anImplicitBoolean->Delete(); - // Mapper - myMapper = TMapper::New(); - myInput = NULL; - myIsShrinkable = false; - SetDebug(MYVTKDEBUG); } -VISU_PipeLine::~VISU_PipeLine() +VISU_PipeLine +::~VISU_PipeLine() { - if(MYDEBUG) MESSAGE("~VISU_PipeLine - "<Delete(); + if(MYDEBUG) MESSAGE("VISU_PipeLine::~VISU_PipeLine - "<GetInput()); - myMapper->ShallowCopy(thePipeLine->GetMapper()); - myExtractGeometry->SetImplicitBoolean(thePipeLine->myExtractGeometry->GetImplicitBoolean()); +// Turn debugging output on. +void +VISU_PipeLine +::DebugOn() +{ + myExtractGeometry->DebugOn(); + Superclass::DebugOn(); +} + +// Turn debugging output off. +void +VISU_PipeLine +::DebugOff() +{ + myExtractGeometry->DebugOff(); + Superclass::DebugOff(); +} + +void +VISU_PipeLine +::ShallowCopy(VISU_PipeLine *thePipeLine) +{ + SetImplicitFunction(thePipeLine->GetImplicitFunction()); + + // To restore mapper input from pipeline + vtkDataSet* aDatsSet = myMapper->GetInput(); + GetMapper()->ShallowCopy(thePipeLine->GetMapper()); + myMapper->SetInput(aDatsSet); + Build(); } -void VISU_PipeLine::SameAs(VISU_PipeLine *thePipeLine){ +void +VISU_PipeLine +::SameAs(VISU_PipeLine *thePipeLine) +{ ShallowCopy(thePipeLine); - myExtractGeometry->SetImplicitBoolean(vtkImplicitBoolean::New()); - myExtractGeometry->GetImplicitBoolean()->Delete(); + SetImplicitFunction(vtkImplicitBoolean::New()); + GetImplicitFunction()->Delete(); } -TInput* VISU_PipeLine::GetInput() const +TInput* +VISU_PipeLine +::GetInput() const { - return myInput; + return myInput.GetPointer(); } -TInput* VISU_PipeLine::GetInput2() const +vtkDataSet* +VISU_PipeLine +::GetOutput() +{ + return GetMapper()->GetInput(); +} + +TInput* +VISU_PipeLine +::GetInput2() const { vtkUnstructuredGrid* aDataSet = myExtractGeometry->GetOutput(); aDataSet->Update(); return aDataSet; } -void VISU_PipeLine::SetInput(TInput* theInput) +void +VISU_PipeLine +::SetInput(TInput* theInput) { + if(theInput) + theInput->Update(); + myExtractGeometry->SetInput(theInput); - if((myInput = theInput)) - myInput->Update(); + myInput = theInput; Modified(); } -VISU_PipeLine::TMapper* VISU_PipeLine::GetMapper() +VISU_PipeLine::TMapper* +VISU_PipeLine +::GetMapper() { if(GetInput()){ if(!myMapper->GetInput()){ @@ -123,15 +169,19 @@ VISU_PipeLine::TMapper* VISU_PipeLine::GetMapper() } myMapper->Update(); } - return myMapper; + return myMapper.GetPointer(); } -void VISU_PipeLine::Update() +void +VISU_PipeLine +::Update() { myMapper->Update(); } -int VISU_PipeLine::CheckAvailableMemory(const float& theSize) +int +VISU_PipeLine +::CheckAvailableMemory(const float& theSize) { try{ if(theSize > ULONG_MAX) return 0; @@ -152,7 +202,10 @@ int VISU_PipeLine::CheckAvailableMemory(const float& theSize) return 0; } -float VISU_PipeLine::GetAvailableMemory(float theSize, float theMinSize) +float +VISU_PipeLine +::GetAvailableMemory(float theSize, + float theMinSize) { while(!CheckAvailableMemory(theSize)) if(theSize > theMinSize) @@ -163,8 +216,9 @@ float VISU_PipeLine::GetAvailableMemory(float theSize, float theMinSize) } //------------------------ Clipping planes ----------------------------------- - -bool VISU_PipeLine::AddClippingPlane(vtkPlane* thePlane) +bool +VISU_PipeLine +::AddClippingPlane(vtkPlane* thePlane) { if (thePlane) { if (vtkImplicitBoolean* aBoolean = myExtractGeometry->GetImplicitBoolean()) { @@ -182,7 +236,9 @@ bool VISU_PipeLine::AddClippingPlane(vtkPlane* thePlane) return true; } -vtkPlane* VISU_PipeLine::GetClippingPlane(vtkIdType theID) const +vtkPlane* +VISU_PipeLine +::GetClippingPlane(vtkIdType theID) const { vtkPlane* aPlane = NULL; if(theID >= 0 && theID < GetNumberOfClippingPlanes()){ @@ -198,7 +254,9 @@ vtkPlane* VISU_PipeLine::GetClippingPlane(vtkIdType theID) const return aPlane; } -void VISU_PipeLine::RemoveAllClippingPlanes() +void +VISU_PipeLine +::RemoveAllClippingPlanes() { if(vtkImplicitBoolean* aBoolean = myExtractGeometry->GetImplicitBoolean()){ vtkImplicitFunctionCollection* aFunction = aBoolean->GetFunction(); @@ -207,7 +265,9 @@ void VISU_PipeLine::RemoveAllClippingPlanes() } } -vtkIdType VISU_PipeLine::GetNumberOfClippingPlanes() const +vtkIdType +VISU_PipeLine +::GetNumberOfClippingPlanes() const { if(vtkImplicitBoolean* aBoolean = myExtractGeometry->GetImplicitBoolean()){ vtkImplicitFunctionCollection* aFunction = aBoolean->GetFunction(); @@ -216,9 +276,13 @@ vtkIdType VISU_PipeLine::GetNumberOfClippingPlanes() const return 0; } -static void ComputeBoundsParam (vtkDataSet* theDataSet, - float theDirection[3], float theMinPnt[3], - float& theMaxBoundPrj, float& theMinBoundPrj) +static +void +ComputeBoundsParam (vtkDataSet* theDataSet, + float theDirection[3], + float theMinPnt[3], + float& theMaxBoundPrj, + float& theMinBoundPrj) { float aBounds[6]; theDataSet->GetBounds(aBounds); @@ -260,8 +324,12 @@ static void ComputeBoundsParam (vtkDataSet* theDataSet, theMinPnt[2] = aMinPnt[2]; } -static void DistanceToPosition (vtkDataSet* theDataSet, - float theDirection[3], float theDist, float thePos[3]) +static +void +DistanceToPosition(vtkDataSet* theDataSet, + float theDirection[3], + float theDist, + float thePos[3]) { float aMaxBoundPrj, aMinBoundPrj, aMinPnt[3]; ComputeBoundsParam(theDataSet,theDirection,aMinPnt,aMaxBoundPrj,aMinBoundPrj); @@ -271,8 +339,12 @@ static void DistanceToPosition (vtkDataSet* theDataSet, thePos[2] = aMinPnt[2]-theDirection[2]*aLength; } -static void PositionToDistance (vtkDataSet* theDataSet, - float theDirection[3], float thePos[3], float& theDist) +static +void +PositionToDistance (vtkDataSet* theDataSet, + float theDirection[3], + float thePos[3], + float& theDist) { float aMaxBoundPrj, aMinBoundPrj, aMinPnt[3]; ComputeBoundsParam(theDataSet,theDirection,aMinPnt,aMaxBoundPrj,aMinBoundPrj); @@ -280,7 +352,11 @@ static void PositionToDistance (vtkDataSet* theDataSet, theDist = (aPrj-aMinBoundPrj)/(aMaxBoundPrj-aMinBoundPrj); } -void VISU_PipeLine::SetPlaneParam (float theDir[3], float theDist, vtkPlane* thePlane) +void +VISU_PipeLine +::SetPlaneParam(float theDir[3], + float theDist, + vtkPlane* thePlane) { thePlane->SetNormal(theDir); float anOrigin[3]; @@ -288,7 +364,11 @@ void VISU_PipeLine::SetPlaneParam (float theDir[3], float theDist, vtkPlane* the thePlane->SetOrigin(anOrigin); } -void VISU_PipeLine::GetPlaneParam (float theDir[3], float& theDist, vtkPlane* thePlane) +void +VISU_PipeLine +::GetPlaneParam(float theDir[3], + float& theDist, + vtkPlane* thePlane) { thePlane->GetNormal(theDir); @@ -301,7 +381,9 @@ void VISU_PipeLine::GetPlaneParam (float theDir[3], float& theDist, vtkPlane* th //function : IsPlanarInput //purpose : //======================================================================= -bool VISU_PipeLine::IsPlanarInput() const +bool +VISU_PipeLine +::IsPlanarInput() const { float aBounds[6]; GetInput()->GetBounds( aBounds ); // xmin,xmax, ymin,ymax, zmin,zmax @@ -312,3 +394,89 @@ bool VISU_PipeLine::IsPlanarInput() const return false; } + +//======================================================================= +vtkIdType +VISU_PipeLine +::GetNodeObjID(vtkIdType theID) +{ + vtkIdType anID = myExtractGeometry->GetNodeObjId(theID); + return myIDMapper->GetNodeObjID(anID); +} + +vtkIdType +VISU_PipeLine +::GetNodeVTKID(vtkIdType theID) +{ + vtkIdType anID = myIDMapper->GetNodeVTKID(theID); + return myExtractGeometry->GetNodeVTKId(anID); +} + +float* +VISU_PipeLine +::GetNodeCoord(int theObjID) +{ + return myIDMapper->GetNodeCoord(theObjID); +} + +//======================================================================= +vtkIdType +VISU_PipeLine +::GetElemObjID(vtkIdType theID) +{ + vtkIdType anID = myExtractGeometry->GetElemObjId(theID); + return myIDMapper->GetElemObjID(anID); +} + +vtkIdType +VISU_PipeLine +::GetElemVTKID(vtkIdType theID) +{ + vtkIdType anID = myIDMapper->GetElemVTKID(theID); + return myExtractGeometry->GetElemVTKId(anID); +} + +vtkCell* +VISU_PipeLine +::GetElemCell(vtkIdType theObjID) +{ + return myIDMapper->GetElemCell(theObjID); +} + +//======================================================================= +void +VISU_PipeLine +::SetIDMapper(const VISU::PIDMapper& theIDMapper) +{ + myIDMapper = theIDMapper; + SetInput(myIDMapper->GetVTKOutput()); +} + +const VISU::PIDMapper& +VISU_PipeLine +::GetIDMapper() const +{ + return myIDMapper; +} + +//======================================================================= +void +VISU_PipeLine +::SetImplicitFunction(vtkImplicitFunction *theFunction) +{ + myExtractGeometry->SetImplicitFunction(theFunction); +} + +vtkImplicitFunction * +VISU_PipeLine +::GetImplicitFunction() +{ + return myExtractGeometry->GetImplicitFunction(); +} + +SALOME_ExtractGeometry* +VISU_PipeLine +::GetExtractGeometryFilter() +{ + return myExtractGeometry.GetPointer(); +} diff --git a/src/PIPELINE/VISU_PipeLine.hxx b/src/PIPELINE/VISU_PipeLine.hxx index 4dd6db6e..5e2a1ed8 100644 --- a/src/PIPELINE/VISU_PipeLine.hxx +++ b/src/PIPELINE/VISU_PipeLine.hxx @@ -27,35 +27,50 @@ #ifndef VISU_PipeLine_HeaderFile #define VISU_PipeLine_HeaderFile +#include #include #include -#include +#include "VISU_IDMapper.hxx" + +class vtkCell; +class vtkDataSet; +class vtkImplicitFunction; template class TVTKSmartPtr: public vtkSmartPointer { public: - TVTKSmartPtr() {} - TVTKSmartPtr(T* r, bool theIsOwner = false): vtkSmartPointer(r) { + TVTKSmartPtr() + {} + + TVTKSmartPtr(T* r, bool theIsOwner = false): vtkSmartPointer(r) + { if(r && theIsOwner) r->Delete(); } - TVTKSmartPtr& operator()(T* r, bool theIsOwner = false){ + + TVTKSmartPtr& operator()(T* r, bool theIsOwner = false) + { vtkSmartPointer::operator=(r); if(r && theIsOwner) r->Delete(); return *this; } - TVTKSmartPtr& operator=(T* r){ + + TVTKSmartPtr& operator=(T* r) + { vtkSmartPointer::operator=(r); return *this; } - operator T* () const { + + operator T* () const + { return vtkSmartPointer::GetPointer(); } }; +class vtkMapper; class vtkDataSetMapper; class vtkUnstructuredGrid; class vtkExtractGeometry; @@ -64,54 +79,151 @@ class vtkPlane; class SALOME_ExtractGeometry; -typedef vtkUnstructuredGrid TInput; +typedef VISU::TVTKOutput TInput; class VISU_PipeLine : public vtkObject{ public: vtkTypeMacro(VISU_PipeLine,vtkObject); - virtual ~VISU_PipeLine(); + virtual + ~VISU_PipeLine(); + + virtual + void + DebugOn(); - virtual void ShallowCopy(VISU_PipeLine *thePipeLine); - virtual void SameAs(VISU_PipeLine *thePipeLine); + virtual + void + DebugOff(); + + virtual + void + ShallowCopy(VISU_PipeLine *thePipeLine); + + virtual + void + SameAs(VISU_PipeLine *thePipeLine); public: - virtual void SetInput(TInput* theInput); - virtual TInput* GetInput() const; + virtual + void + SetInput(TInput* theInput); + + virtual + TInput* + GetInput() const; + + virtual + vtkDataSet* + GetOutput(); - bool IsPlanarInput() const; + bool + IsPlanarInput() const; - typedef vtkDataSetMapper TMapper; - virtual TMapper* GetMapper(); + typedef vtkMapper TMapper; - virtual void Init() = 0; - virtual void Update(); + virtual + TMapper* + GetMapper(); - static int CheckAvailableMemory(const float& theSize); - static float GetAvailableMemory(float theSize = 16*1024*1024.0, - float theMinSize = 1024*1024.0); + virtual + void + Init() = 0; + + virtual + void + Update(); + + static + int + CheckAvailableMemory(const float& theSize); + + static + float + GetAvailableMemory(float theSize = 16*1024*1024.0, + float theMinSize = 1024*1024.0); // Clipping planes - void RemoveAllClippingPlanes(); - vtkIdType GetNumberOfClippingPlanes() const; - bool AddClippingPlane(vtkPlane* thePlane); - vtkPlane* GetClippingPlane(vtkIdType theID) const; + void + RemoveAllClippingPlanes(); + + vtkIdType + GetNumberOfClippingPlanes() const; - void SetPlaneParam(float theDir[3], float theDist, vtkPlane* thePlane); - void GetPlaneParam(float theDir[3], float& theDist, vtkPlane* thePlane); + bool + AddClippingPlane(vtkPlane* thePlane); - bool IsShrinkable() { return myIsShrinkable; } + vtkPlane* + GetClippingPlane(vtkIdType theID) const; + + void + SetPlaneParam(float theDir[3], + float theDist, + vtkPlane* thePlane); + + void + GetPlaneParam(float theDir[3], + float& theDist, + vtkPlane* thePlane); + + bool + IsShrinkable() { return myIsShrinkable; } + + virtual + vtkIdType + GetNodeObjID(vtkIdType theID); + + virtual + vtkIdType + GetNodeVTKID(vtkIdType theID); + + virtual + float* + GetNodeCoord(vtkIdType theObjID); + + virtual + vtkIdType + GetElemObjID(vtkIdType theID); + + virtual + vtkIdType + GetElemVTKID(vtkIdType theID); + + virtual + vtkCell* + GetElemCell(vtkIdType theObjID); + + void + SetIDMapper(const VISU::PIDMapper& theIDMapper); + + const VISU::PIDMapper& + GetIDMapper()const; + + void + SetImplicitFunction(vtkImplicitFunction *theFunction); + + vtkImplicitFunction* + GetImplicitFunction(); + + SALOME_ExtractGeometry* + GetExtractGeometryFilter(); protected: VISU_PipeLine(); VISU_PipeLine(const VISU_PipeLine&); - virtual TInput* GetInput2() const; - virtual void Build() = 0; + virtual + TInput* + GetInput2() const; + + virtual + void + Build() = 0; bool myIsShrinkable; - TInput *myInput; - TMapper *myMapper; + TVTKSmartPtr myInput; + VISU::PIDMapper myIDMapper; + TVTKSmartPtr myMapper; // Clipping planes TVTKSmartPtr myExtractGeometry; diff --git a/src/PIPELINE/VISU_PipeLineUtils.hxx b/src/PIPELINE/VISU_PipeLineUtils.hxx index df7c8219..7b252350 100644 --- a/src/PIPELINE/VISU_PipeLineUtils.hxx +++ b/src/PIPELINE/VISU_PipeLineUtils.hxx @@ -59,10 +59,12 @@ namespace VISU{ void Mul(const float A[3], float b, float C[3]); // C = A * b void Sub(const float A[3], const float B[3], float C[3]); // C = A - B - template void CellDataToPoint(TItem* theTItem, - vtkCellDataToPointData *theFilter, - vtkDataSet* theDataSet, - VISU_FieldTransform *theFieldTransform) + template + void + CellDataToPoint(TItem* theTItem, + vtkCellDataToPointData *theFilter, + vtkDataSet* theDataSet, + VISU_FieldTransform *theFieldTransform) { if(theDataSet->GetCellData()->GetNumberOfArrays()){ theFilter->SetInput(theFieldTransform->GetUnstructuredGridOutput()); @@ -72,10 +74,12 @@ namespace VISU{ theTItem->SetInput(theFieldTransform->GetUnstructuredGridOutput()); } - template void ToCellCenters(TItem* theTItem, - vtkCellCenters *theFilter, - vtkDataSet* theDataSet, - VISU_FieldTransform *theFieldTransform) + template + void + ToCellCenters(TItem* theTItem, + vtkCellCenters *theFilter, + vtkDataSet* theDataSet, + VISU_FieldTransform *theFieldTransform) { if(theDataSet->GetCellData()->GetNumberOfArrays()){ theFilter->SetInput(theFieldTransform->GetUnstructuredGridOutput()); diff --git a/src/PIPELINE/VISU_PlanesWidget.cxx b/src/PIPELINE/VISU_PlanesWidget.cxx new file mode 100644 index 00000000..93efa07b --- /dev/null +++ b/src/PIPELINE/VISU_PlanesWidget.cxx @@ -0,0 +1,1614 @@ +// SALOME VTKViewer : build VTK viewer into Salome desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : VVTK_ImplicitFunctionWidget.cxx +// Author : Peter KURNEV +// Module : SALOME +// $Header$ + +#include "VISU_PlanesWidget.hxx" +#include "VISU_ImplicitFunctionWidget.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 + +static + bool IsValidPlane2Position(vtkPlane *pPx, + vtkDataSet *pDataSet, + float aTol=0.003); +static + void GetBndPoints(vtkDataSet *pDataSet, + float aPnts[24]); +static + float DistanceToPlane(const float x[3], + const float n[3], + const float p0[3]); + +vtkCxxRevisionMacro(VISU_PlanesWidget, "$Revision$"); +vtkStandardNewMacro(VISU_PlanesWidget); + +//================================================================== +// function: VISU_PlanesWidget +// purpose : +//================================================================== +VISU_PlanesWidget::VISU_PlanesWidget() +: + VISU_ImplicitFunctionWidget() +{ + State = VISU_PlanesWidget::Start; + EventCallbackCommand->SetCallback(VISU_PlanesWidget::ProcessEvents); + + NormalToXAxis = 0; + NormalToYAxis = 0; + NormalToZAxis = 0; + + HandleMoveEvent = true; + HandleLeftButtonEvent = true; + HandleMiddleButtonEvent = false; + HandleRightButtonEvent = false; + + // Build the representation of the widget + // + myPlane1 = vtkPlane::New(); + myPlane1->SetNormal(0,0,1); + myPlane1->SetOrigin(0,0,0); + // + myDistance = 10.; + myPlane2 = vtkPlane::New(); + myPlane2->SetNormal(0.,0.,-1.); + myPlane2->SetOrigin(0,0,myDistance); + // + myImplicitFunction = vtkImplicitBoolean::New(); + myImplicitFunction->SetOperationType(VTK_UNION); + // + myBox = vtkImageData::New(); + myBox->SetDimensions(2,2,2); + myOutline = vtkOutlineFilter::New(); + myOutline->SetInput(myBox); + myOutlineMapper = vtkPolyDataMapper::New(); + myOutlineMapper->SetInput(myOutline->GetOutput()); + myOutlineActor = vtkActor::New(); + this->myOutlineActor->SetMapper(this->myOutlineMapper); + this->myOutlineActor->PickableOff(); + this->OutlineTranslation = 0; + + this->myCutter1 = vtkCutter::New(); + this->myCutter1->SetInput(myBox); + this->myCutter1->SetCutFunction(myPlane1); + this->myCutMapper1 = vtkPolyDataMapper::New(); + this->myCutMapper1->SetInput(this->myCutter1->GetOutput()); + this->myCutActor1 = vtkActor::New(); + this->myCutActor1->SetMapper(this->myCutMapper1); + this->myDrawPlane = 1; + + this->myEdges1 = vtkFeatureEdges::New(); + myEdges1->SetColoring(0); + this->myEdges1->SetInput(this->myCutter1->GetOutput()); + this->myEdgesMapper1 = vtkPolyDataMapper::New(); + this->myEdgesMapper1->SetInput(this->myEdges1->GetOutput()); + this->myEdgesActor1 = vtkActor::New(); + this->myEdgesActor1->SetMapper(this->myEdgesMapper1); + myEdgesActor1->GetProperty()->SetLineWidth(4.); + myEdgesActor1->GetProperty()->SetColor(0., .5, .7); + + this->myCutter2 = vtkCutter::New(); + this->myCutter2->SetInput(myBox); + this->myCutter2->SetCutFunction(this->myPlane2); + this->myCutMapper2 = vtkPolyDataMapper::New(); + this->myCutMapper2->SetInput(this->myCutter2->GetOutput()); + this->myCutActor2 = vtkActor::New(); + this->myCutActor2->SetMapper(this->myCutMapper2); + + myEdges2 = vtkFeatureEdges::New(); + myEdges2->SetColoring(0); + myEdges2->SetInput(myCutter2->GetOutput()); + myEdgesMapper2 = vtkPolyDataMapper::New(); + myEdgesMapper2->SetInput(myEdges2->GetOutput()); + myEdgesActor2 = vtkActor::New(); + myEdgesActor2->SetMapper(myEdgesMapper2); + myEdgesActor2->GetProperty()->SetLineWidth(4.); + myEdgesActor2->GetProperty()->SetColor(.7, .0, .0); + + // Create the + plane normal + this->LineSource = vtkLineSource::New(); + this->LineSource->SetResolution(1); + this->LineMapper = vtkPolyDataMapper::New(); + this->LineMapper->SetInput(this->LineSource->GetOutput()); + this->LineActor = vtkActor::New(); + this->LineActor->SetMapper(this->LineMapper); + + this->ConeSource = vtkConeSource::New(); + this->ConeSource->SetResolution(12); + this->ConeSource->SetAngle(20.); + this->ConeMapper = vtkPolyDataMapper::New(); + this->ConeMapper->SetInput(this->ConeSource->GetOutput()); + this->ConeActor = VISU_UnScaledActor::New(); + this->ConeActor->SetMapper(this->ConeMapper); + ConeActor->SetSize(36); + ConeActor->SetCenter(ConeSource->GetCenter()); + + // Create the - plane normal + this->LineSource2 = vtkLineSource::New(); + this->LineSource2->SetResolution(1); + this->LineMapper2 = vtkPolyDataMapper::New(); + this->LineMapper2->SetInput(this->LineSource2->GetOutput()); + this->LineActor2 = vtkActor::New(); + this->LineActor2->SetMapper(this->LineMapper2); + + this->ConeSource2 = vtkConeSource::New(); + this->ConeSource2->SetResolution(12); + this->ConeSource2->SetAngle(20.); + this->ConeMapper2 = vtkPolyDataMapper::New(); + this->ConeMapper2->SetInput(this->ConeSource2->GetOutput()); + this->ConeActor2 = VISU_UnScaledActor::New(); + this->ConeActor2->SetMapper(this->ConeMapper2); + ConeActor2->SetSize(36); + ConeActor2->SetCenter(ConeSource2->GetCenter()); + + // Create the origin handle + this->Sphere = vtkSphereSource::New(); + this->Sphere->SetThetaResolution(16); + this->Sphere->SetPhiResolution(8); + this->SphereMapper = vtkPolyDataMapper::New(); + this->SphereMapper->SetInput(this->Sphere->GetOutput()); + this->SphereActor = VISU_UnScaledActor::New(); + this->SphereActor->SetMapper(this->SphereMapper); + SphereActor->SetSize(36); + SphereActor->SetCenter(Sphere->GetCenter()); + + this->Transform = vtkTransform::New(); + + // Define the point coordinates + float bounds[6]; + bounds[0] = -0.5; + bounds[1] = 0.5; + bounds[2] = -0.5; + bounds[3] = 0.5; + bounds[4] = -0.5; + bounds[5] = 0.5; + + // Initial creation of the widget, serves to initialize it + this->PlaceWidget(bounds); + + //Manage the picking stuff + this->Picker = vtkCellPicker::New(); + this->Picker->SetTolerance(0.005); + this->Picker->AddPickList(this->myCutActor1); + this->Picker->AddPickList(this->myCutActor2); + this->Picker->AddPickList(this->LineActor); + this->Picker->AddPickList(this->ConeActor); + this->Picker->AddPickList(this->LineActor2); + this->Picker->AddPickList(this->ConeActor2); + this->Picker->AddPickList(this->SphereActor); + this->Picker->AddPickList(this->myOutlineActor); + this->Picker->PickFromListOn(); + + // Set up the initial properties + this->CreateDefaultProperties(); + +} +//================================================================== +// function: ~ +// purpose : +//================================================================== +VISU_PlanesWidget::~VISU_PlanesWidget() +{ + myPlane1->Delete(); + + this->myPlane2->Delete(); + this->myImplicitFunction->Delete(); + + myBox->Delete(); + this->myOutline->Delete(); + this->myOutlineMapper->Delete(); + this->myOutlineActor->Delete(); + + this->myCutter1->Delete(); + this->myCutMapper1->Delete(); + this->myCutActor1->Delete(); + + this->myEdges1->Delete(); + this->myEdgesMapper1->Delete(); + this->myEdgesActor1->Delete(); + + myCutter2->Delete(); + myCutMapper2->Delete(); + myCutActor2->Delete(); + + myEdges2->Delete(); + myEdgesMapper2->Delete(); + myEdgesActor2->Delete(); + + this->LineSource->Delete(); + this->LineMapper->Delete(); + this->LineActor->Delete(); + + this->ConeSource->Delete(); + this->ConeMapper->Delete(); + this->ConeActor->Delete(); + + this->LineSource2->Delete(); + this->LineMapper2->Delete(); + this->LineActor2->Delete(); + + this->ConeSource2->Delete(); + this->ConeMapper2->Delete(); + this->ConeActor2->Delete(); + + this->Sphere->Delete(); + this->SphereMapper->Delete(); + this->SphereActor->Delete(); + + this->Transform->Delete(); + + this->Picker->Delete(); + + this->NormalProperty->Delete(); + this->SelectedNormalProperty->Delete(); + this->PlaneProperty->Delete(); + this->SelectedPlaneProperty->Delete(); + this->OutlineProperty->Delete(); + this->SelectedOutlineProperty->Delete(); + this->EdgesProperty->Delete(); +} +//================================================================== +// function: ImplicitFunction +// purpose : +//================================================================== +vtkImplicitFunction* VISU_PlanesWidget::ImplicitFunction() +{ + return this->myImplicitFunction; +} +//================================================================== +// function: SetDistance +// purpose : +//================================================================== +void VISU_PlanesWidget::SetDistance(const float theDistance) +{ + if( theDistance <= 0.0 || theDistance == myDistance ) + return; + + myDistance=theDistance; + // + float *origin, *normal, oNew[3], aN2[3]; + origin = myPlane1->GetOrigin(); + normal = myPlane1->GetNormal(); + vtkMath::Normalize(normal); + oNew[0] = origin[0] + myDistance*normal[0]; + oNew[1] = origin[1] + myDistance*normal[1]; + oNew[2] = origin[2] + myDistance*normal[2]; + myPlane2->SetOrigin(oNew); + aN2[0] = -normal[0]; + aN2[1] = -normal[1]; + aN2[2] = -normal[2]; + myPlane2->SetNormal(aN2); +} +//================================================================== +// function: Distance +// purpose : +//================================================================== +float VISU_PlanesWidget::Distance()const +{ + return myDistance; +} +//================================================================== +// function: SetEnabled +// purpose : +//================================================================== +void VISU_PlanesWidget::SetEnabled(int enabling) +{ + if ( ! this->Interactor ) { + vtkErrorMacro(<<"The interactor must be set prior to enabling/disabling widget"); + return; + } + + if ( enabling ) {//------------------------------------------------------------ + vtkDebugMacro(<<"Enabling plane widget"); + + if ( this->Enabled ){ //already enabled, just return + return; + } + + if ( ! this->CurrentRenderer ){ + this->CurrentRenderer = this->Interactor->FindPokedRenderer( + this->Interactor->GetLastEventPosition()[0], + this->Interactor->GetLastEventPosition()[1]); + if (this->CurrentRenderer == NULL) { + return; + } + } + // + vtkCamera *pCamera=CurrentRenderer->GetActiveCamera(); + pCamera->SetParallelProjection(1); + // + this->myImplicitFunction->AddFunction(myPlane1); + this->myImplicitFunction->AddFunction(this->myPlane2); + + this->Enabled = 1; + + // listen for the following events + vtkRenderWindowInteractor *i = this->Interactor; + if( this->HandleMoveEvent ) { + i->AddObserver(vtkCommand::MouseMoveEvent, + this->EventCallbackCommand, + this->Priority); + } + if( this->HandleLeftButtonEvent ) { + i->AddObserver(vtkCommand::LeftButtonPressEvent, + this->EventCallbackCommand, + this->Priority); + i->AddObserver(vtkCommand::LeftButtonReleaseEvent, + this->EventCallbackCommand, + this->Priority); + } + if( this->HandleMiddleButtonEvent ) { + i->AddObserver(vtkCommand::MiddleButtonPressEvent, + this->EventCallbackCommand, + this->Priority); + i->AddObserver(vtkCommand::MiddleButtonReleaseEvent, + this->EventCallbackCommand, + this->Priority); + } + if( this->HandleRightButtonEvent ) { + i->AddObserver(vtkCommand::RightButtonPressEvent, + this->EventCallbackCommand, + this->Priority); + i->AddObserver(vtkCommand::RightButtonReleaseEvent, + this->EventCallbackCommand, + this->Priority); + } + // add the outline + this->CurrentRenderer->AddActor(this->myOutlineActor); + this->myOutlineActor->SetProperty(this->OutlineProperty); + + // add the edges + this->CurrentRenderer->AddActor(this->myEdgesActor1); + this->CurrentRenderer->AddActor(myEdgesActor2); + + this->myOutlineActor->SetProperty(this->EdgesProperty); + + // add the normal vector + this->CurrentRenderer->AddActor(this->LineActor); + this->LineActor->SetProperty(this->NormalProperty); + this->CurrentRenderer->AddActor(this->ConeActor); + this->ConeActor->SetProperty(this->NormalProperty); + + this->CurrentRenderer->AddActor(this->LineActor2); + this->LineActor2->SetProperty(this->NormalProperty); + this->CurrentRenderer->AddActor(this->ConeActor2); + this->ConeActor2->SetProperty(this->NormalProperty); + + // add the origin handle + this->CurrentRenderer->AddActor(this->SphereActor); + this->SphereActor->SetProperty(this->NormalProperty); + + // add the plane (if desired) + if ( this->myDrawPlane ) { + this->CurrentRenderer->AddActor(this->myCutActor1); + this->CurrentRenderer->AddActor(this->myCutActor2); + } + this->myCutActor1->SetProperty(this->PlaneProperty); + myCutActor2->SetProperty(this->PlaneProperty); + + this->UpdateRepresentation(); + //this->SizeHandles(); + this->InvokeEvent(vtkCommand::EnableEvent,NULL); + } + + else {//disabling---------------------------------------------------------- + vtkDebugMacro(<<"Disabling plane widget"); + + if ( ! this->Enabled ) {//already disabled, just return + return; + } + + if(vtkImplicitFunctionCollection* aFunction = this->myImplicitFunction->GetFunction()){ + aFunction->RemoveAllItems(); + this->myImplicitFunction->Modified(); // VTK bug + } + + this->Enabled = 0; + + // don't listen for events any more + this->Interactor->RemoveObserver(this->EventCallbackCommand); + + // turn off the various actors + this->CurrentRenderer->RemoveActor(this->myOutlineActor); + this->CurrentRenderer->RemoveActor(this->myEdgesActor1); + this->CurrentRenderer->RemoveActor(myEdgesActor2); + this->CurrentRenderer->RemoveActor(this->LineActor); + this->CurrentRenderer->RemoveActor(this->ConeActor); + this->CurrentRenderer->RemoveActor(this->LineActor2); + this->CurrentRenderer->RemoveActor(this->ConeActor2); + this->CurrentRenderer->RemoveActor(this->SphereActor); + this->CurrentRenderer->RemoveActor(this->myCutActor1); + this->CurrentRenderer->RemoveActor(myCutActor2); + + this->InvokeEvent(vtkCommand::DisableEvent,NULL); + this->CurrentRenderer = NULL; + } + + this->Interactor->Render(); +} +//================================================================== +// function: ProcessEvents +// purpose : +//================================================================== +void VISU_PlanesWidget::ProcessEvents(vtkObject* vtkNotUsed(object), + unsigned long event, + void* clientdata, + void* vtkNotUsed(calldata)) +{ + VISU_PlanesWidget* self = + reinterpret_cast( clientdata ); + + //okay, let's do the right thing + switch(event) + { + case vtkCommand::LeftButtonPressEvent: + self->OnLeftButtonDown(); + break; + case vtkCommand::LeftButtonReleaseEvent: + self->OnLeftButtonUp(); + break; + case vtkCommand::MiddleButtonPressEvent: + self->OnMiddleButtonDown(); + break; + case vtkCommand::MiddleButtonReleaseEvent: + self->OnMiddleButtonUp(); + break; + case vtkCommand::RightButtonPressEvent: + self->OnRightButtonDown(); + break; + case vtkCommand::RightButtonReleaseEvent: + self->OnRightButtonUp(); + break; + case vtkCommand::MouseMoveEvent: + self->OnMouseMove(); + break; + default: + break; + } +} +//================================================================== +// function: HighlightNormal +// purpose : +//================================================================== +void VISU_PlanesWidget::HighlightNormal(int highlight) +{ + if ( highlight ) { + this->LineActor->SetProperty(this->SelectedNormalProperty); + this->ConeActor->SetProperty(this->SelectedNormalProperty); + this->LineActor2->SetProperty(this->SelectedNormalProperty); + this->ConeActor2->SetProperty(this->SelectedNormalProperty); + this->SphereActor->SetProperty(this->SelectedNormalProperty); + } + else + { + this->LineActor->SetProperty(this->NormalProperty); + this->ConeActor->SetProperty(this->NormalProperty); + this->LineActor2->SetProperty(this->NormalProperty); + this->ConeActor2->SetProperty(this->NormalProperty); + this->SphereActor->SetProperty(this->NormalProperty); + } +} +//================================================================== +// function: HighlightPlane +// purpose : +//================================================================== +void VISU_PlanesWidget::HighlightPlane(int highlight) +{ + if ( highlight ) { + this->myCutActor1->SetProperty(this->SelectedPlaneProperty); + myCutActor2->SetProperty(this->SelectedPlaneProperty); + } + else { + this->myCutActor1->SetProperty(this->PlaneProperty); + myCutActor2->SetProperty(this->PlaneProperty); + } +} +//================================================================== +// function: HighlightOutline +// purpose : +//================================================================== +void VISU_PlanesWidget::HighlightOutline(int highlight) +{ + if (highlight) { + this->myOutlineActor->SetProperty(this->SelectedOutlineProperty); + } + else { + this->myOutlineActor->SetProperty(this->OutlineProperty); + } +} +//================================================================== +// function: OnLeftButtonDown +// purpose : +//================================================================== +void VISU_PlanesWidget::OnLeftButtonDown() +{ + // We're only here if we are enabled + int X = this->Interactor->GetEventPosition()[0]; + int Y = this->Interactor->GetEventPosition()[1]; + // + // Okay, we can process this. See if we've picked anything. + // Make sure it's in the activated renderer + vtkRenderer *ren = this->Interactor->FindPokedRenderer(X,Y); + if ( ren != this->CurrentRenderer ) { + this->State = VISU_PlanesWidget::Outside; + return; + } + + vtkAssemblyPath *path; + this->Picker->Pick(X,Y,0.0,this->CurrentRenderer); + path = this->Picker->GetPath(); + + if ( path == NULL ) {//not picking this widget + this->HighlightPlane(0); + this->HighlightNormal(0); + this->HighlightOutline(0); + this->State = VISU_PlanesWidget::Outside; + return; + } + + vtkProp *prop = path->GetFirstNode()->GetProp(); + this->ValidPick = 1; + this->Picker->GetPickPosition(this->LastPickPosition); + // + if ( prop == this->ConeActor || prop == this->LineActor || + prop == this->ConeActor2 || prop == this->LineActor2 ) { + this->HighlightPlane(1); + this->HighlightNormal(1); + this->State = VISU_PlanesWidget::Rotating; + } + else if ( prop == this->myCutActor1) { + this->HighlightPlane(1); + this->State = VISU_PlanesWidget::Pushing; + } + else if ( prop == this->SphereActor ) { + this->HighlightNormal(1); + this->State = VISU_PlanesWidget::MovingOrigin; + } + else if (prop == myCutActor2) { + this->HighlightPlane(1); + this->State = VISU_PlanesWidget::ChangeDistance; + } + else { + if ( this->OutlineTranslation ) { + this->HighlightOutline(1); + this->State = VISU_PlanesWidget::MovingOutline; + } + } + + this->EventCallbackCommand->SetAbortFlag(1); + this->StartInteraction(); + this->InvokeEvent(vtkCommand::StartInteractionEvent,NULL); + this->Interactor->Render(); +} +//================================================================== +// function: OnLeftButtonUp +// purpose : +//================================================================== +void VISU_PlanesWidget::OnLeftButtonUp() +{ + if ( this->State == VISU_PlanesWidget::Outside ) { + return; + } + + this->State = VISU_PlanesWidget::Start; + this->HighlightPlane(0); + this->HighlightOutline(0); + this->HighlightNormal(0); + //this->SizeHandles(); + + this->EventCallbackCommand->SetAbortFlag(1); + this->EndInteraction(); + this->InvokeEvent(vtkCommand::EndInteractionEvent,NULL); + this->Interactor->Render(); +} +//================================================================== +// function: OnMiddleButtonDown +// purpose : +//================================================================== +void VISU_PlanesWidget::OnMiddleButtonDown() +{ + int X = this->Interactor->GetEventPosition()[0]; + int Y = this->Interactor->GetEventPosition()[1]; + + // Okay, we can process this. See if we've picked anything. + // Make sure it's in the activated renderer + vtkRenderer *ren = this->Interactor->FindPokedRenderer(X,Y); + if ( ren != this->CurrentRenderer ) { + this->State = VISU_PlanesWidget::Outside; + return; + } + + // Okay, we can process this. + vtkAssemblyPath *path; + this->Picker->Pick(X,Y,0.0,this->CurrentRenderer); + path = this->Picker->GetPath(); + + if ( path == NULL ) {//nothing picked + this->State = VISU_PlanesWidget::Outside; + return; + } + + this->ValidPick = 1; + this->Picker->GetPickPosition(this->LastPickPosition); + this->State = VISU_PlanesWidget::MovingPlane; + this->HighlightNormal(1); + this->HighlightPlane(1); + + this->EventCallbackCommand->SetAbortFlag(1); + this->StartInteraction(); + this->InvokeEvent(vtkCommand::StartInteractionEvent,NULL); + this->Interactor->Render(); +} +//================================================================== +// function: OnMiddleButtonUp +// purpose : +//================================================================== +void VISU_PlanesWidget::OnMiddleButtonUp() +{ + if ( this->State == VISU_PlanesWidget::Outside ) { + return; + } + + this->State = VISU_PlanesWidget::Start; + this->HighlightPlane(0); + this->HighlightOutline(0); + this->HighlightNormal(0); + //this->SizeHandles(); + + this->EventCallbackCommand->SetAbortFlag(1); + this->EndInteraction(); + this->InvokeEvent(vtkCommand::EndInteractionEvent,NULL); + this->Interactor->Render(); +} +//================================================================== +// function: OnRightButtonDown +// purpose : +//================================================================== +void VISU_PlanesWidget::OnRightButtonDown() +{ + this->State = VISU_PlanesWidget::Scaling; + + int X = this->Interactor->GetEventPosition()[0]; + int Y = this->Interactor->GetEventPosition()[1]; + + // Okay, we can process this. See if we've picked anything. + // Make sure it's in the activated renderer + vtkRenderer *ren = this->Interactor->FindPokedRenderer(X,Y); + if ( ren != this->CurrentRenderer ) { + this->State = VISU_PlanesWidget::Outside; + return; + } + + // Okay, we can process this. Try to pick handles first; + // if no handles picked, then pick the bounding box. + vtkAssemblyPath *path; + this->Picker->Pick(X,Y,0.0,this->CurrentRenderer); + path = this->Picker->GetPath(); + if ( path == NULL ){ //nothing picked + this->State = VISU_PlanesWidget::Outside; + return; + } + + this->ValidPick = 1; + this->Picker->GetPickPosition(this->LastPickPosition); + this->HighlightPlane(1); + this->HighlightOutline(1); + this->HighlightNormal(1); + + this->EventCallbackCommand->SetAbortFlag(1); + this->StartInteraction(); + this->InvokeEvent(vtkCommand::StartInteractionEvent,NULL); + this->Interactor->Render(); +} +//================================================================== +// function: OnRightButtonUp +// purpose : +//================================================================== +void VISU_PlanesWidget::OnRightButtonUp() +{ + if ( this->State == VISU_PlanesWidget::Outside ) { + return; + } + + this->State = VISU_PlanesWidget::Start; + this->HighlightPlane(0); + this->HighlightOutline(0); + this->HighlightNormal(0); + //this->SizeHandles(); + + this->EventCallbackCommand->SetAbortFlag(1); + this->EndInteraction(); + this->InvokeEvent(vtkCommand::EndInteractionEvent,NULL); + this->Interactor->Render(); +} +//================================================================== +// function: OnMouseMove +// purpose : +//================================================================== +void VISU_PlanesWidget::OnMouseMove() +{ + //this->SizeHandles(); + + // See whether we're active + if ( this->State == VISU_PlanesWidget::Outside || + this->State == VISU_PlanesWidget::Start ) { + return; + } + + int X = this->Interactor->GetEventPosition()[0]; + int Y = this->Interactor->GetEventPosition()[1]; + + // Do different things depending on state + // Calculations everybody does + double focalPoint[4], pickPoint[4], prevPickPoint[4]; + double z, vpn[3]; + + vtkCamera *camera = this->CurrentRenderer->GetActiveCamera(); + if ( !camera ) { + return; + } + + // Compute the two points defining the motion vector + this->ComputeWorldToDisplay(this->LastPickPosition[0], this->LastPickPosition[1], + this->LastPickPosition[2], focalPoint); + z = focalPoint[2]; + this->ComputeDisplayToWorld(double(this->Interactor->GetLastEventPosition()[0]), + double(this->Interactor->GetLastEventPosition()[1]), + z, prevPickPoint); + this->ComputeDisplayToWorld(double(X), double(Y), z, pickPoint); + + // Process the motion + if ( this->State == VISU_PlanesWidget::MovingPlane ) { + //this->TranslatePlane(prevPickPoint, pickPoint); + //printf(" TranslatePlane\n"); + } + else if ( this->State == VISU_PlanesWidget::MovingOutline ) { + //this->TranslateOutline(prevPickPoint, pickPoint); + //printf(" TranslateOutline\n"); + } + else if ( this->State == VISU_PlanesWidget::MovingOrigin ) { + this->TranslateOrigin(prevPickPoint, pickPoint); + //printf(" TranslateOrigin\n"); + } + else if ( this->State == VISU_PlanesWidget::Pushing ) { + this->Push(prevPickPoint, pickPoint); + // printf(" Push\n"); + } + else if ( this->State == VISU_PlanesWidget::Scaling ) { + //this->Scale(prevPickPoint, pickPoint, X, Y); + //printf(" Scale\n"); + } + else if ( this->State == VISU_PlanesWidget::Rotating ) { + camera->GetViewPlaneNormal(vpn); + this->Rotate(X, Y, prevPickPoint, pickPoint, vpn); + //printf(" Rotate\n"); + } + else if ( this->State == VISU_PlanesWidget::ChangeDistance ) { + this->PushDistance(prevPickPoint, pickPoint); + //printf(" PushDistance\n"); + } + // Interact, if desired + this->EventCallbackCommand->SetAbortFlag(1); + this->InvokeEvent(vtkCommand::InteractionEvent,NULL); + + this->Interactor->Render(); +} +//================================================================== +// function: Push +// purpose : +//================================================================== +void VISU_PlanesWidget::Push(double *p1, double *p2) +{ + //Get the motion vector + int i; + float v[3]; + // + for (i=0; i<3; ++i){ + v[i] = p2[i] - p1[i]; + } + // + float aOr1[3], aNr1[3], aNr2[3], aD, z1; + // + myPlane1->GetOrigin(aOr1); + myPlane1->GetNormal(aNr1); + myPlane2->GetNormal(aNr2); + // + aD=vtkMath::Dot(v, aNr2); + z1 = aOr1[2]+aD*aNr2[2]; + if( z1 <= myBox->GetOrigin()[2] ){ + return; + } + // + aD=vtkMath::Dot(v, aNr1); + for (i=0; i < 3; ++i) { + aOr1[i]=aOr1[i]+aD*aNr1[i]; + } + SetOriginInternal(aOr1); + this->UpdateRepresentation(); +} +//================================================================== +// function: TranslateOrigin +// purpose : +//================================================================== +void VISU_PlanesWidget::TranslateOrigin(double *p1, double *p2) +{ + //Get the motion vector + int i; + double v[3]; + // + for (i=0; i<3; ++i){ + v[i] = p2[i] - p1[i]; + } + // + //Add to the current point, project back down onto plane + float *o = myPlane1->GetOrigin(); + float *n = myPlane1->GetNormal(); + float newOrigin[3]; + // + for (i=0; i<3; ++i){ + newOrigin[i]=o[i] + v[i]; + } + vtkPlane::ProjectPoint(newOrigin, o, n, newOrigin); + SetOriginInternal(newOrigin); + this->UpdateRepresentation(); +} +//================================================================== +// function: SetOriginInternal +// purpose : Set the origin of the plane.(for Internal calls) +//================================================================== +void VISU_PlanesWidget::SetOriginInternal(float x[3]) +{ + float *bounds = this->myOutline->GetOutput()->GetBounds(); + int i, j; + for (i=0; i<3; ++i) { + j=2*i; + if ( x[i] < bounds[j] ) { + x[i] = bounds[j]; + } + else if ( x[i] > bounds[j+1] ) { + x[i] = bounds[j+1]; + } + } + // + bool bFlag; + float aOr2[3], aNr2[3], aNr1[3]; + vtkPlane *pPx; + // + myPlane1->GetNormal(aNr1); + myPlane2->GetNormal(aNr2); + for (i=0; i<3; ++i) { + aOr2[i]=x[i]+myDistance*aNr1[i]; + } + pPx=vtkPlane::New(); + pPx->SetOrigin(aOr2); + pPx->SetNormal(aNr2); + bFlag=IsValidPlane2Position(pPx, myBox); + if (bFlag){ + myPlane1->SetOrigin(x); + myPlane2->SetOrigin(aOr2); + } + pPx->Delete(); +} +//================================================================== +// function: Rotate +// purpose : +//================================================================== +void VISU_PlanesWidget::Rotate(int X, int Y, + double *p1, double *p2, + double *vpn) +{ + double v[3]; //vector of motion + double axis[3]; //axis of rotation + double theta; //rotation angle + int i; + + // mouse motion vector in world space + for (i=0; i<3; ++i){ + v[i] = p2[i] - p1[i]; + } + // + float *origin = myPlane1->GetOrigin(); + float *normal = myPlane1->GetNormal(); + + // Create axis of rotation and angle of rotation + vtkMath::Cross(vpn,v,axis); + if ( vtkMath::Normalize(axis) == 0.0 ) { + return; + } + + int *size = this->CurrentRenderer->GetSize(); + double l2 = (X-this->Interactor->GetLastEventPosition()[0])* + (X-this->Interactor->GetLastEventPosition()[0]) + + (Y-this->Interactor->GetLastEventPosition()[1])* + (Y-this->Interactor->GetLastEventPosition()[1]); + theta = 360.0 * sqrt(l2/((double)size[0]*size[0]+size[1]*size[1])); + + //Manipulate the transform to reflect the rotation + this->Transform->Identity(); + this->Transform->Translate(origin[0],origin[1],origin[2]); + this->Transform->RotateWXYZ(theta,axis); + this->Transform->Translate(-origin[0],-origin[1],-origin[2]); + + //Set the new normal + float nNew[3], aN2[3], oNew[3]; + this->Transform->TransformNormal(normal,nNew); + // + for (i=0; i<3; ++i){ + aN2[i] = -nNew[i]; + } + vtkMath::Normalize(nNew); + for (i=0; i<3; ++i){ + oNew[i] = origin[i] + myDistance*nNew[i]; + } + // + vtkPlane *pPx=vtkPlane::New(); + pPx->SetNormal(aN2); + pPx->SetOrigin(oNew); + // + bool bFlag=IsValidPlane2Position(pPx, myBox); + if (bFlag) { + myPlane1->SetNormal(nNew); + this->myPlane2->SetNormal(aN2); + this->myPlane2->SetOrigin(oNew); + } + pPx->Delete(); + this->UpdateRepresentation(); +} +//================================================================== +// function: PushDistance +// purpose : +//================================================================== +void VISU_PlanesWidget::PushDistance(double *p1, double *p2) +{ + int i; + float v[3], *anOrigin1, *aN1, *anOrigin2, *aN2, aD; + //Get the motion vector + for (i=0; i<3; ++i){ + v[i] = p2[i] - p1[i]; + } + // + anOrigin1 = myPlane1->GetOrigin(); + aN1 = myPlane1->GetNormal(); + anOrigin2 = myPlane2->GetOrigin(); + aN2 = myPlane2->GetNormal(); + + vtkMath::Normalize(aN1); + + float origin[3]; + double distance = vtkMath::Dot( v, aN2 ); + for(i=0; i<3; ++i) { + origin[i] = anOrigin2[i] + distance * aN2[i]; + } + float d = DistanceToPlane(origin, aN1, anOrigin1); + if( d <= 0.0 ) + return; + // + bool bFlag; + float aOr2[3], aNr2[3]; + vtkPlane *pPx; + // + myPlane2->GetOrigin(aOr2); + myPlane2->GetNormal(aNr2); + pPx=vtkPlane::New(); + pPx->SetNormal(aNr2); + aD=vtkMath::Dot(v, aNr2); + for (i=0; i < 3; ++i) { + aOr2[i]=aOr2[i]+aD*aNr2[i]; + } + pPx->SetOrigin(aOr2); + bFlag=IsValidPlane2Position(pPx, myBox); + if(bFlag) { + myPlane2->SetOrigin(aOr2); + myPlane2->Modified(); + aD=DistanceToPlane(aOr2, aN1, anOrigin1); + // + myDistance=aD; + } + pPx->Delete(); + this->UpdateRepresentation(); +} + +//================================================================== +// function: TranslatePlane +// purpose : Loop through all points and translate them +//================================================================== +void VISU_PlanesWidget::TranslatePlane(double *p1, double *p2) +{ + //Get the motion vector + double v[3]; + v[0] = p2[0] - p1[0]; + v[1] = p2[1] - p1[1]; + v[2] = p2[2] - p1[2]; + + //Translate the plane + float oNew[3]; + float *origin = myPlane1->GetOrigin(); + oNew[0] = origin[0] + v[0]; + oNew[1] = origin[1] + v[1]; + oNew[2] = origin[2] + v[2]; + myPlane1->SetOrigin(oNew); + + origin = this->myPlane2->GetOrigin(); + oNew[0] = origin[0] + v[0]; + oNew[1] = origin[1] + v[1]; + oNew[2] = origin[2] + v[2]; + this->myPlane2->SetOrigin(oNew); + + this->UpdateRepresentation(); +} +//================================================================== +// function: TranslateOutline +// purpose :Loop through all points and translate them +//================================================================== +void VISU_PlanesWidget::TranslateOutline(double *p1, double *p2) +{ + //Get the motion vector + double v[3]; + v[0] = p2[0] - p1[0]; + v[1] = p2[1] - p1[1]; + v[2] = p2[2] - p1[2]; + + //Translate the bounding box + float *origin = myBox->GetOrigin(); + float oNew[3]; + oNew[0] = origin[0] + v[0]; + oNew[1] = origin[1] + v[1]; + oNew[2] = origin[2] + v[2]; + myBox->SetOrigin(oNew); + + //Translate the plane + origin = myPlane1->GetOrigin(); + oNew[0] = origin[0] + v[0]; + oNew[1] = origin[1] + v[1]; + oNew[2] = origin[2] + v[2]; + myPlane1->SetOrigin(oNew); + + origin = this->myPlane2->GetOrigin(); + oNew[0] = origin[0] + v[0]; + oNew[1] = origin[1] + v[1]; + oNew[2] = origin[2] + v[2]; + this->myPlane2->SetOrigin(oNew); + + this->UpdateRepresentation(); +} + +//================================================================== +// function: Scale +// purpose : +//================================================================== +void VISU_PlanesWidget::Scale(double *p1, double *p2, + int vtkNotUsed(X), int Y) +{ + //Get the motion vector + double v[3]; + v[0] = p2[0] - p1[0]; + v[1] = p2[1] - p1[1]; + v[2] = p2[2] - p1[2]; + + //int res = this->PlaneSource->GetXResolution(); + float *o = myPlane1->GetOrigin(); + + // Compute the scale factor + float sf = vtkMath::Norm(v) / this->myOutline->GetOutput()->GetLength(); + if ( Y > this->Interactor->GetLastEventPosition()[1] ) { + sf = 1.0 + sf; + } + else { + sf = 1.0 - sf; + } + + this->Transform->Identity(); + this->Transform->Translate(o[0],o[1],o[2]); + this->Transform->Scale(sf,sf,sf); + this->Transform->Translate(-o[0],-o[1],-o[2]); + + float *origin = myBox->GetOrigin(); + float *spacing = myBox->GetSpacing(); + float oNew[3], p[3], pNew[3]; + p[0] = origin[0] + spacing[0]; + p[1] = origin[1] + spacing[1]; + p[2] = origin[2] + spacing[2]; + + this->Transform->TransformPoint(origin,oNew); + this->Transform->TransformPoint(p,pNew); + + myBox->SetOrigin(oNew); + myBox->SetSpacing( (pNew[0]-oNew[0]), (pNew[1]-oNew[1]), (pNew[2]-oNew[2]) ); + + this->UpdateRepresentation(); +} + + + +//================================================================== +// function: CreateDefaultProperties +// purpose : +//================================================================== +void VISU_PlanesWidget::CreateDefaultProperties() +{ + // Normal properties + this->NormalProperty = vtkProperty::New(); + this->NormalProperty->SetColor(1,1,1); + this->NormalProperty->SetLineWidth(2); + + this->SelectedNormalProperty = vtkProperty::New(); + this->SelectedNormalProperty->SetColor(1,0,0); + this->NormalProperty->SetLineWidth(2); + + // Plane properties + this->PlaneProperty = vtkProperty::New(); + this->PlaneProperty->SetAmbient(1.0); + this->PlaneProperty->SetAmbientColor(1.0,1.0,1.0); + + this->SelectedPlaneProperty = vtkProperty::New(); + this->SelectedPlaneProperty->SetAmbient(1.0); + this->SelectedPlaneProperty->SetAmbientColor(0.0,1.0,0.0); + this->SelectedPlaneProperty->SetOpacity(0.25); + + // Outline properties + this->OutlineProperty = vtkProperty::New(); + this->OutlineProperty->SetAmbient(1.0); + this->OutlineProperty->SetAmbientColor(1.0,1.0,1.0); + + this->SelectedOutlineProperty = vtkProperty::New(); + this->SelectedOutlineProperty->SetAmbient(1.0); + this->SelectedOutlineProperty->SetAmbientColor(0.0,1.0,0.0); + + // Edge property + this->EdgesProperty = vtkProperty::New(); + this->EdgesProperty->SetAmbient(1.0); + this->EdgesProperty->SetAmbientColor(1.0,1.0,1.0); +} +//================================================================== +// function: InitialPlaceWidget +// purpose : +//================================================================== +void VISU_PlanesWidget::InitialPlaceWidget(float bds[6]) +{ + float bounds[6], origin[3]; + + PlaceWidget(bds); + // + this->AdjustBounds(bds, bounds, origin); + this->SetOrigin((bounds[1]+bounds[0])/2.0, + (bounds[3]+bounds[2])/2.0, + (bounds[5]+bounds[4])/2.0); + + static float DIST_COEFF = 0.1; + SetDistance(this->InitialLength*DIST_COEFF); + // + this->UpdateRepresentation(); +} +//================================================================== +// function: PlaceWidget +// purpose : +//================================================================== +void VISU_PlanesWidget::PlaceWidget(float bds[6]) +{ + int i; + float bounds[6], origin[3]; + + this->AdjustBounds(bds, bounds, origin); + + // Set up the bounding box + myBox->SetOrigin(bounds[0],bounds[2],bounds[4]); + myBox->SetSpacing((bounds[1]-bounds[0]),(bounds[3]-bounds[2]), + (bounds[5]-bounds[4])); + this->myOutline->Update(); + + if (this->Input || this->Prop3D) { + this->LineSource->SetPoint1(myPlane1->GetOrigin()); + if ( this->NormalToYAxis ) { + myPlane1->SetNormal(0,1,0); + myPlane2->SetNormal(0,-1,0); + this->LineSource->SetPoint2(0,1,0); + } + else if ( this->NormalToZAxis ) { + myPlane1->SetNormal(0,0,1); + myPlane2->SetNormal(0,0,-1); + this->LineSource->SetPoint2(0,0,1); + } + else{ //default or x-normal + myPlane1->SetNormal(1,0,0); + myPlane2->SetNormal(-1,0,0); + this->LineSource->SetPoint2(1,0,0); + } + } + + for (i=0; i<6; i++) { + this->InitialBounds[i] = bounds[i]; + } + + this->InitialLength = sqrt((bounds[1]-bounds[0])*(bounds[1]-bounds[0]) + + (bounds[3]-bounds[2])*(bounds[3]-bounds[2]) + + (bounds[5]-bounds[4])*(bounds[5]-bounds[4])); + + this->UpdateRepresentation(); +} +//================================================================== +// function: SetOrigin +// purpose :Set the origin of the plane.(for external calls) +//================================================================== +void VISU_PlanesWidget::SetOrigin(float x, float y, float z) +{ + float origin[3]; + origin[0] = x; + origin[1] = y; + origin[2] = z; + this->SetOrigin(origin); +} +//================================================================== +// function: SetOrigin +// purpose : Set the origin of the plane.(for external calls) +//================================================================== +void VISU_PlanesWidget::SetOrigin(float x[3]) +{ + float *bounds = this->myOutline->GetOutput()->GetBounds(); + for (int i=0; i<3; i++) { + if ( x[i] < bounds[2*i] ) { + x[i] = bounds[2*i]; + } + else if ( x[i] > bounds[2*i+1] ) { + x[i] = bounds[2*i+1]; + } + } + myPlane1->SetOrigin(x); + float *origin, *normal, oNew[3]; + origin = myPlane1->GetOrigin(); + normal = myPlane1->GetNormal(); + vtkMath::Normalize(normal); + oNew[0] = origin[0] + myDistance*normal[0]; + oNew[1] = origin[1] + myDistance*normal[1]; + oNew[2] = origin[2] + myDistance*normal[2]; + this->myPlane2->SetOrigin(oNew); + this->UpdateRepresentation(); +} +//================================================================== +// function: GetOrigin +// purpose :Get the origin of the plane. +//================================================================== +float* VISU_PlanesWidget::GetOrigin() +{ + return myPlane1->GetOrigin(); +} + +void VISU_PlanesWidget::GetOrigin(float xyz[3]) +{ + myPlane1->GetOrigin(xyz); +} +//================================================================== +// function: SetNormal +// purpose :Set the normal to the plane. +//================================================================== +void VISU_PlanesWidget::SetNormal(float x, float y, float z) +{ + float n[3]; + n[0] = x; + n[1] = y; + n[2] = z; + vtkMath::Normalize(n); + myPlane1->SetNormal(n); + n[0] =- x; + n[1] =- y; + n[2] =- z; + this->myPlane2->SetNormal(n); + + this->UpdateRepresentation(); +} + +//================================================================== +// function: SetNormal +// purpose :Set the normal to the plane. +//================================================================== +void VISU_PlanesWidget::SetNormal(float n[3]) +{ + this->SetNormal(n[0], n[1], n[2]); +} +//================================================================== +// function: GetNormal +// purpose :Get the normal to the plane. +//================================================================== +float* VISU_PlanesWidget::GetNormal() +{ + return myPlane1->GetNormal(); +} +//================================================================== +// function: GetNormal +// purpose :Get the normal to the plane. +//================================================================== +void VISU_PlanesWidget::GetNormal(float xyz[3]) +{ + myPlane1->GetNormal(xyz); +} +//================================================================== +// function: SetDrawPlane +// purpose : +//================================================================== +void VISU_PlanesWidget::SetDrawPlane(int drawPlane) +{ + if ( drawPlane == this->myDrawPlane ) { + return; + } + + this->Modified(); + this->myDrawPlane = drawPlane; + if ( this->Enabled ) { + if ( drawPlane ) { + this->CurrentRenderer->AddActor(this->myCutActor1); + this->CurrentRenderer->AddActor(myCutActor2); + } + else { + this->CurrentRenderer->RemoveActor(this->myCutActor1); + this->CurrentRenderer->RemoveActor(myCutActor2); + } + this->Interactor->Render(); + } +} +//================================================================== +// function: SetNormalToXAxis +// purpose : +//================================================================== +void VISU_PlanesWidget::SetNormalToXAxis (int var) +{ + if (this->NormalToXAxis != var) { + this->NormalToXAxis = var; + this->Modified(); + } + if (var) { + this->NormalToYAxisOff(); + this->NormalToZAxisOff(); + } +} +//================================================================== +// function: SetNormalToYAxis +// purpose : +//================================================================== +void VISU_PlanesWidget::SetNormalToYAxis (int var) +{ + if (this->NormalToYAxis != var) { + this->NormalToYAxis = var; + this->Modified(); + } + if (var) { + this->NormalToXAxisOff(); + this->NormalToZAxisOff(); + } +} +//================================================================== +// function: SetNormalToZAxis +// purpose : +//================================================================== +void VISU_PlanesWidget::SetNormalToZAxis (int var) +{ + if (this->NormalToZAxis != var) { + this->NormalToZAxis = var; + this->Modified(); + } + if (var) { + this->NormalToXAxisOff(); + this->NormalToYAxisOff(); + } +} +//================================================================== +// function: GetPolyData +// purpose : +//================================================================== +void VISU_PlanesWidget::GetPolyData(vtkPolyData *pd) +{ + pd->ShallowCopy(this->myCutter1->GetOutput()); +} +//================================================================== +// function: GetPolyDataSource +// purpose : +//================================================================== +/* +vtkPolyDataSource *VISU_PlanesWidget::GetPolyDataSource() +{ + return this->myCutter1; +} +*/ +//================================================================== +// function:GetPlane +// purpose : +//================================================================== +void VISU_PlanesWidget::GetPlane(vtkPlane *plane) +{ + if ( plane == NULL ) { + return; + } + + plane->SetNormal(myPlane1->GetNormal()); + plane->SetOrigin(myPlane1->GetOrigin()); +} +//================================================================== +// function:UpdatePlacement +// purpose : +//================================================================== +void VISU_PlanesWidget::UpdatePlacement(void) +{ + this->myOutline->Update(); + this->myCutter1->Update(); + this->myEdges1->Update(); +} +//================================================================== +// function:UpdateRepresentation +// purpose : +//================================================================== +void VISU_PlanesWidget::UpdateRepresentation() +{ + if ( ! this->CurrentRenderer ) { + return; + } + + float *origin = myPlane1->GetOrigin(); + float *normal = myPlane1->GetNormal(); + float p2[3]; + + // Setup the plane normal + float d = this->myOutline->GetOutput()->GetLength(); + + p2[0] = origin[0] + 0.30 * d * normal[0]; + p2[1] = origin[1] + 0.30 * d * normal[1]; + p2[2] = origin[2] + 0.30 * d * normal[2]; + + this->LineSource->SetPoint1(origin); + this->LineSource->SetPoint2(p2); + this->ConeSource->SetCenter(p2); + this->ConeSource->SetDirection(normal); + ConeActor->SetCenter(p2); + + p2[0] = origin[0] - 0.30 * d * normal[0]; + p2[1] = origin[1] - 0.30 * d * normal[1]; + p2[2] = origin[2] - 0.30 * d * normal[2]; + + this->LineSource2->SetPoint1(origin); + this->LineSource2->SetPoint2(p2); + this->ConeSource2->SetCenter(p2); + this->ConeSource2->SetDirection(normal); + ConeActor2->SetCenter(p2); + + // Set up the position handle + this->Sphere->SetCenter(origin); + SphereActor->SetCenter(origin); + + this->myEdgesMapper1->SetInput(this->myEdges1->GetOutput()); +} + +//================================================================== +// function:PrintSelf +// purpose : +//================================================================== +void VISU_PlanesWidget::PrintSelf(ostream& os, vtkIndent indent) +{ + this->Superclass::PrintSelf(os,indent); +} +//================================================================== +// function: IsValidPlane2Position +// purpose : +//================================================================== +bool IsValidPlane2Position(vtkPlane *pPx, + vtkDataSet *pDataSet, + float aTol) +{ + bool bRet; + int i, iFound; + float aD, aDmax, aPnts[24], aDiagonal; + float aTol1, aOr[3], aN[3]; + // + bRet=false; + aDiagonal=pDataSet->GetLength(); + aTol1=aDiagonal*aTol; + // + GetBndPoints(pDataSet, aPnts); + // + pPx->GetOrigin(aOr); + pPx->GetNormal(aN); + vtkMath::Normalize(aN); + // + iFound=0; + aDmax=0.; + for (i=0; i<24; i+=3){ + aD=-DistanceToPlane(aPnts+i, aN, aOr); + if (aD>aDmax){ + aDmax=aD; + iFound=1; + } + } + if (iFound && aDmax>aTol1) { + bRet=!bRet; + } + return bRet; +} +//================================================================== +// function: GetBndPoints +// purpose : +//================================================================== +void GetBndPoints(vtkDataSet *pDataSet, + float aPnts[24]) +{ + int aIndx[24]={ + 0,2,4,1,2,4,1,3,4,0,3,4, + 0,2,5,1,2,5,1,3,5,0,3,5 + }; + int i; + float *pBounds=pDataSet->GetBounds(); + // + for (i=0; i<24; ++i){ + aPnts[i]=pBounds[aIndx[i]]; + } +} +//================================================================== +// function: DistanceToPlane +// purpose : +//================================================================== +float DistanceToPlane(const float x[3], + const float n[3], + const float p0[3]) +{ + return ((float) (n[0]*(x[0]-p0[0]) + + n[1]*(x[1]-p0[1]) + + n[2]*(x[2]-p0[2]))); +} +/* +//================================================================== +// function:SizeHandles +// purpose : +//================================================================== +void VISU_PlanesWidget::SizeHandles() +{ + // float radius = + this->vtk3DWidget::SizeHandles(1.35); +} +*/ diff --git a/src/PIPELINE/VISU_PlanesWidget.hxx b/src/PIPELINE/VISU_PlanesWidget.hxx new file mode 100644 index 00000000..fdf45367 --- /dev/null +++ b/src/PIPELINE/VISU_PlanesWidget.hxx @@ -0,0 +1,312 @@ +// SALOME VTKViewer : build VTK viewer into Salome desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : VISU_PlanesWidget.h +// Author : Peter KURNEV +// Module : SALOME +// $Header$ + +#ifndef __VISU_PlanesWidget_h +#define __VISU_PlanesWidget_h + +#include "VISU_ImplicitFunctionWidget.hxx" +class vtkActor; +class vtkPolyDataMapper; +class vtkCellPicker; +class vtkConeSource; +class vtkLineSource; +class vtkSphereSource; +class vtkPlane; +class vtkCutter; +class vtkProperty; +class vtkImageData; +class vtkOutlineFilter; +class vtkFeatureEdges; +class vtkPolyData; +class vtkTransform; +class vtkImplicitBoolean; +class vtkImplicitFunction; +class VISU_UnScaledActor; +class vtkDataSet; + +class VISU_PlanesWidget : public VISU_ImplicitFunctionWidget +{ +public: + // Description: + // Instantiate the object. + static VISU_PlanesWidget *New(); + + vtkTypeRevisionMacro(VISU_PlanesWidget,VISU_ImplicitFunctionWidget); + void PrintSelf(ostream& os, vtkIndent indent); + + void SetDistance (const float theDistance); + float Distance()const; + + vtkGetMacro(InitialLength,float); + + virtual vtkImplicitFunction* ImplicitFunction(); + + // Description: + // Methods that satisfy the superclass' API. + virtual void SetEnabled(int); + virtual void PlaceWidget(float bounds[6]); + + // Description: + // Get the origin of the plane. + void SetOrigin(float x, float y, float z); + void SetOrigin(float x[3]); + float* GetOrigin(); + void GetOrigin(float xyz[3]); + + // Description: + // Get the normal to the plane. + void SetNormal(float x, float y, float z); + void SetNormal(float x[3]); + float* GetNormal(); + void GetNormal(float xyz[3]); + + // Description: + // Force the plane widget to be aligned with one of the x-y-z axes. + // If one axis is set on, the other two will be set off. + // Remember that when the state changes, a ModifiedEvent is invoked. + // This can be used to snap the plane to the axes if it is orginally + // not aligned. + void SetNormalToXAxis(int); + vtkGetMacro(NormalToXAxis,int); + vtkBooleanMacro(NormalToXAxis,int); + void SetNormalToYAxis(int); + vtkGetMacro(NormalToYAxis,int); + vtkBooleanMacro(NormalToYAxis,int); + void SetNormalToZAxis(int); + vtkGetMacro(NormalToZAxis,int); + vtkBooleanMacro(NormalToZAxis,int); + + // Description: + // Turn on/off tubing of the wire outline of the plane. The tube thickens + // the line by wrapping with a vtkTubeFilter. + //vtkSetMacro(Tubing,int); + //vtkGetMacro(Tubing,int); + //vtkBooleanMacro(Tubing,int); + + // Description: + // Enable/disable the drawing of the plane. In some cases the plane + // interferes with the object that it is operating on (i.e., the + // plane interferes with the cut surface it produces producing + // z-buffer artifacts.) + void SetDrawPlane(int plane); + int GetDrawPlane(){ + return myDrawPlane; + } + + // Description: + // Turn on/off the ability to translate the bounding box by grabbing it + // with the left mouse button. + vtkSetMacro(OutlineTranslation,int); + vtkGetMacro(OutlineTranslation,int); + vtkBooleanMacro(OutlineTranslation,int); + + // Description: + // Grab the polydata that defines the plane. The polydata contains a single + // polygon that is clipped by the bounding box. + void GetPolyData(vtkPolyData *pd); + + // Description: + // Satisfies superclass API. This returns a pointer to the underlying + // PolyData (which represents the plane). + //vtkPolyDataSource* GetPolyDataSource(); + + // Description: + // Get the implicit function for the plane. The user must provide the + // instance of the class vtkPlane. Note that vtkPlane is a subclass of + // vtkImplicitFunction, meaning that it can be used by a variety of filters + // to perform clipping, cutting, and selection of data. + void GetPlane(vtkPlane *plane); + + // Description: + // Satisfies the superclass API. This will change the state of the widget + // to match changes that have been made to the underlying PolyDataSource + void UpdatePlacement(void); + + // Description: + // Get the properties on the normal (line and cone). + vtkGetObjectMacro(NormalProperty,vtkProperty); + vtkGetObjectMacro(SelectedNormalProperty,vtkProperty); + + // Description: + // Get the plane properties. The properties of the plane when selected + // and unselected can be manipulated. + vtkGetObjectMacro(PlaneProperty,vtkProperty); + vtkGetObjectMacro(SelectedPlaneProperty,vtkProperty); + + // Description: + // Get the property of the outline. + vtkGetObjectMacro(OutlineProperty,vtkProperty); + vtkGetObjectMacro(SelectedOutlineProperty,vtkProperty); + + // Description: + // Get the property of the intersection edges. (This property also + // applies to the edges when tubed.) + vtkGetObjectMacro(EdgesProperty,vtkProperty); + + void InitialPlaceWidget(float bds[6]); + +protected: + VISU_PlanesWidget(); + ~VISU_PlanesWidget(); + +//BTX - manage the state of the widget + int State; + enum WidgetState + { + Start=0, + MovingPlane, + MovingOutline, + MovingOrigin, + Scaling, + Pushing, + Rotating, + Outside, + ChangeDistance + }; +//ETX + + //handles the events + static void ProcessEvents(vtkObject* object, unsigned long event, + void* clientdata, void* calldata); + + // ProcessEvents() dispatches to these methods. + void OnLeftButtonDown(); + void OnLeftButtonUp(); + void OnMiddleButtonDown(); + void OnMiddleButtonUp(); + void OnRightButtonDown(); + void OnRightButtonUp(); + void OnMouseMove(); + // + // Methods to manipulate the plane + void ConstrainOrigin(float x[3]); + void Rotate(int X, int Y, double *p1, double *p2, double *vpn); + void TranslatePlane(double *p1, double *p2); + void TranslateOutline(double *p1, double *p2); + void TranslateOrigin(double *p1, double *p2); + void Push(double *p1, double *p2); + void Scale(double *p1, double *p2, int X, int Y); + void PushDistance(double *p1, double *p2); + + void CreateDefaultProperties(); + + void GeneratePlane(); + //virtual void SizeHandles(); + void HighlightPlane(int highlight); + void HighlightNormal(int highlight); + void HighlightOutline(int highlight); + void UpdateRepresentation(); + void SetOriginInternal(float x[3]); + + // Controlling ivars + int NormalToXAxis; + int NormalToYAxis; + int NormalToZAxis; + + + // Flags to handle mouse events + bool HandleMoveEvent; + bool HandleLeftButtonEvent; + bool HandleMiddleButtonEvent; + bool HandleRightButtonEvent; + // The actual plane which is being manipulated + vtkPlane *myPlane1; + vtkPlane *myPlane2; + + float myDistance; + vtkImplicitBoolean *myImplicitFunction; + + // The bounding box is represented by a single voxel image data + vtkImageData *myBox; + vtkOutlineFilter *myOutline; + vtkPolyDataMapper *myOutlineMapper; + vtkActor *myOutlineActor; + + int OutlineTranslation; //whether the outline can be moved + + // The cut plane is produced with a vtkCutter + vtkCutter *myCutter1; + vtkPolyDataMapper *myCutMapper1; + vtkActor *myCutActor1; + + vtkCutter *myCutter2; + vtkPolyDataMapper *myCutMapper2; + vtkActor *myCutActor2; + + vtkFeatureEdges *myEdges2; + vtkPolyDataMapper *myEdgesMapper2; + vtkActor *myEdgesActor2; + + int myDrawPlane; + + vtkFeatureEdges *myEdges1; + vtkPolyDataMapper *myEdgesMapper1; + vtkActor *myEdgesActor1; + + // The + normal cone + vtkConeSource *ConeSource; + vtkPolyDataMapper *ConeMapper; + VISU_UnScaledActor *ConeActor; + // The + normal line + vtkLineSource *LineSource; + vtkPolyDataMapper *LineMapper; + vtkActor *LineActor; + // The - normal cone + vtkConeSource *ConeSource2; + vtkPolyDataMapper *ConeMapper2; + VISU_UnScaledActor *ConeActor2; + // The - normal line + vtkLineSource *LineSource2; + vtkPolyDataMapper *LineMapper2; + vtkActor *LineActor2; + // The origin positioning handle + vtkSphereSource *Sphere; + vtkPolyDataMapper *SphereMapper; + VISU_UnScaledActor *SphereActor; + + // Do the picking + vtkCellPicker *Picker; + + // Transform the normal (used for rotation) + vtkTransform *Transform; + // Properties used to control the appearance of selected objects and + // the manipulator in general. + vtkProperty *NormalProperty; + vtkProperty *SelectedNormalProperty; + vtkProperty *PlaneProperty; + vtkProperty *SelectedPlaneProperty; + vtkProperty *OutlineProperty; + vtkProperty *SelectedOutlineProperty; + vtkProperty *EdgesProperty; + +private: + VISU_PlanesWidget(const VISU_PlanesWidget&); //Not implemented + void operator=(const VISU_ImplicitFunctionWidget&); //Not implemented +}; + +#endif diff --git a/src/PIPELINE/VISU_Plot3DPL.cxx b/src/PIPELINE/VISU_Plot3DPL.cxx index a7e8287e..164d9a7a 100644 --- a/src/PIPELINE/VISU_Plot3DPL.cxx +++ b/src/PIPELINE/VISU_Plot3DPL.cxx @@ -68,7 +68,6 @@ void VISU_Plot3DPL:: ShallowCopy(VISU_PipeLine *thePipeLine) { - VISU_ScalarMapPL::ShallowCopy(thePipeLine); if(VISU_Plot3DPL *aPipeLine = dynamic_cast(thePipeLine)){ SetOrientation (aPipeLine->GetPlaneOrientation(), aPipeLine->GetRotateX(), aPipeLine->GetRotateY()); @@ -78,6 +77,7 @@ ShallowCopy(VISU_PipeLine *thePipeLine) SetContourPrs( aPipeLine->GetIsContourPrs() ); SetNumberOfContours( aPipeLine->GetNumberOfContours() ); } + VISU_ScalarMapPL::ShallowCopy(thePipeLine); } VISU_CutPlanesPL::PlaneOrientation diff --git a/src/PIPELINE/VISU_ScalarBarCtrl.cxx b/src/PIPELINE/VISU_ScalarBarCtrl.cxx new file mode 100644 index 00000000..561b2432 --- /dev/null +++ b/src/PIPELINE/VISU_ScalarBarCtrl.cxx @@ -0,0 +1,520 @@ +// VISU OBJECT : interactive object for VISU entities implementation +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// File: VISU_ScalarBarCtrl.cxx +// Author: Peter KURNEV +// Module : VISU + +#include "VISU_ScalarBarCtrl.hxx" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + + +//---------------------------------------------------------------------------- +namespace +{ + inline + void + MarkValueByColor(vtkLookupTable* theTable, + float theValue, + unsigned char* theColor) + { + vtkIdType anIndex = theTable->GetIndex(theValue); + unsigned char *aTablePtr = theTable->GetPointer(anIndex); + aTablePtr[0] = theColor[0]; + aTablePtr[1] = theColor[1]; + aTablePtr[2] = theColor[2]; + } + + inline + void + CopyColor(unsigned char* theTaget, const unsigned char* theSource) + { + theTaget[0] = theSource[0]; + theTaget[1] = theSource[1]; + theTaget[2] = theSource[2]; + } + + void + FillByColor(vtkLookupTable* theTable, + unsigned char* theColor) + { + vtkIdType aNbColors = theTable->GetNumberOfColors(); + for(int i = 0; i < aNbColors; i++){ + unsigned char *aTablePtr = theTable->GetPointer(i); + CopyColor(aTablePtr,theColor); + } + } + + void + MakeBiColor(vtkLookupTable* theTable) + { + unsigned char aRedPtr[3] = {255, 0, 0}; + unsigned char aBluePtr[3] = {0, 0, 255}; + + float aRange[2]; + theTable->GetTableRange(aRange); + vtkIdType aNbColors = theTable->GetNumberOfColors(); + + float aDelta = (aRange[1]-aRange[0])/aNbColors; + float aValue = aRange[0]+0.5*aDelta; + for(int i = 0; i < aNbColors; i++){ + vtkIdType anIndex = theTable->GetIndex(aValue); + unsigned char* aTablePtr = theTable->GetPointer(anIndex); + if(aValue > 0.0){ + CopyColor(aTablePtr,aRedPtr); + }else{ + CopyColor(aTablePtr,aBluePtr); + } + aValue += aDelta; + } + } +} + + +//---------------------------------------------------------------------------- +vtkStandardNewMacro(VISU_ScalarBarCtrl); + +//---------------------------------------------------------------------------- +VISU_ScalarBarCtrl +::VISU_ScalarBarCtrl(): + myGlobalRangeIsDefined(false) +{ + myDistance=0.02; + myPosition[0]=0.15; + myPosition[1]=0.01; + myBicolor=false; + myMarked=false; + myMarkedValue=99.; + // + SetMode(eSimple); + + // Initilize global scalar bar + myGlobalLookupTable = vtkLookupTable::New(); + myGlobalLookupTable->SetHueRange(0.667,0.0); + + myGlobalScalarBar = vtkScalarBarActor::New(); + myGlobalScalarBar->SetLookupTable(myGlobalLookupTable); + myGlobalLookupTable->Delete(); + + // Initilize local scalar bar + myLocalLookupTable = vtkLookupTable::New(); + myLocalLookupTable->SetHueRange(0.667,0.0); + + myLocalScalarBar = vtkScalarBarActor::New(); + myLocalScalarBar->SetLookupTable(myLocalLookupTable); + myLocalLookupTable->Delete(); + + myBlack[0] = myBlack[1] = myBlack[2] = 0; + myGrey[0] = myGrey[1] = myGrey[2] = 192; + // + myCtrlVisibility = 1; + SetVisibility(1); +} + + +//---------------------------------------------------------------------------- +VISU_ScalarBarCtrl +::~VISU_ScalarBarCtrl() +{ + myGlobalScalarBar->Delete(); +} + + +//---------------------------------------------------------------------------- +void +VISU_ScalarBarCtrl +::SetMode(VISU_ScalarBarCtrl::EMode theMode) +{ + myMode = theMode; +} + +VISU_ScalarBarCtrl::EMode +VISU_ScalarBarCtrl +::GetMode() const +{ + return myMode; +} + + +//---------------------------------------------------------------------------- +void +VISU_ScalarBarCtrl +::SetVisibility(int theVisibility) +{ + myGlobalScalarBar->SetVisibility(false); + myLocalScalarBar->SetVisibility(false); + int aVisibility = (myCtrlVisibility && theVisibility); + if(aVisibility){ + if(myMode != eSimple) + myGlobalScalarBar->SetVisibility(aVisibility); + myLocalScalarBar->SetVisibility(aVisibility); + } +} + +int +VISU_ScalarBarCtrl +::GetVisibility() const +{ + return myGlobalScalarBar->GetVisibility() || myLocalScalarBar->GetVisibility(); +} + +void +VISU_ScalarBarCtrl +::SetCtrlVisibility(int theVisibility) +{ + myCtrlVisibility = theVisibility; +} + +int +VISU_ScalarBarCtrl +::GetCtrlVisibility() const +{ + return myCtrlVisibility; +} + + +//---------------------------------------------------------------------------- +void +VISU_ScalarBarCtrl +::SetRangeLocal(float *theRange) +{ + myLocalLookupTable->SetTableRange(theRange); +} + +void +VISU_ScalarBarCtrl +::SetRangeLocal(float theMin, + float theMax) +{ + myLocalLookupTable->SetTableRange(theMin,theMax); +} + + +//---------------------------------------------------------------------------- +void +VISU_ScalarBarCtrl +::SetRangeGlobal(float *theRange) +{ + myGlobalLookupTable->SetTableRange(theRange); +} + +void +VISU_ScalarBarCtrl +::SetRangeGlobal(float theMin, + float theMax) +{ + myGlobalLookupTable->SetTableRange(theMin,theMax); +} + +void +VISU_ScalarBarCtrl +::SetGlobalRangeIsDefined(bool theIsDefined) +{ + myGlobalRangeIsDefined = theIsDefined; +} + + +//---------------------------------------------------------------------------- +vtkScalarBarActor* +VISU_ScalarBarCtrl +::GetLocalBar() +{ + return myLocalScalarBar; +} + +vtkScalarBarActor* +VISU_ScalarBarCtrl +::GetGlobalBar() +{ + return myGlobalScalarBar; +} + + +//---------------------------------------------------------------------------- +vtkLookupTable* +VISU_ScalarBarCtrl +::GetLocalTable() +{ + return myLocalLookupTable; +} + +vtkLookupTable* +VISU_ScalarBarCtrl +::GetGlobalTable() +{ + return myGlobalLookupTable; +} + + +//---------------------------------------------------------------------------- +void +VISU_ScalarBarCtrl +::AddToRender(vtkRenderer* theRenderer) +{ + theRenderer->AddActor2D(myGlobalScalarBar); + theRenderer->AddActor2D(myLocalScalarBar); + Update(); +} + +void +VISU_ScalarBarCtrl +::RemoveFromRender(vtkRenderer* theRenderer) +{ + theRenderer->RemoveActor2D(myGlobalScalarBar); + theRenderer->RemoveActor2D(myLocalScalarBar); +} + + +//---------------------------------------------------------------------------- +void +VISU_ScalarBarCtrl +::SetWidth(float theWidth) +{ + myGlobalScalarBar->SetWidth(theWidth); + myLocalScalarBar->SetWidth(theWidth); +} + +float +VISU_ScalarBarCtrl +::GetWidth() const +{ + return myGlobalScalarBar->GetWidth(); +} + + +//---------------------------------------------------------------------------- +void +VISU_ScalarBarCtrl +::SetHeight(float theHeight) +{ + myGlobalScalarBar->SetHeight(theHeight); + myLocalScalarBar->SetHeight(theHeight); +} + + +float +VISU_ScalarBarCtrl +::GetHeight() const +{ + return myGlobalScalarBar->GetHeight(); +} + + +//---------------------------------------------------------------------------- +void +VISU_ScalarBarCtrl +::SetPosition(const float* thePosition) +{ + myPosition[0] = thePosition[0]; + myPosition[1] = thePosition[1]; +} + +const float* +VISU_ScalarBarCtrl::GetPosition() const +{ + return myPosition; +} + + +//---------------------------------------------------------------------------- +void +VISU_ScalarBarCtrl +::SetSpacing(const float theSpacing) +{ + myDistance = theSpacing; +} + +float +VISU_ScalarBarCtrl +::GetSpacing() const +{ + return myDistance; +} + + +//---------------------------------------------------------------------------- +void +VISU_ScalarBarCtrl +::SetBicolor(const bool theBicolor) +{ + myBicolor = theBicolor; +} + +bool +VISU_ScalarBarCtrl +::GetBicolor() const +{ + return myBicolor; +} + + +//---------------------------------------------------------------------------- +void +VISU_ScalarBarCtrl +::SetMarkValue(const float theValue) +{ + myMarkedValue = theValue; +} + +float +VISU_ScalarBarCtrl +::GetMarkValue() const +{ + return myMarkedValue; +} + + +//---------------------------------------------------------------------------- +void +VISU_ScalarBarCtrl +::SetIsMarked(const bool theFlag) +{ + myMarked = theFlag; +} + +bool +VISU_ScalarBarCtrl +::GetIsMarked() const +{ + return myMarked; +} + + +//---------------------------------------------------------------------------- +void +VISU_ScalarBarCtrl +::Update() +{ + SetVisibility(GetVisibility()); + // + PrepareTables(); + // + if(myBicolor) + UpdateForBicolor(); + else + UpdateForColor(); + // + UpdateMarkValue(); +} + + +//---------------------------------------------------------------------------- +void +VISU_ScalarBarCtrl +::UpdateMarkValue() +{ + if(myMarked){ + if(myMode == eGlobal){ + MarkValueByColor(myGlobalLookupTable, myMarkedValue, myBlack); + }else{ + MarkValueByColor(myLocalLookupTable, myMarkedValue, myBlack); + } + } + if(myGlobalRangeIsDefined){ + float aLocalRange[2]; + myLocalLookupTable->GetTableRange(aLocalRange); + MarkValueByColor(myGlobalLookupTable, aLocalRange[0], myBlack); + MarkValueByColor(myGlobalLookupTable, aLocalRange[1], myBlack); + } +} + + +//---------------------------------------------------------------------------- +void +VISU_ScalarBarCtrl +::PrepareTables(vtkScalarBarActor* theScalarBarActor, + vtkLookupTable *theLookupTable, + vtkIdType theId) +{ + vtkCoordinate * aCoordinate = theScalarBarActor->GetPositionCoordinate(); + aCoordinate->SetCoordinateSystemToNormalizedViewport(); + if(theScalarBarActor->GetOrientation() == VTK_ORIENT_VERTICAL){ + float aWidth = theScalarBarActor->GetWidth(); + aCoordinate->SetValue(myPosition[0]+theId*(aWidth+myDistance), myPosition[1]); + }else{ + float aHeight = theScalarBarActor->GetHeight(); + aCoordinate->SetValue(myPosition[0], myPosition[1]+theId*(aHeight+myDistance)); + } + // Initialize Lookup Tables and Scalar Bars + theLookupTable->Modified(); + theLookupTable->Build(); +} + + +void +VISU_ScalarBarCtrl +::PrepareTables() +{ + if(myMode != eSimple){ + PrepareTables(myGlobalScalarBar,myGlobalLookupTable,0); + PrepareTables(myLocalScalarBar,myLocalLookupTable,1); + }else{ + PrepareTables(myLocalScalarBar,myLocalLookupTable,0); + } +} + + +//---------------------------------------------------------------------------- +void +VISU_ScalarBarCtrl +::UpdateForColor() +{ + if(myMode == eGlobal){ + FillByColor(myLocalLookupTable,myGrey); + }else if(myMode == eLocal){ + FillByColor(myGlobalLookupTable,myGrey); + } +} + + +//---------------------------------------------------------------------------- +void +VISU_ScalarBarCtrl +::UpdateForBicolor() +{ + myLocalLookupTable->Modified(); + myLocalLookupTable->Build(); + + if(myMode == eSimple){ + MakeBiColor(myLocalLookupTable); + return; + } + + if(myMode == eGlobal){ + MakeBiColor(myGlobalLookupTable); + FillByColor(myLocalLookupTable,myGrey); + }else if(myMode == eLocal){ + MakeBiColor(myLocalLookupTable); + FillByColor(myGlobalLookupTable,myGrey); + } +} diff --git a/src/PIPELINE/VISU_ScalarBarCtrl.hxx b/src/PIPELINE/VISU_ScalarBarCtrl.hxx new file mode 100644 index 00000000..c1a2f958 --- /dev/null +++ b/src/PIPELINE/VISU_ScalarBarCtrl.hxx @@ -0,0 +1,138 @@ +// VISU OBJECT : interactive object for VISU entities implementation +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// File: VISU_ScalarBarCtrl.hxx +// Author: Peter KURNEV +// Module : VISU + +#ifndef VISU_ScalarBarCtrl_HeaderFile +#define VISU_ScalarBarCtrl_HeaderFile + +#include + +class vtkRenderer; +class vtkLookupTable; +class vtkScalarBarActor; + +class VISU_ScalarBarCtrl : public vtkObject +{ +public: + vtkTypeMacro(VISU_ScalarBarCtrl, vtkObject); + static VISU_ScalarBarCtrl* New(); + + enum EMode {eSimple, eGlobal, eLocal}; + + // Mode + void SetMode(EMode theMode); + EMode GetMode() const; + + // Ranges + void SetRangeGlobal(float theMin, + float theMax); + void SetRangeGlobal(float *theRange); + + void SetGlobalRangeIsDefined(bool theIsDefined); + + void SetRangeLocal(float theMin, + float theMax); + void SetRangeLocal(float *theRange); + + // Selectors + vtkScalarBarActor* GetLocalBar(); + vtkLookupTable* GetLocalTable(); + + vtkScalarBarActor* GetGlobalBar(); + vtkLookupTable* GetGlobalTable(); + // + // Renderer + void AddToRender(vtkRenderer* theRenderer); + void RemoveFromRender(vtkRenderer* theRenderer); + // + // Visibility + void SetVisibility(int theFlag); + int GetVisibility() const; + // + // Visibility + void SetCtrlVisibility(int theFlag); + int GetCtrlVisibility() const; + // + // Build + void Update(); + // + // Position + void SetWidth(const float theWidth); + float GetWidth()const; + void SetHeight(const float theHeight); + float GetHeight()const; + void SetPosition(const float* thePosition); + const float* GetPosition()const; + // + // Spacing + void SetSpacing(const float theSpacing); + float GetSpacing()const; + // + // Rainbow/bicolor + bool GetBicolor() const; + void SetBicolor(const bool theBicolor); + // + // Misc + void SetMarkValue (const float theValue); + float GetMarkValue ()const; + void SetIsMarked(const bool theFlag); + bool GetIsMarked()const; + // +protected: + VISU_ScalarBarCtrl(); + virtual ~VISU_ScalarBarCtrl(); + + void UpdateForBicolor(); + void UpdateForColor(); + void UpdateMarkValue(); + void PrepareTables(); + + void PrepareTables(vtkScalarBarActor* theScalarBarActor, + vtkLookupTable *theLookupTable, + vtkIdType theId); + +protected: + EMode myMode; + bool myGlobalRangeIsDefined; + + float myDistance; + float myPosition[2]; + bool myBicolor; + int myCtrlVisibility; + + unsigned char myBlack[3]; + unsigned char myGrey[3]; + // + bool myMarked; + float myMarkedValue; + // + vtkScalarBarActor *myGlobalScalarBar; + vtkLookupTable *myGlobalLookupTable; + + vtkScalarBarActor *myLocalScalarBar; + vtkLookupTable *myLocalLookupTable; +}; + +#endif diff --git a/src/PIPELINE/VISU_ScalarMapPL.cxx b/src/PIPELINE/VISU_ScalarMapPL.cxx index 473d2de8..42daa1bc 100644 --- a/src/PIPELINE/VISU_ScalarMapPL.cxx +++ b/src/PIPELINE/VISU_ScalarMapPL.cxx @@ -28,14 +28,17 @@ #include "VISU_ScalarMapPL.hxx" #include "VISU_PipeLineUtils.hxx" +#include "SALOME_ExtractGeometry.h" -vtkStandardNewMacro(VISU_ScalarMapPL); +//============================================================================ +vtkStandardNewMacro(VISU_ScalarMapPL); -VISU_ScalarMapPL::VISU_ScalarMapPL(){ - myFieldTransform = VISU_FieldTransform::New(); - //myFieldTransform->DebugOn(); +//---------------------------------------------------------------------------- +VISU_ScalarMapPL +::VISU_ScalarMapPL() +{ myMapperTable = VISU_LookupTable::New(); myMapperTable->SetScale(VTK_SCALE_LINEAR); myMapperTable->SetHueRange(0.667,0.0); @@ -45,46 +48,90 @@ VISU_ScalarMapPL::VISU_ScalarMapPL(){ myBarTable->SetHueRange(0.667,0.0); myExtractor = VISU_Extractor::New(); - //myExtractor->DebugOn(); + myExtractor->SetInput(myExtractGeometry->GetOutput()); + + myFieldTransform = VISU_FieldTransform::New(); + myFieldTransform->SetInput(myExtractor->GetOutput()); + myIsShrinkable = true; } -VISU_ScalarMapPL::~VISU_ScalarMapPL(){ - myFieldTransform->UnRegisterAllOutputs(); +VISU_ScalarMapPL +::~VISU_ScalarMapPL() +{ myFieldTransform->Delete(); - myMapperTable->Delete();; + myMapperTable->Delete(); myBarTable->Delete(); - myExtractor->UnRegisterAllOutputs(); myExtractor->Delete(); } -void VISU_ScalarMapPL::ShallowCopy(VISU_PipeLine *thePipeLine){ - VISU_PipeLine::ShallowCopy(thePipeLine); +//---------------------------------------------------------------------------- +void +VISU_ScalarMapPL +::ShallowCopy(VISU_PipeLine *thePipeLine) +{ if(VISU_ScalarMapPL *aPipeLine = dynamic_cast(thePipeLine)){ SetScalarRange(aPipeLine->GetScalarRange()); SetScalarMode(aPipeLine->GetScalarMode()); SetNbColors(aPipeLine->GetNbColors()); SetScaling(aPipeLine->GetScaling()); - //Update(); + SetMapScale(aPipeLine->GetMapScale()); } + Superclass::ShallowCopy(thePipeLine); } -int VISU_ScalarMapPL::GetScalarMode(){ +//---------------------------------------------------------------------------- +int +VISU_ScalarMapPL +::GetScalarMode() +{ return myExtractor->GetScalarMode(); } -void VISU_ScalarMapPL::SetScalarMode(int theScalarMode){ + +void +VISU_ScalarMapPL +::SetScalarMode(int theScalarMode) +{ + vtkDataSet *input = GetInput(); + if (input){ + if(input->GetPointData()->GetNumberOfArrays()){ + vtkPointData *inData = input->GetPointData(); + if(!inData->GetAttribute(vtkDataSetAttributes::VECTORS)) { + if (theScalarMode==0){ + return; + } + } + } + else { + vtkCellData *inData = input->GetCellData(); + if(!inData->GetAttribute(vtkDataSetAttributes::VECTORS)){ + if (theScalarMode==0){ + return; + } + } + } + } + // myExtractor->SetScalarMode(theScalarMode); Modified(); } -int VISU_ScalarMapPL::GetScaling() { +//---------------------------------------------------------------------------- +int +VISU_ScalarMapPL +::GetScaling() +{ return myBarTable->GetScale(); } -void VISU_ScalarMapPL::SetScaling(int theScaling) { + +void +VISU_ScalarMapPL +::SetScaling(int theScaling) +{ myBarTable->SetScale(theScaling); if(theScaling == VTK_SCALE_LOG10) myFieldTransform->SetScalarTransform(&(VISU_FieldTransform::Log10)); @@ -94,60 +141,95 @@ void VISU_ScalarMapPL::SetScaling(int theScaling) { } -float* VISU_ScalarMapPL::GetScalarRange() { +//---------------------------------------------------------------------------- +float* +VISU_ScalarMapPL +::GetScalarRange() +{ return myFieldTransform->GetScalarRange(); } -void VISU_ScalarMapPL::SetScalarRange(float theRange[2]){ + +void +VISU_ScalarMapPL +::SetScalarRange(float theRange[2]) +{ myFieldTransform->SetScalarRange(theRange); myBarTable->SetRange(theRange); Modified(); } -void VISU_ScalarMapPL::SetScalarMin(float theValue){ + +void +VISU_ScalarMapPL +::SetScalarMin(float theValue) +{ float aScalarRange[2] = {theValue, GetScalarRange()[1]}; SetScalarRange(aScalarRange); } -void VISU_ScalarMapPL::SetScalarMax(float theValue){ + +void +VISU_ScalarMapPL +::SetScalarMax(float theValue) +{ float aScalarRange[2] = {GetScalarRange()[0], theValue}; SetScalarRange(aScalarRange); } -void VISU_ScalarMapPL::SetNbColors(int theNbColors) { +//---------------------------------------------------------------------------- +void +VISU_ScalarMapPL +::SetNbColors(int theNbColors) +{ myMapperTable->SetNumberOfColors(theNbColors); myBarTable->SetNumberOfColors(theNbColors); Modified(); } -int VISU_ScalarMapPL::GetNbColors() { + +int +VISU_ScalarMapPL +::GetNbColors() +{ return myMapperTable->GetNumberOfColors(); } -VISU_ScalarMapPL::THook* VISU_ScalarMapPL::DoHook(){ +//---------------------------------------------------------------------------- +VISU_ScalarMapPL::THook* +VISU_ScalarMapPL +::DoHook() +{ myMapper->SetColorModeToMapScalars(); myMapper->ScalarVisibilityOn(); return myFieldTransform->GetUnstructuredGridOutput(); } -void VISU_ScalarMapPL::Init(){ - //SetSourceRange(); +void +VISU_ScalarMapPL +::Init() +{ + SetScalarMode(0); + SetSourceRange(); } - -void VISU_ScalarMapPL::Build() { - myExtractor->SetInput(GetInput2()); - myFieldTransform->SetInput(myExtractor->GetOutput()); +void +VISU_ScalarMapPL +::Build() +{ myMapper->SetInput(DoHook()); + Update(); } -void VISU_ScalarMapPL::Update() { +void +VISU_ScalarMapPL +::Update() +{ float *aRange = myFieldTransform->GetScalarRange(); float aScalarRange[2] = {aRange[0], aRange[1]}; if(myBarTable->GetScale() == VTK_SCALE_LOG10) VISU_LookupTable::ComputeLogRange(aRange,aScalarRange); myMapperTable->SetRange(aScalarRange); - myMapperTable->SetMapScale(1.0); myMapperTable->Build(); myBarTable->Build(); @@ -159,21 +241,51 @@ void VISU_ScalarMapPL::Update() { } -void VISU_ScalarMapPL::SetMapScale(float theMapScale){ +//---------------------------------------------------------------------------- +VISU_LookupTable * +VISU_ScalarMapPL +::GetMapperTable() +{ + return myMapperTable; +} + +VISU_LookupTable* +VISU_ScalarMapPL +::GetBarTable() +{ + return myBarTable; +} + + +//---------------------------------------------------------------------------- +void +VISU_ScalarMapPL +::SetMapScale(float theMapScale) +{ myMapperTable->SetMapScale(theMapScale); myMapperTable->Build(); } -float VISU_ScalarMapPL::GetMapScale(){ + +float +VISU_ScalarMapPL::GetMapScale() +{ return myMapperTable->GetMapScale(); } -void VISU_ScalarMapPL::GetSourceRange(float theRange[2]){ +//---------------------------------------------------------------------------- +void +VISU_ScalarMapPL +::GetSourceRange(float theRange[2]) +{ myExtractor->Update(); myExtractor->GetOutput()->GetScalarRange(theRange); } -void VISU_ScalarMapPL::SetSourceRange(){ +void +VISU_ScalarMapPL +::SetSourceRange() +{ float aRange[2]; GetSourceRange(aRange); SetScalarRange(aRange); diff --git a/src/PIPELINE/VISU_ScalarMapPL.hxx b/src/PIPELINE/VISU_ScalarMapPL.hxx index b5358285..1d810fb9 100644 --- a/src/PIPELINE/VISU_ScalarMapPL.hxx +++ b/src/PIPELINE/VISU_ScalarMapPL.hxx @@ -31,55 +31,121 @@ #include "VISU_PipeLine.hxx" #include "VISU_ScalarBarActor.hxx" +class vtkCell; class vtkDataSet; class VISU_Extractor; class VISU_FieldTransform; -class VISU_ScalarMapPL : public VISU_PipeLine{ + +//============================================================================ +class VISU_ScalarMapPL : public VISU_PipeLine +{ protected: VISU_ScalarMapPL(); VISU_ScalarMapPL(const VISU_ScalarMapPL&); + + virtual + ~VISU_ScalarMapPL(); + public: + //---------------------------------------------------------------------------- vtkTypeMacro(VISU_ScalarMapPL,VISU_PipeLine); - static VISU_ScalarMapPL* New(); - virtual ~VISU_ScalarMapPL(); - virtual void ShallowCopy(VISU_PipeLine *thePipeLine); - virtual int GetScalarMode(); - virtual void SetScalarMode(int theScalarMode = 0); + static + VISU_ScalarMapPL* + New(); + + virtual + void + ShallowCopy(VISU_PipeLine *thePipeLine); + + //---------------------------------------------------------------------------- + virtual + int + GetScalarMode(); + + virtual + void + SetScalarMode(int theScalarMode = 0); - virtual int GetScaling(); - virtual void SetScaling(int theScaling = VTK_SCALE_LINEAR); + virtual + int + GetScaling(); + virtual + void + SetScaling(int theScaling = VTK_SCALE_LINEAR); - virtual float* GetScalarRange(); - virtual void SetScalarRange(float theRange[2]); - virtual void SetScalarMin(float theValue); - virtual void SetScalarMax(float theValue); + virtual + float* + GetScalarRange(); + + virtual + void + SetScalarRange(float theRange[2]); + + virtual + void + SetScalarMin(float theValue); + + virtual + void + SetScalarMax(float theValue); - virtual void SetNbColors(int theNbColors = 16); - virtual int GetNbColors(); + virtual + void + SetNbColors(int theNbColors = 16); + + virtual + int + GetNbColors(); + //---------------------------------------------------------------------------- public: - virtual void Init(); - virtual void Build(); - virtual void Update(); + virtual + void + Init(); + + virtual + void + Build(); + + virtual + void + Update(); - virtual VISU_LookupTable *GetMapperTable(){ return myMapperTable;} - virtual VISU_LookupTable *GetBarTable(){ return myBarTable;} + virtual + VISU_LookupTable* + GetMapperTable(); + + virtual + VISU_LookupTable* + GetBarTable(); + + virtual + void + SetMapScale(float theMapScale = 1.0); + + virtual + float + GetMapScale(); - virtual void SetMapScale(float theMapScale = 1.0); - virtual float GetMapScale(); + virtual + void + GetSourceRange(float theRange[2]); - virtual void GetSourceRange(float theRange[2]); - virtual void SetSourceRange(); + virtual + void + SetSourceRange(); + //---------------------------------------------------------------------------- protected: typedef vtkDataSet THook; virtual THook* DoHook(); - VISU_LookupTable *myMapperTable, *myBarTable; - VISU_FieldTransform *myFieldTransform; + VISU_LookupTable* myMapperTable; + VISU_LookupTable* myBarTable; + VISU_FieldTransform* myFieldTransform; VISU_Extractor* myExtractor; }; diff --git a/src/PIPELINE/VISU_SphereWidget.cxx b/src/PIPELINE/VISU_SphereWidget.cxx new file mode 100755 index 00000000..2134aeb7 --- /dev/null +++ b/src/PIPELINE/VISU_SphereWidget.cxx @@ -0,0 +1,622 @@ +#include "VISU_SphereWidget.hxx" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +vtkCxxRevisionMacro(VISU_SphereWidget, "$Revision$"); +vtkStandardNewMacro(VISU_SphereWidget); +//==================================================================== +// function: +// purpose: +//==================================================================== +VISU_SphereWidget::VISU_SphereWidget() +{ + myState = VISU_SphereWidget::Start; + this->EventCallbackCommand->SetCallback(VISU_SphereWidget::ProcessEvents); + + //Build the representation of the widget + mySphereSource = vtkSphereSource::New(); + mySphereSource->SetThetaResolution(16); + mySphereSource->SetPhiResolution(15); + mySphereSource->LatLongTessellationOn(); + mySphereMapper = vtkPolyDataMapper::New(); + mySphereMapper->SetInput(mySphereSource->GetOutput()); + mySphereActor = vtkActor::New(); + mySphereActor->SetMapper(mySphereMapper); + // + // Define the point coordinates + float bounds[6]; + for(int i = 0; i < 6; i += 2){ + bounds[i]=-.5; + bounds[i+1]=-bounds[i]; + } + // Initial creation of the widget, serves to initialize it + PlaceWidget(bounds); + + //Manage the picking stuff + myPicker = vtkCellPicker::New(); + myPicker->SetTolerance(0.005); //need some fluff + myPicker->AddPickList(mySphereActor); + myPicker->PickFromListOn(); + + // Set up the initial properties + mySphereProperty = NULL; + mySelectedSphereProperty = NULL; + CreateDefaultProperties(); + myRmin=1.e-7; + + mySphere=vtkSphere::New(); + myImplicitSum=vtkImplicitSum::New(); + myImplicitSum->AddFunction(mySphere,-1.0); + + myRatio = 2.0; +} +//==================================================================== +// function: ~ +// purpose: +//==================================================================== +VISU_SphereWidget::~VISU_SphereWidget() +{ + mySphereActor->Delete(); + mySphereMapper->Delete(); + mySphereSource->Delete(); + + myPicker->Delete(); + + if ( mySphereProperty ) { + mySphereProperty->Delete(); + } + if ( mySelectedSphereProperty ) { + mySelectedSphereProperty->Delete(); + } + mySphere->Delete(); + myImplicitSum->Delete(); +} +//==================================================================== +// function: SetThetaResolution +// purpose : +//==================================================================== +void VISU_SphereWidget::SetThetaResolution(int r) +{ + mySphereSource->SetThetaResolution(r); +} +//==================================================================== +// function: GetThetaResolution +// purpose : +//==================================================================== +int VISU_SphereWidget::GetThetaResolution() +{ + return mySphereSource->GetThetaResolution(); +} +//==================================================================== +// function: SetPhiResolution +// purpose : +//==================================================================== +void VISU_SphereWidget::SetPhiResolution(int r) +{ + mySphereSource->SetPhiResolution(r); +} +//==================================================================== +// function: SetPhiResolution +// purpose : +//==================================================================== +int VISU_SphereWidget::GetPhiResolution() +{ + return mySphereSource->GetPhiResolution(); +} +//==================================================================== +// function: SetRadius +// purpose : +//==================================================================== +void VISU_SphereWidget::SetRadius(float theRadius) +{ + if ( theRadius <= myRmin ) { + theRadius = myRmin; + } + mySphereSource->SetRadius(theRadius); + mySphere->SetRadius(theRadius); +} +//==================================================================== +// function: GetRadius +// purpose : +//==================================================================== +float VISU_SphereWidget::GetRadius() +{ + return mySphereSource->GetRadius(); +} +//==================================================================== +// function: SetCenter +// purpose : +//==================================================================== +void VISU_SphereWidget::SetCenter(float theCenter[3]) +{ + mySphereSource->SetCenter(theCenter); + mySphere->SetCenter(theCenter); +} +//==================================================================== +// function: SetCenter +// purpose : +//==================================================================== +void VISU_SphereWidget::SetCenter(float theX, float theY, float theZ) +{ + float aCenter[3] = {theX, theY, theZ}; + SetCenter(aCenter); +} + +//==================================================================== +// function: GetCenter +// purpose : +//==================================================================== +float* VISU_SphereWidget::GetCenter() +{ + return mySphereSource->GetCenter(); +} +//==================================================================== +// function: GetCenter +// purpose : +//==================================================================== +void VISU_SphereWidget::GetCenter(float theCenter[3]) +{ + mySphereSource->GetCenter(theCenter); +} +//==================================================================== +// function: GetSphereProperty +// purpose : +//==================================================================== +vtkProperty* VISU_SphereWidget::GetSphereProperty () +{ + return mySphereProperty; +} +//==================================================================== +// function: GetSelectedSphereProperty +// purpose : +//==================================================================== +vtkProperty* VISU_SphereWidget::GetSelectedSphereProperty () +{ + return mySelectedSphereProperty; +} +//==================================================================== +// function: ImplicitFunction +// purpose : +//==================================================================== +vtkImplicitFunction* VISU_SphereWidget::ImplicitFunction() +{ + return myImplicitSum; +} +//==================================================================== +// function: SetEnabled +// purpose : +//==================================================================== +void VISU_SphereWidget::SetEnabled(int enabling) +{ + if ( !Interactor ) { + vtkErrorMacro(<<"The interactor must be set prior to enabling/disabling widget"); + return; + } + + if ( enabling ) { + vtkDebugMacro(<<"Enabling sphere widget"); + if ( Enabled ) {//already enabled, just return + return; + } + + if ( ! CurrentRenderer ) { + int aPos[2]; + Interactor->GetLastEventPosition(aPos); + CurrentRenderer=Interactor->FindPokedRenderer(aPos[0], aPos[1]); + if (!CurrentRenderer) { + return; + } + } + + Enabled = 1; + + // listen for the following events + Interactor->AddObserver(vtkCommand::MouseMoveEvent, + EventCallbackCommand, + Priority); + Interactor->AddObserver(vtkCommand::LeftButtonPressEvent, + EventCallbackCommand, + Priority); + Interactor->AddObserver(vtkCommand::LeftButtonReleaseEvent, + EventCallbackCommand, + Priority); + Interactor->AddObserver(vtkCommand::MiddleButtonPressEvent, + EventCallbackCommand, + Priority); + Interactor->AddObserver(vtkCommand::MiddleButtonReleaseEvent, + EventCallbackCommand, + Priority); + + // Add the sphere + CurrentRenderer->AddActor(mySphereActor); + mySphereActor->SetProperty(mySphereProperty); + mySphere->SetCenter(mySphereSource->GetCenter()); + mySphere->SetRadius(mySphereSource->GetRadius()); + + InvokeEvent(vtkCommand::EnableEvent,NULL); //!!!see what will be done + } + //disabling---------------------------------------------------------- + else { + vtkDebugMacro(<<"Disabling sphere widget"); + + if ( !Enabled ){ //already disabled, just return + return; + } + + Enabled = 0; + + // don't listen for events any more + Interactor->RemoveObserver(EventCallbackCommand); + + // turn off the sphere + CurrentRenderer->RemoveActor(mySphereActor); + InvokeEvent(vtkCommand::DisableEvent,NULL); + CurrentRenderer = NULL; + } + + Interactor->Render(); +} +//==================================================================== +// function:ProcessEvents +// purpose: +//==================================================================== +void VISU_SphereWidget::ProcessEvents(vtkObject* vtkNotUsed(object), + unsigned long event, + void* clientdata, + void* vtkNotUsed(calldata)) +{ + VISU_SphereWidget* self = reinterpret_cast( clientdata ); + + switch(event) { + case vtkCommand::LeftButtonPressEvent: + self->OnLeftButtonDown(); + break; + case vtkCommand::LeftButtonReleaseEvent: + self->OnLeftButtonUp(); + break; + case vtkCommand::MiddleButtonPressEvent: + self->OnMiddleButtonDown(); + break; + case vtkCommand::MiddleButtonReleaseEvent: + self->OnMiddleButtonUp(); + break; + case vtkCommand::MouseMoveEvent: + self->OnMouseMove(); + break; + default: + break; + } +} +//==================================================================== +// function:OnLeftButtonDown +// purpose: +//==================================================================== +void VISU_SphereWidget::OnLeftButtonDown() +{ + int X = Interactor->GetEventPosition()[0]; + int Y = Interactor->GetEventPosition()[1]; + + // Okay, make sure that the pick is in the current renderer + vtkRenderer *aRenderer = Interactor->FindPokedRenderer(X,Y); + // + if (aRenderer != CurrentRenderer) { + myState = VISU_SphereWidget::Outside; + return; + } + // Okay, we can process this. Try to pick handles first; + // if no places picked, then try to pick the sphere. + myPicker->Pick(X, Y, 0., CurrentRenderer); + if(vtkAssemblyPath *aPath = myPicker->GetPath()){ + if(aPath->GetFirstNode()->GetProp() == mySphereActor){ + myState = VISU_SphereWidget::Moving; + HighlightSphere(1); + } + }else{ + myState = VISU_SphereWidget::Outside; + return; + } + // + EventCallbackCommand->SetAbortFlag(1); + StartInteraction(); + InvokeEvent(vtkCommand::StartInteractionEvent,NULL); + Interactor->Render(); +} +//==================================================================== +// function:OnMouseMove +// purpose: +//==================================================================== +void VISU_SphereWidget::OnMouseMove() +{ + // See whether we're active + if ( myState == VISU_SphereWidget::Outside || + myState == VISU_SphereWidget::Start ) { + return; + } + + int X = Interactor->GetEventPosition()[0]; + int Y = Interactor->GetEventPosition()[1]; + + // Do different things depending on state + // Calculations everybody does + double focalPoint[4], pickPoint[4], prevPickPoint[4], z; + + vtkRenderer *aRenderer=Interactor->FindPokedRenderer(X, Y); + vtkCamera *aCamera=aRenderer->GetActiveCamera(); + if (!aCamera ) { + return; + } + // Compute the two points defining the motion vector + aCamera->GetFocalPoint(focalPoint); + ComputeWorldToDisplay(focalPoint[0], + focalPoint[1], + focalPoint[2], + focalPoint); + z = focalPoint[2]; + ComputeDisplayToWorld(double(Interactor->GetLastEventPosition()[0]), + double(Interactor->GetLastEventPosition()[1]), + z, + prevPickPoint); + ComputeDisplayToWorld(double(X), double(Y), z, pickPoint); + + // Process the motion + if ( myState == VISU_SphereWidget::Moving ) { + Translate(prevPickPoint, pickPoint); + } + else if ( myState == VISU_SphereWidget::Scaling ) { + Scale(prevPickPoint, pickPoint, X, Y); + } + // Interact, if desired + EventCallbackCommand->SetAbortFlag(1); + InvokeEvent(vtkCommand::InteractionEvent,NULL); + // + Interactor->Render(); +} +//==================================================================== +// function:OnLeftButtonUp +// purpose: +//==================================================================== +void VISU_SphereWidget::OnLeftButtonUp() +{ + if ( myState == VISU_SphereWidget::Outside ) { + return; + } + + myState = VISU_SphereWidget::Start; + HighlightSphere(0); + + EventCallbackCommand->SetAbortFlag(1); + EndInteraction(); + InvokeEvent(vtkCommand::EndInteractionEvent,NULL); + + Interactor->Render(); +} +//==================================================================== +// function:OnMiddleButtonDown +// purpose: +//==================================================================== +void VISU_SphereWidget::OnMiddleButtonDown() +{ + myState = VISU_SphereWidget::Scaling; + + int X = Interactor->GetEventPosition()[0]; + int Y = Interactor->GetEventPosition()[1]; + + // Okay, make sure that the pick is in the current renderer + vtkRenderer *aRenderer = Interactor->FindPokedRenderer(X,Y); + if (aRenderer!=CurrentRenderer) { + myState = VISU_SphereWidget::Outside; + return; + } + + // Okay, we can process this. Try to pick handles first; + // if no handles picked, then pick the bounding box. + myPicker->Pick(X, Y, 0., CurrentRenderer); + vtkAssemblyPath *aPath = myPicker->GetPath(); + if ( !aPath ) { + myState=VISU_SphereWidget::Outside; + HighlightSphere(0); + return; + } + + HighlightSphere(1); + + EventCallbackCommand->SetAbortFlag(1); + StartInteraction(); + InvokeEvent(vtkCommand::StartInteractionEvent,NULL); + // + Interactor->Render(); +} +//==================================================================== +// function:OnMiddleButtonUp +// purpose: +//==================================================================== +void VISU_SphereWidget::OnMiddleButtonUp() +{ + if ( myState == VISU_SphereWidget::Outside ) { + return; + } + myState = VISU_SphereWidget::Start; + HighlightSphere(0); + + EventCallbackCommand->SetAbortFlag(1); + EndInteraction(); + InvokeEvent(vtkCommand::EndInteractionEvent,NULL); + // + Interactor->Render(); +} +//==================================================================== +// function:Translate +// purpose: +//==================================================================== +void VISU_SphereWidget::Translate(double *p1, double *p2) +{ + float v[3], aC[3], aC1[3]; + // + v[0] = p2[0] - p1[0]; + v[1] = p2[1] - p1[1]; + v[2] = p2[2] - p1[2]; + // + mySphereSource->GetCenter(aC); + aC1[0] = aC[0] + v[0]; + aC1[1] = aC[1] + v[1]; + aC1[2] = aC[2] + v[2]; + mySphereSource->SetCenter(aC1); + mySphere->SetCenter(mySphereSource->GetCenter()); + mySphere->SetRadius(mySphereSource->GetRadius()); +} +//==================================================================== +// function:Scale +// purpose: +//==================================================================== +void VISU_SphereWidget::Scale(double *p1, double *p2, + int aX, int aY) +{ + double v[3]; + v[0] = p2[0] - p1[0]; + v[1] = p2[1] - p1[1]; + v[2] = p2[2] - p1[2]; + // + float aC[3], aR, sf, aR1; + aR=mySphereSource->GetRadius(); + mySphereSource->GetCenter(aC); + sf=vtkMath::Norm(v)/aR; + int aCoordLast[2], iDX, iDY, iSign; + Interactor->GetLastEventPosition(aCoordLast); + // + iDX=aX-aCoordLast[0]; + iDY=aCoordLast[1]-aY; + iSign=(iDX+iDY>0)? 1 : -1; + sf=1.+iSign*sf; + aR1=sf*aR; + if (aR1SetRadius(aR1); + mySphere->SetCenter(mySphereSource->GetCenter()); + mySphere->SetRadius(mySphereSource->GetRadius()); +} +//==================================================================== +// function:GetSphere +// purpose: +//==================================================================== +void VISU_SphereWidget::GetSphere(vtkSphere *sphere) +{ + sphere->SetRadius(mySphereSource->GetRadius()); + sphere->SetCenter(mySphereSource->GetCenter()); +} +//==================================================================== +// function:HighlightSphere +// purpose: +//==================================================================== +void VISU_SphereWidget::HighlightSphere(int highlight) +{ + if ( highlight ) { + this->ValidPick = 1; + myPicker->GetPickPosition(this->LastPickPosition);// -> def in vtk3DWidget + mySphereActor->SetProperty(mySelectedSphereProperty); + } + else { + mySphereActor->SetProperty(mySphereProperty); + } +} +//==================================================================== +// function:CreateDefaultProperties +// purpose: +//==================================================================== +void VISU_SphereWidget::CreateDefaultProperties() +{ + if (!mySphereProperty) { + mySphereProperty = vtkProperty::New(); + mySphereProperty->SetColor(0.,.5, .7); + mySphereProperty->SetSpecular(0.5); + mySphereProperty->SetRepresentationToWireframe(); + } + if (!mySelectedSphereProperty) { + mySelectedSphereProperty = vtkProperty::New(); + mySelectedSphereProperty->SetColor(0.5, 0.5, 0.); + mySelectedSphereProperty->SetSpecular(1.); + mySelectedSphereProperty->SetRepresentationToWireframe(); + } +} +//==================================================================== +// function:PlaceWidget +// purpose: +//==================================================================== +void VISU_SphereWidget::PlaceWidget(float bds[6]) +{ + float bounds[6], center[3], radius; + + this->AdjustBounds(bds, bounds, center); + float dX, dY, dZ; + // + dX=bounds[1]-bounds[0]; + dY=bounds[3]-bounds[2]; + dZ=bounds[5]-bounds[4]; + radius = dX; + if (radius>dY){ + radius = dY; + } + if (radius>dZ) { + radius=dZ; + } + radius*=0.5; + + mySphereSource->SetCenter(center); + mySphereSource->SetRadius(radius); + mySphereSource->Update(); + // + for (int i=0; i<6; i++) { + InitialBounds[i]=bounds[i]; + } + InitialLength = sqrt((bounds[1]-bounds[0])*(bounds[1]-bounds[0]) + + (bounds[3]-bounds[2])*(bounds[3]-bounds[2]) + + (bounds[5]-bounds[4])*(bounds[5]-bounds[4])); + + static float EPS = 1.0E-1; + myRmin = EPS*InitialLength; + +} + +//==================================================================== +// function:ChangeRadius +// purpose: +//==================================================================== +void VISU_SphereWidget::ChangeRadius(bool up) +{ + SetRadius( GetRadius() * ( up ? myRatio : 1 / myRatio ) ); +} +//==================================================================== +// function:GetPolyData +// purpose: +//==================================================================== +void VISU_SphereWidget::GetPolyData(vtkPolyData *pd) +{ + pd->ShallowCopy(mySphereSource->GetOutput()); +} +//==================================================================== +// function:PrintSelf +// purpose: +//==================================================================== +void VISU_SphereWidget::PrintSelf(ostream& os, vtkIndent indent) +{ + this->Superclass::PrintSelf(os,indent); +} diff --git a/src/PIPELINE/VISU_SphereWidget.hxx b/src/PIPELINE/VISU_SphereWidget.hxx new file mode 100755 index 00000000..040a4180 --- /dev/null +++ b/src/PIPELINE/VISU_SphereWidget.hxx @@ -0,0 +1,134 @@ +#ifndef __VISU_SphereWidget_h +#define __VISU_SphereWidget_h + +#include "VISU_ImplicitFunctionWidget.hxx" + +class VISU_UnScaledActor; + +class vtkActor; +class vtkPolyDataMapper; +class vtkPoints; +class vtkPolyData; +class vtkSphereSource; +class vtkSphere; +class vtkCellPicker; +class vtkProperty; +class vtkSphere; +class vtkImplicitSum; +class vtkImplicitFunction; +// +class VISU_SphereWidget : public VISU_ImplicitFunctionWidget +{ +public: + // Description: + // Instantiate the object. + static VISU_SphereWidget *New(); + vtkTypeRevisionMacro(VISU_SphereWidget,VISU_ImplicitFunctionWidget); + void PrintSelf(ostream& os, vtkIndent indent); + + virtual vtkImplicitFunction* ImplicitFunction(); + + // Description: + // Methods that satisfy the superclass' API. + virtual void SetEnabled(int); + // + //PlaceWidget + virtual void PlaceWidget(float bounds[6]); + // + // Description: + // Set/Get the resolution of the sphere in the Theta direction. + void SetThetaResolution(int r); + int GetThetaResolution(); + // Description: + // Set/Get the resolution of the sphere in the Phi direction. + void SetPhiResolution(int r); + int GetPhiResolution(); + + // Description: + // Set/Get the radius of sphere. Default is .5. + void SetRadius(float r); + float GetRadius(); + + + // Description: + // Set/Get the center of the sphere. + void SetCenter(float x, float y, float z); + void SetCenter(float x[3]); + + float* GetCenter(); + void GetCenter(float xyz[3]); + + // Description: + // Set the ratio of the radius changing. + void SetRatio(float r) { myRatio = r; } + float GetRatio() { return myRatio; } + + void ChangeRadius(bool up); + + void GetPolyData(vtkPolyData *pd); + + void GetSphere(vtkSphere *sphere); + + + vtkProperty* GetSphereProperty (); + vtkProperty* GetSelectedSphereProperty (); + + +protected: + VISU_SphereWidget(); + ~VISU_SphereWidget(); + + //handles the events + static void ProcessEvents(vtkObject* object, + unsigned long event, + void* clientdata, + void* calldata); + + // ProcessEvents() dispatches to these methods. + void OnLeftButtonDown(); + void OnLeftButtonUp(); + void OnMiddleButtonDown(); + void OnMiddleButtonUp(); + void OnMouseMove(); + + void HighlightSphere(int highlight); + + // Methods to manipulate the sphere widget + void Translate(double *p1, double *p2); + void Scale(double *p1, double *p2, int X, int Y); + + //virtual void SizeHandles(); + void CreateDefaultProperties(); + + //BTX - manage the state of the widget + int myState; + enum WidgetState + { + Start=0, + Moving, + Scaling, + Positioning, + Outside + }; + //ETX + // the sphere + vtkActor *mySphereActor; + vtkPolyDataMapper *mySphereMapper; + vtkSphereSource *mySphereSource; + // + // the Picker + vtkCellPicker *myPicker; + // Properties used to control the appearance of selected objects and + // the manipulator in general. + vtkProperty *mySphereProperty; + vtkProperty *mySelectedSphereProperty; + float myRmin; + vtkSphere *mySphere; + vtkImplicitSum* myImplicitSum; + float myRatio; +private: + VISU_SphereWidget(const VISU_SphereWidget&); //Not implemented + void operator=(const VISU_SphereWidget&); //Not implemented +}; + +#endif diff --git a/src/PIPELINE/VISU_StreamLinesPL.cxx b/src/PIPELINE/VISU_StreamLinesPL.cxx index 9b9f781e..6690dc42 100644 --- a/src/PIPELINE/VISU_StreamLinesPL.cxx +++ b/src/PIPELINE/VISU_StreamLinesPL.cxx @@ -74,14 +74,15 @@ VISU_StreamLinesPL::~VISU_StreamLinesPL(){ } void VISU_StreamLinesPL::ShallowCopy(VISU_PipeLine *thePipeLine){ - VISU_DeformedShapePL::ShallowCopy(thePipeLine); - if(VISU_StreamLinesPL *aPipeLine = dynamic_cast(thePipeLine)) + if(VISU_StreamLinesPL *aPipeLine = dynamic_cast(thePipeLine)){ SetParams(aPipeLine->GetIntegrationStep(), aPipeLine->GetPropagationTime(), aPipeLine->GetStepLength(), aPipeLine->GetSource(), aPipeLine->GetUsedPoints(), aPipeLine->GetDirection()); + } + VISU_DeformedShapePL::ShallowCopy(thePipeLine); } diff --git a/src/PIPELINE/VISU_VectorsPL.cxx b/src/PIPELINE/VISU_VectorsPL.cxx index c34d36d9..92a5e575 100644 --- a/src/PIPELINE/VISU_VectorsPL.cxx +++ b/src/PIPELINE/VISU_VectorsPL.cxx @@ -34,11 +34,15 @@ #include #include #include +#include vtkStandardNewMacro(VISU_VectorsPL); -VISU_VectorsPL::VISU_VectorsPL(){ - myGlyph = vtkGlyph3D::New(); +VISU_VectorsPL +::VISU_VectorsPL() +{ + myBaseGlyph = vtkGlyph3D::New(); + myTransformedGlyph = vtkGlyph3D::New(); myGlyphSource = vtkGlyphSource2D::New(); myConeSource = vtkConeSource::New(); @@ -49,75 +53,118 @@ VISU_VectorsPL::VISU_VectorsPL(){ myIsShrinkable = false; } -VISU_VectorsPL::~VISU_VectorsPL(){ - myGlyph->UnRegisterAllOutputs(); - myGlyph->Delete(); +VISU_VectorsPL +::~VISU_VectorsPL() +{ + myBaseGlyph->Delete(); + myTransformedGlyph->Delete(); - myCenters->UnRegisterAllOutputs(); myCenters->Delete(); - myGlyphSource->UnRegisterAllOutputs(); myGlyphSource->Delete(); - myConeSource->UnRegisterAllOutputs(); myConeSource->Delete(); - myLineSource->UnRegisterAllOutputs(); myLineSource->Delete(); - myTransformFilter->UnRegisterAllOutputs(); myTransformFilter->Delete(); } -void VISU_VectorsPL::ShallowCopy(VISU_PipeLine *thePipeLine){ - VISU_DeformedShapePL::ShallowCopy(thePipeLine); +void +VISU_VectorsPL +::ShallowCopy(VISU_PipeLine *thePipeLine) +{ if(VISU_VectorsPL *aPipeLine = dynamic_cast(thePipeLine)){ SetGlyphType(aPipeLine->GetGlyphType()); SetGlyphPos(aPipeLine->GetGlyphPos()); } + Superclass::ShallowCopy(thePipeLine); } -void VISU_VectorsPL::SetTransform(VTKViewer_Transform* theTransform){ +void +VISU_VectorsPL +::SetTransform(VTKViewer_Transform* theTransform) +{ myFieldTransform->SetSpaceTransform(theTransform); myTransformFilter->SetTransform(theTransform); myTransformFilter->Modified(); } -VTKViewer_Transform* VISU_VectorsPL::GetTransform(){ + +VTKViewer_Transform* +VISU_VectorsPL +::GetTransform() +{ return myFieldTransform->GetSpaceTransform(); } -void VISU_VectorsPL::SetScale(float theScale) { - if(myScaleFactor == theScale) return; +void +VISU_VectorsPL +::SetScale(float theScale) +{ + if(myScaleFactor == theScale) + return; + myScaleFactor = theScale; - myGlyph->SetScaleFactor(myScaleFactor); + + myBaseGlyph->SetScaleFactor(myScaleFactor); + myTransformedGlyph->SetScaleFactor(myScaleFactor); + Modified(); } -float VISU_VectorsPL::GetScale() { - return myGlyph->GetScaleFactor(); + +float +VISU_VectorsPL +::GetScale() +{ + return myTransformedGlyph->GetScaleFactor(); } -void VISU_VectorsPL::Init(){ - VISU_DeformedShapePL::Init(); +void +VISU_VectorsPL +::Init() +{ + Superclass::Init(); myTypeGlyph = ARROW; myPosGlyph = TAIL; } -VISU_ScalarMapPL::THook* VISU_VectorsPL::DoHook(){ +vtkDataSet* +VISU_VectorsPL +::GetOutput() +{ + myBaseGlyph->Update(); + return myBaseGlyph->GetOutput(); +} + + +VISU_ScalarMapPL::THook* +VISU_VectorsPL +::DoHook() +{ + VISU::ToCellCenters(myBaseGlyph,myCenters,GetInput2(),myFieldTransform); + myBaseGlyph->SetVectorModeToUseVector(); + myBaseGlyph->SetScaleModeToScaleByVector(); + myBaseGlyph->SetColorModeToColorByScalar(); + VISU::ToCellCenters(myTransformFilter,myCenters,GetInput2(),myFieldTransform); - myGlyph->SetInput(myTransformFilter->GetOutput()); - myGlyph->SetVectorModeToUseVector(); - myGlyph->SetScaleModeToScaleByVector(); - myGlyph->SetColorModeToColorByScalar(); - return myGlyph->GetOutput(); + myTransformedGlyph->SetInput(myTransformFilter->GetOutput()); + myTransformedGlyph->SetVectorModeToUseVector(); + myTransformedGlyph->SetScaleModeToScaleByVector(); + myTransformedGlyph->SetColorModeToColorByScalar(); + + return myTransformedGlyph->GetOutput(); } -void VISU_VectorsPL::Update(){ +void +VISU_VectorsPL +::Update() +{ switch (myTypeGlyph) { case ARROW: { myGlyphSource->SetGlyphTypeToArrow(); @@ -132,11 +179,8 @@ void VISU_VectorsPL::Update(){ case CENTER: myGlyphSource->SetCenter(0.0, 0.0, 0.0); } -// if(myPosGlyph == TAIL) -// myGlyphSource->SetCenter(0.5, 0.0, 0.0); -// else if(myPosGlyph == HEAD) -// myGlyphSource->SetCenter(-0.5, 0.0, 0.0); - myGlyph->SetSource(myGlyphSource->GetOutput()); + myBaseGlyph->SetSource(myGlyphSource->GetOutput()); + myTransformedGlyph->SetSource(myGlyphSource->GetOutput()); } break; case CONE2: @@ -158,26 +202,29 @@ void VISU_VectorsPL::Update(){ case CENTER: myConeSource->SetCenter(0.0, 0.0, 0.0); } -// if(myPosGlyph == TAIL) -// myConeSource->SetCenter(0.5, 0.0, 0.0); -// else if(myPosGlyph == HEAD) -// myConeSource->SetCenter(-0.5, 0.0, 0.0); - myGlyph->SetSource(myConeSource->GetOutput()); + myBaseGlyph->SetSource(myConeSource->GetOutput()); + myTransformedGlyph->SetSource(myConeSource->GetOutput()); } break; case NONE: default: { - myGlyph->SetSource(myLineSource->GetOutput()); + myBaseGlyph->SetSource(myLineSource->GetOutput()); + myTransformedGlyph->SetSource(myLineSource->GetOutput()); } } - VISU_DeformedShapePL::Update(); + Superclass::Update(); } -void VISU_VectorsPL::SetMapScale(float theMapScale){ +void +VISU_VectorsPL +::SetMapScale(float theMapScale) +{ VISU_ScalarMapPL::SetMapScale(theMapScale); - myGlyph->SetScaleFactor(myScaleFactor*theMapScale); - myGlyph->Modified(); + myBaseGlyph->SetScaleFactor(myScaleFactor*theMapScale); + myTransformedGlyph->SetScaleFactor(myScaleFactor*theMapScale); + + Modified(); } diff --git a/src/PIPELINE/VISU_VectorsPL.hxx b/src/PIPELINE/VISU_VectorsPL.hxx index 8b24ece6..312d56fc 100644 --- a/src/PIPELINE/VISU_VectorsPL.hxx +++ b/src/PIPELINE/VISU_VectorsPL.hxx @@ -61,19 +61,24 @@ public: virtual GlyphPos GetGlyphPos() { return myPosGlyph;} public: - virtual THook* DoHook(); virtual void Init(); virtual void Update(); + vtkDataSet* + GetOutput(); + virtual void SetTransform(VTKViewer_Transform* theTransform); virtual VTKViewer_Transform* GetTransform(); virtual void SetMapScale(float theMapScale = 1.0); protected: + virtual THook* DoHook(); + GlyphType myTypeGlyph; GlyphPos myPosGlyph; - vtkGlyph3D *myGlyph; + vtkGlyph3D *myBaseGlyph; + vtkGlyph3D *myTransformedGlyph; vtkGlyphSource2D *myGlyphSource; vtkLineSource *myLineSource; diff --git a/src/PIPELINE/VISU_WidgetCtrl.cxx b/src/PIPELINE/VISU_WidgetCtrl.cxx new file mode 100644 index 00000000..bb62dc63 --- /dev/null +++ b/src/PIPELINE/VISU_WidgetCtrl.cxx @@ -0,0 +1,364 @@ +// SALOME VTKViewer : build VTK viewer into Salome desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : VVTK_WidgetCtrl.cxx +// Author : Peter KURNEV +// Module : SALOME +// $Header$ + +#include "VISU_WidgetCtrl.hxx" +// +#include "VISU_ImplicitFunctionWidget.hxx" +#include "VISU_PlanesWidget.hxx" +#include "VISU_SphereWidget.hxx" +// +#include +// +#include +#include +#include +#include +#include +#include +// +vtkCxxRevisionMacro(VISU_WidgetCtrl,"$Revision$"); +vtkStandardNewMacro(VISU_WidgetCtrl); + +//================================================================== +// function: VISU_WidgetCtrl +// purpose : +//================================================================== +VISU_WidgetCtrl::VISU_WidgetCtrl() +{ + myDummyWidget=NULL; + myDisableAll=0; + myNbWidgets=2; + myActiveIndex=-1;// 0 - PlanesWidget; 1 - SphereWidget + myPriority=0.; + // + myPlanesWidget=VISU_PlanesWidget::New(); + mySphereWidget=VISU_SphereWidget::New(); + // + myWidgets[0]=myPlanesWidget; + myWidgets[1]=mySphereWidget; + // + myEventCallbackCommand=vtkCallbackCommand::New(); + myEventCallbackCommand->SetClientData(this); + myEventCallbackCommand->SetCallback(VISU_WidgetCtrl::ProcessEvents); + // + int i; + for (i=0; iAddObserver(vtkCommand::EnableEvent, + myEventCallbackCommand, + myPriority); + myWidgets[i]->AddObserver(vtkCommand::DisableEvent, + myEventCallbackCommand, + myPriority); + myWidgets[i]->AddObserver(vtkCommand::EndInteractionEvent, + myEventCallbackCommand, + myPriority); + myWidgets[i]->AddObserver(vtkCommand::StartInteractionEvent, + myEventCallbackCommand, + myPriority); + + myWidgets[i]->AddObserver(vtkCommand::InteractionEvent, + myEventCallbackCommand, + myPriority); + } +} +//================================================================== +// function: ~ +// purpose : +//================================================================== +VISU_WidgetCtrl::~VISU_WidgetCtrl() +{ + + myPlanesWidget->Delete(); + mySphereWidget->Delete(); + // + for (int i=0; iRemoveObserver(myEventCallbackCommand); + } + // + myEventCallbackCommand->Delete(); +} +//================================================================== +// function: GetEnabled +// purpose : +//================================================================== +int VISU_WidgetCtrl::GetEnabled() +{ + if (HasActiveIndex()) { + return GetActiveWidget()->GetEnabled(); + } + return 0; +} +//================================================================== +// function: SetEnabled +// purpose : +//================================================================== +void VISU_WidgetCtrl::SetEnabled(int theFlag) +{ + int iFlag, i; + // + myDisableAll=0; + // + iFlag=GetEnabled(); + if (iFlag==theFlag) { + return; + } + // + if (theFlag) {//enabling + if (HasActiveIndex()) { + for (i=0; iSetEnabled(iFlag); + } + } + } + else {//disabling + myDisableAll=1; + for (i=0; iSetEnabled(0); + } + } + + Modified(); +} +//================================================================== +// function: ProcessEvents +// purpose : +//================================================================== +void VISU_WidgetCtrl::ProcessEvents(vtkObject* vtkNotUsed(theObject), + unsigned long theEvent, + void* theClientData, + void* vtkNotUsed(theCallData)) +{ + VISU_WidgetCtrl *aSelf = reinterpret_cast(theClientData); + switch(theEvent){ + case vtkCommand::DisableEvent: + if(aSelf->GetDisableAll()) + aSelf->InvokeEvent(theEvent, NULL); + default: + aSelf->InvokeEvent(theEvent, NULL); + break; + } +} + +//================================================================== +// function: GetNbWidgets +// purpose : +//================================================================== +int VISU_WidgetCtrl::GetNbWidgets()const +{ + return myNbWidgets; +} +//================================================================== +// function: GetDisableAll +// purpose : +//================================================================== +int VISU_WidgetCtrl::GetDisableAll()const +{ + return myDisableAll; +} +//================================================================== +// function: SetActiveIndex +// purpose : +//================================================================== +void VISU_WidgetCtrl::SetActiveIndex(const int theIndex) +{ + myActiveIndex=-1; + if (theIndex>=0 && theIndex=0 && myActiveIndex=0 && theIndexPlaceWidget(theBounds); + } +} +//================================================================== +// function: SetInteractor +// purpose : +//================================================================== +void VISU_WidgetCtrl::SetInteractor(vtkRenderWindowInteractor* theRWI) +{ + for (int i=0; iSetInteractor(theRWI); + } + + Modified(); +} +//================================================================== +// function: GetInteractor +// purpose : +//================================================================== +vtkRenderWindowInteractor* VISU_WidgetCtrl::GetInteractor() +{ + return myWidgets[0]->GetInteractor(); +} +//================================================================== +// function: SetPlaceFactor +// purpose : +//================================================================== +void VISU_WidgetCtrl::SetPlaceFactor(float theFactor) +{ + for (int i=0; iSetPlaceFactor(theFactor); + } + + Modified(); +} +//================================================================== +// function: GetPlaceFactor +// purpose : +//================================================================== +float VISU_WidgetCtrl::GetPlaceFactor() +{ + return myWidgets[0]->GetPlaceFactor(); +} +//================================================================== +// function: ImplicitFunction +// purpose : +//================================================================== +vtkImplicitFunction* VISU_WidgetCtrl::ImplicitFunction() +{ + return this; +} + +//================================================================== +float +VISU_WidgetCtrl +::EvaluateFunction(float theX[3]) +{ + if(VISU_ImplicitFunctionWidget* aWidget = GetActiveWidget()){ + if(vtkImplicitFunction* aFunction = aWidget->ImplicitFunction()) + return aFunction->EvaluateFunction(theX[0],theX[1],theX[2]); + } + return 1.0; +} + +//================================================================== +void +VISU_WidgetCtrl +::EvaluateGradient(float theX[3], float theG[3]) +{ + theG[0] = theG[1] = theG[2] = 0.0; + if(VISU_ImplicitFunctionWidget* aWidget = GetActiveWidget()){ + if(vtkImplicitFunction* aFunction = aWidget->ImplicitFunction()) + aFunction->EvaluateGradient(theX,theG); + } +} + +//================================================================== +unsigned long +VISU_WidgetCtrl +::GetMTime() +{ + unsigned long aTime = Superclass::GetMTime(); + + if(vtkImplicitFunction* aFunction = myPlanesWidget->ImplicitFunction()) + aTime = std::max(aTime,aFunction->GetMTime()); + + if(vtkImplicitFunction* aFunction = mySphereWidget->ImplicitFunction()) + aTime = std::max(aTime,aFunction->GetMTime()); + + return aTime; +} diff --git a/src/PIPELINE/VISU_WidgetCtrl.hxx b/src/PIPELINE/VISU_WidgetCtrl.hxx new file mode 100644 index 00000000..8737b5dc --- /dev/null +++ b/src/PIPELINE/VISU_WidgetCtrl.hxx @@ -0,0 +1,120 @@ +// SALOME VTKViewer : build VTK viewer into Salome desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : VISU_WidgetCtrl.hxx +// Author : Peter KURNEV +// Module : SALOME +// $Header$ + +#ifndef __VISU_WidgetCtrl_hxx +#define __VISU_WidgetCtrl_hxx + + +#include + +class vtkImplicitFunction; +class vtkObject; +class vtkRenderWindowInteractor; +class vtkCommand; +class vtkCallbackCommand; + +class VISU_PlanesWidget; +class VISU_SphereWidget; +class VISU_ImplicitFunctionWidget; + +class VISU_WidgetCtrl : public vtkImplicitFunction +{ +public: + static VISU_WidgetCtrl *New(); + vtkTypeRevisionMacro(VISU_WidgetCtrl,vtkObject); + + vtkImplicitFunction* ImplicitFunction(); + + virtual + float + EvaluateFunction(float theX[3]); + + virtual + void + EvaluateGradient(float theX[3], float theG[3]); + + virtual + unsigned long + GetMTime(); + + void PlaceWidget(float theBounds[6]); + void SetEnabled(int theFlag); + int GetEnabled(); + void On() {SetEnabled(1);} + void Off(){SetEnabled(0);} + + void SetInteractor(vtkRenderWindowInteractor* theRWI); + vtkRenderWindowInteractor* GetInteractor(); + // + void SetPlaceFactor(float theFactor); + float GetPlaceFactor(); + // + void SetActiveIndex(const int theFlag); + int GetActiveIndex()const; + bool HasActiveIndex()const; + bool IsPlanesActive()const; + bool IsSphereActive()const; + + + VISU_ImplicitFunctionWidget* GetActiveWidget(); + VISU_ImplicitFunctionWidget* GetWidget(const int); + + int GetNbWidgets()const; + int GetDisableAll()const; + + // + VISU_PlanesWidget * GetPlanesWidget(); + VISU_SphereWidget * GetSphereWidget(); + // + static void ProcessEvents(vtkObject* theObject, + unsigned long theEvent, + void* theClientData, + void* theCalldata); + // +protected: + VISU_WidgetCtrl(); + ~VISU_WidgetCtrl(); + +protected: + int myNbWidgets; + int myActiveIndex; + int myCounter; + int myDisableAll; + float myPriority; + VISU_ImplicitFunctionWidget *myWidgets[2]; + VISU_ImplicitFunctionWidget *myDummyWidget; + VISU_PlanesWidget *myPlanesWidget; + VISU_SphereWidget *mySphereWidget; + vtkCallbackCommand *myEventCallbackCommand; + +private: + VISU_WidgetCtrl(const VISU_WidgetCtrl&); //Not implemented + void operator=(const VISU_WidgetCtrl&); //Not implemented +}; + +#endif diff --git a/src/PIPELINE/VISU_img2vti.cxx b/src/PIPELINE/VISU_img2vti.cxx new file mode 100644 index 00000000..8cc0a475 --- /dev/null +++ b/src/PIPELINE/VISU_img2vti.cxx @@ -0,0 +1,88 @@ +// VISU OBJECT : interactive object for VISU entities implementation +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// File: VISU_img2vti.cxx +// Author: Oleg UVAROV +// Module : VISU + +#include +#include +#include +#include +#include + +#ifdef _DEBUG_ +static int MYDEBUG = 0; +#else +static int MYDEBUG = 0; +#endif + +int main( int argc, char** argv ) +{ + if(MYDEBUG) std::cout << "Converting the image to VTI format" << std::endl; + + if( argc != 4 ) + { + std::cout << "Usage : VISU_img2vti ImageFormat InputFileName OutputFileName" << std::endl; + return 1; + } + + if(MYDEBUG){ + std::cout << argv[1] << std::endl; + std::cout << argv[2] << std::endl; + std::cout << argv[3] << std::endl; + } + + vtkImageReader2* aReader = NULL; + if( !strcmp( argv[1], "BMP" ) || !strcmp( argv[1], "bmp" ) ) + { + if(MYDEBUG) std::cout << "Input image format - BMP" << std::endl; + aReader = vtkBMPReader::New(); + } + else if( !strcmp( argv[1], "PNG" ) || !strcmp( argv[1], "png" ) ) + { + if(MYDEBUG) std::cout << "Input image format - PNG" << std::endl; + aReader = vtkPNGReader::New(); + } + else if( !strcmp( argv[1], "JPG" ) || !strcmp( argv[1], "jpg" ) ) + { + if(MYDEBUG) std::cout << "Input image format - JPG" << std::endl; + aReader = vtkJPEGReader::New(); + } + else + { + std::cout << "Unknown input image format... Must be BMP, PNG or JPG." << std::endl; + return 1; + } + aReader->SetFileName( argv[2] ); + aReader->Update(); + + vtkXMLImageDataWriter* aWriter = vtkXMLImageDataWriter::New(); + aWriter->SetInput( aReader->GetOutput() ); + aWriter->SetFileName( argv[3] ); + aWriter->Write(); + + aWriter->Delete(); + aReader->Delete(); + + return 0; +} diff --git a/src/VISUGUI/Makefile.in b/src/VISUGUI/Makefile.in index 805e6928..cb4e7176 100644 --- a/src/VISUGUI/Makefile.in +++ b/src/VISUGUI/Makefile.in @@ -35,12 +35,11 @@ VPATH=.:@srcdir@ # header files EXPORT_HEADERS= \ - VisuGUI_NonIsometricDlg.h \ VisuGUI_Tools.h # .po files to transform in .qm PO_FILES = \ - VISU_msg_en.po VISU_images.po + VISU_msg_en.po VISU_images.po VISUM_msg_en.po VISUM_images.po # Libraries targets LIB = libVISU.la @@ -49,8 +48,10 @@ LIB = libVISU.la LIB_SRC = VisuGUI.cxx \ VisuGUI_Factory.cxx \ + VisuGUI_Module.cxx \ VisuGUI_Selection.cxx \ VisuGUI_Tools.cxx \ + VisuGUI_ViewTools.cxx \ VisuGUI_PopupTools.cxx \ VisuGUI_NameDlg.cxx \ VisuGUI_FileDlg.cxx \ @@ -58,23 +59,25 @@ LIB_SRC = VisuGUI.cxx \ VisuGUI_TimeAnimation.cxx \ VisuGUI_EditContainerDlg.cxx \ VisuGUI_ClippingDlg.cxx \ - VisuGUI_CubeAxesDlg.cxx \ - VisuGUI_FontWg.cxx \ + VisuGUI_DialogRunner.cxx \ VisuGUI_OffsetDlg.cxx \ VisuGUI_Plot3DDlg.cxx \ - VisuGUI_NonIsometricDlg.cxx \ VisuGUI_ScalarBarDlg.cxx \ + VisuGUI_GaussPointsDlg.cxx \ VisuGUI_DeformedShapeDlg.cxx \ VisuGUI_IsoSurfacesDlg.cxx \ VisuGUI_CutLinesDlg.cxx \ VisuGUI_CutPlanesDlg.cxx \ VisuGUI_StreamLinesDlg.cxx \ VisuGUI_VectorsDlg.cxx \ - VisuGUI_DialogRunner.cxx \ VisuGUI_Displayer.cxx \ - VisuGUI_SetupPlot2dDlg.cxx + VisuGUI_SetupPlot2dDlg.cxx \ + VisuGUI_BuildProgressDlg.cxx \ + VisuGUI_TransparencyDlg.cxx \ + VisuGUI_Timer.cxx LIB_MOC = VisuGUI.h \ + VisuGUI_Module.h \ VisuGUI_Selection.h \ VisuGUI_NameDlg.h \ VisuGUI_FileDlg.h \ @@ -82,20 +85,20 @@ LIB_MOC = VisuGUI.h \ VisuGUI_TimeAnimation.h \ VisuGUI_EditContainerDlg.h \ VisuGUI_ClippingDlg.h \ - VisuGUI_CubeAxesDlg.h \ - VisuGUI_FontWg.h \ + VisuGUI_DialogRunner.h \ VisuGUI_OffsetDlg.h \ VisuGUI_Plot3DDlg.h \ - VisuGUI_NonIsometricDlg.h \ VisuGUI_ScalarBarDlg.h \ + VisuGUI_GaussPointsDlg.h \ VisuGUI_DeformedShapeDlg.h \ VisuGUI_IsoSurfacesDlg.h \ VisuGUI_CutLinesDlg.h \ VisuGUI_CutPlanesDlg.h \ VisuGUI_StreamLinesDlg.h \ VisuGUI_VectorsDlg.h \ - VisuGUI_DialogRunner.h \ - VisuGUI_SetupPlot2dDlg.h + VisuGUI_SetupPlot2dDlg.h \ + VisuGUI_BuildProgressDlg.h \ + VisuGUI_TransparencyDlg.h LIB_CLIENT_IDL = SALOME_Exception.idl \ VISU_Gen.idl \ @@ -114,13 +117,17 @@ LIB_SERVER_IDL = CPPFLAGS += -ftemplate-depth-32 $(QT_INCLUDES) $(VTK_INCLUDES) $(OCC_INCLUDES) \ $(PYTHON_INCLUDES) $(HDF5_INCLUDES) $(QWT_INCLUDES) \ - -I${KERNEL_ROOT_DIR}/include/salome $(BOOST_CPPFLAGS) + -I${KERNEL_ROOT_DIR}/include/salome \ + -I${MED_ROOT_DIR}/include/salome \ + $(BOOST_CPPFLAGS) CXXFLAGS += -ftemplate-depth-32 $(OCC_CXXFLAGS) \ - -I${KERNEL_ROOT_DIR}/include/salome -I${GUI_ROOT_DIR}/include/salome + -I${KERNEL_ROOT_DIR}/include/salome \ + -I${GUI_ROOT_DIR}/include/salome LDFLAGS += $(QWT_LIBS) -lSalomeNS \ - -lSVTK -lSPlot2d -lVisuObject -lVISUEngineImpl -lVISUGUITOOLS \ - -L${KERNEL_ROOT_DIR}/lib/salome -L${GUI_ROOT_DIR}/lib/salome + -lSVTK -lVVTK -lSPlot2d -lVisuObject -lVISUEngineImpl -lVISUGUITOOLS \ + -L${KERNEL_ROOT_DIR}/lib/salome \ + -L${GUI_ROOT_DIR}/lib/salome @CONCLUDE@ diff --git a/src/VISUGUI/VISUM_images.po b/src/VISUGUI/VISUM_images.po new file mode 100644 index 00000000..24d00e85 --- /dev/null +++ b/src/VISUGUI/VISUM_images.po @@ -0,0 +1,67 @@ +# VISU VISUGUI : GUI of VISU 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 : VisuGUI_icons.po +# Module : VISU + +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"POT-Creation-Date: 2002-05-28 10:57:43 AM CEST\n" +"PO-Revision-Date: 2005-05-10 15:20+0400\n" +"Last-Translator: FULLNAME \n" +"Content-Type: text/plain; charset=iso-8859-1\n" + + +msgid "ICON_GAUSS_NEW_VIEWER" +msgstr "Visu_points.png" + +msgid "ICON_GAUSS_POINTS" +msgstr "Visu_gauss_points.png" + +msgid "ICON_VVTK_INTERACTOR_STYLE_SWITCH" +msgstr "Visu_vvtk_switch.png" + +msgid "ICON_VVTK_SELECTION_MODE_SWITCH" +msgstr "Visu_points.png" + +msgid "ICON_VVTK_PLANE_SEGMENTATION_SWITCH" +msgstr "Visu_PlaneSegmentation.png" + +msgid "ICON_VVTK_SPHERE_SEGMENTATION_SWITCH" +msgstr "Visu_SphereSegmentation.png" + +msgid "ICON_VVTK_RECORDING_START" +msgstr "Visu_recording_start.png" + +msgid "ICON_VVTK_RECORDING_PLAY" +msgstr "Visu_recording_play.png" + +msgid "ICON_VVTK_RECORDING_PAUSE" +msgstr "Visu_recording_pause.png" + +msgid "ICON_VVTK_RECORDING_STOP" +msgstr "Visu_recording_stop.png" + +msgid "ICON_LOAD_TEXTURE" +msgstr "Visu_load_texture.png" diff --git a/src/VISUGUI/VISUM_msg_en.po b/src/VISUGUI/VISUM_msg_en.po new file mode 100644 index 00000000..ff3533b7 --- /dev/null +++ b/src/VISUGUI/VISUM_msg_en.po @@ -0,0 +1,763 @@ +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"POT-Creation-Date: 2002-02-22 16:56:46 CET\n" +"PO-Revision-Date: 2005-06-27 12:38+0400\n" +"Last-Translator: FULLNAME \n" +"Content-Type: text/plain; charset=iso-8859-1\n" + +msgid "INF_VISU" +msgstr "Post-Pro Info" + +msgid "IMPORT_DONE" +msgstr "Importing is done" + +msgid "VisuGUI_Module::MEN_VISUALISATION" +msgstr "Visualization" + +msgid "VisuGUI_Module::TOOL_VISUALISATION" +msgstr "Visualization Toolbar" + +msgid "VisuGUI_Module::MEN_SAVE_CONFIGURATION" +msgstr "Store current configuration" + +msgid "VisuGUI_Module::MEN_OVERWRITE_CONFIGURATION" +msgstr "Overwrite current configuration" + +msgid "VisuGUI_Module::MEN_RESTORE_CONFIGURATION" +msgstr "Restore current configuration" + +msgid "VisuGUI_Module::MEN_GAUSS" +msgstr "Gauss" + +msgid "VisuGUI_Module::MEN_GAUSS_NEW_VIEWER" +msgstr "Points view" + +msgid "VisuGUI_Module::MEN_GAUSS_CREATE_PRS" +msgstr "Gauss Points" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_TAB_TTL" +msgstr "Gauss Points" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_PRIMITIVE_GROUP_TTL" +msgstr "Primitive" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_PRIMITIVE_TYPE" +msgstr "Primitive Type" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_POINTSPRITE" +msgstr "Point sprite" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_OPENGLPOINT" +msgstr "OpenGL point" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_GEOMSPHERE" +msgstr "Geometrical sphere" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_CLAMP" +msgstr "Maximum Size (Clamp)" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_MAIN_TEXTURE" +msgstr "Main Texture (16x16)" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_ALPHA_TEXTURE" +msgstr "Alpha Channel Texture (16x16)" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_ALPHA_THRESHOLD" +msgstr "Alpha Channel Threshold" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_RESOLUTION" +msgstr "Geometrical sphere resolution" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_FACE_LIMIT" +msgstr "Notify when number of faces exceeds" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_SIZE_GROUP_TTL" +msgstr "Size" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_MIN_SIZE" +msgstr "Range value for min size (%)" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_MAX_SIZE" +msgstr "Range value for max size (%)" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_MAGNIFICATION" +msgstr "Magnification (%)" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_INCREMENT" +msgstr "+/- Ratio" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_GEOM_GROUP_TTL" +msgstr "Geometry" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_SIZE" +msgstr "Size of points (%)" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_COLOR" +msgstr "Color" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_DEFORMED_SHAPE_GROUP_TTL" +msgstr "Deformed Shape" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_SCALE_FACTOR" +msgstr "Scale factor" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_RESOLUTION" +msgstr "Geometrical sphere resolution" + +msgid "VisuGUI_Module::GAUSS_PREF_FACE_LIMIT" +msgstr "Notify when number of faces exceeds" + +msgid "VisuGUI_Module::VISU_GAUSS_SCALAR_BAR_PREF_TAB_TTL" +msgstr "Gauss Points Scalar Bar" + +msgid "VisuGUI_Module::VISU_GAUSS_SCALAR_BAR_PREF_GROUP_TTL" +msgstr "Gauss Points Scalar Bar" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_ACTIVE_BAR" +msgstr "Active bar" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_LOCAL" +msgstr "Local" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_GLOBAL" +msgstr "Global" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_DISPLAY_GLOBAL" +msgstr "Display global bar" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_SCALAR_BAR_MODE" +msgstr "Scalar bar mode" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_BICOLOR" +msgstr "Bicolor" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_RAINBOW" +msgstr "Rainbow" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_SPACING" +msgstr "Spacing" + +msgid "VisuGUI_Module::VISU_GAUSS_INSIDE_CURSOR_PREF_TAB_TTL" +msgstr "Inside Cursor" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_MAGNIFICATION_GROUP_TTL" +msgstr "Magnification (Inside and Outside)" + +msgid "VisuGUI_Module::VISU_GAUSS_OUTSIDE_CURSOR_PREF_TAB_TTL" +msgstr "Outside Cursor" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_UNIFORM_COLOR" +msgstr "Uniform Color" + +msgid "VisuGUI_Module::VISU_GAUSS_PREF_COLOR_GROUP_TTL" +msgstr "Color" + +msgid "VisuGUI_Module::VISU_PICKING_PREF_TAB_TTL" +msgstr "Picking" + +msgid "VisuGUI_Module::VISU_PICKING_PREF_CURSOR_GROUP_TTL" +msgstr "Cursor" + +msgid "VisuGUI_Module::VISU_PICKING_PREF_CURSOR_SIZE" +msgstr "Size of the cursor" + +msgid "VisuGUI_Module::VISU_PICKING_PREF_PYRAMID_HEIGHT" +msgstr "Height of the pyramids" + +msgid "VisuGUI_Module::VISU_PICKING_PREF_SELECTION_COLOR" +msgstr "Selection cursor color" + +msgid "VisuGUI_Module::VISU_PICKING_PREF_TOLERANCE_GROUP_TTL" +msgstr "Tolerance" + +msgid "VisuGUI_Module::VISU_PICKING_PREF_POINT_SELECTION_TOLERANCE" +msgstr "Point selection tolerance" + +msgid "VisuGUI_Module::VISU_PICKING_PREF_INFO_WINDOW_GROUP_TTL" +msgstr "Information window" + +msgid "VisuGUI_Module::VISU_PICKING_PREF_TRANSPARENCY" +msgstr "Transparency" + +msgid "VisuGUI_Module::VISU_PICKING_PREF_POSITION" +msgstr "Position" + +msgid "VisuGUI_Module::VISU_PICKING_PREF_BELOW_POINT" +msgstr "Centered below the point" + +msgid "VisuGUI_Module::VISU_PICKING_PREF_TOP_LEFT_CORNER" +msgstr "Top-left corner of the 3D view" + +msgid "VisuGUI_Module::VISU_PICKING_PREF_CAMERA_GROUP_TTL" +msgstr "Movement of the camera" + +msgid "VisuGUI_Module::VISU_PICKING_PREF_ZOOM_FACTOR" +msgstr "Zoom at first selected point (ratio)" + +msgid "VisuGUI_Module::VISU_PICKING_PREF_STEP_NUMBER" +msgstr "Number of steps between two positions" + +msgid "VisuGUI_Module::VISU_PICKING_PREF_PARENT_MESH_TTL" +msgstr "Parent mesh element" + +msgid "VisuGUI_Module::VISU_PICKING_PREF_DISPLAY_PARENT_MESH" +msgstr "Display parent mesh element" + +msgid "VisuGUI_Module::VISU_MOUSE_PREF_TAB_TLT" +msgstr "Navigation" + +msgid "VisuGUI_Module::VISU_MOUSE_PREF_GROUP_TLT" +msgstr "Mouse" + +msgid "VisuGUI_Module::VISU_MOUSE_PREF" +msgstr "Mouse behaviour" + +msgid "VisuGUI_Module::VISU_MOUSE_PREF_STANDARD" +msgstr "Salome standard controls" + +msgid "VisuGUI_Module::VISU_MOUSE_PREF_KEYBOARD_FREE" +msgstr "Keyboard free" + +msgid "VisuGUI_Module::VISU_KEYBOARD_PREF_GROUP_TTL" +msgstr "Keyboard" + +msgid "VisuGUI_Module::VISU_KEYBOARD_PREF" +msgstr "[+]/[-] Speed increment" + +msgid "VisuGUI_Module::VISU_SPACEMOUSE_PREF" +msgstr "Spacemouse" + +msgid "VisuGUI_Module::VISU_SPACEMOUSE_PREF_1" +msgstr "Decrease speed increment" + +msgid "VisuGUI_Module::VISU_SPACEMOUSE_PREF_2" +msgstr "Increase speed increment" + +msgid "VisuGUI_Module::VISU_SPACEMOUSE_PREF_3" +msgstr "Decrease Gauss points magnification" + +msgid "VisuGUI_Module::VISU_SPACEMOUSE_PREF_4" +msgstr "Increase Gauss points magnification" + +msgid "VisuGUI_Module::VISU_SPACEMOUSE_PREF_5" +msgstr "Dominant / combined switch" + +msgid "VisuGUI_Module::VISU_SPACEMOUSE_PREF_BTN_1" +msgstr "Button 1" + +msgid "VisuGUI_Module::VISU_SPACEMOUSE_PREF_BTN_2" +msgstr "Button 2" + +msgid "VisuGUI_Module::VISU_SPACEMOUSE_PREF_BTN_3" +msgstr "Button 3" + +msgid "VisuGUI_Module::VISU_SPACEMOUSE_PREF_BTN_4" +msgstr "Button 4" + +msgid "VisuGUI_Module::VISU_SPACEMOUSE_PREF_BTN_5" +msgstr "Button 5" + +msgid "VisuGUI_Module::VISU_SPACEMOUSE_PREF_BTN_6" +msgstr "Button 6" + +msgid "VisuGUI_Module::VISU_SPACEMOUSE_PREF_BTN_7" +msgstr "Button 7" + +msgid "VisuGUI_Module::VISU_SPACEMOUSE_PREF_BTN_8" +msgstr "Button 8" + +msgid "VisuGUI_Module::VISU_SPACEMOUSE_PREF_BTN_10" +msgstr "Button 10" + +msgid "VisuGUI_Module::VISU_SPACEMOUSE_PREF_BTN_11" +msgstr "Button 11" + +msgid "VisuGUI_Module::VISU_SPACEMOUSE_PREF_BTN_*" +msgstr "Button *" + +msgid "VisuGUI_Module::VISU_CAMERA_PREF_GROUP_TTL" +msgstr "Camera movements" + +msgid "VisuGUI_Module::VISU_CAMERA_MOVE_PREF" +msgstr "Number of steps between two positions" + +msgid "VisuGUI_Module::VISU_RECORDER_PREF_TAB_TTL" +msgstr "Recorder" + +msgid "VisuGUI_Module::VISU_RECORDER_PREF_GROUP_TTL" +msgstr "Settings" + +msgid "VisuGUI_Module::VISU_RECORDER_PREF_RECORDING_MODE" +msgstr "Mode" + +msgid "VisuGUI_Module::VISU_RECORDER_PREF_SKIPPED_FRAMES" +msgstr "Recording at a given FPS" + +msgid "VisuGUI_Module::VISU_RECORDER_PREF_ALL_DISLPAYED_FRAMES" +msgstr "Recording all displayed frames" + +msgid "VisuGUI_Module::VISU_RECORDER_PREF_FPS" +msgstr "FPS" + +msgid "VisuGUI_Module::VISU_RECORDER_PREF_QUALITY" +msgstr "Quality" + +msgid "VisuGUI_Module::VISU_RECORDER_PREF_PROGRESSIVE" +msgstr "Progressive" + +msgid "VisuGUI_GaussPointsDlg::DLG_PREF_TITLE" +msgstr "Gauss Points Preferences" + +msgid "VisuGUI_GaussPointsDlg::DLG_PROP_TITLE" +msgstr "Gauss Points Properties" + +msgid "VisuGUI_BuildProgressDlg::DLG_BUILD_PROGRESS_TITLE" +msgstr "Build progress" + +msgid "VisuGUI_BuildProgressDlg::IMPORT_SETTINGS" +msgstr "Settings" + +msgid "VisuGUI_BuildProgressDlg::FILE_NAME" +msgstr "Import file : " + +msgid "VisuGUI_BuildProgressDlg::BUILD_AT_ONCE" +msgstr "Build at once" + +msgid "VisuGUI_BuildProgressDlg::BUILD_ALL" +msgstr "Build all" + +msgid "VisuGUI_BuildProgressDlg::IMPORT_PROGRESS" +msgstr "Import progress" + +msgid "VisuGUI_BuildProgressDlg::BUILD_ENTITIES" +msgstr "Build entities" + +msgid "VisuGUI_BuildProgressDlg::BUILD_FIELDS" +msgstr "Build fields" + +msgid "VisuGUI_BuildProgressDlg::BUILD_GROUPS" +msgstr "Build groups" + +msgid "VisuGUI_BuildProgressDlg::BUILD_MINMAX" +msgstr "Build min/max" + +msgid "VisuGUI_BuildProgressDlg::IMPORT_TIME" +msgstr "Time" + +msgid "VisuGUI_BuildProgressDlg::TIME" +msgstr "Elapsed time : " + +msgid "VisuGUI_BuildProgressDlg::IMPORT_FROM_FILE" +msgstr "Import from File" + +msgid "VisuGUI_BuildProgressDlg::FLT_ALL_FILES" +msgstr "All Files (*.*)" + +msgid "VisuGUI_BuildProgressDlg::FLT_MED_FILES" +msgstr "MED Files (*.med)" + +msgid "VisuGUI_BuildProgressDlg::CLOSE_AT_FINISH" +msgstr "Close dialog at finish" + +msgid "VisuGUI_BuildProgressDlg::START" +msgstr "Start" + +msgid "VisuGUI_BuildProgressDlg::CLOSE" +msgstr "Close" + +msgid "VVTK_RecorderDlg::DLG_RECORDER_TITLE" +msgstr "Recorder" + +msgid "VVTK_RecorderDlg::SETTINGS" +msgstr "Settings" + +msgid "VVTK_RecorderDlg::FILE_NAME" +msgstr "Save to file : " + +msgid "VVTK_RecorderDlg::FLT_ALL_FILES" +msgstr "All Files (*.*)" + +msgid "VVTK_RecorderDlg::FLT_AVI_FILES" +msgstr "AVI Files (*.avi)" + +msgid "VVTK_RecorderDlg::RECORDING_MODE" +msgstr "Mode : " + +msgid "VVTK_RecorderDlg::SKIPPED_FRAMES" +msgstr "Recording at a given FPS" + +msgid "VVTK_RecorderDlg::ALL_DISLPAYED_FRAMES" +msgstr "Recording all displayed frames" + +msgid "VVTK_RecorderDlg::FPS" +msgstr "FPS : " + +msgid "VVTK_RecorderDlg::QUALITY" +msgstr "Quality : " + +msgid "VVTK_RecorderDlg::PROGRESSIVE" +msgstr "Progressive" + +msgid "VVTK_RecorderDlg::START" +msgstr "Start" + +msgid "VVTK_RecorderDlg::CLOSE" +msgstr "Close" + +msgid "VisuGUI_TransparencyDlg::TRANSPARENCY_TITLE" +msgstr "Change Transparency" + +msgid "VisuGUI_TransparencyDlg::TRANSPARENCY_TRANSPARENT" +msgstr "Transparent" + +msgid "VisuGUI_TransparencyDlg::TRANSPARENCY_OPAQUE" +msgstr "Opaque" + +msgid "VisuGUI_TransparencyDlg::BUT_CLOSE" +msgstr "Close" + +msgid "VVTK_ViewManager::VTK_VIEW_TITLE" +msgstr "VISU scene:%1 - viewer:%2" + +msgid "VVTK_MainWindow::MNU_VVTK_RECORDING_START" +msgstr "Start recording" + +msgid "VVTK_MainWindow::DSC_VVTK_RECORDING_START" +msgstr "Start recording" + +msgid "VVTK_MainWindow::MNU_VVTK_RECORDING_PLAY" +msgstr "Play recording" + +msgid "VVTK_MainWindow::DSC_VVTK_RECORDING_PLAY" +msgstr "Play recording" + +msgid "VVTK_MainWindow::MNU_VVTK_RECORDING_PAUSE" +msgstr "Pause recording" + +msgid "VVTK_MainWindow::DSC_VVTK_RECORDING_PAUSE" +msgstr "Pause recording" + +msgid "VVTK_MainWindow::MNU_VVTK_RECORDING_STOP" +msgstr "Stop recording" + +msgid "VVTK_MainWindow::DSC_VVTK_RECORDING_STOP" +msgstr "Stop recording" + +msgid "VVTK_MainWindow1::MNU_VVTK_INTERACTOR_STYLE_SWITCH" +msgstr "Interaction Style Switch" + +msgid "VVTK_MainWindow1::DSC_VVTK_INTERACTOR_STYLE_SWITCH" +msgstr "Interaction Style Switch" + +msgid "VVTK_MainWindow1::MNU_VVTK_SELECTION_MODE_SWITCH" +msgstr "Selection Mode Switch" + +msgid "VVTK_MainWindow1::DSC_VVTK_SELECTION_MODE_SWITCH" +msgstr "Selection Mode Switch" + +msgid "VVTK_MainWindow1::MNU_VVTK_PLANE_SEGMENTATION_SWITCH" +msgstr "Plane Segmentation" + +msgid "VVTK_MainWindow1::DSC_VVTK_PLANE_SEGMENTATION_SWITCH" +msgstr "Plane Segmentation" + +msgid "VVTK_MainWindow1::MNU_VVTK_SPHERE_SEGMENTATION_SWITCH" +msgstr "Sphere Segmentation" + +msgid "VVTK_MainWindow1::DSC_VVTK_SPHERE_SEGMENTATION_SWITCH" +msgstr "Sphere Segmentation" + +msgid "VVTK_PrimitiveBox::PRIMITIVE_TITLE" +msgstr "Primitive" + +msgid "VVTK_PrimitiveBox::POINT_SPRITE" +msgstr "Point Sprite" + +msgid "VVTK_PrimitiveBox::OPENGL_POINT" +msgstr "OpenGL Point" + +msgid "VVTK_PrimitiveBox::GEOMETRICAL_SPHERE" +msgstr "Geometrical Sphere" + +msgid "VVTK_PrimitiveBox::CLAMP" +msgstr "Maximum Size (Clamp) : " + +msgid "VVTK_PrimitiveBox::MAIN_TEXTURE" +msgstr "Main Texture (16x16) : " + +msgid "VVTK_PrimitiveBox::ALPHA_TEXTURE" +msgstr "Alpha Channel Texture (16x16) : " + +msgid "VVTK_PrimitiveBox::ALPHA_THRESHOLD" +msgstr "Alpha Channel Threshold : " + +msgid "VVTK_PrimitiveBox::RESOLUTION" +msgstr "Resolution : " + +msgid "VVTK_PrimitiveBox::FACE_NUMBER" +msgstr "Number of faces : " + +msgid "VVTK_PrimitiveBox::FACE_LIMIT" +msgstr "Notify when number of faces exceeds : " + +msgid "VVTK_SizeBox::SIZE_TITLE" +msgstr "Size" + +msgid "VVTK_SizeBox::OUTSIDE_SIZE" +msgstr "Percentage of normal size(%) : " + +msgid "VVTK_SizeBox::GEOM_SIZE" +msgstr "Size of points (%) : " + +msgid "VVTK_SizeBox::MIN_SIZE" +msgstr "Range values for min size (%) : " + +msgid "VVTK_SizeBox::MAX_SIZE" +msgstr "max size (%) : " + +msgid "VVTK_SizeBox::MAGNIFICATION" +msgstr "Magnification (%) : " + +msgid "VVTK_SizeBox::INCREMENT" +msgstr "+/- Ratio : " + +msgid "VVTK_SizeBox::COLOR_TITLE" +msgstr "Color" + +msgid "VVTK_SizeBox::UNIFORM_COLOR" +msgstr "Uniform Color" + +msgid "VVTK_SizeBox::COLOR" +msgstr "Color : " + +msgid "VisuGUI_GaussPointsDlg::&Cancel" +msgstr "" + +msgid "VisuGUI_GaussPointsDlg::&OK" +msgstr "" + +msgid "VisuGUI_GaussPointsDlg::WARNING" +msgstr "Warning" + +msgid "VisuGUI_GaussPointsDlg::DLG_TITLE" +msgstr "Gauss Points" + +msgid "VisuGUI_GaussPointsDlg::GAUSS_POINTS_TAB" +msgstr "Gauss Points" + +msgid "VisuGUI_GaussPointsDlg::SCALAR_BAR_TAB" +msgstr "Scalar Bar" + +msgid "VisuGUI_GaussPointsDlg::PRS_TITLE" +msgstr "Presentation" + +msgid "VisuGUI_GaussPointsDlg::RESULTS" +msgstr "Results" + +msgid "VisuGUI_GaussPointsDlg::GEOMETRY" +msgstr "Geometry" + +msgid "VisuGUI_GaussPointsDlg::DEFORMED_SHAPE" +msgstr "Deformed Shape" + +msgid "VisuGUI_GaussPointsDlg::DEFORMED_SHAPE_TITLE" +msgstr "Deformed Shape" + +msgid "VisuGUI_GaussPointsDlg::SCALE_FACTOR" +msgstr "Scale Factor :" + +msgid "VisuGUI_GaussScalarBarPane::ACTIVE_BAR_GRP" +msgstr "Active bar" + +msgid "VisuGUI_GaussScalarBarPane::LOCAL" +msgstr "Local" + +msgid "VisuGUI_GaussScalarBarPane::GLOBAL" +msgstr "Global" + +msgid "VisuGUI_GaussScalarBarPane::DISPLAYED" +msgstr "Displayed" + +msgid "VisuGUI_GaussScalarBarPane::SCALAR_RANGE_GRP" +msgstr "Scalar range" + +msgid "VisuGUI_GaussScalarBarPane::LOGARITHMIC_SCALING" +msgstr "Logarithmic scaling" + +msgid "VisuGUI_GaussScalarBarPane::FIELD_RANGE_BTN" +msgstr "Use field range" + +msgid "VisuGUI_GaussScalarBarPane::IMPOSED_RANGE_BTN" +msgstr "Use imposed range" + +msgid "VisuGUI_GaussScalarBarPane::LBL_MIN" +msgstr "Min:" + +msgid "VisuGUI_GaussScalarBarPane::LBL_MAX" +msgstr "Max:" + +msgid "VisuGUI_GaussScalarBarPane::COLORS_LABELS_GRP" +msgstr "Colors and labels" + +msgid "VisuGUI_GaussScalarBarPane::BICOLOR" +msgstr "Bicolor" + +msgid "VisuGUI_GaussScalarBarPane::RAINBOW" +msgstr "Rainbow" + +msgid "VisuGUI_GaussScalarBarPane::LBL_NB_COLORS" +msgstr "Nb. of colors:" + +msgid "VisuGUI_GaussScalarBarPane::LBL_NB_LABELS" +msgstr "Nb. of labels:" + +msgid "VisuGUI_GaussScalarBarPane::ORIENTATION_GRP" +msgstr "Orientation" + +msgid "VisuGUI_GaussScalarBarPane::VERTICAL_BTN" +msgstr "Vertical" + +msgid "VisuGUI_GaussScalarBarPane::HORIZONTAL_BTN" +msgstr "Horizontal" + +msgid "VisuGUI_GaussScalarBarPane::ORIGIN_GRP" +msgstr "Origin" + +msgid "VisuGUI_GaussScalarBarPane::LBL_X" +msgstr "X:" + +msgid "VisuGUI_GaussScalarBarPane::LBL_Y" +msgstr "Y:" + +msgid "VisuGUI_GaussScalarBarPane::DIMENSIONS_GRP" +msgstr "Dimensions" + +msgid "VisuGUI_GaussScalarBarPane::LBL_WIDTH" +msgstr "Width:" + +msgid "VisuGUI_GaussScalarBarPane::LBL_HEIGHT" +msgstr "Height:" + +msgid "VisuGUI_GaussScalarBarPane::LBL_SPACING" +msgstr "Spacing:" + +msgid "VisuGUI_GaussScalarBarPane::SAVE_DEFAULT_CHK" +msgstr "Save as default values" + +msgid "VVTK_ViewWindow::LBL_TOOLBAR_LABEL" +msgstr "GAUSS viewer tools" + +msgid "VVTK_SegmentationCursorDlg::SEGMENTATION_CURSOR_DLG_TITLE" +msgstr "Segmentation Cursor" + +msgid "VVTK_SegmentationCursorDlg::ORIGIN_TITLE" +msgstr "Origin" + +msgid "VVTK_SegmentationCursorDlg::ORIGIN_X" +msgstr "X: " + +msgid "VVTK_SegmentationCursorDlg::ORIGIN_Y" +msgstr "Y: " + +msgid "VVTK_SegmentationCursorDlg::ORIGIN_Z" +msgstr "Z: " + +msgid "VVTK_SegmentationCursorDlg::DIRECTION_TITLE" +msgstr "Direction" + +msgid "VVTK_SegmentationCursorDlg::DIRECTION_DX" +msgstr "DX: " + +msgid "VVTK_SegmentationCursorDlg::DIRECTION_DY" +msgstr "DY: " + +msgid "VVTK_SegmentationCursorDlg::DIRECTION_DZ" +msgstr "DZ: " + +msgid "VVTK_SegmentationCursorDlg::DEPTH_TITLE" +msgstr "Depth" + +msgid "VVTK_SegmentationCursorDlg::DEPTH" +msgstr "Depth of the cursor: " + +msgid "VVTK_SegmentationCursorDlg::RADIUS_TITLE" +msgstr "Radius" + +msgid "VVTK_SegmentationCursorDlg::RADIUS" +msgstr "Radius of the cursor :" + +msgid "VVTK_SegmentationCursorDlg::RATIO" +msgstr "+/- Ratio :" + +msgid "VVTK_SegmentationCursorDlg::SEGMENTATION_CURSOR_TAB" +msgstr "Segmentation Cursor" + +msgid "VVTK_SegmentationCursorDlg::GAUSS_POINTS_TAB" +msgstr "Gauss Points" + +msgid "VVTK_SegmentationCursorDlg::INSIDE_GAUSS_POINTS" +msgstr "Inside Cursor Gauss Points Presentation" + +msgid "VVTK_SegmentationCursorDlg::OUTSIDE_GAUSS_POINTS" +msgstr "Outside Cursor Gauss Points Presentation" + +msgid "VVTK_SegmentationCursorDlg::MAGNIFICATION_TITLE" +msgstr "Magnification" + +msgid "VVTK_SegmentationCursorDlg::MAGNIFICATION" +msgstr "Magnification (%) : " + +msgid "VVTK_SegmentationCursorDlg::INCREMENT" +msgstr "+/- Ratio : " + +msgid "VVTK_PickingDlg::PICKING_DLG_TITLE" +msgstr "Picking" + +msgid "VVTK_PickingDlg::CURSOR_TITLE" +msgstr "Cursor" + +msgid "VVTK_PickingDlg::CURSOR_SIZE" +msgstr "Size of the cursor :" + +msgid "VVTK_PickingDlg::PYRAMID_HEIGHT" +msgstr "Height of the pyramids :" + +msgid "VVTK_PickingDlg::SELECTION_COLOR" +msgstr "Selection cursor color :" + +msgid "VVTK_PickingDlg::TOLERANCE_TITLE" +msgstr "Tolerance" + +msgid "VVTK_PickingDlg::POINT_TOLERANCE" +msgstr "Point tolerance :" + +msgid "VVTK_PickingDlg::INFO_WINDOW_TITLE" +msgstr "Information window" + +msgid "VVTK_PickingDlg::TRANSPARENCY" +msgstr "Transparency :" + +msgid "VVTK_PickingDlg::POSITION" +msgstr "Position :" + +msgid "VVTK_PickingDlg::BELOW_POINT" +msgstr "Centered below the point" + +msgid "VVTK_PickingDlg::TOP_LEFT_CORNER" +msgstr "Top-left corner of the 3D view" + +msgid "VVTK_PickingDlg::CAMERA_TITLE" +msgstr "Movement of the camera" + +msgid "VVTK_PickingDlg::ZOOM_FACTOR" +msgstr "Zoom at first selected point (ratio) :" + +msgid "VVTK_PickingDlg::STEP_NUMBER" +msgstr "Number of steps between two positions :" + +msgid "VVTK_PickingDlg::PARENT_MESH_TITLE" +msgstr "Parent mesh element" + +msgid "VVTK_PickingDlg::DISPLAY_PARENT_MESH" +msgstr "Display parent mesh element" \ No newline at end of file diff --git a/src/VISUGUI/VisuGUI.cxx b/src/VISUGUI/VisuGUI.cxx index e2742d98..0c935ffa 100644 --- a/src/VISUGUI/VisuGUI.cxx +++ b/src/VISUGUI/VisuGUI.cxx @@ -22,7 +22,7 @@ // // // File : VisuGUI.cxx -// Author : Laurent CORNABE +// Author : // Module : VISU // $Header$ @@ -37,11 +37,13 @@ #include #include #include +#include // VTK Includes #include #include #include +#include // SALOME Includes #include "SALOME_LifeCycleCORBA.hxx" @@ -54,7 +56,6 @@ #include "CAM_Module.h" -#include "SVTK_RenderWindow.h" #include "SVTK_ViewWindow.h" #include "SVTK_ViewModel.h" #include "SVTK_Functor.h" @@ -99,12 +100,12 @@ #include "VisuGUI_Selection.h" #include "VisuGUI_TimeAnimation.h" #include "VisuGUI_EditContainerDlg.h" -#include "VisuGUI_NonIsometricDlg.h" #include "VisuGUI_ClippingDlg.h" #include "VisuGUI_Plot3DDlg.h" -#include "VisuGUI_CubeAxesDlg.h" #include "VisuGUI_OffsetDlg.h" #include "VisuGUI_Displayer.h" +#include "VisuGUI_BuildProgressDlg.h" +#include "VisuGUI_TransparencyDlg.h" #include "VISU_ScalarMap_i.hh" #include "VisuGUI_ScalarBarDlg.h" @@ -136,6 +137,8 @@ #include "VisuGUI_ActionsDef.h" +#include "VisuGUI_Timer.h" + using namespace VISU; #ifdef _DEBUG_ @@ -159,59 +162,17 @@ VisuGUI::~VisuGUI() { } - void VisuGUI:: OnImportFromFile() { if(MYDEBUG) MESSAGE("VisuGUI::OnImportFromFile()"); - if ( CheckLock(GetCStudy(GetAppStudy(this))) ) + if ( CheckLock(GetCStudy(GetAppStudy(this)),GetDesktop(this)) ) return; - SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr(); - - QStringList aFilter; - aFilter.append( tr("FLT_MED_FILES") ); - aFilter.append( tr("FLT_ALL_FILES") ); - - QFileInfo aFileInfo = - SUIT_FileDlg::getFileName(GetDesktop(this), - "", - aFilter, - tr("MEN_IMPORT_FROM_FILE"), - true); - if(aFileInfo.exists()) { - application()->putInfo( "Importing From File " + aFileInfo.filePath() + "..." ); - - VISU::Result_var aResult; - bool anIsBuild = aResourceMgr->booleanValue("VISU", "full_med_loading", false); - if (VisuGUI_FileDlg::IsBuild) { - aResult = GetVisuGen(this)->ImportFile(aFileInfo.filePath()); - if (!CORBA::is_nil(aResult.in())) - if (Result_i* aRes = dynamic_cast(GetServant(aResult).in())) { - if (!aRes->IsPossible()) - SUIT_MessageBox::warn1(GetDesktop(this), - tr("WRN_VISU"), - tr("ERR_CANT_BUILD_PRESENTATION"), - tr("BUT_OK")); - else - aRes->BuildAll(); - } - } else { - aResourceMgr->setValue("VISU", "full_med_loading", false); - aResult = GetVisuGen(this)->ImportFile(aFileInfo.filePath()); - aResourceMgr->setValue("VISU", "full_med_loading", anIsBuild); - } - if (CORBA::is_nil(aResult.in())) { - SUIT_MessageBox::warn1(GetDesktop(this), - tr("WRN_VISU"), - tr("ERR_ERROR_IN_THE_FILE"), - tr("BUT_OK")); - }else{ - application()->putInfo(aFileInfo.filePath() + tr("INF_DONE")); - UpdateObjBrowser(this); - } - } + VisuGUI_BuildProgressDlg* aBuildProgressDlg = new VisuGUI_BuildProgressDlg( GetDesktop(this) ); + aBuildProgressDlg->setGenerator( GetVisuGen(this) ); + aBuildProgressDlg->show(); } @@ -221,7 +182,7 @@ OnExploreMEDFile() { if(MYDEBUG) MESSAGE("VisuGUI::OnExploreMEDFile()"); _PTR(Study) aStudy = GetCStudy(GetAppStudy(this)); - if ( CheckLock(aStudy) ) + if ( CheckLock(aStudy,GetDesktop(this)) ) return; SALOME_MED::MED_Gen_var aGen = GetMEDEngine(); @@ -262,7 +223,7 @@ VisuGUI:: OnImportTableFromFile() { if(MYDEBUG) MESSAGE("VisuGUI::OnImportTableFromFile()"); - if ( CheckLock(GetCStudy(GetAppStudy(this))) ) + if ( CheckLock(GetCStudy(GetAppStudy(this)),GetDesktop(this)) ) return; QStringList aFilter; @@ -400,7 +361,7 @@ VisuGUI:: OnImportMedField() { _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this)); - if (CheckLock(aCStudy)) + if (CheckLock(aCStudy,GetDesktop(this))) return; SALOMEDS::Study_var aStudy = GetDSStudy(aCStudy); @@ -461,7 +422,8 @@ CreateCurves( SalomeApp_Module* theModule, if ( aTblObj ) { _PTR(GenericAttribute) anAttr; if (aTblObj->FindAttribute( anAttr, "AttributeName" ) ) { - aBuilder->RemoveObjectWithChildren( aIter->Value() ); // We should have only one child + aBuilder->RemoveObjectWithChildren( aTblObj ); // We should have only one child + UpdateObjBrowser(theModule,true,aTblObj); break; } } @@ -497,7 +459,7 @@ VisuGUI:: OnCreateMesh() { _PTR(Study) aStudy = GetCStudy(GetAppStudy(this)); - if (CheckLock(aStudy)) + if (CheckLock(aStudy,GetDesktop(this))) return; // Get selected SObject @@ -517,7 +479,7 @@ VisuGUI:: OnCreateManyMesh() { _PTR(Study) aStudy = GetCStudy(GetAppStudy(this)); - if (CheckLock(aStudy)) + if (CheckLock(aStudy,GetDesktop(this))) return; // create a VTK view window if it does not exist @@ -598,7 +560,7 @@ void VisuGUI:: OnCreatePlot2dView() { - CheckLock(GetCStudy(GetAppStudy(this))); + CheckLock(GetCStudy(GetAppStudy(this)),GetDesktop(this)); GetVisuGen( this )->CreateContainer(); UpdateObjBrowser(this); } @@ -717,7 +679,7 @@ OnEditScalarMap() Handle(SALOME_InteractiveObject) anIO; if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){ EditPrs3d(this, aPrs3d); - if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){ + if(SVTK_ViewWindow* aViewWindow = GetViewWindow(this)){ aViewWindow->highlight(anIO, 1); } } @@ -731,7 +693,7 @@ OnEditDeformedShape() Handle(SALOME_InteractiveObject) anIO; if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){ EditPrs3d(this, aPrs3d); - if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){ + if(SVTK_ViewWindow* aViewWindow = GetViewWindow(this)){ aViewWindow->highlight(anIO, 1); } } @@ -745,7 +707,7 @@ OnEditCutPlanes() Handle(SALOME_InteractiveObject) anIO; if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){ EditPrs3d(this, aPrs3d); - if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){ + if(SVTK_ViewWindow* aViewWindow = GetViewWindow(this)){ aViewWindow->highlight(anIO, 1); } } @@ -759,7 +721,7 @@ OnEditCutLines() Handle(SALOME_InteractiveObject) anIO; if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){ EditPrs3d(this, aPrs3d); - if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){ + if(SVTK_ViewWindow* aViewWindow = GetViewWindow(this)){ aViewWindow->highlight(anIO, 1); } } @@ -773,7 +735,7 @@ OnEditIsoSurfaces() Handle(SALOME_InteractiveObject) anIO; if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){ EditPrs3d(this, aPrs3d); - if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){ + if(SVTK_ViewWindow* aViewWindow = GetViewWindow(this)){ aViewWindow->highlight(anIO, 1); } } @@ -787,7 +749,7 @@ OnEditVectors() Handle(SALOME_InteractiveObject) anIO; if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){ EditPrs3d(this, aPrs3d); - if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){ + if(SVTK_ViewWindow* aViewWindow = GetViewWindow(this)){ aViewWindow->highlight(anIO, 1); } } @@ -801,7 +763,7 @@ OnEditStreamLines() Handle(SALOME_InteractiveObject) anIO; if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){ EditPrs3d(this, aPrs3d); - if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){ + if(SVTK_ViewWindow* aViewWindow = GetViewWindow(this)){ aViewWindow->highlight(anIO, 1); } } @@ -815,7 +777,7 @@ OnEditPlot3D() Handle(SALOME_InteractiveObject) anIO; if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){ EditPrs3d(this, aPrs3d); - if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){ + if(SVTK_ViewWindow* aViewWindow = GetViewWindow(this)){ aViewWindow->highlight(anIO, 1); } } @@ -827,7 +789,7 @@ VisuGUI:: OnEraseAll() { startOperation( myEraseAll ); - if (SVTK_ViewWindow* vw = GetViewWindow()) { + if (SVTK_ViewWindow* vw = GetViewWindow(this)) { vw->unHighlightAll(); if (vtkRenderer *aRen = vw->getRenderer()) { vtkActor *anActor; @@ -835,8 +797,6 @@ OnEraseAll() for (anActColl->InitTraversal(); (anActor = anActColl->GetNextActor()) != NULL; ) { if (anActor->GetVisibility() > 0) if (VISU_Actor* anVISUActor = VISU_Actor::SafeDownCast(anActor)) { - RemoveScalarBarPosition(this,anVISUActor->GetPrs3d()); - anVISUActor = anVISUActor->GetParent(); RemoveScalarBarPosition(this,anVISUActor->GetPrs3d()); anVISUActor->VisibilityOff(); } @@ -917,7 +877,7 @@ OnChangeColor() VISU::Prs3d_i* aPrs3d = dynamic_cast(aServant.in()); if (!aPrs3d) return; - SVTK_ViewWindow* vw = GetViewWindow(); + SVTK_ViewWindow* vw = GetViewWindow(this); if (!vw) return; VISU_Actor* anActor = GetActor(aPrs3d, vw); @@ -989,7 +949,7 @@ OnChangeWireframeColor() VISU::Prs3d_i* aPrs3d = dynamic_cast(aServant.in()); if (!aPrs3d) return; - SVTK_ViewWindow* vw = GetViewWindow(); + SVTK_ViewWindow* vw = GetViewWindow(this); if (!vw) return; VISU_Actor* anActor = GetActor(aPrs3d, vw); @@ -1024,31 +984,14 @@ OnChangeOpacity() VISU::Prs3d_i* aPrsObject = dynamic_cast(aServant.in()); if (!aPrsObject) return; - SVTK_ViewWindow* vw = GetViewWindow(); + SVTK_ViewWindow* vw = GetViewWindow(this); if (!vw) return; VISU_Actor* anActor = GetActor(aPrsObject, vw); if (!anActor) return; - VisuGUI_CursorDlg* CursorDlg = - new VisuGUI_CursorDlg (GetDesktop(this), tr("DLG_OPACITY_TITLE"), TRUE); - - CursorDlg->Comment1->setText(tr("DLG_OPACITY_CMT1")); - CursorDlg->Comment2->setText(tr("DLG_OPACITY_CMT2")); - CursorDlg->SpinBox1->setMinValue(0); - CursorDlg->SpinBox1->setMaxValue(100); - - float oldopac = anActor->GetOpacity(); - int intopac = int(oldopac*100. + 0.5); - CursorDlg->SpinBox1->setValue(intopac); - - int ret = CursorDlg->exec(); - if (ret == 1) { - intopac = CursorDlg->SpinBox1->value(); - float newopac = intopac/100.; - anActor->SetOpacity(newopac); - } - delete CursorDlg; + VisuGUI_TransparencyDlg* aTransparencyDlg = new VisuGUI_TransparencyDlg( this ); + aTransparencyDlg->show(); } void @@ -1064,7 +1007,7 @@ OnChangeLines() VISU::Prs3d_i* aPrsObject = dynamic_cast(aServant.in()); if (!aPrsObject) return; - SVTK_ViewWindow* vw = GetViewWindow(); + SVTK_ViewWindow* vw = GetViewWindow(this); if (!vw) return; VISU_Actor* anActor = GetActor(aPrsObject, vw); @@ -1146,7 +1089,7 @@ VisuGUI:: OnDeleteObjects() { _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this)); - if (CheckLock(aCStudy)) + if (CheckLock(aCStudy,GetDesktop(this))) return; SALOME_ListIO aList; @@ -1173,14 +1116,12 @@ OnDeleteObjects() _PTR(SObject) aSObject = aCStudy->FindObjectID(entries[i]); if (aSObject) { DeleteSObject(this, aCStudy, aSObject); + UpdateObjBrowser(this, true, aSObject); } } // Finish transaction aStudyBuilder->CommitCommand(); - - //GetActiveStudy()->unHighlightAll(); - UpdateObjBrowser(this, true); } void @@ -1386,7 +1327,7 @@ VisuGUI:: OnClearContainer() { _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this)); - if (CheckLock(aCStudy)) + if (CheckLock(aCStudy,GetDesktop(this))) return; Handle(SALOME_InteractiveObject) anIO; CORBA::Object_var anObject = GetSelectedObj(this, &anIO); @@ -1434,7 +1375,7 @@ VisuGUI:: OnSaveViewParams() { _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this)); - if (CheckLock(aCStudy)) + if (CheckLock(aCStudy,GetDesktop(this))) return; SUIT_ViewManager* aViewMgr = getApp()->activeViewManager(); @@ -1482,7 +1423,7 @@ VisuGUI:: OnRename() { _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this)); - if (CheckLock(aCStudy)) + if (CheckLock(aCStudy,GetDesktop(this))) return; Handle(SALOME_InteractiveObject) anIO; @@ -1590,7 +1531,7 @@ OnSweep() VISU::ScalarMap_i* aPrsObject = dynamic_cast(aServant.in()); if (!aPrsObject) return; - SVTK_ViewWindow* vw = GetViewWindow(); + SVTK_ViewWindow* vw = GetViewWindow(this); if (!vw) return; VISU_Actor* aActor = GetActor(aPrsObject, vw); @@ -1617,7 +1558,7 @@ OnSweep() float aPercents = float(i)/aSteps; aPrsObject->SetMapScale(aPercents); aPrsObject->UpdateActor(aActor); - vw->getRenderWindow()->getRenderWindow()->Render(); + vw->getRenderWindow()->Render(); usleep(aTemp); } catch (std::exception& exc) { INFOS("Follow exception was occured :\n" << exc.what()); @@ -1633,9 +1574,11 @@ void VisuGUI:: OnTimeAnimation() { + if(!VISU::GetViewWindow(this)) + return; + _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this)); VisuGUI_TimeAnimationDlg* aAnimationDlg = -// new VisuGUI_TimeAnimationDlg(GetDesktop(this), aCStudy); new VisuGUI_TimeAnimationDlg (this, aCStudy); LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this); @@ -1670,6 +1613,9 @@ void VisuGUI:: OnShowAnimation() { + if(!VISU::GetViewWindow(this)) + return; + LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this); SALOME_ListIO aListIO; aSelectionMgr->selectedObjects(aListIO); @@ -1707,7 +1653,7 @@ VisuGUI:: OnCopyPresentation() { _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this)); - if (CheckLock(aCStudy)) + if (CheckLock(aCStudy,GetDesktop(this))) return; Handle(SALOME_InteractiveObject) anIO; @@ -1800,8 +1746,8 @@ void VisuGUI:: OnSelectionInfo() { - if (GetViewWindow()) - (new VisuGUI_SelectionDlg(GetDesktop(this)))->show(); + if (GetViewWindow(this)) + (new VisuGUI_SelectionDlg(this))->show(); else SUIT_MessageBox::warn1(GetDesktop(this), tr("WRN_VISU"), @@ -1809,25 +1755,6 @@ OnSelectionInfo() tr("BUT_OK") ); } -void -VisuGUI:: -OnScaling() -{ - VisuGUI_NonIsometricDlg* m_NonIsoDlg = - new VisuGUI_NonIsometricDlg (GetDesktop(this), "m_NonIsoDlg", - false, Qt::WDestructiveClose); - m_NonIsoDlg->show(); -} - -void -VisuGUI:: -OnCubeAxes() -{ - //Show dialog that allows to select scale function and corresponding scale factor - VisuGUI_CubeAxesDlg* aDlg = new VisuGUI_CubeAxesDlg (GetDesktop(this)); - aDlg->show(); -} - void VisuGUI:: OnMergeScalarBars() @@ -1969,7 +1896,7 @@ void VisuGUI:: OnArrangeActors() { - SVTK_ViewWindow* vw = GetViewWindow(); + SVTK_ViewWindow* vw = GetViewWindow(this); if (vw) { ArrangeDlg* aDlg = new ArrangeDlg (GetDesktop(this), vw); aDlg->exec(); @@ -2286,16 +2213,6 @@ createActions() //this, SLOT(OnEraseAll())); this); - aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_SCALING")); - createAction( VISU_SCALING, tr("MEN_SCALING"), QIconSet(aPixmap), - tr("MEN_SCALING"), "", 0, aParent, false, - this, SLOT(OnScaling())); - - aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_CUBE_AXES")); - createAction( VISU_CUBE_AXES, tr("MEN_CUBE_AXES"), QIconSet(aPixmap), - tr("MEN_CUBE_AXES"), "", 0, aParent, false, - this, SLOT(OnCubeAxes())); - createAction( VISU_SHOW_ANIMATION, tr("MEN_SHOW_ANIMATION"), QIconSet(), tr("MEN_SHOW_ANIMATION"), "", 0, aParent, false, this, SLOT(OnShowAnimation())); @@ -2335,8 +2252,6 @@ createMenus() createMenu( VISU_ERASE_ALL, aMenuId, 10 ); // erase all createMenu( VISU_GLOBAL_SELECTION, aMenuId, 10 ); // global selection createMenu( VISU_PARTIAL_SELECTION, aMenuId, 10 ); // partial selection - createMenu( VISU_SCALING, aMenuId, 10 ); // scaling - createMenu( VISU_CUBE_AXES, aMenuId, 10 ); // scaling } void @@ -2360,8 +2275,6 @@ createToolBars() createTool( VISU_ERASE_ALL, aToolId ); createTool( VISU_GLOBAL_SELECTION, aToolId ); createTool( VISU_PARTIAL_SELECTION, aToolId ); - createTool( VISU_SCALING, aToolId ); - createTool( VISU_CUBE_AXES, aToolId ); } void @@ -2501,7 +2414,7 @@ createPopupMenus() QString orCurveInvisible = "or (type='VISU::TCURVE'" + andInvisible + ")"; QString aPrsVisible = "(($type in {'VISU::TMESH' " + aPrsAll + "}) and isVisible)"; QString aPrsInvisible = "(($type in {'VISU::TMESH' " + aPrsAll + "})" + andInvisible + ")"; - QString aComponent = "( selcount=1 and canBeDisplayed )"; + QString aComponent = "( selcount=1 and canBeDisplayed and isComponent )"; QString anEraseRule = "( selcount>0 and ({true} in $canBeDisplayed) and (" + aPrsVisible + " or (client='ObjectBrowser' and (" + aTableOrCont + orCurveVisible + "))) ) or " + aComponent; @@ -2525,10 +2438,10 @@ createPopupMenus() mgr->setRule( action( VISU_FREE_SCALAR_BARS ), aRule, true ); // view parameters - aRule = "selcount=1 and type='VISU::TVIEW3D'"; + aRule = "selcount=1 and type='VISU::TVIEW3D' and activeView='VTKViewer'"; mgr->setRule( action( VISU_SAVE_VIEW_PARAMS_1 ), aRule, true ); - mgr->setRule( action( VISU_SAVE_VIEW_PARAMS ), "client='VTKViewer' and selcount=0", true ); - mgr->setRule( action( VISU_RESTORE_VIEW_PARAMS ), "selcount=1 and type='VISU::TVIEW3D'", true ); + mgr->setRule( action( VISU_SAVE_VIEW_PARAMS ), "client='VTKViewer' and selcount=0 and activeView='VTKViewer'", true ); + mgr->setRule( action( VISU_RESTORE_VIEW_PARAMS ), "selcount=1 and type='VISU::TVIEW3D' and activeView='VTKViewer'", true ); //mgr->setRule( action( VISU_DELETE_VIEW_PARAMS ), "selcount=1 and type='VISU::TVIEW3D'", true ); mgr->setRule( action( VISU_ARRANGE_ACTORS ), "client='VTKViewer' and selcount=0", true ); @@ -2619,7 +2532,10 @@ createPopupMenus() aRule = "client='VTKViewer' and selcount=1" + aInsideType; mgr->setRule( action( VISU_SELECTION_INFO ), aRule, true ); - aRule = "client='ObjectBrowser' and selcount>0 and $type in {'VISU::TFIELD'} and nbTimeStamps>1"; + aRule = "client='ObjectBrowser' and selcount>0"; + aRule += " and $type in {'VISU::TFIELD'}"; + aRule += " and nbTimeStamps>1"; + aRule += " and activeView in {'VTKViewer' 'VVTK'}"; mgr->setRule( action( VISU_ANIMATION ), aRule, true ); aRule = "client='ObjectBrowser' and $type in {'VISU::TENTITY' 'VISU::TFAMILY' 'VISU::TGROUP'}"; @@ -2853,6 +2769,42 @@ void VisuGUI::createPreferences() // TAB: "Scalar Bar" int sbarTab = addPreference( tr( "VISU_SCALAR_BAR" ) ); + int rangeGr = addPreference( tr( "VISU_SCALAR_RANGE" ), sbarTab ); + setPreferenceProperty( rangeGr, "columns", 1 ); + + int mode = addPreference( tr( "VISU_SCALAR_MODE" ), rangeGr, LightApp_Preferences::Selector, "VISU", "scalar_bar_mode" ); + QStringList modes; + modes.append( tr( "VISU_MODULUS" ) ); + modes.append( tr( "VISU_COMPONENT" ) + tr("1") ); + modes.append( tr( "VISU_COMPONENT" ) + tr("2") ); + modes.append( tr( "VISU_COMPONENT" ) + tr("3") ); + QValueList indices; + indices.append( 0 ); + indices.append( 1 ); + indices.append( 2 ); + indices.append( 3 ); + setPreferenceProperty( mode, "strings", modes ); + setPreferenceProperty( mode, "indexes", indices ); + + addPreference( tr( "VISU_LOGARITHMIC_SCALING" ), rangeGr, LightApp_Preferences::Bool, "VISU", "scalar_bar_logarithmic" ); + + int rangetype = addPreference( tr( "VISU_RANGE_TO_USE" ), rangeGr, LightApp_Preferences::Selector, "VISU", "scalar_range_type" ); + QStringList types; + types.append( tr( "VISU_FIELD_RANGE" ) ); + types.append( tr( "VISU_IMPOSED_RANGE" ) ); + indices.clear(); + indices.append( 0 ); + indices.append( 1 ); + setPreferenceProperty( rangetype, "strings", types ); + setPreferenceProperty( rangetype, "indexes", indices ); + + int imposedGr = addPreference( tr( "VISU_MINMAX_IMPOSED_RANGE" ), sbarTab ); + + int min = addPreference( tr( "VISU_MIN" ), imposedGr, LightApp_Preferences::DblSpin, "VISU", "scalar_range_min" ); + int max = addPreference( tr( "VISU_MAX" ), imposedGr, LightApp_Preferences::DblSpin, "VISU", "scalar_range_max" ); + setPreferenceProperty( min, "step", 0.1 ); + setPreferenceProperty( max, "step", 0.1 ); + // group: "Font" int fontGr = addPreference( tr( "VISU_FONT" ), sbarTab ); int tfont = addPreference( tr( "VISU_TITLE" ), fontGr, @@ -2885,7 +2837,7 @@ void VisuGUI::createPreferences() int numcol = addPreference( tr( "VISU_NB_COLORS" ), colorsLabelsGr, LightApp_Preferences::IntSpin, "VISU", "scalar_bar_num_colors" ); setPreferenceProperty( numcol, "min", 2 ); - setPreferenceProperty( numcol, "max", 64 ); + setPreferenceProperty( numcol, "max", 256 ); int numlab = addPreference( tr( "VISU_NB_LABELS" ), colorsLabelsGr, LightApp_Preferences::IntSpin, "VISU", "scalar_bar_num_labels" ); @@ -2899,7 +2851,7 @@ void VisuGUI::createPreferences() QStringList orients; orients.append( tr( "VISU_VERTICAL" ) ); orients.append( tr( "VISU_HORIZONTAL" ) ); - QValueList indices; + indices.clear(); indices.append( 0 ); indices.append( 1 ); setPreferenceProperty( orient, "strings", orients ); @@ -2953,54 +2905,9 @@ void VisuGUI::createPreferences() // group: "Scalar bars default position" int scalarBarGr = addPreference( tr( "Scalar bars default position" ), sbarTab ); - addPreference( tr( "Arrange Scalar Bars" ), scalarBarGr, - LightApp_Preferences::Bool, "VISU", "scalar_bars_default_position" ); - - // TAB: "Scalar range, Sweep, MED import, Shading" - int srangeTab = addPreference( tr( "VISU_PREF_SECOND_TAB" ) ); + addPreference( tr( "Arrange Scalar Bars" ), scalarBarGr, LightApp_Preferences::Bool, "VISU", "scalar_bars_default_position" ); - // group: "Scalar range" - int rangeGr = addPreference( tr( "VISU_SCALAR_RANGE" ), srangeTab ); - setPreferenceProperty( rangeGr, "columns", 1 ); - - int mode = addPreference( tr( "VISU_SCALAR_MODE" ), rangeGr, - LightApp_Preferences::Selector, "VISU", "scalar_bar_mode" ); - QStringList modes; - modes.append( tr( "VISU_MODULUS" ) ); - modes.append( tr( "VISU_COMPONENT" ) + tr("1") ); - modes.append( tr( "VISU_COMPONENT" ) + tr("2") ); - modes.append( tr( "VISU_COMPONENT" ) + tr("3") ); - indices.clear(); - indices.append( 0 ); - indices.append( 1 ); - indices.append( 2 ); - indices.append( 3 ); - setPreferenceProperty( mode, "strings", modes ); - setPreferenceProperty( mode, "indexes", indices ); - - addPreference( tr( "VISU_LOGARITHMIC_SCALING" ), rangeGr, - LightApp_Preferences::Bool, "VISU", "scalar_bar_logarithmic" ); - - int rangetype = addPreference( tr( "VISU_RANGE_TO_USE" ), rangeGr, - LightApp_Preferences::Selector, "VISU", "scalar_range_type" ); - QStringList types; - types.append( tr( "VISU_FIELD_RANGE" ) ); - types.append( tr( "VISU_IMPOSED_RANGE" ) ); - indices.clear(); - indices.append( 0 ); - indices.append( 1 ); - setPreferenceProperty( rangetype, "strings", types ); - setPreferenceProperty( rangetype, "indexes", indices ); - - // group: "Min and max for imposed range" - int imposedGr = addPreference( tr( "VISU_MINMAX_IMPOSED_RANGE" ), srangeTab ); - - int min = addPreference( tr( "VISU_MIN" ), imposedGr, - LightApp_Preferences::DblSpin, "VISU", "scalar_range_min" ); - int max = addPreference( tr( "VISU_MAX" ), imposedGr, - LightApp_Preferences::DblSpin, "VISU", "scalar_range_max" ); - setPreferenceProperty( min, "step", 0.1 ); - setPreferenceProperty( max, "step", 0.1 ); + int srangeTab = addPreference( tr( "Sweep, MED import" ) ); // group: "Sweeping preferences" int sweepGr = addPreference( tr( "VISU_SWEEPING_PREF" ), srangeTab ); @@ -3019,9 +2926,14 @@ void VisuGUI::createPreferences() setPreferenceProperty( nbsteps, "max", 200 ); // group: "MED files import" - int importGr = addPreference( tr( "VISU_PREF_MED_IMPORT" ), srangeTab ); - addPreference( tr( "VISU_PREF_MED_FULL_LOAD" ), importGr, - LightApp_Preferences::Bool, "VISU", "full_med_loading" ); + int importGr = addPreference( tr( "MED files import" ), srangeTab ); + setPreferenceProperty( importGr, "columns", 1 ); + addPreference( tr( "Full MED loading" ), importGr, LightApp_Preferences::Bool, "VISU", "full_med_loading" ); + addPreference( tr( "Build at once" ), importGr, LightApp_Preferences::Bool, "VISU", "build_at_once" ); + addPreference( tr( "Build fields" ), importGr, LightApp_Preferences::Bool, "VISU", "build_fields" ); + addPreference( tr( "Build min/max" ), importGr, LightApp_Preferences::Bool, "VISU", "build_min_max" ); + addPreference( tr( "Build groups" ), importGr, LightApp_Preferences::Bool, "VISU", "build_groups" ); + addPreference( tr( "Close dialog at finish" ), importGr, LightApp_Preferences::Bool, "VISU", "close_at_finish" ); // group: "Representation properties" int representGr = addPreference( tr( "VISU_PREF_REPRESENT_PROPS" ), srangeTab ); diff --git a/src/VISUGUI/VisuGUI.h b/src/VISUGUI/VisuGUI.h index 45e3b059..411b0bfc 100644 --- a/src/VISUGUI/VisuGUI.h +++ b/src/VISUGUI/VisuGUI.h @@ -138,8 +138,8 @@ protected slots: void OnMergeScalarBars(); void OnFreeScalarBars(); - void OnSaveViewParams(); - void OnRestoreViewParams(); + virtual void OnSaveViewParams(); + virtual void OnRestoreViewParams(); void OnRename(); void OnClippingPlanes(); @@ -154,9 +154,6 @@ protected slots: void OnTranslatePrs(); void OnArrangeActors(); - void OnScaling(); - void OnCubeAxes(); - protected: virtual LightApp_Selection* createSelection() const; diff --git a/src/VISUGUI/VisuGUI_BuildProgressDlg.cxx b/src/VISUGUI/VisuGUI_BuildProgressDlg.cxx new file mode 100644 index 00000000..7705f32d --- /dev/null +++ b/src/VISUGUI/VisuGUI_BuildProgressDlg.cxx @@ -0,0 +1,392 @@ +// VISU VISUGUI : GUI of VISU 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 : VisuGUI_BuildProgressDlg.cxx +// Author : Oleg UVAROV +// Module : VISU + +#include "VisuGUI_BuildProgressDlg.h" + +#include "VisuGUI_Tools.h" + +#include "SUIT_FileDlg.h" +#include "SUIT_MessageBox.h" +#include "SUIT_ResourceMgr.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +/*! + * Constructor + */ +VisuGUI_BuildProgressDlg::VisuGUI_BuildProgressDlg( QWidget* theParent ): + QDialog( theParent, "VisuGUI_BuildProgressBar", false ), + myIsRaiseColor( false ) +{ + setCaption( tr( "DLG_BUILD_PROGRESS_TITLE" ) ); + + SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr(); + + QVBoxLayout* aTopLayout = new QVBoxLayout( this ); + aTopLayout->setSpacing( 6 ); + aTopLayout->setMargin( 6 ); + aTopLayout->setAutoAdd( true ); + + // Settings + mySettingsBox = new QGroupBox( tr( "IMPORT_SETTINGS" ), this ); + mySettingsBox->setColumnLayout( 0, Qt::Vertical ); + mySettingsBox->layout()->setSpacing( 0 ); + mySettingsBox->layout()->setMargin( 0 ); + + QGridLayout* aSettingsLayout = new QGridLayout( mySettingsBox->layout() ); + aSettingsLayout->setSpacing( 6 ); + aSettingsLayout->setMargin( 11 ); + + QLabel* aFileNameLabel = new QLabel( tr( "FILE_NAME" ), mySettingsBox ); + myFileNameLineEdit = new QLineEdit( mySettingsBox ); + myFileNameLineEdit->setMinimumWidth( 250 ); + myFileNameLineEdit->setReadOnly( true ); + /* + QPushButton* aFileNameButton = new QPushButton( mySettingsBox ); + aFileNameButton->setAutoDefault( false ); + aFileNameButton->setPixmap( aResourceMgr->loadPixmap( "VISU", tr( "ICON_LOAD_TEXTURE" ) ) ); + connect( aFileNameButton, SIGNAL( clicked() ), this, SLOT( onBrowseFile() ) ); + */ + myBuildAllCheckBox = new QCheckBox( tr( "BUILD_ALL" ), mySettingsBox ); + myBuildAllCheckBox->setChecked( aResourceMgr->booleanValue( "VISU", "full_med_loading", false ) ); + connect( myBuildAllCheckBox, SIGNAL( clicked() ), this, SLOT( onBuildCheckBoxClicked() ) ); + + myBuildAtOnceCheckBox = new QCheckBox( tr( "BUILD_AT_ONCE" ), mySettingsBox ); + myBuildAtOnceCheckBox->setChecked( aResourceMgr->booleanValue( "VISU", "build_at_once", false ) ); + connect( myBuildAtOnceCheckBox, SIGNAL( clicked() ), this, SLOT( onBuildCheckBoxClicked() ) ); + + myCloseCheckBox = new QCheckBox( tr( "CLOSE_AT_FINISH" ), mySettingsBox ); + myCloseCheckBox->setChecked( aResourceMgr->booleanValue( "VISU", "close_at_finish", true ) ); + + aSettingsLayout->addWidget( aFileNameLabel, 0, 0 ); + aSettingsLayout->addMultiCellWidget( myFileNameLineEdit, 1, 1, 0, 1 ); + //aSettingsLayout->addWidget( aFileNameButton, 1, 2 ); + aSettingsLayout->addWidget( myBuildAllCheckBox, 2, 0 ); + aSettingsLayout->addWidget( myBuildAtOnceCheckBox, 3, 0 ); + aSettingsLayout->addWidget( myCloseCheckBox, 4, 0 ); + + // Progress + myProgressBox = new QGroupBox( tr( "IMPORT_PROGRESS" ), this ); + myProgressBox->setColumnLayout( 0, Qt::Vertical ); + myProgressBox->layout()->setSpacing( 0 ); + myProgressBox->layout()->setMargin( 0 ); + + QGridLayout* aProgressLayout = new QGridLayout( myProgressBox->layout() ); + aProgressLayout->setSpacing( 6 ); + aProgressLayout->setMargin( 11 ); + + myBuildEntitiesCheckBox = new QCheckBox( tr( "BUILD_ENTITIES" ), myProgressBox ); + myBuildEntitiesCheckBox->setChecked( true ); + myBuildEntitiesCheckBox->setEnabled( false ); + myBuildEntitiesButton = new QPushButton( myProgressBox ); + myBuildEntitiesButton->setEnabled( false ); + myBuildEntitiesButton->setFixedSize( 30, 30 ); + myBuildEntitiesButton->setPaletteBackgroundColor( Qt::red ); + connect( myBuildEntitiesCheckBox, SIGNAL( clicked() ), this, SLOT( onBuildCheckBoxClicked() ) ); + + myBuildFieldsCheckBox = new QCheckBox( tr( "BUILD_FIELDS" ), myProgressBox ); + myBuildFieldsCheckBox->setChecked( aResourceMgr->booleanValue( "VISU", "build_fields", true ) ); + myBuildFieldsButton = new QPushButton( myProgressBox ); + myBuildFieldsButton->setEnabled( false ); + myBuildFieldsButton->setFixedSize( 30, 30 ); + myBuildFieldsButton->setPaletteBackgroundColor( Qt::red ); + connect( myBuildFieldsCheckBox, SIGNAL( clicked() ), this, SLOT( onBuildCheckBoxClicked() ) ); + + myBuildMinMaxCheckBox = new QCheckBox( tr( "BUILD_MINMAX" ), myProgressBox ); + myBuildMinMaxCheckBox->setChecked( aResourceMgr->booleanValue( "VISU", "build_min_max", true ) ); + myBuildMinMaxButton = new QPushButton( myProgressBox ); + myBuildMinMaxButton->setEnabled( false ); + myBuildMinMaxButton->setFixedSize( 30, 30 ); + myBuildMinMaxButton->setPaletteBackgroundColor( Qt::red ); + connect( myBuildMinMaxCheckBox, SIGNAL( clicked() ), this, SLOT( onBuildCheckBoxClicked() ) ); + + myBuildGroupsCheckBox = new QCheckBox( tr( "BUILD_GROUPS" ), myProgressBox ); + myBuildGroupsCheckBox->setChecked( aResourceMgr->booleanValue( "VISU", "build_groups", true ) ); + myBuildGroupsButton = new QPushButton( myProgressBox ); + myBuildGroupsButton->setEnabled( false ); + myBuildGroupsButton->setFixedSize( 30, 30 ); + myBuildGroupsButton->setPaletteBackgroundColor( Qt::red ); + connect( myBuildGroupsCheckBox, SIGNAL( clicked() ), this, SLOT( onBuildCheckBoxClicked() ) ); + + aProgressLayout->addWidget( myBuildEntitiesCheckBox, 0, 0 ); + aProgressLayout->addWidget( myBuildEntitiesButton, 0, 1 ); + aProgressLayout->addWidget( myBuildFieldsCheckBox, 1, 0 ); + aProgressLayout->addWidget( myBuildFieldsButton, 1, 1 ); + aProgressLayout->addWidget( myBuildMinMaxCheckBox, 2, 0 ); + aProgressLayout->addWidget( myBuildMinMaxButton, 2, 1 ); + aProgressLayout->addWidget( myBuildGroupsCheckBox, 3, 0 ); + aProgressLayout->addWidget( myBuildGroupsButton, 3, 1 ); + + // Time + myTimeBox = new QGroupBox( tr( "IMPORT_TIME" ), this ); + myTimeBox->setColumnLayout( 0, Qt::Vertical ); + myTimeBox->layout()->setSpacing( 0 ); + myTimeBox->layout()->setMargin( 0 ); + + QGridLayout* aTimeLayout = new QGridLayout( myTimeBox->layout() ); + aTimeLayout->setSpacing( 6 ); + aTimeLayout->setMargin( 11 ); + + QLabel* aTimeLabel = new QLabel( tr( "TIME" ), myTimeBox ); + + myTimeLCDNumber = new QLCDNumber( myTimeBox ); + myTimeLCDNumber->setSegmentStyle( QLCDNumber::Filled ); + myTimeLCDNumber->setPaletteBackgroundColor( Qt::black ); + myTimeLCDNumber->setPaletteForegroundColor( Qt::white ); + myTimeLCDNumber->setNumDigits( 8 ); + myTimeLCDNumber->display( myTime.toString( "hh:mm:ss.zzz" ) ); + + aTimeLayout->addWidget( aTimeLabel, 0, 0 ); + aTimeLayout->addWidget( myTimeLCDNumber, 0, 1 ); + + // Start / Close + QGroupBox* CommonGroup = new QGroupBox( this ); + CommonGroup->setColumnLayout(0, Qt::Vertical ); + CommonGroup->layout()->setSpacing( 0 ); + CommonGroup->layout()->setMargin( 0 ); + QGridLayout* CommonGroupLayout = new QGridLayout( CommonGroup->layout() ); + CommonGroupLayout->setAlignment( Qt::AlignTop ); + CommonGroupLayout->setSpacing( 6 ); + CommonGroupLayout->setMargin( 11 ); + + myStartButton = new QPushButton( tr( "START" ), CommonGroup ); + myStartButton->setAutoDefault( true ); + myStartButton->setDefault( true ); + CommonGroupLayout->addWidget( myStartButton, 0, 0 ); + CommonGroupLayout->addItem( new QSpacerItem( 5, 5, QSizePolicy::Expanding, QSizePolicy::Minimum ), 0, 1 ); + + QPushButton* aCloseButton = new QPushButton( tr( "CLOSE" ), CommonGroup ); + aCloseButton->setAutoDefault( true ); + CommonGroupLayout->addWidget( aCloseButton, 0, 2 ); + + connect( myStartButton, SIGNAL( clicked() ), this, SLOT( onStart() ) ); + connect( aCloseButton, SIGNAL( clicked() ), this, SLOT( onClose() ) ); + + myTimer = new QTimer( this ); + connect( myTimer, SIGNAL( timeout() ), this, SLOT( onTimer() ) ); +} + +VisuGUI_BuildProgressDlg::~VisuGUI_BuildProgressDlg() +{ +} + +void VisuGUI_BuildProgressDlg::show() +{ + if( onBrowseFile() ) + QWidget::show(); +} + +void VisuGUI_BuildProgressDlg::onStart() +{ + if( myFileName.isNull() ) + return; + + bool aBuildAll = myBuildAllCheckBox->isChecked(); + bool aBuildAtOnce = myBuildAtOnceCheckBox->isChecked(); + + myResult = myGenerator->CreateResult( myFileName ); + + myResult->SetBuildFields( myBuildFieldsCheckBox->isChecked(), myBuildMinMaxCheckBox->isChecked() ); + myResult->SetBuildGroups( myBuildGroupsCheckBox->isChecked() ); + + //setModal( false ); + myFileNameLineEdit->setReadOnly( true ); + /* + myBuildAllCheckBox->setNoChange(); + myBuildAtOnceCheckBox->setNoChange(); + myBuildEntitiesCheckBox->setNoChange(); + myBuildFieldsCheckBox->setNoChange(); + myBuildMinMaxCheckBox->setNoChange(); + myBuildGroupsCheckBox->setNoChange(); + */ + + myStartButton->setEnabled( false ); + + if( aBuildAtOnce ) + { + QApplication::setOverrideCursor( Qt::waitCursor ); + myCurrentTime = vtkTimerLog::GetCurrentTime(); + } + + myTime.setHMS( 0, 0, 0 ); + myTimer->start( 100 ); + + myResult->Build( aBuildAll, aBuildAtOnce ); +} + +void VisuGUI_BuildProgressDlg::onClose() +{ + done( 0 ); +} + +bool VisuGUI_BuildProgressDlg::onBrowseFile() +{ + QString aRootDir = QString( getenv( "VISU_ROOT_DIR") ); + + QStringList aFilter; + aFilter.append( tr( "FLT_MED_FILES" ) ); + aFilter.append( tr( "FLT_ALL_FILES" ) ); + + QFileInfo aFileInfo = SUIT_FileDlg::getFileName( this, "", aFilter, tr( "IMPORT_FROM_FILE" ), true ); + QString aFileName = aFileInfo.filePath(); + + if( aFileName.isNull() ) + return false; + + myFileName = aFileName; + myFileNameLineEdit->setText( aFileName.section( '/', -1 ) ); + + return true; +} + +void VisuGUI_BuildProgressDlg::onTimer() +{ + try { + bool aBuildAtOnce = myBuildAtOnceCheckBox->isChecked(); + + if( !aBuildAtOnce ) + { + myTime = myTime.addMSecs( 100 ); + if( myTime.minute() > 9 && myTimeLCDNumber->numDigits() < 9 ) + myTimeLCDNumber->setNumDigits( 9 ); + myTimeLCDNumber->display( myTime.toString( "m:ss.zzz" ) ); + + bool isEntitiesDone = myResult->IsEntitiesDone(); + bool isFieldsDone = myResult->IsFieldsDone(); + bool isMinMaxDone = myResult->IsMinMaxDone(); + bool isGroupsDone = myResult->IsGroupsDone(); + + updateButton( myBuildEntitiesButton, isEntitiesDone ); + updateButton( myBuildFieldsButton, isFieldsDone ); + updateButton( myBuildMinMaxButton, isMinMaxDone ); + updateButton( myBuildGroupsButton, isGroupsDone ); + } + + if( myResult->IsDone() ) + { + myTimer->stop(); + + if( aBuildAtOnce ) + { + QApplication::restoreOverrideCursor(); + + QTime aTime; + int mSecs = ( int )( 1000 * ( vtkTimerLog::GetCurrentTime() - myCurrentTime ) ); + aTime = aTime.addMSecs( mSecs ); + if( aTime.minute() > 9 ) + myTimeLCDNumber->setNumDigits( 9 ); + myTimeLCDNumber->display( aTime.toString( "m:ss.zzz" ) ); + } + + if( myCloseCheckBox->isChecked() ) + done( 0 ); + else + SUIT_MessageBox::warn1( this, tr( "INF_VISU" ), tr( "IMPORT_DONE" ), tr( "BUT_OK" ) ); + } + } + catch( ... ) { + done( 1 ); + } +} + +void VisuGUI_BuildProgressDlg::updateButton( QPushButton* theButton, bool theIsDone ) +{ + QColor aCurrentColor = theButton->paletteBackgroundColor(); + if( aCurrentColor == Qt::gray || aCurrentColor == Qt::green ) + return; + + QColor aNewColor = Qt::green; + + if( !theIsDone ) + { + int r, g, b; + aCurrentColor.getRgb( &r, &g, &b ); + if( g == 0 ) + myIsRaiseColor = true; + else if( g == 255 ) + myIsRaiseColor = false; + + int gNew = g + ( myIsRaiseColor ? 1 : -1 ) * 51; + + aNewColor.setRgb( 255, gNew, 0 ); + } + + theButton->setPaletteBackgroundColor( aNewColor ); +} + +void VisuGUI_BuildProgressDlg::done( int r ) +{ + QApplication::restoreOverrideCursor(); + myTimer->stop(); + QDialog::done( r ); +} + +void VisuGUI_BuildProgressDlg::onBuildCheckBoxClicked() +{ + QCheckBox* aCheckBox = ( QCheckBox* )sender(); + if( !aCheckBox ) + return; + + bool anIsChecked = aCheckBox->isChecked(); + + QColor aColor = anIsChecked ? Qt::red : Qt::gray; + + if( aCheckBox == myBuildAllCheckBox ) + { + if( anIsChecked && !myBuildAtOnceCheckBox->isChecked() ) + myBuildAtOnceCheckBox->animateClick(); + } + else if( aCheckBox == myBuildAtOnceCheckBox ) + { + if( !anIsChecked && myBuildAllCheckBox->isChecked() ) + myBuildAllCheckBox->animateClick(); + } + else if( aCheckBox == myBuildFieldsCheckBox ) + { + myBuildFieldsButton->setPaletteBackgroundColor( aColor ); + if( !anIsChecked && myBuildMinMaxCheckBox->isChecked() ) + myBuildMinMaxCheckBox->animateClick(); + } + else if( aCheckBox == myBuildMinMaxCheckBox ) + { + myBuildMinMaxButton->setPaletteBackgroundColor( aColor ); + if( anIsChecked && !myBuildFieldsCheckBox->isChecked() ) + myBuildFieldsCheckBox->animateClick(); + } + else if( aCheckBox == myBuildGroupsCheckBox ) + myBuildGroupsButton->setPaletteBackgroundColor( aColor ); + +} diff --git a/src/VISUGUI/VisuGUI_BuildProgressDlg.h b/src/VISUGUI/VisuGUI_BuildProgressDlg.h new file mode 100644 index 00000000..4d880596 --- /dev/null +++ b/src/VISUGUI/VisuGUI_BuildProgressDlg.h @@ -0,0 +1,111 @@ +// VISU VISUGUI : GUI of VISU 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 : VisuGUI_BuildProgressDlg.h +// Author : Oleg UVAROV +// Module : VISU +// $Header$ + +#ifndef VISUGUI_BUILDPROGRESSDLG_H +#define VISUGUI_BUILDPROGRESSDLG_H + +#include "VISU_Gen_i.hh" + +#include +#include + +class QCheckBox; +class QGroupBox; +class QLCDNumber; +class QLineEdit; +class QPushButton; +class QTimer; + +//! Build Progress Dialog. +class VisuGUI_BuildProgressDlg : public QDialog +{ + Q_OBJECT + +public: + VisuGUI_BuildProgressDlg( QWidget* ); + ~VisuGUI_BuildProgressDlg(); + + virtual void setGenerator( VISU::VISU_Gen_i* theGenerator ) { myGenerator = theGenerator; } + virtual void show(); + + QString fileName() const { return myFileName; } + +protected slots: + void done( int ); + + void onStart(); + void onClose(); + + bool onBrowseFile(); + void onTimer(); + + void onBuildCheckBoxClicked(); + +private: + void updateButton( QPushButton*, bool ); + +private: + VISU::Result_var myResult; + VISU::VISU_Gen_i* myGenerator; + + QString myFileName; + QTime myTime; + QTimer* myTimer; + + QGroupBox* mySettingsBox; + + QLineEdit* myFileNameLineEdit; + QCheckBox* myBuildAllCheckBox; + QCheckBox* myBuildAtOnceCheckBox; + + QGroupBox* myProgressBox; + + QCheckBox* myBuildEntitiesCheckBox; + QPushButton* myBuildEntitiesButton; + + QCheckBox* myBuildFieldsCheckBox; + QPushButton* myBuildFieldsButton; + + QCheckBox* myBuildMinMaxCheckBox; + QPushButton* myBuildMinMaxButton; + + QCheckBox* myBuildGroupsCheckBox; + QPushButton* myBuildGroupsButton; + + QGroupBox* myTimeBox; + QLCDNumber* myTimeLCDNumber; + + QCheckBox* myCloseCheckBox; + + QPushButton* myStartButton; + + double myCurrentTime; + bool myIsRaiseColor; +}; + +#endif diff --git a/src/VISUGUI/VisuGUI_CubeAxesDlg.cxx b/src/VISUGUI/VisuGUI_CubeAxesDlg.cxx deleted file mode 100755 index 97640bd6..00000000 --- a/src/VISUGUI/VisuGUI_CubeAxesDlg.cxx +++ /dev/null @@ -1,594 +0,0 @@ -// VISU VISUGUI : 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 : VisuGUI_CubeAxesDlg.cxx -// Author : Sergey LITONIN -// Module : VISU - -#include "VisuGUI_CubeAxesDlg.h" - -#include "VisuGUI.h" -#include "VisuGUI_Tools.h" -#include "VisuGUI_FontWg.h" - -#include "SVTK_ViewWindow.h" -#include "SVTK_CubeAxesActor2D.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -/*! - * Class : AxisWg - * Description : Tab of dialog - */ - -//======================================================================= -// name : VisuGUI_AxisWg::AxisWg -// Purpose : Constructor -//======================================================================= -VisuGUI_AxisWg::VisuGUI_AxisWg (QWidget* theParent) -: QFrame(theParent) -{ - QValueList< QLabel* > aLabels; - - // "Name" grp - - myNameGrp = new QGroupBox(3, Qt::Vertical, tr("AXIS_NAME"), this); - myIsNameVisible = new QCheckBox(tr("IS_VISIBLE"), myNameGrp); - - QHBox* aHBox = new QHBox(myNameGrp); - aHBox->setSpacing(5); - QLabel* aLabel = new QLabel(tr("NAME"), aHBox); - myAxisName = new QLineEdit(aHBox); - aLabels.append(aLabel); - - aHBox = new QHBox(myNameGrp); - aHBox->setSpacing(5); - aLabel = new QLabel(tr("FONT"), aHBox); - myNameFont = new VisuGUI_FontWg(aHBox); - aLabels.append(aLabel); - - - // "Labels" grp - - myLabelsGrp = new QGroupBox(4, Qt::Vertical, tr("LABELS"), this); - myIsLabelsVisible = new QCheckBox(tr("IS_VISIBLE"), myLabelsGrp); - - aHBox = new QHBox(myLabelsGrp); - aHBox->setSpacing(5); - aLabel = new QLabel(tr("NUMBER"), aHBox); - myLabelNumber = new QLineEdit(aHBox); - myLabelNumber->setValidator(new QIntValidator(0, 25, this)); - myLabelNumber->installEventFilter(this); - aLabels.append(aLabel); - - aHBox = new QHBox(myLabelsGrp); - aHBox->setSpacing(5); - aLabel = new QLabel(tr("OFFSET"), aHBox); - myLabelOffset = new QLineEdit(aHBox); - aLabels.append(aLabel); - - aHBox = new QHBox(myLabelsGrp); - aHBox->setSpacing(5); - aLabel = new QLabel(tr("FONT"), aHBox); - myLabelsFont = new VisuGUI_FontWg(aHBox); - aLabels.append(aLabel); - - // "Tick marks" grp - - myTicksGrp = new QGroupBox(2, Qt::Vertical, tr("TICK_MARKS"), this); - myIsTicksVisible = new QCheckBox(tr("IS_VISIBLE"), myTicksGrp); - - aHBox = new QHBox(myTicksGrp); - aHBox->setSpacing(5); - aLabel = new QLabel(tr("LENGTH"), aHBox); - myTickLength = new QLineEdit(aHBox); - aLabels.append(aLabel); - - // Layout - - QVBoxLayout* aLay = new QVBoxLayout(this, 0, 5); - aLay->addWidget(myNameGrp); - aLay->addWidget(myLabelsGrp); - aLay->addWidget(myTicksGrp); - - // init - myIsNameVisible->setChecked(true); - myIsLabelsVisible->setChecked(true); - myIsTicksVisible->setChecked(true); - updateControlState(); - - // Adjust label widths - QValueList< QLabel* >::iterator anIter; - int aMaxWidth = 0; - for (anIter = aLabels.begin(); anIter != aLabels.end(); anIter++) - aMaxWidth = QMAX(aMaxWidth, (*anIter)->sizeHint().width()); - for (anIter = aLabels.begin(); anIter != aLabels.end(); anIter++) - (*anIter)->setFixedWidth(aMaxWidth); - - // connect signals and slots - connect(myIsNameVisible, SIGNAL(stateChanged(int)), SLOT(onNameChecked())); - connect(myIsLabelsVisible, SIGNAL(stateChanged(int)), SLOT(onLabelsChecked())); - connect(myIsTicksVisible, SIGNAL(stateChanged(int)), SLOT(onTicksChecked())); -} - -VisuGUI_AxisWg::~VisuGUI_AxisWg() -{ -} - -void VisuGUI_AxisWg::updateControlState() -{ - onNameChecked(); - onLabelsChecked(); - onTicksChecked(); -} - -bool VisuGUI_AxisWg::eventFilter(QObject* o, QEvent* e) -{ - if (e->type() == QEvent::FocusOut) { - bool isOK = false; - int k = myLabelNumber->text().toInt(&isOK); - if (isOK && k > 25) myLabelNumber->setText("25"); - } - return false; -} - -//======================================================================= -// name : VisuGUI_AxisWg::onNameChecked -// Purpose : -//======================================================================= -void VisuGUI_AxisWg::setEnabled(QGroupBox* theGrp, const bool theState) -{ - QObjectList aChildren(*theGrp->children()); - QObject* anObj; - for(anObj = aChildren.first(); anObj !=0; anObj = aChildren.next()) - if (anObj !=0 && anObj->inherits("QHBox")) - ((QHBox*)anObj)->setEnabled(theState); -} - -//======================================================================= -// Labels : VisuGUI_AxisWg::onLabelsChecked -// Purpose : -//======================================================================= -void VisuGUI_AxisWg::onLabelsChecked() -{ - setEnabled(myLabelsGrp, myIsLabelsVisible->isChecked()); -} - -//======================================================================= -// Labels : VisuGUI_AxisWg::onTicksChecked -// Purpose : -//======================================================================= -void VisuGUI_AxisWg::onTicksChecked() -{ - setEnabled(myTicksGrp, myIsTicksVisible->isChecked()); -} - -//======================================================================= -// name : VisuGUI_AxisWg::onNameChecked -// Purpose : -//======================================================================= -void VisuGUI_AxisWg::onNameChecked() -{ - setEnabled(myNameGrp, myIsNameVisible->isChecked()); -} - -//======================================================================= -// name : VisuGUI_AxisWg::UseName -// Purpose : -//======================================================================= -void VisuGUI_AxisWg::UseName(const bool toUse) -{ - myIsNameVisible->setChecked(toUse); -} - -//======================================================================= -// name : VisuGUI_AxisWg::SetName -// Purpose : -//================================================== ===================== -void VisuGUI_AxisWg::SetName(const QString& theName) -{ - myAxisName->setText(theName); -} - -//======================================================================= -// name : VisuGUI_AxisWg::SetNameFont -// Purpose : -//======================================================================= -void VisuGUI_AxisWg::SetNameFont(const QColor& theColor, - const int theFont, - const bool theIsBold, - const bool theIsItalic, - const bool theIsShadow) -{ - myNameFont->SetData(theColor, theFont, theIsBold, theIsItalic, theIsShadow); -} - -//======================================================================= -// name : VisuGUI_AxisWg::SetNameFont -// Purpose : -//======================================================================= -bool VisuGUI_AxisWg::ReadData(vtkAxisActor2D* theActor) -{ - if (theActor == 0) - return false; - - // Name - - bool useName = theActor->GetTitleVisibility(); - QString aTitle(theActor->GetTitle()); - - QColor aTitleColor(255, 255, 255); - int aTitleFontFamily = VTK_ARIAL; - bool isTitleBold = false; - bool isTitleItalic = false; - bool isTitleShadow = false; - - vtkTextProperty* aTitleProp = theActor->GetTitleTextProperty(); - if (aTitleProp !=0) - { - float c[ 3 ]; - aTitleProp->GetColor(c); - aTitleColor.setRgb((int)(c[ 0 ] * 255), (int)(c[ 1 ] * 255), (int)(c[ 2 ] * 255)); - aTitleFontFamily = aTitleProp->GetFontFamily(); - isTitleBold = aTitleProp->GetBold() ? true : false; - isTitleItalic = aTitleProp->GetItalic() ? true : false; - isTitleShadow = aTitleProp->GetShadow() ? true : false; - } - - myIsNameVisible->setChecked(useName); - myAxisName->setText(aTitle); - myNameFont->SetData(aTitleColor, aTitleFontFamily, isTitleBold, isTitleItalic, isTitleShadow); - - // Labels - - bool useLabels = theActor->GetLabelVisibility(); - int nbLabels = theActor->GetNumberOfLabels(); - int anOffset = theActor->GetTickOffset(); - - QColor aLabelsColor(255, 255, 255); - int aLabelsFontFamily = VTK_ARIAL; - bool isLabelsBold = false; - bool isLabelsItalic = false; - bool isLabelsShadow = false; - - vtkTextProperty* aLabelsProp = theActor->GetLabelTextProperty(); - if (aLabelsProp !=0) - { - float c[ 3 ]; - aLabelsProp->GetColor(c); - aLabelsColor.setRgb((int)(c[ 0 ] * 255), (int)(c[ 1 ] * 255), (int)(c[ 2 ] * 255)); - aLabelsFontFamily = aLabelsProp->GetFontFamily(); - isLabelsBold = aLabelsProp->GetBold() ? true : false; - isLabelsItalic = aLabelsProp->GetItalic() ? true : false; - isLabelsShadow = aLabelsProp->GetShadow() ? true : false; - } - - myIsLabelsVisible->setChecked(useLabels); - myLabelNumber->setText(QString("%1").arg(nbLabels)); - myLabelOffset->setText(QString("%1").arg(anOffset)); - myLabelsFont->SetData(aLabelsColor, aLabelsFontFamily, isLabelsBold, isLabelsItalic, isLabelsShadow); - - // Tick marks - bool useTickMarks = theActor->GetTickVisibility(); - int aTickLength = theActor->GetTickLength(); - - myIsTicksVisible->setChecked(useTickMarks); - myTickLength->setText(QString("%1").arg(aTickLength)); - - return true; -} - -//======================================================================= -// name : VisuGUI_CubeAxesDlg::Apply -// Purpose : -//======================================================================= -bool VisuGUI_AxisWg::Apply(vtkAxisActor2D* theActor) -{ - if (theActor == 0) - return false; - - // Name - - theActor->SetTitleVisibility(myIsNameVisible->isChecked() ? 1 : 0); - theActor->SetTitle(myAxisName->text().latin1()); - - QColor aTitleColor(255, 255, 255); - int aTitleFontFamily = VTK_ARIAL; - bool isTitleBold = false; - bool isTitleItalic = false; - bool isTitleShadow = false; - - myNameFont->GetData(aTitleColor, aTitleFontFamily, isTitleBold, isTitleItalic, isTitleShadow); - vtkTextProperty* aTitleProp = theActor->GetTitleTextProperty(); - if (aTitleProp) - { - aTitleProp->SetColor(aTitleColor.red() / 255., - aTitleColor.green() / 255., - aTitleColor.blue() / 255.); - aTitleProp->SetFontFamily(aTitleFontFamily); - - aTitleProp->SetBold(isTitleBold ? 1 : 0); - aTitleProp->SetItalic(isTitleItalic ? 1 : 0); - aTitleProp->SetShadow(isTitleShadow ? 1 : 0); - - theActor->SetTitleTextProperty(aTitleProp); - } - - // Labels - - theActor->SetLabelVisibility(myIsLabelsVisible->isChecked() ? 1 : 0); - - bool isOk = false; - int nbLabels = myLabelNumber->text().toInt(&isOk); - if (isOk) - theActor->SetNumberOfLabels(nbLabels); - - int anOffset = myLabelOffset->text().toInt(&isOk); - if (isOk) - theActor->SetTickOffset(anOffset); - - QColor aLabelsColor(255, 255, 255); - int aLabelsFontFamily = VTK_ARIAL; - bool isLabelsBold = false; - bool isLabelsItalic = false; - bool isLabelsShadow = false; - - myLabelsFont->GetData(aLabelsColor, aLabelsFontFamily, isLabelsBold, isLabelsItalic, isLabelsShadow); - vtkTextProperty* aLabelsProp = theActor->GetLabelTextProperty(); - if (aLabelsProp) - { - aLabelsProp->SetColor(aLabelsColor.red() / 255., - aLabelsColor.green() / 255., - aLabelsColor.blue() / 255.); - aLabelsProp->SetFontFamily(aLabelsFontFamily); - - aLabelsProp->SetBold(isLabelsBold ? 1 : 0); - aLabelsProp->SetItalic(isLabelsItalic ? 1 : 0); - aLabelsProp->SetShadow(isLabelsShadow ? 1 : 0); - - aLabelsProp->Modified(); - theActor->SetLabelTextProperty(aLabelsProp); - } - - - // Tick marks - theActor->SetTickVisibility(myIsTicksVisible->isChecked()); - int aTickLength = myTickLength->text().toInt(&isOk); - if (isOk) - theActor->SetTickLength(aTickLength); - - return true; -} - -/* - Class : VisuGUI_CubeAxesDlg - Description : Dialog for specifynig cube axes properties -*/ - -//======================================================================= -// name : VisuGUI_CubeAxesDlg::VisuGUI_CubeAxesDlg -// Purpose : Constructor -//======================================================================= -VisuGUI_CubeAxesDlg::VisuGUI_CubeAxesDlg(QWidget* theParent) -: QDialog(theParent, "VisuGUI_CubeAxesDlg", false, - WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose) -{ - setCaption(tr("CAPTION")); - - QVBoxLayout* aLay = new QVBoxLayout(this, 5, 5); - aLay->addWidget(createMainFrame(this)); - aLay->addWidget(createButtonFrame(this)); - - Init(); - -//if (VISU::GetDesktop()->getMainFrame()) -// connect(VISU::GetDesktop()->getMainFrame(), SIGNAL(windowActivated(QWidget*)), -// SLOT(onWindowActivated(QWidget*))); -} - -//======================================================================= -// name : VisuGUI_CubeAxesDlg::createMainFrame -// Purpose : Create frame containing dialog's input fields -//======================================================================= -QWidget* VisuGUI_CubeAxesDlg::createMainFrame(QWidget* theParent) -{ - QFrame* aFrame = new QFrame(theParent); - - myTabWg = new QTabWidget(aFrame); - - myAxes[ 0 ] = new VisuGUI_AxisWg(myTabWg); - myAxes[ 1 ] = new VisuGUI_AxisWg(myTabWg); - myAxes[ 2 ] = new VisuGUI_AxisWg(myTabWg); - - myTabWg->addTab(myAxes[ 0 ], tr("X_AXIS")); - myTabWg->addTab(myAxes[ 1 ], tr("Y_AXIS")); - myTabWg->addTab(myAxes[ 2 ], tr("Z_AXIS")); - - myTabWg->setMargin(5); - - myIsVisible = new QCheckBox(tr("IS_VISIBLE"), aFrame); - - QVBoxLayout* aLay = new QVBoxLayout(aFrame, 0, 5); - aLay->addWidget(myTabWg); - aLay->addWidget(myIsVisible); - - return aFrame; -} - -//======================================================================= -// name : VisuGUI_CubeAxesDlg::createButtonFrame -// Purpose : Create frame containing buttons -//======================================================================= -QWidget* VisuGUI_CubeAxesDlg::createButtonFrame(QWidget* theParent) -{ - QFrame* aFrame = new QFrame(theParent); - aFrame->setFrameStyle(QFrame::Box | QFrame::Sunken); - - myOkBtn = new QPushButton(tr("BUT_OK"), aFrame); - myApplyBtn = new QPushButton(tr("BUT_APPLY"), aFrame); - myCloseBtn = new QPushButton(tr("BUT_CLOSE"), aFrame); - - QSpacerItem* aSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); - - QHBoxLayout* aLay = new QHBoxLayout(aFrame, 5, 5); - - aLay->addWidget(myOkBtn); - aLay->addWidget(myApplyBtn); - aLay->addItem(aSpacer); - aLay->addWidget(myCloseBtn); - - connect(myOkBtn, SIGNAL(clicked()), SLOT(onOk())); - connect(myApplyBtn, SIGNAL(clicked()), SLOT(onApply())); - connect(myCloseBtn, SIGNAL(clicked()), SLOT(onClose())); - - return aFrame; -} - -//======================================================================= -// name : VisuGUI_CubeAxesDlg::~VisuGUI_CubeAxesDlg -// Purpose : Destructor -//======================================================================= -VisuGUI_CubeAxesDlg::~VisuGUI_CubeAxesDlg() -{ -} - -//======================================================================= -// name : VisuGUI_CubeAxesDlg::Init -// Purpose : Init dialog fields, connect signals and slots, show dialog -//======================================================================= -bool VisuGUI_CubeAxesDlg::Init() -{ - SVTK_ViewWindow* aFrame = VISU::GetViewWindow(); - if (aFrame == 0) - return false; - - SVTK_CubeAxesActor2D* anActor = aFrame->GetCubeAxes(); - if (anActor == 0) - return false; - - myAxes[ 0 ]->ReadData(anActor->GetXAxisActor2D()); - myAxes[ 1 ]->ReadData(anActor->GetYAxisActor2D()); - myAxes[ 2 ]->ReadData(anActor->GetZAxisActor2D()); - - myIsVisible->setChecked(anActor->GetVisibility() ? true : false); - - return true; - -} - -//======================================================================= -// name : VisuGUI_CubeAxesDlg::isValid -// Purpose : Verify validity of entry data -//======================================================================= -bool VisuGUI_CubeAxesDlg::isValid() const -{ - return true; -} - -//======================================================================= -// name : VisuGUI_CubeAxesDlg::onApply -// Purpose : Verify validity of entry data -//======================================================================= -bool VisuGUI_CubeAxesDlg::onApply() -{ - bool isOk = true; - - try - { - SVTK_ViewWindow* aFrame = VISU::GetViewWindow(); - if (aFrame == 0) - return false; - - SVTK_CubeAxesActor2D* anActor = aFrame->GetCubeAxes(); - if (anActor == 0) - return false; - - isOk = isOk && myAxes[ 0 ]->Apply(anActor->GetXAxisActor2D()); - isOk = isOk && myAxes[ 1 ]->Apply(anActor->GetYAxisActor2D()); - isOk = isOk && myAxes[ 2 ]->Apply(anActor->GetZAxisActor2D()); - - - //anActor->SetXLabel(myAxes[ 0 ]->myAxisName->text()); - //anActor->SetYLabel(myAxes[ 1 ]->myAxisName->text()); - //anActor->SetZLabel(myAxes[ 2 ]->myAxisName->text()); - - //anActor->SetNumberOfLabels(anActor->GetXAxisActor2D()->GetNumberOfLabels()); - if (myIsVisible->isChecked()) - anActor->VisibilityOn(); - else - anActor->VisibilityOff(); - - if (isOk) - aFrame->Repaint(); - } - catch(...) - { - isOk = false; - } - - return isOk; -} - -//======================================================================= -// name : VisuGUI_CubeAxesDlg::onOk -// Purpose : SLOT called when "Ok" button pressed. -//======================================================================= -void VisuGUI_CubeAxesDlg::onOk() -{ - if (onApply()) - onClose(); -} - -//======================================================================= -// name : VisuGUI_CubeAxesDlg::onClose -// Purpose : SLOT called when "Close" button pressed. Close dialog -//======================================================================= -void VisuGUI_CubeAxesDlg::onClose() -{ - reject(); -} - -//======================================================================= -// name : VisuGUI_CubeAxesDlg::onClose -// Purpose : SLOT called when "Close" button pressed. Close dialog -//======================================================================= -void VisuGUI_CubeAxesDlg::onWindowActivated (QWidget*) -{ - SVTK_ViewWindow* aFrame = VISU::GetViewWindow(); - if (aFrame) - Init(); - else - onClose(); -} diff --git a/src/VISUGUI/VisuGUI_CubeAxesDlg.h b/src/VISUGUI/VisuGUI_CubeAxesDlg.h deleted file mode 100755 index 59bcbb0c..00000000 --- a/src/VISUGUI/VisuGUI_CubeAxesDlg.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 : VisuGUI_CubeAxesDlg.h -// Author : Sergey LITONIN -// Module : VISU - - -#ifndef VisuGUI_CubeAxesDlg_H -#define VisuGUI_CubeAxesDlg_H - -#include -#include - -class QWidget; -class QFrame; -class QPushButton; -class QTabWidget; -class QCheckBox; -class QLineEdit; -class VisuGUI_FontWg; -class QGroupBox; -class VisuGUI_AxisWg; -class vtkAxisActor2D; - -/*! - * Class : VisuGUI_CubeAxesDlg - * Description : Dialog for specifynig cube axes properties - */ -class VisuGUI_CubeAxesDlg : public QDialog -{ - Q_OBJECT - -public: - VisuGUI_CubeAxesDlg( QWidget* ); - virtual ~VisuGUI_CubeAxesDlg(); - - bool Init(); - -private slots: - void onOk(); - bool onApply(); - void onClose(); - - void onWindowActivated( QWidget* ); - -private: - QWidget* createButtonFrame( QWidget* ); - QWidget* createMainFrame ( QWidget* ); - bool isValid() const; - -private: - QTabWidget* myTabWg; - QCheckBox* myIsVisible; - - QPushButton* myOkBtn; - QPushButton* myApplyBtn; - QPushButton* myCloseBtn; - VisuGUI_AxisWg* myAxes[ 3 ]; -}; - -/*! - * Class : VisuGUI_AxisWg - * Description : Tab of dialog - */ -class VisuGUI_AxisWg : public QFrame -{ - Q_OBJECT - -public: - VisuGUI_AxisWg( QWidget* ); - ~VisuGUI_AxisWg(); - - void UseName( const bool ); - void SetName( const QString& ); - void SetNameFont( const QColor&, const int, const bool, const bool, const bool ); - bool ReadData( vtkAxisActor2D* ); - bool Apply( vtkAxisActor2D* ); - -protected: - bool eventFilter(QObject*, QEvent*); - -private slots: - void onNameChecked(); - void onLabelsChecked(); - void onTicksChecked(); - -private: - void updateControlState(); - void setEnabled( QGroupBox*, const bool ); - -private: - // name - QGroupBox* myNameGrp; - QCheckBox* myIsNameVisible; - QLineEdit* myAxisName; - VisuGUI_FontWg* myNameFont; - - // labels - QGroupBox* myLabelsGrp; - QCheckBox* myIsLabelsVisible; - QLineEdit* myLabelNumber; - QLineEdit* myLabelOffset; - VisuGUI_FontWg* myLabelsFont; - - // tick marks - QGroupBox* myTicksGrp; - QCheckBox* myIsTicksVisible; - QLineEdit* myTickLength; - - friend class VisuGUI_CubeAxesDlg; -}; - -#endif diff --git a/src/VISUGUI/VisuGUI_Displayer.cxx b/src/VISUGUI/VisuGUI_Displayer.cxx index 68d8f28b..380ee7f4 100644 --- a/src/VISUGUI/VisuGUI_Displayer.cxx +++ b/src/VISUGUI/VisuGUI_Displayer.cxx @@ -27,6 +27,7 @@ // $Header: /home/server/cvs/VISU/VISU_SRC/src/VISUGUI/VisuGUI_Displayer.cxx #include "VisuGUI_Displayer.h" +#include "VVTK_ViewModel.h" #include "VisuGUI_Tools.h" #include "VISU_Actor.h" @@ -116,11 +117,9 @@ void VisuGUI_Displayer::buildPrs3d( SVTK_ViewWindow* wnd, VISU::Prs3d_i* thePrs VISU_Actor* newAct = VISU::FindActor( wnd, thePrs ); if( !newAct ) { - VISU_Actor* a = thePrs->CreateActor(); - if( a ) - newAct = a->GetParent(); + newAct = thePrs->CreateActor(); } - if( newAct && newAct ) + if( newAct ) { wnd->AddActor( newAct ); wnd->Repaint(); @@ -227,7 +226,7 @@ bool VisuGUI_Displayer::canBeDisplayed( const QString& entry, const QString& vie if( study->isComponent( entry ) ) return true; - if( viewer_type==SVTK_Viewer::Type() ) + if( viewer_type==SVTK_Viewer::Type() || viewer_type==VVTK_Viewer::Type()) { VISU::Prs3d_i* thePrs = dynamic_cast( VISU::GetServant( anObj ).in() ); return thePrs; diff --git a/src/VISUGUI/VisuGUI_Factory.cxx b/src/VISUGUI/VisuGUI_Factory.cxx index 24ea841b..fea679cb 100644 --- a/src/VISUGUI/VisuGUI_Factory.cxx +++ b/src/VISUGUI/VisuGUI_Factory.cxx @@ -26,7 +26,7 @@ // Module : VISU // $Header$ -#include "VisuGUI.h" +#include "VisuGUI_Module.h" #include "CAM_Module.h" @@ -34,7 +34,7 @@ extern "C" { CAM_Module* createModule() { - return new VisuGUI(); + return new VisuGUI_Module(); } } diff --git a/src/VISUGUI/VisuGUI_FontWg.cxx b/src/VISUGUI/VisuGUI_FontWg.cxx deleted file mode 100755 index 78d62a1c..00000000 --- a/src/VISUGUI/VisuGUI_FontWg.cxx +++ /dev/null @@ -1,149 +0,0 @@ -// VISU VISUGUI : 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 : VisuGUI_CubeAxesDlg.cxx -// Author : Sergey LITONIN -// Module : VISU - -#include "VisuGUI_FontWg.h" - -#include -#include -#include -#include - -#include - -/*! - * Class : VisuGUI_FontWg - * Description : Dialog for specifynig font - */ - -//======================================================================= -// name : VisuGUI_FontWg -// Purpose : Constructor -//======================================================================= -VisuGUI_FontWg::VisuGUI_FontWg( QWidget* theParent ) -: QHBox( theParent ) -{ - setSpacing( 5 ); - myColorBtn = new QToolButton( this ); - myColorBtn->setMinimumWidth( 20 ); - - myFamily = new QComboBox( this ); - myFamily->insertItem( tr( "ARIAL" ) ); - myFamily->insertItem( tr( "COURIER" ) ); - myFamily->insertItem( tr( "TIMES" ) ); - - myBold = new QCheckBox( tr( "BOLD" ), this ); - myItalic = new QCheckBox( tr( "ITALIC" ), this ); - myShadow = new QCheckBox( tr( "SHADOW" ), this ); - - connect( myColorBtn, SIGNAL( clicked() ), SLOT( onColor() ) ); -} - -//======================================================================= -// name : ~VisuGUI_FontWg -// Purpose : Destructor -//======================================================================= -VisuGUI_FontWg::~VisuGUI_FontWg() -{ -} - -//======================================================================= -// name : SetColor -// Purpose : -//======================================================================= -void VisuGUI_FontWg::SetColor( const QColor& theColor ) -{ - myColorBtn->setPaletteBackgroundColor( theColor ); -} - -//======================================================================= -// name : GetColor -// Purpose : -//======================================================================= -QColor VisuGUI_FontWg::GetColor() const -{ - return myColorBtn->paletteBackgroundColor(); -} - -//======================================================================= -// name : onColor -// Purpose : -//======================================================================= -void VisuGUI_FontWg::onColor() -{ - QColor aColor = QColorDialog::getColor( GetColor(), this ); - if ( aColor.isValid() ) - SetColor( aColor ); -} - -//======================================================================= -// name : SetData -// Purpose : -//======================================================================= -void VisuGUI_FontWg::SetData( const QColor& theColor, - const int theFamily, - const bool theBold, - const bool theItalic, - const bool theShadow ) -{ - SetColor( theColor ); - - if ( theFamily == VTK_ARIAL ) - myFamily->setCurrentItem( 0 ); - else if ( theFamily == VTK_COURIER ) - myFamily->setCurrentItem( 1 ); - else - myFamily->setCurrentItem( 2 ); - - myBold->setChecked( theBold ); - myItalic->setChecked( theItalic ); - myShadow->setChecked( theShadow ); -} - -//======================================================================= -// name : GetData -// Purpose : -//======================================================================= -void VisuGUI_FontWg::GetData( QColor& theColor, - int& theFamily, - bool& theBold, - bool& theItalic, - bool& theShadow ) const -{ - theColor = GetColor(); - - int anItem =myFamily->currentItem(); - if ( anItem == 0 ) - theFamily = VTK_ARIAL; - else if ( anItem == 1 ) - theFamily = VTK_COURIER; - else - theFamily = VTK_TIMES; - - theBold = myBold->isChecked(); - theItalic = myItalic->isChecked(); - theShadow = myShadow->isChecked(); -} diff --git a/src/VISUGUI/VisuGUI_GaussPointsDlg.cxx b/src/VISUGUI/VisuGUI_GaussPointsDlg.cxx new file mode 100644 index 00000000..7492c7f5 --- /dev/null +++ b/src/VISUGUI/VisuGUI_GaussPointsDlg.cxx @@ -0,0 +1,733 @@ +// VISU VISUGUI : GUI of VISU 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 : VisuGUI_GaussPointsDlg.cxx +// Author : Oleg UVAROV +// Module : VISU + +#include "VisuGUI_GaussPointsDlg.h" + +#include "VISUConfig.hh" + +#include "VisuGUI_Tools.h" + +#include "VISU_GaussPoints_i.hh" +#include "VISU_GaussPointsPL.hxx" +#include "VISU_OpenGLPointSpriteMapper.hxx" +#include "VISU_Convertor.hxx" + +#include "VVTK_PrimitiveBox.h" +#include "VVTK_SizeBox.h" + +#include "SalomeApp_Application.h" +#include "SalomeApp_Module.h" +#include "SUIT_Desktop.h" +#include "SUIT_ResourceMgr.h" +#include "SUIT_Session.h" +#include "SUIT_MessageBox.h" +#include "SVTK_FontWidget.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +using namespace std; + +VisuGUI_GaussScalarBarPane::VisuGUI_GaussScalarBarPane (QWidget * parent, bool SetPref): + QVBox(parent) +{ + myVerX = 0.01; myVerY = 0.10; myVerW = 0.10; myVerH = 0.80; + myHorX = 0.20; myHorY = 0.01; myHorW = 0.60; myHorH = 0.12; + Imin = 0.0; Imax = 0.0; + myRangeMode = -1; + + setSpacing(6); + //setMargin(11); + + // Active bar ======================================================== + QGroupBox* ActiveBarGroup = new QGroupBox (tr("ACTIVE_BAR_GRP"), this, "ActiveBarGroup"); + ActiveBarGroup->setColumnLayout(0, Qt::Vertical ); + ActiveBarGroup->layout()->setSpacing( 0 ); + ActiveBarGroup->layout()->setMargin( 0 ); + QGridLayout* ActiveBarGroupLayout = new QGridLayout( ActiveBarGroup->layout() ); + ActiveBarGroupLayout->setAlignment( Qt::AlignTop ); + ActiveBarGroupLayout->setSpacing( 6 ); + ActiveBarGroupLayout->setMargin( 11 ); + + QButtonGroup* BarTypeGroup = new QButtonGroup( 2, Qt::Vertical, ActiveBarGroup, "BarTypeGroup" ); + BarTypeGroup->setRadioButtonExclusive( true ); + BarTypeGroup->setFrameStyle( QFrame::NoFrame ); + BarTypeGroup->layout()->setMargin( 0 ); + + myRBLocal = new QRadioButton( tr( "LOCAL" ), BarTypeGroup ); + myRBGlobal = new QRadioButton( tr( "GLOBAL" ), BarTypeGroup ); + + myCBDisplayed = new QCheckBox( tr( "DISPLAYED" ), ActiveBarGroup ); + + ActiveBarGroupLayout->addMultiCellWidget( BarTypeGroup, 0, 1, 0, 0 ); + ActiveBarGroupLayout->addWidget( myCBDisplayed, 1, 1 ); + + // Range ============================================================ + RangeGroup = new QButtonGroup (tr("SCALAR_RANGE_GRP"), this, "RangeGroup"); + RangeGroup->setColumnLayout(0, Qt::Vertical ); + RangeGroup->layout()->setSpacing( 0 ); + RangeGroup->layout()->setMargin( 0 ); + QGridLayout* RangeGroupLayout = new QGridLayout( RangeGroup->layout() ); + RangeGroupLayout->setAlignment( Qt::AlignTop ); + RangeGroupLayout->setSpacing( 6 ); + RangeGroupLayout->setMargin( 11 ); + + myModeLbl = new QLabel("Scalar Mode", RangeGroup); + + myModeCombo = new QComboBox(RangeGroup); + + RangeGroupLayout->addWidget( myModeLbl, 0, 0 ); + RangeGroupLayout->addWidget( myModeCombo, 0, 1 ); + + //TopLayout->addWidget( RangeGroup ); + + // Colors and Labels ======================================================== + QGroupBox* ColLabGroup = new QGroupBox (tr("COLORS_LABELS_GRP"), this, "ColLabGroup"); + ColLabGroup->setColumnLayout(0, Qt::Vertical ); + ColLabGroup->layout()->setSpacing( 0 ); + ColLabGroup->layout()->setMargin( 0 ); + QGridLayout* ColLabGroupLayout = new QGridLayout( ColLabGroup->layout() ); + ColLabGroupLayout->setAlignment( Qt::AlignTop ); + ColLabGroupLayout->setSpacing( 6 ); + ColLabGroupLayout->setMargin( 11 ); + + QButtonGroup* TypeGroup = new QButtonGroup( 2, Qt::Vertical, ColLabGroup, "TypeGroup" ); + TypeGroup->setRadioButtonExclusive( true ); + TypeGroup->setFrameStyle( QFrame::NoFrame ); + TypeGroup->layout()->setMargin( 0 ); + + BicolorButton = new QRadioButton( tr( "BICOLOR" ), TypeGroup ); + RainbowButton = new QRadioButton( tr( "RAINBOW" ), TypeGroup ); + + ColorLabel = new QLabel (tr("LBL_NB_COLORS"), ColLabGroup, "ColorLabel"); + ColorSpin = new QSpinBox( 2, 256, 1, ColLabGroup ); + ColorSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + ColorSpin->setMinimumWidth( 70 ); + ColorSpin->setValue( 64 ); + + LabelLabel = new QLabel (tr("LBL_NB_LABELS"), ColLabGroup, "LabelLabel"); + LabelSpin = new QSpinBox( 2, 65, 1, ColLabGroup ); + LabelSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + LabelSpin->setMinimumWidth( 70 ); + LabelSpin->setValue( 5 ); + + ColLabGroupLayout->addMultiCellWidget( TypeGroup, 0, 1, 0, 0); + ColLabGroupLayout->addWidget( ColorLabel, 1, 1); + ColLabGroupLayout->addWidget( ColorSpin, 1, 2); + ColLabGroupLayout->addWidget( LabelLabel, 1, 3); + ColLabGroupLayout->addWidget( LabelSpin, 1, 4); + + //TopLayout->addWidget( ColLabGroup ); + + // Orientation ========================================================== + QButtonGroup* OrientGroup = new QButtonGroup (tr("ORIENTATION_GRP"), this, "OrientGroup"); + OrientGroup->setColumnLayout(0, Qt::Vertical ); + OrientGroup->layout()->setSpacing( 0 ); + OrientGroup->layout()->setMargin( 0 ); + QGridLayout* OrientGroupLayout = new QGridLayout( OrientGroup->layout() ); + OrientGroupLayout->setAlignment( Qt::AlignTop ); + OrientGroupLayout->setSpacing( 6 ); + OrientGroupLayout->setMargin( 11 ); + + RBvert = new QRadioButton (tr("VERTICAL_BTN"), OrientGroup, "RBvert"); + RBvert->setChecked( true ); + RBhori = new QRadioButton (tr("HORIZONTAL_BTN"), OrientGroup, "RBhori"); + OrientGroupLayout->addWidget( RBvert, 0, 0 ); + OrientGroupLayout->addWidget( RBhori, 0, 1 ); + + // TopLayout->addWidget( OrientGroup ); + + // Origin =============================================================== + QGroupBox* OriginGroup = new QGroupBox (tr("ORIGIN_GRP"), this, "OriginGroup"); + OriginGroup->setColumnLayout(0, Qt::Vertical ); + OriginGroup->layout()->setSpacing( 0 ); + OriginGroup->layout()->setMargin( 0 ); + QGridLayout* OriginGroupLayout = new QGridLayout( OriginGroup->layout() ); + OriginGroupLayout->setAlignment( Qt::AlignTop ); + OriginGroupLayout->setSpacing( 6 ); + OriginGroupLayout->setMargin( 11 ); + + QLabel* XLabel = new QLabel (tr("LBL_X"), OriginGroup, "XLabel"); + XSpin = new QtxDblSpinBox( 0.0, 1.0, 0.1, OriginGroup ); + XSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + XSpin->setMinimumWidth( 70 ); + XSpin->setValue( 0.01 ); + + QLabel* YLabel = new QLabel (tr("LBL_Y"), OriginGroup, "YLabel"); + YSpin = new QtxDblSpinBox( 0.0, 1.0, 0.1, OriginGroup ); + YSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + YSpin->setMinimumWidth( 70 ); + YSpin->setValue( 0.01 ); + + OriginGroupLayout->addWidget( XLabel, 0, 0); + OriginGroupLayout->addWidget( XSpin, 0, 1); + OriginGroupLayout->addWidget( YLabel, 0, 2); + OriginGroupLayout->addWidget( YSpin, 0, 3); + + //TopLayout->addWidget( OriginGroup ); + + // Dimensions ========================================================= + QGroupBox* DimGroup = new QGroupBox (tr("DIMENSIONS_GRP"), this, "DimGroup"); + DimGroup->setColumnLayout(0, Qt::Vertical ); + DimGroup->layout()->setSpacing( 0 ); + DimGroup->layout()->setMargin( 0 ); + QGridLayout* DimGroupLayout = new QGridLayout( DimGroup->layout() ); + DimGroupLayout->setAlignment( Qt::AlignTop ); + DimGroupLayout->setSpacing( 6 ); + DimGroupLayout->setMargin( 11 ); + + QLabel* WidthLabel = new QLabel (tr("LBL_WIDTH"), DimGroup, "WidthLabel"); + WidthSpin = new QtxDblSpinBox( 0.0, 1.0, 0.1, DimGroup ); + WidthSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + WidthSpin->setMinimumWidth( 70 ); + WidthSpin->setValue( 0.1 ); + + QLabel* HeightLabel = new QLabel (tr("LBL_HEIGHT"), DimGroup, "HeightLabel"); + HeightSpin = new QtxDblSpinBox( 0.0, 1.0, 0.1, DimGroup ); + HeightSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + HeightSpin->setMinimumWidth( 70 ); + HeightSpin->setValue( 0.8 ); + + QLabel* SpacingLabel = new QLabel (tr("LBL_SPACING"), DimGroup, "SpacingLabel"); + SpacingSpin = new QtxDblSpinBox( 0.0, 1.0, 0.01, DimGroup ); + SpacingSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + SpacingSpin->setMinimumWidth( 70 ); + SpacingSpin->setValue( 0.01 ); + + DimGroupLayout->addWidget( WidthLabel, 0, 0); + DimGroupLayout->addWidget( WidthSpin, 0, 1); + DimGroupLayout->addWidget( HeightLabel, 0, 2); + DimGroupLayout->addWidget( HeightSpin, 0, 3); + DimGroupLayout->addWidget( SpacingLabel, 0, 4); + DimGroupLayout->addWidget( SpacingSpin, 0, 5); + + //TopLayout->addWidget( DimGroup ); + + // Save check box =========================================================== + QHBox* aSaveBox = new QHBox(this); + if (!SetPref) { + CBSave = new QCheckBox (tr("SAVE_DEFAULT_CHK"), aSaveBox, "CBSave"); + //TopLayout->addWidget(CBSave); + } + else { + CBSave = 0; + } + myTextBtn = new QPushButton("Text properties...", aSaveBox); + myTextDlg = new VisuGUI_TextPrefDlg(this); + myTextDlg->setTitleVisible(!SetPref); + + // signals and slots connections =========================================== + connect( myRBLocal, SIGNAL( toggled( bool ) ), myCBDisplayed, SLOT( setEnabled( bool ) ) ); + connect( myRBGlobal, SIGNAL( clicked() ), this, SLOT( onSetDisplayGlobal() ) ); + connect( RainbowButton, SIGNAL( toggled( bool ) ), ColorLabel, SLOT( setEnabled( bool ) ) ); + connect( RainbowButton, SIGNAL( toggled( bool ) ), ColorSpin, SLOT( setEnabled( bool ) ) ); + connect( RainbowButton, SIGNAL( toggled( bool ) ), LabelLabel, SLOT( setEnabled( bool ) ) ); + connect( RainbowButton, SIGNAL( toggled( bool ) ), LabelSpin, SLOT( setEnabled( bool ) ) ); + connect( OrientGroup, SIGNAL( clicked( int ) ), this, SLOT( changeDefaults( int ) ) ); + connect( XSpin, SIGNAL( valueChanged( double ) ), this, SLOT( XYChanged( double ) ) ); + connect( YSpin, SIGNAL( valueChanged( double ) ), this, SLOT( XYChanged( double ) ) ); + connect( myTextBtn, SIGNAL( clicked() ), this, SLOT( onTextPref() ) ); + + changeDefaults( 0 ); + myIsStoreTextProp = false; +} + +void VisuGUI_GaussScalarBarPane::onSetDisplayGlobal() +{ + myCBDisplayed->setChecked( true ); +} + + +/** + * Initialise dialog box from presentation object + */ +void VisuGUI_GaussScalarBarPane::initFromPrsObject(VISU::GaussPoints_i* thePrs) { + myModeCombo->setCurrentItem(thePrs->GetScalarMode()); + setPosAndSize( thePrs->GetPosX(), + thePrs->GetPosY(), + thePrs->GetWidth(), + thePrs->GetHeight(), + thePrs->GetBarOrientation()); + + SpacingSpin->setValue(thePrs->GetSpacing()); + + bool activeLocal = thePrs->GetIsActiveLocalScalarBar(); + myRBLocal->setChecked( activeLocal ); + + myRBGlobal->setChecked( !activeLocal ); + myRBGlobal->setEnabled( thePrs->IsGlobalRangeDefined() ); + if( !thePrs->IsGlobalRangeDefined() ) + myRBLocal->setChecked( true ); + + myCBDisplayed->setEnabled( activeLocal ); + myCBDisplayed->setChecked( thePrs->GetIsDispGlobalScalarBar() ); + + bool bicolor = thePrs->GetGaussPointsPL()->GetBicolor(); + BicolorButton->setChecked( bicolor ); + RainbowButton->setChecked( !bicolor ); + ColorLabel->setEnabled( !bicolor ); + ColorSpin->setEnabled( !bicolor ); + LabelLabel->setEnabled( !bicolor ); + LabelSpin->setEnabled( !bicolor ); + + setScalarBarData( thePrs->GetNbColors(), thePrs->GetLabels() ); + + // Update myModeCombo + int aNbComp = thePrs->GetField()->myNbComp; + bool isScalarMode = (aNbComp > 1); + myModeCombo->clear(); + myModeCombo->insertItem(""); + const VISU::PField& aField = thePrs->GetField(); + const VISU::TNames& aCompNames = aField->myCompNames; + const VISU::TNames& aUnitNames = aField->myUnitNames; + for(int i = 0; i < aNbComp; i++){ + QString aComponent = QString(aCompNames[i]).simplifyWhiteSpace(); + if(aComponent.isNull() || aComponent == "") + aComponent = "Component " + QString::number(i+1); + else + aComponent = "[" + QString::number(i+1) + "] " + aComponent; + + QString anUnit = QString(aUnitNames[i]).simplifyWhiteSpace(); + if(anUnit.isNull() || anUnit == "") + anUnit = "-"; + + aComponent = aComponent + ", " + anUnit; + + myModeCombo->insertItem(aComponent); + } + // + myModeCombo->setCurrentItem(thePrs->GetScalarMode()); + if (aNbComp==1){ + myModeCombo->setCurrentItem(1); + } + // + myModeLbl->setEnabled(isScalarMode); + myModeCombo->setEnabled(isScalarMode); + + // "Title" + myTextDlg->setTitleText(QString(thePrs->GetTitle())); + + float R, G, B; + thePrs->GetTitleColor(&R, &G, &B); + + myTextDlg->myTitleFont->SetData(QColor((int)(R*255.), (int)(G*255.), (int)(B*255.)), + thePrs->GetTitFontType(), + thePrs->IsBoldTitle(), + thePrs->IsItalicTitle(), + thePrs->IsShadowTitle()); + + // "Labels" + thePrs->GetLabelColor(&R, &G, &B); + + myTextDlg->myLabelFont->SetData(QColor((int)(R*255.), (int)(G*255.), (int)(B*255.)), + thePrs->GetLblFontType(), + thePrs->IsBoldLabel(), + thePrs->IsItalicLabel(), + thePrs->IsShadowLabel()); +} + +/** + * Store values to presentation object + */ +int VisuGUI_GaussScalarBarPane::storeToPrsObject(VISU::GaussPoints_i* thePrs) { + thePrs->SetScalarMode(myModeCombo->currentItem()); + thePrs->SetPosition(XSpin->value(), YSpin->value()); + thePrs->SetSize(WidthSpin->value(), HeightSpin->value()); + thePrs->SetSpacing(SpacingSpin->value()); + thePrs->SetBarOrientation((RBvert->isChecked())? VISU::ScalarMap::VERTICAL : VISU::ScalarMap::HORIZONTAL); + thePrs->SetIsActiveLocalScalarBar(myRBLocal->isChecked()); + thePrs->SetIsDispGlobalScalarBar(myCBDisplayed->isChecked()); + thePrs->SetNbColors(ColorSpin->value()); + thePrs->SetLabels(LabelSpin->value()); + + thePrs->GetGaussPointsPL()->SetBicolor(BicolorButton->isChecked()); + + //if (isToSave()) storeToResources(); + + if (myIsStoreTextProp) { + // "Title" + thePrs->SetTitle(myTextDlg->getTitleText().latin1()); + + QColor aTitColor (255, 255, 255); + int aTitleFontFamily = VTK_ARIAL; + bool isTitleBold = false; + bool isTitleItalic = false; + bool isTitleShadow = false; + + myTextDlg->myTitleFont->GetData(aTitColor, aTitleFontFamily, + isTitleBold, isTitleItalic, isTitleShadow); + + thePrs->SetBoldTitle(isTitleBold); + thePrs->SetItalicTitle(isTitleItalic); + thePrs->SetShadowTitle(isTitleShadow); + thePrs->SetTitFontType(aTitleFontFamily); + thePrs->SetTitleColor(aTitColor.red()/255., + aTitColor.green()/255., + aTitColor.blue()/255.); + + // "Label" + QColor aLblColor (255, 255, 255); + int aLabelFontFamily = VTK_ARIAL; + bool isLabelBold = false; + bool isLabelItalic = false; + bool isLabelShadow = false; + + myTextDlg->myLabelFont->GetData(aLblColor, aLabelFontFamily, + isLabelBold, isLabelItalic, isLabelShadow); + + thePrs->SetBoldLabel(isLabelBold); + thePrs->SetItalicLabel(isLabelItalic); + thePrs->SetShadowLabel(isLabelShadow); + thePrs->SetLblFontType(aLabelFontFamily); + thePrs->SetLabelColor(aLblColor.red()/255., + aLblColor.green()/255., + aLblColor.blue()/255.); + } + + return 1; +} + +/*! + Called when orientation is changed +*/ +void VisuGUI_GaussScalarBarPane::changeDefaults( int ) +{ + if ( RBvert->isChecked() ) { + XSpin->setValue( myVerX ); + YSpin->setValue( myVerY ); + WidthSpin->setValue( myVerW ); + HeightSpin->setValue( myVerH ); + } + else { + XSpin->setValue( myHorX ); + YSpin->setValue( myHorY ); + WidthSpin->setValue( myHorW ); + HeightSpin->setValue( myHorH ); + } +} + +/*! + Called when X,Y position is changed +*/ +void VisuGUI_GaussScalarBarPane::XYChanged( double ) +{ + QtxDblSpinBox* snd = (QtxDblSpinBox*)sender(); + if ( snd == XSpin ) { + WidthSpin->setMaxValue( 1.0 - XSpin->value() ); + } + if ( snd == YSpin ) { + HeightSpin->setMaxValue( 1.0 - YSpin->value() ); + } +} + +/*! + Sets size and position +*/ +void VisuGUI_GaussScalarBarPane::setPosAndSize( double x, double y, double w, double h, bool vert ) +{ + if ( vert ) { + myVerX = x; + myVerY = y; + myVerW = w; + myVerH = h; + RBvert->setChecked( true ); + } + else { + myHorX = x; + myHorY = y; + myHorW = w; + myHorH = h; + RBhori->setChecked( true ); + } + changeDefaults( 0 ); +} + +/*! + Sets colors and labels number +*/ +void VisuGUI_GaussScalarBarPane::setScalarBarData( int colors, int labels ) +{ + ColorSpin->setValue( colors ); + LabelSpin->setValue( labels ); +} + +/*! + Gets orientation +*/ +int VisuGUI_GaussScalarBarPane::getOrientation() +{ + if (RBvert->isChecked() ) + return 1; + else + return 0; +} + + +void VisuGUI_GaussScalarBarPane::onTextPref() +{ + myIsStoreTextProp = myTextDlg->exec(); +} + + +/*! + * Constructor + */ +VisuGUI_GaussPointsDlg::VisuGUI_GaussPointsDlg(SalomeApp_Module* theModule, bool SetPref): + QDialog(VISU::GetDesktop(theModule), + "VisuGUI_GaussPointsDlg", true, + WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu), + myPrs(NULL) +{ + setName("VisuGUI_ScalarBarDlg"); + setCaption(SetPref ? tr("DLG_PREF_TITLE") : tr("DLG_PROP_TITLE")); + setSizeGripEnabled(TRUE); + + QVBoxLayout* TopLayout = new QVBoxLayout(this); + TopLayout->setSpacing(6); + TopLayout->setMargin(11); + + + // Presentation + QButtonGroup* PrsGroup = new QButtonGroup( 3, Qt::Horizontal, tr( "PRS_TITLE" ), this, "PrimitiveTypeGroup" ); + PrsGroup->setRadioButtonExclusive( true ); + PrsGroup->layout()->setMargin( 11 ); + PrsGroup->layout()->setSpacing(6); + + myResultsButton = new QRadioButton( tr( "RESULTS" ), PrsGroup ); + myGeometryButton = new QRadioButton( tr( "GEOMETRY" ), PrsGroup ); + myDefShapeButton = new QRadioButton( tr( "DEFORMED_SHAPE" ), PrsGroup ); + + QTabWidget* aTabBox = new QTabWidget (this); + + // Gauss points pane + QVBox* aBox = new QVBox (this); + aBox->setMargin(11); + aBox->setSpacing(6); + + // Primitive + myPrimitiveBox = new VVTK_PrimitiveBox( aBox ); + + // Size + mySizeBox = new VVTK_SizeBox( aBox ); + + // Deformed Shape + myDefShapeBox = new QGroupBox( tr( "DEFORMED_SHAPE_TITLE" ), aBox ); + myDefShapeBox->setColumnLayout(0, Qt::Vertical ); + myDefShapeBox->layout()->setSpacing( 0 ); + myDefShapeBox->layout()->setMargin( 0 ); + + QGridLayout* aDefShapeLayout = new QGridLayout( myDefShapeBox->layout() ); + aDefShapeLayout->setAlignment(Qt::AlignTop); + aDefShapeLayout->setSpacing(6); + aDefShapeLayout->setMargin(11); + + QLabel* aScaleLabel = new QLabel( tr( "SCALE_FACTOR" ), myDefShapeBox ); + myScaleSpinBox = new QtxDblSpinBox( 0.0, 10.0, 0.1, myDefShapeBox ); + + aDefShapeLayout->addWidget( aScaleLabel, 0, 0 ); + aDefShapeLayout->addWidget( myScaleSpinBox, 0, 1 ); + + // Scalar Bar pane + myScalarPane = new VisuGUI_GaussScalarBarPane(this, SetPref); + myScalarPane->setMargin(5); + + + connect( myResultsButton, SIGNAL( clicked() ), mySizeBox, SLOT( onToggleResults() ) ); + connect( myResultsButton, SIGNAL( toggled( bool ) ), myScalarPane, SLOT( setEnabled( bool ) ) ); + connect( myGeometryButton, SIGNAL( clicked() ), mySizeBox, SLOT( onToggleGeometry() ) ); + connect( myDefShapeButton, SIGNAL( toggled( bool ) ), this, SLOT( onToggleDefShape( bool ) ) ); + connect( myDefShapeButton, SIGNAL( toggled( bool ) ), myScalarPane, SLOT( setEnabled( bool ) ) ); + + aTabBox->addTab(aBox, tr("GAUSS_POINTS_TAB")); + aTabBox->addTab(myScalarPane, tr("SCALAR_BAR_TAB")); + + // Common buttons =========================================================== + 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 ); + + QPushButton* buttonOk = new QPushButton( tr( "&OK" ), GroupButtons, "buttonOk" ); + buttonOk->setAutoDefault( TRUE ); + buttonOk->setDefault( TRUE ); + GroupButtonsLayout->addWidget( buttonOk, 0, 0 ); + GroupButtonsLayout->addItem( new QSpacerItem( 5, 5, QSizePolicy::Expanding, QSizePolicy::Minimum ), 0, 1 ); + + QPushButton* buttonCancel = new QPushButton( tr( "&Cancel" ) , GroupButtons, "buttonCancel" ); + buttonCancel->setAutoDefault( TRUE ); + GroupButtonsLayout->addWidget( buttonCancel, 0, 2 ); + + TopLayout->addWidget( PrsGroup ); + TopLayout->addWidget( aTabBox ); + TopLayout->addWidget( GroupButtons ); + + connect( buttonOk, SIGNAL( clicked() ), this, SLOT( accept() ) ); + connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) ); +} + +void VisuGUI_GaussPointsDlg::initFromPrsObject( VISU::GaussPoints_i* thePrs ) +{ + bool isDeformed = thePrs->GetIsDeformed(); + myScaleSpinBox->setValue( thePrs->GetScaleFactor() ); + myDefShapeButton->setChecked( isDeformed ); + myDefShapeButton->setEnabled( thePrs->GetField()->myNbComp > 1 ); + onToggleDefShape( isDeformed ); + + bool isResults = thePrs->GetIsColored(); + myResultsButton->setChecked( isResults && !isDeformed ); + myGeometryButton->setChecked( !isResults && !isDeformed ); + + myPrimitiveBox->setPrimitiveType( thePrs->GetPrimitiveType() ); + myPrimitiveBox->setClampMaximum( thePrs->GetMaximumSupportedSize() ); + myPrimitiveBox->setClamp( thePrs->GetClamp() ); + myPrimitiveBox->setMainTexture( thePrs->GetMainTexture() ); + myPrimitiveBox->setAlphaTexture( thePrs->GetAlphaTexture() ); + myPrimitiveBox->setAlphaThreshold( thePrs->GetAlphaThreshold() ); + myPrimitiveBox->setResolution( thePrs->GetResolution() ); + myPrimitiveBox->setFaceLimit( thePrs->GetFaceLimit() ); + + mySizeBox->setType( isResults || isDeformed ? VVTK_SizeBox::Results : VVTK_SizeBox::Geometry ); + mySizeBox->setGeomSize( thePrs->GetGeomSize() ); + mySizeBox->setMinSize( thePrs->GetMinSize() ); + mySizeBox->setMaxSize( thePrs->GetMaxSize() ); + mySizeBox->setMagnification( thePrs->GetMagnification() ); + mySizeBox->setIncrement( thePrs->GetMagnificationIncrement() ); + mySizeBox->setColor( thePrs->GetColor() ); + + myScalarPane->initFromPrsObject(thePrs); + + myPrs = thePrs; +} + +int VisuGUI_GaussPointsDlg::storeToPrsObject( VISU::GaussPoints_i* thePrs ) +{ + thePrs->SetIsDeformed( myDefShapeButton->isChecked() ); + thePrs->SetScaleFactor( myScaleSpinBox->value() ); + + thePrs->SetPrimitiveType( myPrimitiveBox->getPrimitiveType() ); + + thePrs->SetClamp( myPrimitiveBox->getClamp() ); + + QString aMainTexture = myPrimitiveBox->getMainTexture(); + QString anAlphaTexture = myPrimitiveBox->getAlphaTexture(); + + aMainTexture = aMainTexture.isNull() ? thePrs->GetMainTexture() : aMainTexture; + anAlphaTexture = anAlphaTexture.isNull() ? thePrs->GetAlphaTexture() : anAlphaTexture; + + thePrs->SetTextures( aMainTexture, anAlphaTexture ); + + thePrs->SetAlphaThreshold( myPrimitiveBox->getAlphaThreshold() ); + + thePrs->SetResolution( myPrimitiveBox->getResolution() ); + thePrs->SetFaceLimit( myPrimitiveBox->getFaceLimit() ); + + bool isColored = !myGeometryButton->isChecked(); + if( isColored ) + { + thePrs->SetIsColored( true ); + thePrs->SetMinSize( mySizeBox->getMinSize() ); + thePrs->SetMaxSize( mySizeBox->getMaxSize() ); + } + else + { + thePrs->SetIsColored( false ); + thePrs->SetColor( mySizeBox->getColor() ); + thePrs->SetGeomSize( mySizeBox->getGeomSize() ); + } + + thePrs->SetMagnification( mySizeBox->getMagnification() ); + thePrs->SetMagnificationIncrement( mySizeBox->getIncrement() ); + + return myScalarPane->storeToPrsObject(thePrs); +} + +void VisuGUI_GaussPointsDlg::onToggleDefShape( bool on ) +{ + if( on )//myDefShapeButton->isChecked() ) + { + myDefShapeBox->show(); + mySizeBox->setType( VVTK_SizeBox::Results ); + } + else + myDefShapeBox->hide(); +} + +void VisuGUI_GaussPointsDlg::accept() +{ + if( myPrs && myPrimitiveBox->getPrimitiveType() == VISU_OpenGLPointSpriteMapper::GeomSphere ) + { + int aNumberOfFaces = myPrimitiveBox->getFaceNumber(); + int aNumberOfPoints = ( (vtkPolyData*)myPrs->GetGaussPointsPL()->GetInput() )->GetNumberOfCells(); + + if( aNumberOfFaces * aNumberOfPoints > myPrimitiveBox->getFaceLimit() ) + { + QString aWarning = "The number of faces needed to perform the 'Geometrical Sphere' primitive\n"; + aWarning.append( "presentation might be too important to ensure an acceptable frame rate.\n\n" ); + aWarning.append( "Can you please confirm that you want to continue anyway?" ); + if( SUIT_MessageBox::warn2( this, tr( "Warning" ), aWarning, tr( "&OK" ), tr( "&Cancel" ), 0, 1, 1 ) == 1 ) + return; + } + + /* + float aMemory = 50.0 * 1024.0 * (float)aNumberOfFaces * (float)aNumberOfPoints; + + cout << aNumberOfFaces << endl; + cout << aNumberOfPoints << endl; + cout << aMemory << endl; + + vtkSphereSource* aSphere = vtkSphereSource::New(); + aSphere->SetThetaResolution( myPrimitiveBox->getResolution() ); + aSphere->SetPhiResolution( myPrimitiveBox->getResolution() ); + aSphere->GetOutput()->Update(); + aSphere->GetOutput()->GetActualMemorySize(); + + aMemory = aSphere->GetOutput()->GetActualMemorySize() * 1024.0 * (float)aNumberOfPoints; + + if( VISU_PipeLine::CheckAvailableMemory( aMemory ) == 0 ) + { + SUIT_MessageBox::error1( this, "caption", "text", "ok" ); + return 0; + } + */ + } + + //if( myScalarPane->check() ) + QDialog::accept(); +} diff --git a/src/VISUGUI/VisuGUI_GaussPointsDlg.h b/src/VISUGUI/VisuGUI_GaussPointsDlg.h new file mode 100644 index 00000000..c845d013 --- /dev/null +++ b/src/VISUGUI/VisuGUI_GaussPointsDlg.h @@ -0,0 +1,162 @@ +// VISU VISUGUI : GUI of VISU 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 : VisuGUI_GaussPointsDlg.h +// Author : Oleg UVAROV +// Module : VISU + +#ifndef VISUGUI_GAUSSPOINTSDLS_H +#define VISUGUI_GAUSSPOINTSDLS_H + +#include "VisuGUI_ScalarBarDlg.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class SalomeApp_Module; +class VVTK_PrimitiveBox; +class VVTK_SizeBox; +class VisuGUI_TextPrefDlg; + +namespace VISU +{ + class GaussPoints_i; +} + +//! Specific Scalar Bar tab. +/*! Uses for set up Gauss Points Scalar Bars preferenses. */ +class VisuGUI_GaussScalarBarPane : public QVBox +{ + Q_OBJECT + + public: + VisuGUI_GaussScalarBarPane(QWidget* parent, bool SetPref); + ~VisuGUI_GaussScalarBarPane() {}; + + int getOrientation(); + void setPosAndSize( double x, double y, double w, double h, bool vert ); + double getX() {return XSpin->value();} + double getY() {return YSpin->value();} + double getWidth() {return WidthSpin->value();} + double getHeight() {return HeightSpin->value();} + void setScalarBarData( int colors, int labels ); + int getNbColors() {return ColorSpin->value();} + int getNbLabels() {return LabelSpin->value();} + bool isToSave() {return CBSave ? CBSave->isChecked() : false;} + + void initFromPrsObject(VISU::GaussPoints_i* thePrs); + int storeToPrsObject(VISU::GaussPoints_i* thePrs); + + protected: + QButtonGroup* RangeGroup; + + QRadioButton* RBhori; + QRadioButton* RBvert; + + QtxDblSpinBox* XSpin; + QtxDblSpinBox* YSpin; + + QtxDblSpinBox* WidthSpin; + QtxDblSpinBox* HeightSpin; + QtxDblSpinBox* SpacingSpin; + + QRadioButton* BicolorButton; + QRadioButton* RainbowButton; + QLabel* ColorLabel; + QSpinBox* ColorSpin; + QLabel* LabelLabel; + QSpinBox* LabelSpin; + + QCheckBox* CBSave; + QLabel* myModeLbl; + QComboBox* myModeCombo; + QPushButton* myTextBtn; + VisuGUI_TextPrefDlg* myTextDlg; + QRadioButton* myRBLocal; + QRadioButton* myRBGlobal; + QCheckBox* myCBDisplayed; + + double Imin, Imax; + double myHorX, myHorY, myHorW, myHorH; + double myVerX, myVerY, myVerW, myVerH; + int myRangeMode; + bool myIsStoreTextProp; + + private slots: + void changeDefaults( int ); + void changeRange( int ); + void XYChanged( double ); + void onTextPref(); + void onSetDisplayGlobal(); +}; + +//! Create Gauss Points Presentation Dialog. +/*! + * Uses for set up initial parameters of the Gauss Points + * presentation and edit them interactively. + */ +class VisuGUI_GaussPointsDlg : public QDialog +{ + Q_OBJECT + +public: + VisuGUI_GaussPointsDlg (SalomeApp_Module* theModule, bool SetPref = FALSE); + ~VisuGUI_GaussPointsDlg() {} + + //! Initializing dialog from the Gauss Points presentation. + void initFromPrsObject(VISU::GaussPoints_i* thePrs); + + //! Update Gauss Points presentation using parameters from the dialog. + int storeToPrsObject(VISU::GaussPoints_i* thePrs); + +protected slots: + void onToggleDefShape( bool ); + + void accept(); + +private: + VISU::GaussPoints_i* myPrs; + VisuGUI_GaussScalarBarPane* myScalarPane; + + QRadioButton* myResultsButton; + QRadioButton* myGeometryButton; + QRadioButton* myDefShapeButton; + + VVTK_PrimitiveBox* myPrimitiveBox; + VVTK_SizeBox* mySizeBox; + + QGroupBox* myDefShapeBox; + QtxDblSpinBox* myScaleSpinBox; +}; + +#endif // VISUGUI_GAUSSPOINTSDLS_H diff --git a/src/VISUGUI/VisuGUI_Module.cxx b/src/VISUGUI/VisuGUI_Module.cxx new file mode 100644 index 00000000..dfd14a21 --- /dev/null +++ b/src/VISUGUI/VisuGUI_Module.cxx @@ -0,0 +1,1658 @@ + +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : VisuGUI_Module.cxx +// Author : Laurent CORNABE +// Module : VISU +// $Header$ + +#include "VisuGUI_Module.h" + +#include "QtxPopupMgr.h" + +#include "SUIT_Study.h" +#include "SUIT_Desktop.h" +#include "SUIT_ResourceMgr.h" +#include "SUIT_Accel.h" +#include "SUIT_Session.h" + +#include "CAM_Module.h" + +#include "SALOME_Event.hxx" +#include "SalomeApp_Application.h" +#include "LightApp_SelectionMgr.h" +#include "LightApp_VTKSelector.h" +#include "LightApp_Preferences.h" + +#include "VVTK_ViewManager.h" +#include "VVTK_ViewWindow.h" +#include "VVTK_ViewModel.h" + +#include "SVTK_ViewModel.h" +#include "SVTK_ViewManager.h" +#include "SVTK_MainWindow.h" +#include "SVTK_RenderWindowInteractor.h" +#include "VISU_Event.h" + +#include "VisuGUI_Prs3dTools.h" + +#include "VISU_GaussPoints_i.hh" +#include "VISU_GaussPtsAct.h" +#include "VisuGUI_GaussPointsDlg.h" + +#include "VISU_Gen_i.hh" +#include "VISU_Result_i.hh" +#include "VISU_CutLines_i.hh" + +#include "VISU_Actor.h" +#include "VisuGUI_Tools.h" +#include "VisuGUI_ActionsDef.h" + +#include "VISU_WidgetCtrl.hxx" +#include "VISU_PlanesWidget.hxx" +#include "VISU_SphereWidget.hxx" + +#include "SalomeApp_Study.h" +#include "VVTK_MainWindow.h" +#include "VISU_View_i.hh" + +#include + +#include +#include +#include + +#include + +#ifdef _DEBUG_ +static int MYDEBUG = 0; +#else +static int MYDEBUG = 0; +#endif + +#define GAUSS_NEW_VIEWER 5100 +#define GAUSS_CREATE_PRS 5200 +#define GAUSS_RENAME 5210 +#define GAUSS_EDIT_PRS 5300 +#define GAUSS_COPY_PRS 5310 +#define GAUSS_ERASE_PRS 5400 +#define GAUSS_DISPLAY_PRS 5500 +#define GAUSS_DISPLAY_ONLY_PRS 5600 + +#define GAUSS_SAVE_CONFIGURATION 5700 +#define GAUSS_OVERWRITE_CONFIGURATION 5701 +#define GAUSS_RESTORE_CONFIGURATION 5702 +#define GAUSS_RENAME_CONFIGURATION 5703 + +void +CreateCurves( SalomeApp_Module* theModule, + VISU::CutLines_i* thePrs, + QDialog* theDlg, + const bool theCreate = true ); + +using namespace VISU; + +namespace VISU +{ + //--------------------------------------------------------------- + class Viewer + { + VVTK_ViewManager* myViewManager; + LightApp_VTKSelector* mySelector; + public: + + Viewer(VisuGUI_Module* theModule, TViewerMap& theViewerMap) + { + SalomeApp_Application* anApp = theModule->getApp(); + myViewManager = new VVTK_ViewManager( anApp->activeStudy(), anApp->desktop() ); + VVTK_Viewer* aViewer = (VVTK_Viewer*)myViewManager->getViewModel(); + mySelector = new LightApp_VTKSelector( aViewer, anApp->selectionMgr() ); + anApp->addViewManager( myViewManager ); + + theViewerMap.insert(TViewerMap::value_type(myViewManager,PViewer(this))); + QObject::connect( myViewManager, SIGNAL( lastViewClosed( SUIT_ViewManager* ) ), + theModule, SLOT( onLastViewClosed( SUIT_ViewManager* ) ) ); + + //aViewer->setBackgroundColor( Qt::darkGreen ); + myViewManager->createViewWindow(); + } + + VVTK_ViewManager* getViewManager() + { + return myViewManager; + } + + virtual + ~Viewer() + { + } + }; + + + //--------------------------------------------------------------- + typedef void (SUIT_ViewWindow::* TViewVisibility)(); + void + SetViewVisibility(const TViewerMap& theViewerMap, + TViewVisibility theViewVisibility) + { + TViewerMap::const_iterator anIter = theViewerMap.begin(); + for(; anIter != theViewerMap.end(); anIter++){ + if(SUIT_ViewManager* aViewManager = anIter->first){ + QPtrVector aViews = aViewManager->getViews(); + int aSize = aViews.size(); + for(int anId = 0; anId < aSize; anId++){ + if(SUIT_ViewWindow* aView = aViews[anId]){ + (aView->* theViewVisibility)(); + } + } + } + } + } + +} + +//--------------------------------------------------------------- +VisuGUI_Module +::VisuGUI_Module() : + VisuGUI() +{ +} + + +//--------------------------------------------------------------- +VisuGUI_Module +::~VisuGUI_Module() +{ +} + + +//--------------------------------------------------------------- +void +VisuGUI_Module +::initialize( CAM_Application* theApp ) +{ + VisuGUI::initialize( theApp ); + + SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr(); + + QPixmap aPixmap; + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_GAUSS_NEW_VIEWER")); + createAction( GAUSS_NEW_VIEWER, + tr("MEN_GAUSS_NEW_VIEWER"), + aPixmap, + tr("MEN_GAUSS_NEW_VIEWER"), + tr("MEN_GAUSS_NEW_VIEWER"), + ALT+Key_S, + this, + false, + this, + SLOT(onCreateViewManager())); + int windowMenu = createMenu( tr( "MEN_DESK_WINDOW" ), -1, 100 ); + int newWinMenu = createMenu( tr( "MEN_DESK_NEWWINDOW" ), windowMenu, -1, 0 ); + createMenu( action( GAUSS_NEW_VIEWER ), newWinMenu, -1 ); + + // Add actions to menus + createMenu( tr( "MEN_GAUSS" ), -1, -1, 30 ); + //createMenu( GAUSS_CREATE_PRS, aMenuId, 10 ); + + QString aViewerType = VVTK_Viewer::Type(); + SUIT_Accel* accel = getApp()->accel(); + accel->setActionKey( SUIT_Accel::PanLeft, Key_Left, aViewerType ); + accel->setActionKey( SUIT_Accel::PanRight, Key_Right, aViewerType ); + accel->setActionKey( SUIT_Accel::PanUp, Key_Up, aViewerType ); + accel->setActionKey( SUIT_Accel::PanDown, Key_Down, aViewerType ); + accel->setActionKey( SUIT_Accel::ZoomIn, Key_PageUp, aViewerType ); + accel->setActionKey( SUIT_Accel::ZoomOut, Key_PageDown, aViewerType ); + accel->setActionKey( SUIT_Accel::RotateLeft, CTRL+Key_Left, aViewerType ); + accel->setActionKey( SUIT_Accel::RotateRight, CTRL+Key_Right, aViewerType ); + accel->setActionKey( SUIT_Accel::RotateUp, CTRL+Key_Up, aViewerType ); + accel->setActionKey( SUIT_Accel::RotateDown, CTRL+Key_Down, aViewerType ); + accel->setActionKey( SVTK::PlusSpeedIncrementEvent, Key_Plus, aViewerType ); + accel->setActionKey( SVTK::MinusSpeedIncrementEvent, Key_Minus, aViewerType ); + + connect( getApp(), SIGNAL( viewManagerAdded( SUIT_ViewManager* ) ), this, SLOT( OnViewManagerAdded (SUIT_ViewManager*) ) ); + + // Prepare popup menus + QtxPopupMgr* mgr = popupMgr(); + QString aRule; + + aPixmap = aResourceMgr->loadPixmap( "VISU", tr( "ICON_GAUSS_POINTS" ) ); + createAction( GAUSS_CREATE_PRS, tr("MEN_GAUSS_CREATE_PRS"), aPixmap, + tr("MEN_GAUSS_CREATE_PRS"), "", 0, this, false, + this, SLOT(OnCreateGaussPoints())); + mgr->insert( action( GAUSS_CREATE_PRS ), -1, 0, -1 ); + mgr->setRule( action( GAUSS_CREATE_PRS ), + "client='ObjectBrowser' and selcount=1 " + "and type='VISU::TTIMESTAMP' " + "and $medEntity in {'EDGE_ENTITY' 'FACE_ENTITY' 'CELL_ENTITY'} " + "and $medSource in {'eImportFile' 'eCopyAndImportFile'} ", + true ); + + createMenu( action( GAUSS_CREATE_PRS ), createMenu( tr( "MEN_VISUALISATION" ), -1 ), -1 ); + createTool( GAUSS_CREATE_PRS, createTool( tr( "TOOL_VISUALISATION" ) ), -1 ); + + createAction( GAUSS_RENAME, VisuGUI::tr("MEN_RENAME"), QIconSet(), + VisuGUI::tr("MEN_RENAME"), "", 0, this, false, + this, SLOT(OnRename())); + mgr->insert( action( GAUSS_RENAME ), -1, 0, -1 ); + mgr->setRule( action( GAUSS_RENAME ), + "selcount=1 and type='VISU::TGAUSSPOINTS'", + true ); + + createAction( GAUSS_EDIT_PRS, VisuGUI::tr("MEN_EDIT_PRS"), QIconSet(), + VisuGUI::tr("MEN_EDIT_PRS"), "", 0, this, false, + this, SLOT(OnEditGaussPoints())); + mgr->insert( action( GAUSS_EDIT_PRS ), -1, 0, -1 ); + mgr->setRule( action( GAUSS_EDIT_PRS ), + "selcount=1 and type='VISU::TGAUSSPOINTS'", + true ); + + createAction( GAUSS_COPY_PRS, VisuGUI::tr("MEN_COPY_PRS"), QIconSet(), + VisuGUI::tr("MEN_COPY_PRS"), "", 0, this, false, + this, SLOT(OnCopyPresentation())); + mgr->insert( action( GAUSS_COPY_PRS ), -1, 0, -1 ); + mgr->setRule( action( GAUSS_COPY_PRS ), + "selcount=1 and type='VISU::TGAUSSPOINTS'", + true ); + action( GAUSS_COPY_PRS )->setEnabled(false); + + aRule = "(selcount>0 and type='VISU::TGAUSSPOINTS')"; + + createAction( GAUSS_ERASE_PRS, VisuGUI::tr("MEN_ERASE"), QIconSet(), + VisuGUI::tr("MEN_ERASE"), "", 0, this, false, + this, SLOT(OnErasePrs())); + mgr->insert( action( GAUSS_ERASE_PRS ), -1, -1, -1 ); // erase + mgr->setRule( action( GAUSS_ERASE_PRS ), + aRule + " and (isVisible=true)", true ); + + createAction( GAUSS_DISPLAY_PRS, VisuGUI::tr("MEN_DISPLAY"), QIconSet(), + VisuGUI::tr("MEN_DISPLAY"), "", 0, this, false, + this, SLOT(OnDisplayPrs())); + mgr->insert( action( GAUSS_DISPLAY_PRS ), -1, -1, -1 ); // display + mgr->setRule( action( GAUSS_DISPLAY_PRS ), + aRule + " and (isVisible=false)", true ); + + createAction( GAUSS_DISPLAY_ONLY_PRS, VisuGUI::tr("MEN_DISPLAY_ONLY"), QIconSet(), + VisuGUI::tr("MEN_DISPLAY_ONLY"), "", 0, this, false, + this, SLOT(OnDisplayOnlyPrs())); + mgr->insert( action( GAUSS_DISPLAY_ONLY_PRS ), -1, -1, -1 ); // display only + mgr->setRule( action( GAUSS_DISPLAY_ONLY_PRS ), + aRule, true ); + + createAction( GAUSS_RENAME_CONFIGURATION, VisuGUI::tr("MEN_RENAME"), QIconSet(), + VisuGUI::tr("MEN_RENAME"), "", 0, this, false, + this, SLOT(OnRename())); + mgr->insert( action( GAUSS_RENAME_CONFIGURATION ), -1, -1, -1 ); + mgr->setRule( action( GAUSS_RENAME_CONFIGURATION ), "selcount=1 and type='VISU::TGAUSSVIEW'", true ); + + createAction( GAUSS_SAVE_CONFIGURATION, tr("MEN_SAVE_CONFIGURATION"), QIconSet(), + tr("MEN_SAVE_CONFIGURATION"), "", 0, this, false, + this, SLOT(OnSaveConfiguration())); + mgr->insert( action( GAUSS_SAVE_CONFIGURATION ), -1, -1, -1 ); + mgr->setRule( action( GAUSS_SAVE_CONFIGURATION ), "selcount>=0 and client='VVTK' and activeView='VVTK'", true ); + + createAction( GAUSS_OVERWRITE_CONFIGURATION, tr("MEN_OVERWRITE_CONFIGURATION"), QIconSet(), + tr("MEN_OVERWRITE_CONFIGURATION"), "", 0, this, false, + this, SLOT(OnOverwriteConfiguration())); + mgr->insert( action( GAUSS_OVERWRITE_CONFIGURATION ), -1, -1, -1 ); + mgr->setRule( action( GAUSS_OVERWRITE_CONFIGURATION ), + "selcount>0 and type='VISU::TGAUSSVIEW' and activeView='VVTK'", true ); + + createAction( GAUSS_RESTORE_CONFIGURATION, tr("MEN_RESTORE_CONFIGURATION"), QIconSet(), + tr("MEN_RESTORE_CONFIGURATION"), "", 0, this, false, + this, SLOT(OnRestoreConfiguration())); + mgr->insert( action( GAUSS_RESTORE_CONFIGURATION ), -1, -1, -1 ); + mgr->setRule( action( GAUSS_RESTORE_CONFIGURATION ), + "selcount=1 and type='VISU::TGAUSSVIEW'", true ); +} + +//--------------------------------------------------------------- +bool +VisuGUI_Module +::activateModule( SUIT_Study* theStudy ) +{ + VisuGUI::activateModule( theStudy ); + + SetViewVisibility(myViewerMap,&SUIT_ViewWindow::show); + + return true; +} + + +//--------------------------------------------------------------- +bool +VisuGUI_Module +::deactivateModule( SUIT_Study* theStudy ) +{ + VisuGUI::deactivateModule( theStudy ); + + SetViewVisibility(myViewerMap,&SUIT_ViewWindow::hide); + + return true; +} + + +//--------------------------------------------------------------- +SUIT_ViewManager* +VisuGUI_Module +::onCreateViewManager() +{ + Viewer* aViewer = new Viewer( this, myViewerMap ); + return aViewer->getViewManager(); +} + + +//--------------------------------------------------------------- +void +VisuGUI_Module +::onLastViewClosed(SUIT_ViewManager* theViewManager) +{ + myViewerMap.erase(theViewManager); +} + + +//--------------------------------------------------------------- +void +VisuGUI_Module +::createPreferences() +{ + VisuGUI::createPreferences(); + + createGaussPointsPreferences(); + createInsideCursorPreferences(); + createOutsideCursorPreferences(); + createPickingPreferences(); + createSpaceMousePreferences(); + createRecorderPreferences(); +} + + +//--------------------------------------------------------------- +void +VisuGUI_Module +::createGaussPointsPreferences() +{ + int gaussTab = addPreference( tr( "VISU_GAUSS_PREF_TAB_TTL" ) ); + int primitiveGr = addPreference( tr( "VISU_GAUSS_PREF_PRIMITIVE_GROUP_TTL" ), gaussTab ); + setPreferenceProperty( primitiveGr, "columns", 1 ); + + int primitiveTypePref = addPreference( tr( "VISU_GAUSS_PREF_PRIMITIVE_TYPE" ), primitiveGr, + LightApp_Preferences::Selector, "VISU", "point_sprite_primitive_type" ); + + QStringList values; + values.append( tr( "VISU_GAUSS_PREF_POINTSPRITE" ) ); + values.append( tr( "VISU_GAUSS_PREF_OPENGLPOINT" ) ); + values.append( tr( "VISU_GAUSS_PREF_GEOMSPHERE" ) ); + QValueList indices; + indices.append( 0 ); + indices.append( 1 ); + indices.append( 2 ); + setPreferenceProperty( primitiveTypePref, "strings", values ); + setPreferenceProperty( primitiveTypePref, "indexes", indices ); + + int clampPref = addPreference( tr( "VISU_GAUSS_PREF_CLAMP" ), primitiveGr, + LightApp_Preferences::IntSpin, "VISU", "point_sprite_clamp" ); + setPreferenceProperty( clampPref, "min", 1 ); + setPreferenceProperty( clampPref, "max", 512 ); + + addPreference( tr( "VISU_GAUSS_PREF_MAIN_TEXTURE" ), primitiveGr, + LightApp_Preferences::File, "VISU", "point_sprite_main_texture" ); + + addPreference( tr( "VISU_GAUSS_PREF_ALPHA_TEXTURE" ), primitiveGr, + LightApp_Preferences::File, "VISU", "point_sprite_alpha_texture" ); + + int alphaThresholdPref = addPreference( tr( "VISU_GAUSS_PREF_ALPHA_THRESHOLD" ), primitiveGr, + LightApp_Preferences::DblSpin, "VISU", "point_sprite_alpha_threshold" ); + setPreferenceProperty( alphaThresholdPref, "min", 0.0 ); + setPreferenceProperty( alphaThresholdPref, "max", 1.0 ); + setPreferenceProperty( alphaThresholdPref, "step", 0.1 ); + + int resolutionPref = addPreference( tr( "VISU_GAUSS_PREF_RESOLUTION" ), primitiveGr, + LightApp_Preferences::IntSpin, "VISU", "geom_sphere_resolution" ); + setPreferenceProperty( resolutionPref, "min", 3 ); + setPreferenceProperty( resolutionPref, "max", 100 ); + + int faceLimitPref = addPreference( tr( "VISU_GAUSS_PREF_FACE_LIMIT" ), primitiveGr, + LightApp_Preferences::IntSpin, "VISU", "geom_sphere_face_limit" ); + setPreferenceProperty( faceLimitPref, "min", 10 ); + setPreferenceProperty( faceLimitPref, "max", 1000000 ); + + int sizeGr = addPreference( tr( "VISU_GAUSS_PREF_SIZE_GROUP_TTL" ), gaussTab ); + setPreferenceProperty( sizeGr, "columns", 2 ); + + int minSizePref = addPreference( tr( "VISU_GAUSS_PREF_MIN_SIZE" ), sizeGr, + LightApp_Preferences::IntSpin, "VISU", "point_sprite_min_size" ); + setPreferenceProperty( minSizePref, "min", 1 ); + setPreferenceProperty( minSizePref, "max", 100 ); + + int maxSizePref = addPreference( tr( "VISU_GAUSS_PREF_MAX_SIZE" ), sizeGr, + LightApp_Preferences::IntSpin, "VISU", "point_sprite_max_size" ); + setPreferenceProperty( maxSizePref, "min", 1 ); + setPreferenceProperty( maxSizePref, "max", 100 ); + + int magnificationPref = addPreference( tr( "VISU_GAUSS_PREF_MAGNIFICATION" ), sizeGr, + LightApp_Preferences::IntSpin, "VISU", "point_sprite_magnification" ); + setPreferenceProperty( magnificationPref, "min", 10 ); + setPreferenceProperty( magnificationPref, "max", 1000 ); + + int incrementPref = addPreference( tr( "VISU_GAUSS_PREF_INCREMENT" ), sizeGr, + LightApp_Preferences::DblSpin, "VISU", "point_sprite_increment" ); + setPreferenceProperty( incrementPref, "min", 0.01 ); + setPreferenceProperty( incrementPref, "max", 10 ); + setPreferenceProperty( incrementPref, "step", 0.1 ); + + int geomGr = addPreference( tr( "VISU_GAUSS_PREF_GEOM_GROUP_TTL" ), gaussTab ); + setPreferenceProperty( geomGr, "columns", 1 ); + + int sizePref = addPreference( tr( "VISU_GAUSS_PREF_SIZE" ), geomGr, + LightApp_Preferences::IntSpin, "VISU", "point_sprite_size" ); + setPreferenceProperty( sizePref, "min", 1 ); + setPreferenceProperty( sizePref, "max", 100 ); + + addPreference( tr( "VISU_GAUSS_PREF_COLOR" ), geomGr, + LightApp_Preferences::Color, "VISU", "point_sprite_color" ); + + // ScalarBar Preferences + int scalarBarGr = addPreference( tr( "VISU_GAUSS_SCALAR_BAR_PREF_GROUP_TTL" ), gaussTab ); + setPreferenceProperty( scalarBarGr, "columns", 1 ); + + int activeBarPref = addPreference( tr( "VISU_GAUSS_PREF_ACTIVE_BAR" ), scalarBarGr, + LightApp_Preferences::Selector, "VISU", "scalar_bar_active_local" ); + + values.clear(); + values.append( tr( "VISU_GAUSS_PREF_LOCAL" ) ); + values.append( tr( "VISU_GAUSS_PREF_GLOBAL" ) ); + indices.clear(); + indices.append( 0 ); + indices.append( 1 ); + setPreferenceProperty( activeBarPref, "strings", values ); + setPreferenceProperty( activeBarPref, "indexes", indices ); + + addPreference( tr( "VISU_GAUSS_PREF_DISPLAY_GLOBAL" ), scalarBarGr, + LightApp_Preferences::Bool, "VISU", "scalar_bar_display_global" ); + + int colorPref = addPreference( tr( "VISU_GAUSS_PREF_SCALAR_BAR_MODE" ), scalarBarGr, + LightApp_Preferences::Selector, "VISU", "scalar_bar_bicolor" ); + + values.clear(); + values.append( tr( "VISU_GAUSS_PREF_BICOLOR" ) ); + values.append( tr( "VISU_GAUSS_PREF_RAINBOW" ) ); + indices.clear(); + indices.append( 0 ); + indices.append( 1 ); + setPreferenceProperty( colorPref, "strings", values ); + setPreferenceProperty( colorPref, "indexes", indices ); + + int spacingPref = addPreference( tr( "VISU_GAUSS_PREF_SPACING" ), scalarBarGr, + LightApp_Preferences::DblSpin, "VISU", "scalar_bar_spacing" ); + setPreferenceProperty( spacingPref, "min", 0.01 ); + setPreferenceProperty( spacingPref, "max", 1.0 ); + setPreferenceProperty( spacingPref, "step", 0.01 ); +} + + +//--------------------------------------------------------------- +void +VisuGUI_Module +::createInsideCursorPreferences() +{ + int insideCursorTab = addPreference( tr( "VISU_GAUSS_INSIDE_CURSOR_PREF_TAB_TTL" ) ); + + int primitiveGr = addPreference( tr( "VISU_GAUSS_PREF_PRIMITIVE_GROUP_TTL" ), insideCursorTab ); + setPreferenceProperty( primitiveGr, "columns", 1 ); + + int primitiveTypePref = addPreference( tr( "VISU_GAUSS_PREF_PRIMITIVE_TYPE" ), primitiveGr, + LightApp_Preferences::Selector, "VISU", "inside_point_sprite_primitive_type" ); + + QStringList values; + values.append( tr( "VISU_GAUSS_PREF_POINTSPRITE" ) ); + values.append( tr( "VISU_GAUSS_PREF_OPENGLPOINT" ) ); + values.append( tr( "VISU_GAUSS_PREF_GEOMSPHERE" ) ); + QValueList indices; + indices.append( 0 ); + indices.append( 1 ); + indices.append( 2 ); + setPreferenceProperty( primitiveTypePref, "strings", values ); + setPreferenceProperty( primitiveTypePref, "indexes", indices ); + + int clampPref = addPreference( tr( "VISU_GAUSS_PREF_CLAMP" ), primitiveGr, + LightApp_Preferences::IntSpin, "VISU", "inside_point_sprite_clamp" ); + setPreferenceProperty( clampPref, "min", 1 ); + setPreferenceProperty( clampPref, "max", 512 ); + + addPreference( tr( "VISU_GAUSS_PREF_MAIN_TEXTURE" ), primitiveGr, + LightApp_Preferences::File, "VISU", "inside_point_sprite_main_texture" ); + + addPreference( tr( "VISU_GAUSS_PREF_ALPHA_TEXTURE" ), primitiveGr, + LightApp_Preferences::File, "VISU", "inside_point_sprite_alpha_texture" ); + + int alphaThresholdPref = addPreference( tr( "VISU_GAUSS_PREF_ALPHA_THRESHOLD" ), primitiveGr, + LightApp_Preferences::DblSpin, "VISU", "inside_point_sprite_alpha_threshold" ); + setPreferenceProperty( alphaThresholdPref, "min", 0.0 ); + setPreferenceProperty( alphaThresholdPref, "max", 1.0 ); + setPreferenceProperty( alphaThresholdPref, "step", 0.1 ); + + int resolutionPref = addPreference( tr( "VISU_GAUSS_PREF_RESOLUTION" ), primitiveGr, + LightApp_Preferences::IntSpin, "VISU", "inside_geom_sphere_resolution" ); + setPreferenceProperty( resolutionPref, "min", 3 ); + setPreferenceProperty( resolutionPref, "max", 100 ); + + int faceLimitPref = addPreference( tr( "VISU_GAUSS_PREF_FACE_LIMIT" ), primitiveGr, + LightApp_Preferences::IntSpin, "VISU", "inside_geom_sphere_face_limit" ); + setPreferenceProperty( faceLimitPref, "min", 10 ); + setPreferenceProperty( faceLimitPref, "max", 1000000 ); + + int sizeGr = addPreference( tr( "VISU_GAUSS_PREF_SIZE_GROUP_TTL" ), insideCursorTab ); + setPreferenceProperty( sizeGr, "columns", 2 ); + + int minSizePref = addPreference( tr( "VISU_GAUSS_PREF_MIN_SIZE" ), sizeGr, + LightApp_Preferences::IntSpin, "VISU", "inside_point_sprite_min_size" ); + setPreferenceProperty( minSizePref, "min", 1 ); + setPreferenceProperty( minSizePref, "max", 100 ); + + int maxSizePref = addPreference( tr( "VISU_GAUSS_PREF_MAX_SIZE" ), sizeGr, + LightApp_Preferences::IntSpin, "VISU", "inside_point_sprite_max_size" ); + setPreferenceProperty( maxSizePref, "min", 1 ); + setPreferenceProperty( maxSizePref, "max", 100 ); + + int magnificationGr = addPreference( tr( "VISU_GAUSS_PREF_MAGNIFICATION_GROUP_TTL" ), insideCursorTab ); + setPreferenceProperty( magnificationGr, "columns", 2 ); + + int magnificationPref = addPreference( tr( "VISU_GAUSS_PREF_MAGNIFICATION" ), magnificationGr, + LightApp_Preferences::IntSpin, "VISU", "inside_point_sprite_magnification" ); + setPreferenceProperty( magnificationPref, "min", 10 ); + setPreferenceProperty( magnificationPref, "max", 1000 ); + + int incrementPref = addPreference( tr( "VISU_GAUSS_PREF_INCREMENT" ), magnificationGr, + LightApp_Preferences::DblSpin, "VISU", "inside_point_sprite_increment" ); + setPreferenceProperty( incrementPref, "min", 0.01 ); + setPreferenceProperty( incrementPref, "max", 10 ); + setPreferenceProperty( incrementPref, "step", 0.1 ); + +} + + +//--------------------------------------------------------------- +void +VisuGUI_Module +::createOutsideCursorPreferences() +{ + int outsideCursorTab = addPreference( tr( "VISU_GAUSS_OUTSIDE_CURSOR_PREF_TAB_TTL" ) ); + + int primitiveGr = addPreference( tr( "VISU_GAUSS_PREF_PRIMITIVE_GROUP_TTL" ), outsideCursorTab ); + setPreferenceProperty( primitiveGr, "columns", 1 ); + + int primitiveTypePref = addPreference( tr( "VISU_GAUSS_PREF_PRIMITIVE_TYPE" ), primitiveGr, + LightApp_Preferences::Selector, "VISU", "outside_point_sprite_primitive_type" ); + + QStringList values; + values.append( tr( "VISU_GAUSS_PREF_POINTSPRITE" ) ); + values.append( tr( "VISU_GAUSS_PREF_OPENGLPOINT" ) ); + values.append( tr( "VISU_GAUSS_PREF_GEOMSPHERE" ) ); + QValueList indices; + indices.append( 0 ); + indices.append( 1 ); + indices.append( 2 ); + setPreferenceProperty( primitiveTypePref, "strings", values ); + setPreferenceProperty( primitiveTypePref, "indexes", indices ); + + int clampPref = addPreference( tr( "VISU_GAUSS_PREF_CLAMP" ), primitiveGr, + LightApp_Preferences::IntSpin, "VISU", "outside_point_sprite_clamp" ); + setPreferenceProperty( clampPref, "min", 1 ); + setPreferenceProperty( clampPref, "max", 512 ); + + addPreference( tr( "VISU_GAUSS_PREF_MAIN_TEXTURE" ), primitiveGr, + LightApp_Preferences::File, "VISU", "outside_point_sprite_main_texture" ); + + addPreference( tr( "VISU_GAUSS_PREF_ALPHA_TEXTURE" ), primitiveGr, + LightApp_Preferences::File, "VISU", "outside_point_sprite_alpha_texture" ); + + int alphaThresholdPref = addPreference( tr( "VISU_GAUSS_PREF_ALPHA_THRESHOLD" ), primitiveGr, + LightApp_Preferences::DblSpin, "VISU", "outside_point_sprite_alpha_threshold" ); + setPreferenceProperty( alphaThresholdPref, "min", 0.0 ); + setPreferenceProperty( alphaThresholdPref, "max", 1.0 ); + setPreferenceProperty( alphaThresholdPref, "step", 0.1 ); + + int resolutionPref = addPreference( tr( "VISU_GAUSS_PREF_RESOLUTION" ), primitiveGr, + LightApp_Preferences::IntSpin, "VISU", "outside_geom_sphere_resolution" ); + setPreferenceProperty( resolutionPref, "min", 3 ); + setPreferenceProperty( resolutionPref, "max", 100 ); + + int faceLimitPref = addPreference( tr( "VISU_GAUSS_PREF_FACE_LIMIT" ), primitiveGr, + LightApp_Preferences::IntSpin, "VISU", "outside_geom_sphere_face_limit" ); + setPreferenceProperty( faceLimitPref, "min", 10 ); + setPreferenceProperty( faceLimitPref, "max", 1000000 ); + + int sizeGr = addPreference( tr( "VISU_GAUSS_PREF_SIZE_GROUP_TTL" ), outsideCursorTab ); + + int sizePref = addPreference( tr( "VISU_GAUSS_PREF_SIZE" ), sizeGr, + LightApp_Preferences::IntSpin, "VISU", "outside_point_sprite_size" ); + setPreferenceProperty( sizePref, "min", 1 ); + setPreferenceProperty( sizePref, "max", 100 ); + + int colorGr = addPreference( tr( "VISU_GAUSS_PREF_COLOR_GROUP_TTL" ), outsideCursorTab ); + setPreferenceProperty( colorGr, "columns", 1 ); + + addPreference( tr( "VISU_GAUSS_PREF_UNIFORM_COLOR" ), colorGr, + LightApp_Preferences::Bool, "VISU", "outside_point_sprite_uniform" ); + + addPreference( tr( "VISU_GAUSS_PREF_COLOR" ), colorGr, + LightApp_Preferences::Color, "VISU", "outside_point_sprite_color" ); +} + + +//--------------------------------------------------------------- +void +VisuGUI_Module +::createPickingPreferences() +{ + int pickingTab = addPreference( tr( "VISU_PICKING_PREF_TAB_TTL" ) ); + + // Cursor + int cursorGr = addPreference( tr( "VISU_PICKING_PREF_CURSOR_GROUP_TTL" ), pickingTab ); + setPreferenceProperty( cursorGr, "columns", 1 ); + + int cursorSizePref = addPreference( tr( "VISU_PICKING_PREF_CURSOR_SIZE" ), cursorGr, + LightApp_Preferences::DblSpin, "VISU", "picking_cursor_size" ); + setPreferenceProperty( cursorSizePref, "min", 0 ); + setPreferenceProperty( cursorSizePref, "max", 1.0 ); + setPreferenceProperty( cursorSizePref, "step", 0.1 ); + + int pyramidHeightPref = addPreference( tr( "VISU_PICKING_PREF_PYRAMID_HEIGHT" ), cursorGr, + LightApp_Preferences::DblSpin, "VISU", "picking_pyramid_height" ); + setPreferenceProperty( pyramidHeightPref, "min", 1 ); + setPreferenceProperty( pyramidHeightPref, "max", 100 ); + + int selectionColorPref = addPreference( tr( "VISU_PICKING_PREF_SELECTION_COLOR" ), cursorGr, + LightApp_Preferences::Color, "VISU", "picking_selection_color" ); + + // Tolerance + int toleranceGr = addPreference( tr( "VISU_PICKING_PREF_TOLERANCE_GROUP_TTL" ), pickingTab ); + + int pointTolerancePref = addPreference( tr( "VISU_PICKING_PREF_POINT_SELECTION_TOLERANCE" ), toleranceGr, + LightApp_Preferences::DblSpin, "VISU", "picking_point_tolerance" ); + setPreferenceProperty( pointTolerancePref, "min", 0.001 ); + setPreferenceProperty( pointTolerancePref, "max", 10 ); + setPreferenceProperty( pointTolerancePref, "step", 0.01 ); + + // Info window + int infoWindowGr = addPreference( tr( "VISU_PICKING_PREF_INFO_WINDOW_GROUP_TTL" ), pickingTab ); + setPreferenceProperty( infoWindowGr, "columns", 1 ); + + int transparencyPref = addPreference( tr( "VISU_PICKING_PREF_TRANSPARENCY" ), infoWindowGr, + LightApp_Preferences::IntSpin, "VISU", "picking_transparency" ); + setPreferenceProperty( transparencyPref, "min", 0 ); + setPreferenceProperty( transparencyPref, "max", 100 ); + setPreferenceProperty( transparencyPref, "step", 10 ); + + int positionPref = addPreference( tr( "VISU_PICKING_PREF_POSITION" ), infoWindowGr, + LightApp_Preferences::Selector, "VISU", "picking_position" ); + QStringList values; + values.append( tr( "VISU_PICKING_PREF_BELOW_POINT" ) ); + values.append( tr( "VISU_PICKING_PREF_TOP_LEFT_CORNER" ) ); + QValueList indices; + indices.append( 0 ); + indices.append( 1 ); + setPreferenceProperty( positionPref, "strings", values ); + setPreferenceProperty( positionPref, "indexes", indices ); + + // Camera + int cameraGr = addPreference( tr( "VISU_PICKING_PREF_CAMERA_GROUP_TTL" ), pickingTab ); + setPreferenceProperty( cameraGr, "columns", 1 ); + + int zoomFactorPref = addPreference( tr( "VISU_PICKING_PREF_ZOOM_FACTOR" ), cameraGr, + LightApp_Preferences::DblSpin, "VISU", "picking_zoom_factor" ); + setPreferenceProperty( zoomFactorPref, "min", 0.1 ); + setPreferenceProperty( zoomFactorPref, "max", 10.0 ); + setPreferenceProperty( zoomFactorPref, "step", 0.1 ); + + int stepNumberPref = addPreference( tr( "VISU_PICKING_PREF_STEP_NUMBER" ), cameraGr, + LightApp_Preferences::IntSpin, "VISU", "picking_step_number" ); + setPreferenceProperty( stepNumberPref, "min", 1 ); + setPreferenceProperty( stepNumberPref, "max", 100 ); + + // Display parent mesh + int parentMeshGr = addPreference( tr( "VISU_PICKING_PREF_PARENT_MESH_TTL" ), pickingTab ); + setPreferenceProperty( parentMeshGr, "columns", 1 ); + + addPreference( tr( "VISU_PICKING_PREF_DISPLAY_PARENT_MESH" ), parentMeshGr, + LightApp_Preferences::Bool, "VISU", "picking_display_parent_mesh" ); +} + + +//--------------------------------------------------------------- +void +VisuGUI_Module +::createSpaceMousePreferences() +{ + int mouseTab = addPreference( tr( "VISU_MOUSE_PREF_TAB_TLT" ) ); + + int mouseGr = addPreference( tr( "VISU_MOUSE_PREF_GROUP_TLT" ), mouseTab ); + int mousePref = addPreference( tr( "VISU_MOUSE_PREF" ), mouseGr, LightApp_Preferences::Selector, "VISU", "mouse_behaviour" ); + QStringList values; + values.append( tr( "VISU_MOUSE_PREF_STANDARD" ) ); + values.append( tr( "VISU_MOUSE_PREF_KEYBOARD_FREE" ) ); + QValueList indices; + indices.append( 0 ); + indices.append( 1 ); + setPreferenceProperty( mousePref, "strings", values ); + setPreferenceProperty( mousePref, "indexes", indices ); + + int keybrdGr = addPreference( tr( "VISU_KEYBOARD_PREF_GROUP_TTL" ), mouseTab ); + int keybrdPref = addPreference( tr( "VISU_KEYBOARD_PREF" ), keybrdGr, LightApp_Preferences::IntSpin, "VISU", "speed_increment" ); + setPreferenceProperty( keybrdPref, "max", 1000 ); + + int spacemouseGr = addPreference( tr( "VISU_SPACEMOUSE_PREF" ), mouseTab ); + setPreferenceProperty( spacemouseGr, "columns", 1 ); + int spacemousePref1 = addPreference( tr( "VISU_SPACEMOUSE_PREF_1" ), spacemouseGr, LightApp_Preferences::Selector, "VISU", "spacemouse_func1_btn" ); //decrease_speed_increment + int spacemousePref2 = addPreference( tr( "VISU_SPACEMOUSE_PREF_2" ), spacemouseGr, LightApp_Preferences::Selector, "VISU", "spacemouse_func2_btn" ); //increase_speed_increment + int spacemousePref3 = addPreference( tr( "VISU_SPACEMOUSE_PREF_3" ), spacemouseGr, LightApp_Preferences::Selector, "VISU", "spacemouse_func3_btn" ); //decrease_gauss_point_magnification + int spacemousePref4 = addPreference( tr( "VISU_SPACEMOUSE_PREF_4" ), spacemouseGr, LightApp_Preferences::Selector, "VISU", "spacemouse_func4_btn" ); //increase_gauss_point_magnification + int spacemousePref5 = addPreference( tr( "VISU_SPACEMOUSE_PREF_5" ), spacemouseGr, LightApp_Preferences::Selector, "VISU", "spacemouse_func5_btn" ); //dominant_combined_switch + values.clear(); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_1" ) ); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_2" ) ); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_3" ) ); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_4" ) ); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_5" ) ); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_6" ) ); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_7" ) ); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_8" ) ); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_*" ) ); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_10" ) ); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_11" ) ); + indices.clear(); + indices.append( 1 ); + indices.append( 2 ); + indices.append( 3 ); + indices.append( 4 ); + indices.append( 5 ); + indices.append( 6 ); + indices.append( 7 ); + indices.append( 8 ); + indices.append( 9 ); // == button_* + indices.append( 10 ); + indices.append( 11 ); + setPreferenceProperty( spacemousePref1, "strings", values ); + setPreferenceProperty( spacemousePref1, "indexes", indices ); + setPreferenceProperty( spacemousePref2, "strings", values ); + setPreferenceProperty( spacemousePref2, "indexes", indices ); + setPreferenceProperty( spacemousePref3, "strings", values ); + setPreferenceProperty( spacemousePref3, "indexes", indices ); + setPreferenceProperty( spacemousePref4, "strings", values ); + setPreferenceProperty( spacemousePref4, "indexes", indices ); + setPreferenceProperty( spacemousePref5, "strings", values ); + setPreferenceProperty( spacemousePref5, "indexes", indices ); +} + + +//--------------------------------------------------------------- +void +VisuGUI_Module +::createRecorderPreferences() +{ + int recorderTab = addPreference( tr( "VISU_RECORDER_PREF_TAB_TTL" ) ); + + int recorderGr = addPreference( tr( "VISU_RECORDER_PREF_GROUP_TTL" ), recorderTab ); + setPreferenceProperty( recorderGr, "columns", 1 ); + + int modePref = addPreference( tr( "VISU_RECORDER_PREF_RECORDING_MODE" ), recorderGr, + LightApp_Preferences::Selector, "VISU", "recorder_mode" ); + QStringList values; + values.append( tr( "VISU_RECORDER_PREF_SKIPPED_FRAMES" ) ); + values.append( tr( "VISU_RECORDER_PREF_ALL_DISLPAYED_FRAMES" ) ); + QValueList indices; + indices.append( 0 ); + indices.append( 1 ); + setPreferenceProperty( modePref, "strings", values ); + setPreferenceProperty( modePref, "indexes", indices ); + + int fpsPref = addPreference( tr( "VISU_RECORDER_PREF_FPS" ), recorderGr, + LightApp_Preferences::DblSpin, "VISU", "recorder_fps" ); + setPreferenceProperty( fpsPref, "min", 0.1 ); + setPreferenceProperty( fpsPref, "max", 100 ); + + int qualityPref = addPreference( tr( "VISU_RECORDER_PREF_QUALITY" ), recorderGr, + LightApp_Preferences::IntSpin, "VISU", "recorder_quality" ); + setPreferenceProperty( qualityPref, "min", 1 ); + setPreferenceProperty( qualityPref, "max", 100 ); + + addPreference( tr( "VISU_RECORDER_PREF_PROGRESSIVE" ), recorderGr, + LightApp_Preferences::Bool, "VISU", "recorder_progressive" ); +} + + +//--------------------------------------------------------------- +void +VisuGUI_Module +::OnCreateGaussPoints() +{ + double initialTime = vtkTimerLog::GetCPUTime(); + CreatePrs3d(this,true); + INFOS( "VisuGUI_Module::OnCreateGaussPoints() : Gauss Points created in " << + vtkTimerLog::GetCPUTime() - initialTime << " seconds" ); +} + +void +VisuGUI_Module +::OnViewManagerAdded(SUIT_ViewManager* viewMgr) +{ + QString type = viewMgr->getViewModel()->getType(); + if ( type == VVTK_Viewer::Type() ) + connect( viewMgr, SIGNAL( viewCreated( SUIT_ViewWindow* ) ), this, SLOT( OnViewCreated( SUIT_ViewWindow* ) ) ); +} + +void +VisuGUI_Module +::OnViewCreated(SUIT_ViewWindow* view) +{ + SVTK_ViewWindow* viewWindow = dynamic_cast( view ); + if ( viewWindow ) { + setProperty( viewWindow, "speed_increment" ); + setProperty( viewWindow, "spacemouse_func1_btn" ); + setProperty( viewWindow, "spacemouse_func2_btn" ); + setProperty( viewWindow, "spacemouse_func3_btn" ); + setProperty( viewWindow, "spacemouse_func4_btn" ); + setProperty( viewWindow, "spacemouse_func5_btn" ); + } +} + +void +VisuGUI_Module +::setProperty( SVTK_ViewWindow* viewWindow, const QString& pref ) +{ + if ( !viewWindow ) + return; + + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + SVTK_MainWindow* aMainWindow = viewWindow->getMainWindow(); + int val; + if ( pref == "speed_increment" ) { + val = resMgr->integerValue( "VISU", pref, 10 ); + aMainWindow->InvokeEvent( SVTK::SetSpeedIncrementEvent, &val ); + } + else if ( pref == "spacemouse_func1_btn" ) { + val = resMgr->integerValue( "VISU", pref, 1 ); + aMainWindow->InvokeEvent( SVTK::SetSMDecreaseSpeedEvent, &val ); + } + else if ( pref == "spacemouse_func2_btn" ) { + val = resMgr->integerValue( "VISU", pref, 2 ); + aMainWindow->InvokeEvent( SVTK::SetSMIncreaseSpeedEvent, &val ); + } + else if ( pref == "spacemouse_func3_btn" ) { + val = resMgr->integerValue( "VISU", pref, 10 ); + aMainWindow->InvokeEvent( VISU::SetSMDecreaseMagnificationEvent, &val ); + } + else if ( pref == "spacemouse_func4_btn" ) { + val = resMgr->integerValue( "VISU", pref, 11 ); + aMainWindow->InvokeEvent( VISU::SetSMIncreaseMagnificationEvent, &val ); + } + else if ( pref == "spacemouse_func5_btn" ) { + val = resMgr->integerValue( "VISU", pref, 9 ); + aMainWindow->InvokeEvent( SVTK::SetSMDominantCombinedSwitchEvent, &val ); + } +} + +void +VisuGUI_Module +::setProperty( SVTK_ViewManager* vm, const QString& prop ) +{ + if ( !vm ) + return; + + QPtrVector windows = vm->getViews(); + for ( int n = windows.count(), i = 0; i < n; i++ ) + setProperty( dynamic_cast( windows[i] ), prop ); +} + +void +VisuGUI_Module +::preferencesChanged( const QString& group, const QString& pref ) +{ + if ( group == "VISU" && ( pref == "speed_increment" || pref == "spacemouse_func1_btn" || + pref == "spacemouse_func2_btn" || pref == "spacemouse_func3_btn" || + pref == "spacemouse_func4_btn" || pref == "spacemouse_func5_btn" ) ) { + + // update properties of VVTK view windows + SUIT_ViewManager* vm = getApp()->getViewManager( VVTK_Viewer::Type(), false ); + if ( vm ) + setProperty( dynamic_cast( vm ), pref ); + } +} + + +//--------------------------------------------------------------- +SUIT_ViewManager* +VisuGUI_Module +::getViewManager(const QString& theType, + const bool theIsCreate) +{ + if(SUIT_ViewManager* aViewManager = VisuGUI::getViewManager(theType,theIsCreate)) + return aViewManager; + + if(theIsCreate && VVTK_Viewer::Type() == theType) + return onCreateViewManager(); + + return NULL; +} + +//--------------------------------------------------------------- +void +VisuGUI_Module +::OnEditGaussPoints() +{ + Handle(SALOME_InteractiveObject) anIO; + if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){ + EditPrs3d(this, aPrs3d); + if(SVTK_ViewWindow* aViewWindow = GetViewWindow(this,true)){ + aViewWindow->highlight(anIO,1); + } + } +} + + +//--------------------------------------------------------------- +void +VisuGUI_Module +::OnDisplayPrs() +{ + if(MYDEBUG) MESSAGE("VisuGUI_Module::OnDisplayPrs"); + + QApplication::setOverrideCursor(Qt::waitCursor); + + if(LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this)){ + SALOME_ListIO aList; + aSelectionMgr->selectedObjects(aList); + for(SALOME_ListIteratorOfListIO it( aList ); it.More(); it.Next()){ + Handle(SALOME_InteractiveObject) anIO = it.Value(); + CORBA::Object_var anObject = GetSelectedObj( GetAppStudy(this), anIO->getEntry() ); + + // is it a Prs3d object ? + if(!CORBA::is_nil(anObject)){ + if(VISU::Prs3d_i* aPrs3d = dynamic_cast(VISU::GetServant(anObject).in())){ + if(MYDEBUG) MESSAGE("VisuGUI_Module::OnDisplayPrs : Prs3d object"); + if(aPrs3d->GetType() == VISU::TGAUSSPOINTS) + VISU::UpdateViewer(this,aPrs3d,false,true,true); + else if(SUIT_ViewManager* aViewManager = getApp()->activeViewManager()){ + QString aType = aViewManager->getType(); + if(aType == SVTK_Viewer::Type()) + VISU::UpdateViewer(this,aPrs3d,false,true,true); + else if(aType == VVTK_Viewer::Type()) + VISU::UpdateViewer(this,aPrs3d,false,true,true); + } + continue; + } + } + + // is it Curve ? + if(VISU::Curve_i* aCurve = dynamic_cast(VISU::GetServant(anObject).in())){ + if(MYDEBUG) MESSAGE("VisuGUI_Module::OnDisplayPrs : Curve object"); + PlotCurve( this, aCurve, VISU::eDisplay ); + continue; + } + + // is it Container ? + if(VISU::Container_i* aContainer = dynamic_cast(VISU::GetServant(anObject).in())){ + if(MYDEBUG) MESSAGE("VisuGUI_Module::DisplayPrs : Container object"); + PlotContainer( this, aContainer, VISU::eDisplay ); + continue; + } + + // is it Table ? + if(VISU::Table_i* aTable = dynamic_cast(VISU::GetServant(anObject).in())){ + if(MYDEBUG) MESSAGE("VisuGUI_Module::DisplayPrs : Table object"); + PlotTable( this, aTable, VISU::eDisplay ); + continue; + } + } + } + + QApplication::restoreOverrideCursor(); +} + + +//--------------------------------------------------------------- +void +VisuGUI_Module +::OnEraseAll() +{ + if(SUIT_ViewManager* aViewManager = getApp()->activeViewManager()){ + QString aType = aViewManager->getType(); + if(aType == SVTK_Viewer::Type()) + VISU::OnEraseAll(this); + else if(aType == VVTK_Viewer::Type()) + VISU::OnEraseAll(this); + else if(aType == SPlot2d_Viewer::Type()) + VISU::OnEraseAll(this); + } +} + + +//--------------------------------------------------------------- +void +VisuGUI_Module +::OnDisplayOnlyPrs() +{ + OnEraseAll(); + OnDisplayPrs(); +} + + +//--------------------------------------------------------------- +void +VisuGUI_Module +::OnErasePrs() +{ + QApplication::setOverrideCursor(Qt::waitCursor); + + SALOME_ListIO aList; + LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this); + aSelectionMgr->selectedObjects(aList); + + for(SALOME_ListIteratorOfListIO it( aList ); it.More(); it.Next()){ + Handle(SALOME_InteractiveObject) anIO = it.Value(); + CORBA::Object_var anObject = GetSelectedObj(GetAppStudy(this),anIO->getEntry()); + if(!CORBA::is_nil(anObject)){ + VISU::Base_var aBase = VISU::Base::_narrow(anObject); + if(!CORBA::is_nil(aBase)) + VISU::ErasePrs(this,aBase,true); + } + } + + QApplication::restoreOverrideCursor(); +} + + +//--------------------------------------------------------------- +namespace +{ + void + GetViewParams(VVTK_MainWindow* theViewWindow, + const char* theSuffix, + std::ostringstream& theStr) + { + float aColor[3]; + vtkRenderer* aRenderer = theViewWindow->getRenderer(); + aRenderer->GetBackground(aColor); + Storable::DataToStream(theStr,std::string("myColor") + theSuffix + ".R",aColor[0]); + Storable::DataToStream(theStr,std::string("myColor") + theSuffix + ".G",aColor[1]); + Storable::DataToStream(theStr,std::string("myColor") + theSuffix + ".B",aColor[2]); + + double aPosition[3]; + vtkCamera* aCamera = aRenderer->GetActiveCamera(); + aCamera->GetPosition(aPosition); + Storable::DataToStream(theStr,std::string("myPosition") + theSuffix + "[0]",aPosition[0]); + Storable::DataToStream(theStr,std::string("myPosition") + theSuffix + "[1]",aPosition[1]); + Storable::DataToStream(theStr,std::string("myPosition") + theSuffix + "[2]",aPosition[2]); + + double aFocalPnt[3]; + aCamera->GetFocalPoint(aFocalPnt); + Storable::DataToStream(theStr,std::string("myFocalPnt") + theSuffix + "[0]",aFocalPnt[0]); + Storable::DataToStream(theStr,std::string("myFocalPnt") + theSuffix + "[1]",aFocalPnt[1]); + Storable::DataToStream(theStr,std::string("myFocalPnt") + theSuffix + "[2]",aFocalPnt[2]); + + double aViewUp[3]; + aCamera->GetViewUp(aViewUp); + Storable::DataToStream(theStr,std::string("myViewUp") + theSuffix + "[0]",aViewUp[0]); + Storable::DataToStream(theStr,std::string("myViewUp") + theSuffix + "[1]",aViewUp[1]); + Storable::DataToStream(theStr,std::string("myViewUp") + theSuffix + "[2]",aViewUp[2]); + + float aParallelScale = aCamera->GetParallelScale(); + Storable::DataToStream(theStr,std::string("myParallelScale") + theSuffix,aParallelScale); + + double aScaleFactor[3]; + theViewWindow->GetScale(aScaleFactor); + Storable::DataToStream(theStr,std::string("myScaleFactor") + theSuffix + "[0]",aScaleFactor[0]); + Storable::DataToStream(theStr,std::string("myScaleFactor") + theSuffix + "[1]",aScaleFactor[1]); + Storable::DataToStream(theStr,std::string("myScaleFactor") + theSuffix + "[2]",aScaleFactor[2]); + } + + //--------------------------------------------------------------- + void + SetViewParams(VVTK_MainWindow* theViewWindow, + const char* theSuffix, + const Storable::TRestoringMap& theMap) + { + float aColor[3]; + aColor[0] = Storable::FindValue(theMap,std::string("myColor") + theSuffix + ".R").toDouble(); + aColor[1] = Storable::FindValue(theMap,std::string("myColor") + theSuffix + ".G").toDouble(); + aColor[2] = Storable::FindValue(theMap,std::string("myColor") + theSuffix + ".B").toDouble(); + vtkRenderer* aRenderer = theViewWindow->getRenderer(); + aRenderer->SetBackground(aColor); + + double aPosition[3]; + aPosition[0] = Storable::FindValue(theMap,std::string("myPosition") + theSuffix + "[0]").toDouble(); + aPosition[1] = Storable::FindValue(theMap,std::string("myPosition") + theSuffix + "[1]").toDouble(); + aPosition[2] = Storable::FindValue(theMap,std::string("myPosition") + theSuffix + "[2]").toDouble(); + vtkCamera* aCamera = aRenderer->GetActiveCamera(); + aCamera->SetPosition(aPosition); + + double aFocalPnt[3]; + aFocalPnt[0] = Storable::FindValue(theMap,std::string("myFocalPnt") + theSuffix + "[0]").toDouble(); + aFocalPnt[1] = Storable::FindValue(theMap,std::string("myFocalPnt") + theSuffix + "[1]").toDouble(); + aFocalPnt[2] = Storable::FindValue(theMap,std::string("myFocalPnt") + theSuffix + "[2]").toDouble(); + aCamera->SetFocalPoint(aFocalPnt); + + double aViewUp[3]; + aViewUp[0] = Storable::FindValue(theMap,std::string("myViewUp") + theSuffix + "[0]").toDouble(); + aViewUp[1] = Storable::FindValue(theMap,std::string("myViewUp") + theSuffix + "[1]").toDouble(); + aViewUp[2] = Storable::FindValue(theMap,std::string("myViewUp") + theSuffix + "[2]").toDouble(); + aCamera->SetViewUp(aViewUp); + + float aParallelScale = Storable::FindValue(theMap,std::string("myParallelScale") + theSuffix).toDouble(); + aCamera->SetParallelScale(aParallelScale); + + double aScaleFactor[3]; + aScaleFactor[0] = Storable::FindValue(theMap,std::string("myScaleFactor") + theSuffix + "[0]").toDouble(); + aScaleFactor[1] = Storable::FindValue(theMap,std::string("myScaleFactor") + theSuffix + "[1]").toDouble(); + aScaleFactor[2] = Storable::FindValue(theMap,std::string("myScaleFactor") + theSuffix + "[2]").toDouble(); + theViewWindow->SetScale(aScaleFactor); + } + + //--------------------------------------------------------------- + void + GetViewParams(VVTK_MainWindow1* theViewWindow, + std::ostringstream& theStr) + { + GetViewParams(theViewWindow,"1",theStr); + + VISU_WidgetCtrl* aWidgetCtrl = theViewWindow->GetWidgetCtrl(); + if(aWidgetCtrl->GetEnabled()){ + std::string aSegmentationMode; + if(aWidgetCtrl->IsPlanesActive()){ + VISU_PlanesWidget *aPlanesWidget = aWidgetCtrl->GetPlanesWidget(); + float anOrigin[3]; + aPlanesWidget->GetOrigin(anOrigin); + Storable::DataToStream(theStr,"myCursorOrigin[0]",anOrigin[0]); + Storable::DataToStream(theStr,"myCursorOrigin[1]",anOrigin[1]); + Storable::DataToStream(theStr,"myCursorOrigin[2]",anOrigin[2]); + + float aNormal[3]; + aPlanesWidget->GetNormal(aNormal); + Storable::DataToStream(theStr,"myCursorNormal[0]",aNormal[0]); + Storable::DataToStream(theStr,"myCursorNormal[1]",aNormal[1]); + Storable::DataToStream(theStr,"myCursorNormal[2]",aNormal[2]); + + float aDepth = aPlanesWidget->Distance(); + Storable::DataToStream(theStr,"myCursorDepth",aDepth); + + aSegmentationMode = "Planes"; + }else if(aWidgetCtrl->IsSphereActive()){ + VISU_SphereWidget *aSphereWidget = aWidgetCtrl->GetSphereWidget(); + float aCenter[3]; + aSphereWidget->GetCenter(aCenter); + Storable::DataToStream(theStr,"mySphereCursorCenter[0]",aCenter[0]); + Storable::DataToStream(theStr,"mySphereCursorCenter[1]",aCenter[1]); + Storable::DataToStream(theStr,"mySphereCursorCenter[2]",aCenter[2]); + + float aRadius = aSphereWidget->GetRadius(); + Storable::DataToStream(theStr,"mySphereCursorRaduis",aRadius); + + aSegmentationMode = "Sphere"; + } + + Storable::DataToStream(theStr,"mySegmentationMode",aSegmentationMode); + } + } + + //--------------------------------------------------------------- + void + SetViewParams(VVTK_MainWindow1* theViewWindow, + const Storable::TRestoringMap& theMap) + { + SetViewParams(theViewWindow,"1",theMap); + } + + + //--------------------------------------------------------------- + void + GetViewParams(VVTK_MainWindow2* theViewWindow, + std::ostringstream& theStr) + { + GetViewParams(theViewWindow,"2",theStr); + } + + void + SetViewParams(VVTK_MainWindow2* theViewWindow, + const Storable::TRestoringMap& theMap) + { + SetViewParams(theViewWindow,"2",theMap); + } + + + //--------------------------------------------------------------- + std::string + GetViewParams(VVTK_ViewWindow* theViewWindow) + { + std::ostringstream aStream; + + Storable::DataToStream(aStream,"myComment","GAUSSVIEW"); + + SVTK_Selector* aSelector = theViewWindow->GetSelector(); + Selection_Mode aSelectionMode = aSelector->SelectionMode(); + Storable::DataToStream(aStream,"mySelectionMode",aSelectionMode); + + GetViewParams(theViewWindow->getMainWindow1(),aStream); + GetViewParams(theViewWindow->getMainWindow2(),aStream); + + return aStream.str(); + } + + //--------------------------------------------------------------- + struct TSelection + { + bool myIsSelected; + bool myHasSubId; + int mySubId; + + TSelection(): + myIsSelected(false), + myHasSubId(false), + mySubId(-1) + {} + }; + + typedef std::map TVisibleEntries; + + struct TGetVisibleEntries + { + TVisibleEntries& myVisibleEntries; + + TGetVisibleEntries(TVisibleEntries& theVisibleEntries): + myVisibleEntries(theVisibleEntries) + {} + + void + operator()(VISU_GaussPtsAct* theActor) + { + if(theActor->GetVisibility()){ + const Handle(SALOME_InteractiveObject)& anIO = theActor->getIO(); + myVisibleEntries.insert(TVisibleEntries::value_type(anIO->getEntry(),TSelection())); + } + } + }; + + void + GetGaussPointsSelection(VVTK_ViewWindow* theViewWindow, + TVisibleEntries& theVisibleEntries) + { + // First find all visible Gauss Points presentations + vtkRenderer* aRenderer = theViewWindow->getRenderer(); + vtkActorCollection* anActors = aRenderer->GetActors(); + TGetVisibleEntries aGetVisibleEntries(theVisibleEntries); + SVTK::ForEach(anActors, + aGetVisibleEntries); + + // Next, find the sub-ids for the visible Gauss Points presentations + SVTK_Selector* aSelector = theViewWindow->GetSelector(); + const SALOME_ListIO& aListIO = aSelector->StoredIObjects(); + SALOME_ListIteratorOfListIO anIter(aListIO); + for(; anIter.More(); anIter.Next()){ + Handle(SALOME_InteractiveObject) anIO = anIter.Value(); + std::string anEntry = anIO->getEntry(); + TVisibleEntries::iterator anEntriesIter = theVisibleEntries.find(anEntry); + if(anEntriesIter != theVisibleEntries.end()){ + TSelection& aSelection = anEntriesIter->second; + aSelection.myIsSelected = true; + TColStd_IndexedMapOfInteger anIndexes; + aSelector->GetIndex(anIO,anIndexes); + if(anIndexes.Extent() > 0){ + aSelection.myHasSubId = true; + aSelection.mySubId = anIndexes(1); + } + } + } + } + + + //--------------------------------------------------------------- + inline + void + CreateReference(_PTR(Study) theStudyDocument, + _PTR(StudyBuilder) theStudyBuilder, + _PTR(SObject) theFatherSObject, + const string& theRefEntry, + const TSelection& theSelection) + { + _PTR(SObject) aNewObj = theStudyBuilder->NewObject(theFatherSObject); + _PTR(SObject) aRefSObj = theStudyDocument->FindObjectID(theRefEntry); + theStudyBuilder->Addreference(aNewObj,aRefSObj); + + std::ostringstream aStream; + Storable::DataToStream(aStream,"myIsSelected",theSelection.myIsSelected); + Storable::DataToStream(aStream,"myHasSubId",theSelection.myHasSubId); + Storable::DataToStream(aStream,"mySubId",theSelection.mySubId); + + _PTR(GenericAttribute) anAttr; + anAttr = theStudyBuilder->FindOrCreateAttribute(aNewObj,"AttributeComment"); + _PTR(AttributeComment) aComment(anAttr); + aComment->SetValue(aStream.str()); + } + + + //--------------------------------------------------------------- + void + SetGaussPointsSelection(VisuGUI* theModule, + VVTK_ViewWindow* theViewWindow, + _PTR(Study) theCStudy, + _PTR(SObject) theSObject) + { + SVTK_Selector* aSelector = theViewWindow->GetSelector(); + aSelector->ClearIObjects(); + + bool anIsFirst = true; + _PTR(ChildIterator) aChildIter = theCStudy->NewChildIterator(theSObject); + for (; aChildIter->More(); aChildIter->Next()) { + _PTR(SObject) aChildSObject = aChildIter->Value(); + _PTR(SObject) aSObject; + if(aChildSObject->ReferencedObject(aSObject)){ + CORBA::Object_var anObject = VISU::ClientSObjectToObject(aSObject); + PortableServer::ServantBase_var aServant = VISU::GetServant(anObject); + if(VISU::Prs3d_i* aPrs3d = dynamic_cast(aServant.in())){ + // To set visiblity + VISU::UpdateViewer(theModule,aPrs3d,anIsFirst,false,false); + anIsFirst = false; + + // To update selection + _PTR(GenericAttribute) anAttr; + if(aChildSObject->FindAttribute(anAttr,"AttributeComment")){ + _PTR(AttributeComment) aComment(anAttr); + + QString aStream(aComment->Value().c_str()); + Storable::TRestoringMap aMap; + Storable::StrToMap(aStream,aMap); + + bool anIsSelected = Storable::FindValue(aMap,"myIsSelected").toInt(); + bool aHasSubId = Storable::FindValue(aMap,"myHasSubId").toInt(); + int aSubId = Storable::FindValue(aMap,"mySubId").toInt(); + + if(anIsSelected){ + std::string anEntry = aSObject->GetID(); + Handle(SALOME_InteractiveObject) anIO = new SALOME_InteractiveObject(anEntry.c_str(),""); + aSelector->AddIObject(anIO); + if(aHasSubId) + aSelector->AddOrRemoveIndex(anIO,aSubId,false); + } + } + } + } + } + + aSelector->EndPickCallback(); // To invoke selection changed signal + } + + + //--------------------------------------------------------------- + void + OnStoreConfiguration(SalomeApp_Module* theModule, + bool theIsNew) + { + _PTR(Study) aCStudy = GetCStudy(GetAppStudy(theModule)); + if (CheckLock(aCStudy,GetDesktop(theModule))) + return; + + LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(theModule); + + SUIT_ViewManager* aViewManager = theModule->getApp()->activeViewManager(); + if(aViewManager->getType() == VVTK_Viewer::Type()){ + SUIT_ViewWindow* aWindow = aViewManager->getActiveView(); + VVTK_ViewWindow* aViewWindow = dynamic_cast(aWindow); + + SUIT_Study* aSStudy = aViewManager->study(); + SalomeApp_Study* aStudy = dynamic_cast(aSStudy); + _PTR(Study) aCStudy = aStudy->studyDS(); + _PTR(StudyBuilder) aStudyBuilder = aCStudy->NewBuilder(); + + std::string anEntry; + std::string aValue = GetViewParams(aViewWindow); + + if(theIsNew){ + _PTR(SComponent) aSComponent = ClientFindOrCreateVisuComponent(aCStudy); + + static int myNbConfigs = 0; + std::string aName = VISU::GenerateName("Config.", ++myNbConfigs).latin1(); + + std::string aSComponentEntry = aSComponent->GetID(); + anEntry = CreateAttributes(aCStudy, + aSComponentEntry.c_str(), + "", + "", + aName.c_str(), + "", + aValue.c_str()); + }else{ + SALOME_ListIO aListIO; + aSelectionMgr->selectedObjects(aListIO); + SALOME_ListIteratorOfListIO aListIter( aListIO ); + for(; aListIter.More(); aListIter.Next()){ + Handle(SALOME_InteractiveObject) anIO = aListIter.Value(); + _PTR(SObject) aSObject = aCStudy->FindObjectID(anIO->getEntry()); + _PTR(GenericAttribute) anAttr; + if(aSObject->FindAttribute(anAttr,"AttributeComment")){ + _PTR(AttributeComment) aComment(anAttr); + std::string aCommentValue(aComment->Value()); + if(aCommentValue.compare("myComment=GAUSSVIEW") >= 0){ + aComment->SetValue(aValue.c_str()); + anEntry = aSObject->GetID(); + + _PTR(ChildIterator) aChildIter = aCStudy->NewChildIterator(aSObject); + for (; aChildIter->More(); aChildIter->Next()) { + _PTR(SObject) aChildSObject = aChildIter->Value(); + aStudyBuilder->RemoveObject(aChildSObject); + } + break; + } + } + } + } + + if(anEntry != ""){ + TVisibleEntries aVisibleEntries; + GetGaussPointsSelection(aViewWindow, + aVisibleEntries); + + _PTR(SObject) aSObject = aCStudy->FindObjectID(anEntry); + _PTR(StudyBuilder) aStudyBuilder = aCStudy->NewBuilder(); + TVisibleEntries::const_iterator anIter = aVisibleEntries.begin(); + for(; anIter != aVisibleEntries.end(); anIter++){ + const std::string& anEntry = anIter->first; + const TSelection& aSelection = anIter->second; + + CreateReference(aCStudy, + aStudyBuilder, + aSObject, + anEntry, + aSelection); + } + + //UpdateObjBrowser(theModule,true,aSObject); + UpdateObjBrowser(theModule,true); + } + } + } + + + //--------------------------------------------------------------- + template + void + SetMainWindowParams(VisuGUI* theModule, + _PTR(SObject) theSObject, + VVTK_ViewWindow* theViewWindow, + TMainWindow* theMainWindow) + { + _PTR(Study) aCStudy = GetCStudy(GetAppStudy(theModule)); + + _PTR(GenericAttribute) anAttr; + if(theSObject->FindAttribute(anAttr,"AttributeComment")){ + _PTR(AttributeComment) aComment(anAttr); + QString aStream(aComment->Value().c_str()); + Storable::TRestoringMap aMap; + Storable::StrToMap(aStream,aMap); + SetViewParams(theMainWindow,aMap); + } + } +} + + +//--------------------------------------------------------------- +void +VisuGUI_Module:: +OnSaveConfiguration() +{ + ::OnStoreConfiguration(this,true); +} + + +//--------------------------------------------------------------- +void +VisuGUI_Module:: +OnOverwriteConfiguration() +{ + ::OnStoreConfiguration(this,false); +} + + +//--------------------------------------------------------------- +void +VisuGUI_Module:: +OnRestoreConfiguration() +{ + LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this); + + SALOME_ListIO aListIO; + aSelectionMgr->selectedObjects(aListIO); + if(aListIO.Extent() > 1) + return; + + if(SUIT_ViewManager* aViewManager = getViewManager(VVTK_Viewer::Type(),true)){ + const Handle(SALOME_InteractiveObject)& anIO = aListIO.First(); + _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this)); + _PTR(SObject) aSObject = aCStudy->FindObjectID(anIO->getEntry()); + myConfigSObject = aSObject; + _PTR(GenericAttribute) anAttr; + if(aSObject->FindAttribute(anAttr,"AttributeComment")){ + _PTR(AttributeComment) aComment(anAttr); + QString aStream(aComment->Value().c_str()); + Storable::TRestoringMap aMap; + Storable::StrToMap(aStream,aMap); + SUIT_ViewWindow* aWindow = aViewManager->getActiveView(); + VVTK_ViewWindow* aViewWindow = dynamic_cast(aWindow); + + Selection_Mode aSelectionMode = Storable::FindValue(aMap,"mySelectionMode").toInt(); + SVTK_Selector* aSelector = aViewWindow->GetSelector(); + aSelector->SetSelectionMode(aSelectionMode); + + SetGaussPointsSelection(this,aViewWindow,aCStudy,aSObject); + + std::string aSegmentationMode; + if(VVTK_MainWindow1* aMainWindow = aViewWindow->getMainWindow1()){ + aMainWindow->SetPlanesSegementation(false); + aMainWindow->SetSphereSegementation(false); + VISU_WidgetCtrl* aWidgetCtrl = aMainWindow->GetWidgetCtrl(); + aSegmentationMode = Storable::FindValue(aMap,"mySegmentationMode").latin1(); + + if(aSegmentationMode == "Planes"){ + VISU_PlanesWidget *aPlanesWidget = aWidgetCtrl->GetPlanesWidget(); + float anOrigin[3]; + anOrigin[0] = Storable::FindValue(aMap,"myCursorOrigin[0]").toDouble(); + anOrigin[1] = Storable::FindValue(aMap,"myCursorOrigin[1]").toDouble(); + anOrigin[2] = Storable::FindValue(aMap,"myCursorOrigin[2]").toDouble(); + aPlanesWidget->SetOrigin(anOrigin); + + float aNormal[3]; + aNormal[0] = Storable::FindValue(aMap,"myCursorNormal[0]").toDouble(); + aNormal[1] = Storable::FindValue(aMap,"myCursorNormal[1]").toDouble(); + aNormal[2] = Storable::FindValue(aMap,"myCursorNormal[2]").toDouble(); + aPlanesWidget->SetNormal(aNormal); + + float aDepth = Storable::FindValue(aMap,"myCursorDepth").toDouble(); + aPlanesWidget->SetDistance(aDepth); + + aMainWindow->SetPlanesSegementation(true); + }else if(aSegmentationMode == "Sphere"){ + VISU_SphereWidget *aSphereWidget = aWidgetCtrl->GetSphereWidget(); + float aCenter[3]; + aCenter[0] = Storable::FindValue(aMap,"mySphereCursorCenter[0]").toDouble(); + aCenter[1] = Storable::FindValue(aMap,"mySphereCursorCenter[1]").toDouble(); + aCenter[2] = Storable::FindValue(aMap,"mySphereCursorCenter[2]").toDouble(); + aSphereWidget->SetCenter(aCenter); + + float aRadius = Storable::FindValue(aMap,"mySphereCursorRaduis").toDouble(); + aSphereWidget->SetRadius(aRadius); + + aMainWindow->SetSphereSegementation(true); + } + } + + if(VVTK_MainWindow1* aMainWindow = aViewWindow->getMainWindow1()){ + SVTK_RenderWindowInteractor* anInteractor = aMainWindow->GetInteractor(); + if(anInteractor->isVisible()){ + SetMainWindowParams(this,myConfigSObject,aViewWindow,aMainWindow); + }else + anInteractor->installEventFilter(this); + } + + if(aSegmentationMode != ""){ + if(VVTK_MainWindow2* aMainWindow = aViewWindow->getMainWindow2()){ + SVTK_RenderWindowInteractor* anInteractor = aMainWindow->GetInteractor(); + if(anInteractor->isVisible()) + SetMainWindowParams(this,myConfigSObject,aViewWindow,aMainWindow); + else + anInteractor->installEventFilter(this); + } + } + + SetGaussPointsSelection(this,aViewWindow,aCStudy,aSObject); + } + } +} + + +//--------------------------------------------------------------- +bool +VisuGUI_Module:: +eventFilter( QObject * theWatched, QEvent * theEvent ) +{ + bool aRet = VisuGUI::eventFilter(theWatched,theEvent); + if(theEvent->type() == QEvent::Show){ + if(SUIT_ViewManager* aViewManager = getViewManager(VVTK_Viewer::Type(),false)){ + SUIT_ViewWindow* aWindow = aViewManager->getActiveView(); + VVTK_ViewWindow* aViewWindow = dynamic_cast(aWindow); + if(VVTK_MainWindow1* aMainWindow = aViewWindow->getMainWindow1()){ + SVTK_RenderWindowInteractor* anInteractor = aMainWindow->GetInteractor(); + if(theWatched == anInteractor){ + SetMainWindowParams(this,myConfigSObject,aViewWindow,aMainWindow); + anInteractor->removeEventFilter(this); + } + } + if(VVTK_MainWindow2* aMainWindow = aViewWindow->getMainWindow2()){ + SVTK_RenderWindowInteractor* anInteractor = aMainWindow->GetInteractor(); + if(theWatched == aMainWindow->GetInteractor()){ + SetMainWindowParams(this,myConfigSObject,aViewWindow,aMainWindow); + anInteractor->removeEventFilter(this); + } + } + } + } + return aRet; +} diff --git a/src/VISUGUI/VisuGUI_Module.h b/src/VISUGUI/VisuGUI_Module.h new file mode 100644 index 00000000..c13c8235 --- /dev/null +++ b/src/VISUGUI/VisuGUI_Module.h @@ -0,0 +1,192 @@ +// VISU VISUGUI : GUI of VISU 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 : VisuGUI_Module.h +// Author : +// Module : VISU +// $Header$ + +#ifndef VisuGUI_Module_HeaderFile +#define VisuGUI_Module_HeaderFile + +#include "VisuGUI.h" +#include "STD_Application.h" +#include "SALOMEDSClient_SObject.hxx" + +class SUIT_ViewManager; +class SVTK_ViewManager; +class SVTK_ViewWindow; + +#include "MED_SharedPtr.hxx" + +namespace VISU +{ + class Viewer; + typedef MED::SharedPtr PViewer; + + typedef std::map TViewerMap; +} + +//! This class inherits base VisuGUI. +/*! Used to display, erase end edit presentations in the VVTK viewer. */ +class VisuGUI_Module: public VisuGUI +{ + Q_OBJECT; + + friend class VISU::Viewer; + +public: + VisuGUI_Module(); + + virtual + ~VisuGUI_Module(); + + virtual + bool + eventFilter( QObject * theWatched, QEvent * theEvent ); + + //! Redifined method of the module initializing. + virtual + void + initialize( CAM_Application* ); + + //! Redefined method of creating prefernces. + virtual + void + createPreferences(); + + virtual + void + preferencesChanged( const QString&, const QString& ); + + virtual + SUIT_ViewManager* + getViewManager(const QString& theType, + const bool theIsCreate); + +public slots: + //! Reimplemented method of the module deactivation. + virtual + bool + deactivateModule( SUIT_Study* ); + + //! Reimplemented method of the module activation. + virtual + bool + activateModule( SUIT_Study* ); + +protected: + //! Create preferences for Gauss Points presentation. + virtual + void + createGaussPointsPreferences(); + + //! Create preferences for Outside Cursor Gauss Points presentations. + virtual + void + createInsideCursorPreferences(); + + virtual + void + createOutsideCursorPreferences(); + + //! Create preferences for Picking. + virtual + void + createPickingPreferences(); + + //! Create preferences for Space Mouse. + virtual + void + createSpaceMousePreferences(); + + //! Create preferences for Recorder. + virtual + void + createRecorderPreferences(); + +protected slots: + SUIT_ViewManager* + onCreateViewManager(); + + void + onLastViewClosed(SUIT_ViewManager*); + + void + OnCreateGaussPoints(); + + void + OnViewCreated(SUIT_ViewWindow*); + + void + OnViewManagerAdded(SUIT_ViewManager*); + + //! Reimplemented method of the Gauss Points edition. + virtual + void + OnEditGaussPoints(); + + //! Reimplemented method of the Gauss Points displaying. + virtual + void + OnDisplayPrs(); + + //! Reimplemented method of the Gauss Points displaying only. + virtual + void + OnDisplayOnlyPrs(); + + //! Reimplemented method of the Gauss Points full erasing. + virtual + void + OnEraseAll(); + + //! Reimplemented method of the Gauss Points erasing. + virtual + void + OnErasePrs(); + + //! Virtual method of saving configuration. + virtual + void + OnSaveConfiguration(); + + //! Virtual method of overwriting configuration. + virtual + void + OnOverwriteConfiguration(); + + //! Virtual method of restoring configuration. + virtual + void + OnRestoreConfiguration(); + +protected: + VISU::TViewerMap myViewerMap; + _PTR(SObject) myConfigSObject; + + void setProperty( SVTK_ViewWindow*, const QString& ); // set a property (speed_increment, etc ) for SVTK ViewWindow + void setProperty( SVTK_ViewManager*, const QString& ); // set a property for SVTK ViewWindow // set only 1 property for all ViewWindows of given view manager +}; + +#endif diff --git a/src/VISUGUI/VisuGUI_NonIsometricDlg.h b/src/VISUGUI/VisuGUI_NonIsometricDlg.h deleted file mode 100644 index 739f87ec..00000000 --- a/src/VISUGUI/VisuGUI_NonIsometricDlg.h +++ /dev/null @@ -1,40 +0,0 @@ -// VISU VISUGUI : GUI of VISU component -// -// Copyright (C) 2003 CEA/DEN, EDF R&D -// -// -// -// File : VisuGUI_NonIsometricDlg.h -// Author : Vasily Rusyaev -// Module : VISU -// $Header$ - -#ifndef VisuGUI_NONISOMETRICDLG_H -#define VisuGUI_NONISOMETRICDLG_H - -#include -class QtxDblSpinBox; -class QPushButton; - -class VisuGUI_NonIsometricDlg : public QDialog -{ - Q_OBJECT - -public: - VisuGUI_NonIsometricDlg (QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0); - ~VisuGUI_NonIsometricDlg(); - -private: - QtxDblSpinBox* m_sbXcoeff; - QtxDblSpinBox* m_sbYcoeff; - QtxDblSpinBox* m_sbZcoeff; - QPushButton* m_bReset ; - -private slots: - void onClickApply(); - void onClickReset(); - void onClickOk(); - void onFunctionChanged(); -}; - -#endif // VisuGUI_NONISOMETRICDLG_H diff --git a/src/VISUGUI/VisuGUI_OffsetDlg.cxx b/src/VISUGUI/VisuGUI_OffsetDlg.cxx index a0bd394a..3fca41a1 100644 --- a/src/VISUGUI/VisuGUI_OffsetDlg.cxx +++ b/src/VISUGUI/VisuGUI_OffsetDlg.cxx @@ -175,7 +175,7 @@ void VisuGUI_OffsetDlg::updateOffset (VISU::Prs3d_i* thePrs, float* theOffset) ViewManagerList aViewManagerList; SalomeApp_Application* anApp = myModule->getApp(); - anApp->viewManagers(SVTK_Viewer::Type(), aViewManagerList); + anApp->viewManagers(aViewManagerList); QPtrListIterator anVMIter (aViewManagerList); for (; anVMIter.current(); ++anVMIter) { SUIT_ViewManager* aViewManager = anVMIter.current(); diff --git a/src/VISUGUI/VisuGUI_Plot3DDlg.cxx b/src/VISUGUI/VisuGUI_Plot3DDlg.cxx index 62ca7306..a7935632 100644 --- a/src/VISUGUI/VisuGUI_Plot3DDlg.cxx +++ b/src/VISUGUI/VisuGUI_Plot3DDlg.cxx @@ -254,6 +254,7 @@ void VisuGUI_Plot3DPane::storePrsParams() if (!myPipeCopy) myPipeCopy = VISU_Plot3DPL::New(); if (myPrs) { + myPipeCopy->SetIDMapper(myPrs->GetPL()->GetIDMapper()); myPipeCopy->ShallowCopy(myPrs->GetPL()); storeToPrsObject(myPrs); } diff --git a/src/VISUGUI/VisuGUI_PopupTools.cxx b/src/VISUGUI/VisuGUI_PopupTools.cxx index 39f904b0..ef22f154 100644 --- a/src/VISUGUI/VisuGUI_PopupTools.cxx +++ b/src/VISUGUI/VisuGUI_PopupTools.cxx @@ -26,12 +26,15 @@ // Module : VISU #include "VisuGUI_PopupTools.h" +#include "VisuGUI_ViewTools.h" #include "VisuGUI_Tools.h" #include "SalomeApp_Study.h" #include "LightApp_Study.h" #include "VISU_Actor.h" #include "VISU_ScalarMapAct.h" +#include "VISU_Result_i.hh" +#include "SalomeApp_Study.h" using namespace VISU; @@ -45,6 +48,8 @@ QtxValue VisuGUI_Selection::param( const int ind, const QString& p ) const if ( !val.isValid() ) { if ( p == "type" ) val = QtxValue( type( ind ) ); else if ( p == "nbComponents" ) val = QtxValue( nbComponents( ind ) ); + else if ( p == "medEntity" ) val = QtxValue( medEntity( ind ) ); + else if ( p == "medSource" ) val = QtxValue( medSource( ind ) ); else if ( p == "representation" ) val = QtxValue( representation( ind ) ); else if ( p == "nbTimeStamps" ) val = QtxValue( nbTimeStamps( ind ) ); else if ( p == "nbChildren" ) val = QtxValue( nbChildren( ind ) ); @@ -69,7 +74,7 @@ QString VisuGUI_Selection::type( const int ind ) const { QString aResStr; VISU::Storable::TRestoringMap aMap; - SalomeApp_Study* aStudy = dynamic_cast( ( LightApp_Study* )study() ); + SalomeApp_Study* aStudy = GetStudy(); if ( !aStudy ) return aResStr; CORBA::Object_var anObject = GetSelectedObj( aStudy, entry( ind ), &aMap ); @@ -125,7 +130,7 @@ QString VisuGUI_Selection::nbComponents( const int ind ) const { QString aResStr; VISU::Storable::TRestoringMap aMap; - SalomeApp_Study* aStudy = dynamic_cast( ( LightApp_Study* )study() ); + SalomeApp_Study* aStudy = GetStudy(); if ( !aStudy ) return aResStr; GetSelectedObj( aStudy, entry( ind ), &aMap ); @@ -136,11 +141,61 @@ QString VisuGUI_Selection::nbComponents( const int ind ) const return aResStr; } +QString VisuGUI_Selection::medEntity( const int ind ) const +{ + bool isExist; + VISU::Storable::TRestoringMap aMap; + GetSelectedObj( GetStudy(), entry( ind ), &aMap ); + const QString& aVal = VISU::Storable::FindValue(aMap,"myEntityId",&isExist); + if ( isExist ) { + using namespace VISU; + TEntity anEntityId = TEntity(aVal.toInt()); + switch(anEntityId){ + case NODE_ENTITY : + return "NODE_ENTITY"; + case EDGE_ENTITY : + return "EDGE_ENTITY"; + case FACE_ENTITY : + return "FACE_ENTITY"; + case CELL_ENTITY : + return "CELL_ENTITY"; + default: + return QString(); + } + } + return QString(); +} + +QString VisuGUI_Selection::medSource( const int ind ) const +{ + _PTR(Study) aStudyDS = GetStudy()->studyDS(); + if(_PTR(SObject) aSObject = aStudyDS->FindObjectID(entry(ind))){ + VISU::Result_var aRes; + if(VISU::Result_i* aResult = CheckResult(myModule,aSObject,aRes)){ + using namespace VISU; + Result_i::ECreationId aCreationId = aResult->GetCreationId(); + switch(aCreationId){ + case Result_i::eImportFile : + return "eImportFile"; + case Result_i::eCopyAndImportFile : + return "eCopyAndImportFile"; + case Result_i::eImportMed : + return "eImportMed"; + case Result_i::eImportMedField : + return "eImportMedField"; + default: + return QString(); + } + } + } + return QString(); +} + QString VisuGUI_Selection::nbTimeStamps( const int ind ) const { QString aResStr; VISU::Storable::TRestoringMap aMap; - SalomeApp_Study* aStudy = dynamic_cast( ( LightApp_Study* )study() ); + SalomeApp_Study* aStudy = GetStudy(); if ( !aStudy ) return aResStr; GetSelectedObj( aStudy, entry( ind ), &aMap ); @@ -171,10 +226,17 @@ QString VisuGUI_Selection::representation( const int ind ) const return aResStr; } +SalomeApp_Study* VisuGUI_Selection::GetStudy() const + +{ + LightApp_Study* aLightStudy = const_cast( study() ); + return dynamic_cast( aLightStudy ); +} + int VisuGUI_Selection::nbChild( const int ind, const bool named ) const { int cnt = 0; - SalomeApp_Study* aSStudy = dynamic_cast( ( LightApp_Study* )study() ); + SalomeApp_Study* aSStudy = GetStudy(); if ( !aSStudy ) return cnt; _PTR(Study) aStudy = GetCStudy( aSStudy ); @@ -205,15 +267,47 @@ QString VisuGUI_Selection::nbNamedChildren( const int ind ) const return aResStr; } -QString VisuGUI_Selection::isVisible( const int ind ) const +namespace { - QString aResStr; + struct TIsVisibleFunctor + { + template + QString + Get(VisuGUI* theModule, + const QString& theEntry) + { + typedef typename TViewer::TViewWindow TViewWindow; + if(TViewWindow* aViewWindow = GetViewWindow(theModule)) + if(VISU_Actor* anActor = FindActor(aViewWindow,theEntry.latin1())) + return anActor->GetVisibility() ? "true" : "false"; - if ( SVTK_ViewWindow* aView = GetViewWindow( myModule ) ) - if ( VISU_Actor* anVISUActor = FindActor( aView, entry( ind ).latin1() ) ) - aResStr = anVISUActor->GetVisibility() ? "1" : "0"; + return QString(); + } + }; - return aResStr; + template + struct TPopupDispatcher + { + QString + operator()(VisuGUI* theModule, + const QString& theEntry) + { + if(SUIT_ViewManager* aViewManager = theModule->getApp()->activeViewManager()){ + QString aType = aViewManager->getType(); + TPopupFunctor aFunctor; + if(aType == SVTK_Viewer::Type()) + return aFunctor.template Get(theModule,theEntry); + else if(aType == VVTK_Viewer::Type()) + return aFunctor.template Get(theModule,theEntry); + } + return QString(); + } + }; +} + +QString VisuGUI_Selection::isVisible( const int ind ) const +{ + return TPopupDispatcher()((VisuGUI*)myModule,entry(ind)); } QString VisuGUI_Selection::isShrunk( const int ind ) const diff --git a/src/VISUGUI/VisuGUI_PopupTools.h b/src/VISUGUI/VisuGUI_PopupTools.h index 19005c88..1a7ae957 100644 --- a/src/VISUGUI/VisuGUI_PopupTools.h +++ b/src/VISUGUI/VisuGUI_PopupTools.h @@ -35,6 +35,7 @@ ////////////////////////////////////////////////// class SalomeApp_Module; +class SalomeApp_Study; class VisuGUI_Selection : public LightApp_Selection { @@ -47,6 +48,8 @@ public: private: QString type( const int ) const; QString nbComponents( const int ) const; + QString medEntity( const int ) const; + QString medSource( const int ) const; QString nbTimeStamps( const int ) const; QString representation( const int ) const; QString nbChildren( const int ) const; @@ -59,6 +62,7 @@ private: private: int nbChild( const int, const bool ) const; + SalomeApp_Study* GetStudy() const; private: SalomeApp_Module* myModule; diff --git a/src/VISUGUI/VisuGUI_Prs3dTools.h b/src/VISUGUI/VisuGUI_Prs3dTools.h index d6a6959b..a832fbb5 100644 --- a/src/VISUGUI/VisuGUI_Prs3dTools.h +++ b/src/VISUGUI/VisuGUI_Prs3dTools.h @@ -29,42 +29,49 @@ #ifndef VisuGUI_Prs3dTools_HeaderFile #define VisuGUI_Prs3dTools_HeaderFile -#include "VisuGUI_Tools.h" +#include "VISU_Gen_i.hh" +#include "VisuGUI_ViewTools.h" #include "VisuGUI_DialogRunner.h" -int runAndWait( QDialog* dlg, const bool modal ) -{ - VisuGUI_DialogRunner r( dlg ); - return r.run( modal ); -} +#include namespace VISU { class CutLines_i; //--------------------------------------------------------------- - template + inline + int + runAndWait( QDialog* dlg, const bool modal ) + { + VisuGUI_DialogRunner r( dlg ); + return r.run( modal ); + } + + //--------------------------------------------------------------- + template void - EditPrs3d (SalomeApp_Module* theModule, VISU::Prs3d_i* thePrs3d) + EditPrs3d(VisuGUI* theModule, + VISU::Prs3d_i* thePrs3d) { - TPrs3d_i* aPrsObject = dynamic_cast(thePrs3d); - if (aPrsObject) { + if(TPrs3d_i* aPrs3d = dynamic_cast(thePrs3d)){ TDlg* aDlg = new TDlg (theModule); - aDlg->initFromPrsObject(aPrsObject); - if (runAndWait(aDlg,IsDlgModal)) { - if (!(aDlg->storeToPrsObject(aPrsObject))) { + aDlg->initFromPrsObject(aPrs3d); + if (runAndWait(aDlg,TIsDlgModal)) { + if (!(aDlg->storeToPrsObject(aPrs3d))) { delete aDlg; return; } - RecreateActor(theModule, aPrsObject); - if (SVTK_ViewWindow* vw = GetViewWindow(theModule)) { - vw->getRenderer()->ResetCameraClippingRange(); - vw->Repaint(); + aPrs3d->UpdateActors(); + typedef typename TViewer::TViewWindow TViewWindow; + if(TViewWindow* aViewWindow = GetViewWindow(theModule)){ + aViewWindow->getRenderer()->ResetCameraClippingRange(); + aViewWindow->Repaint(); } // Optionally, create table and curves for cut lines QApplication::setOverrideCursor(Qt::waitCursor); CreateCurves( theModule, - dynamic_cast( aPrsObject ), + dynamic_cast( aPrs3d ), aDlg, false ); // in edition mode QApplication::restoreOverrideCursor(); @@ -73,11 +80,20 @@ namespace VISU } } + template + inline + void + EditPrs3d(VisuGUI* theModule, + VISU::Prs3d_i* thePrs3d) + { + EditPrs3d(theModule,thePrs3d); + } //--------------------------------------------------------------- template + inline TPrs3d_i* - CreatePrs3d(SalomeApp_Module* theModule, + CreatePrs3d(VisuGUI* theModule, _PTR(SObject) theTimeStamp, const char* theMeshName, VISU::Entity theEntity, @@ -87,13 +103,12 @@ namespace VISU VISU::Result_var aResult; if (CheckResult(theModule,theTimeStamp,aResult)){ QApplication::setOverrideCursor(Qt::waitCursor); - typedef typename TPrs3d_i::TInterface TPrs3d; - typename TPrs3d::_var_type aPrs3d = - GetVisuGen(theModule)->template Prs3dOnField + TPrs3d_i* aPrs3d = + GetVisuGen(theModule)->template CreatePrs3d (aResult,theMeshName,theEntity,theFieldName,theTimeId); QApplication::restoreOverrideCursor(); - if (!CORBA::is_nil(aPrs3d.in())) - return dynamic_cast(VISU::GetServant(aPrs3d.in()).in()); + if(aPrs3d) + return aPrs3d; } SUIT_MessageBox::warn1(GetDesktop(theModule), QObject::tr("WRN_VISU"), @@ -104,28 +119,28 @@ namespace VISU //--------------------------------------------------------------- - template + template + inline bool - CreatePrs3d(SalomeApp_Module* theModule, + CreatePrs3d(VisuGUI* theModule, _PTR(SObject) theTimeStamp, - const Handle(SALOME_InteractiveObject)& theIO) + const Handle(SALOME_InteractiveObject)& theIO, + const bool theIsCreateView = false) { - using namespace VISU; Storable::TRestoringMap aMap = getMapOfValue(theTimeStamp); + bool isExist; QString aType = Storable::FindValue(aMap,"myType",&isExist); if(!isExist || aType.toInt() != TTIMESTAMP ) return false; + QString aMeshName = Storable::FindValue(aMap,"myMeshName",&isExist).latin1(); QString anEntity = Storable::FindValue(aMap,"myEntityId",&isExist).latin1(); QString aFieldName = Storable::FindValue(aMap,"myFieldName",&isExist).latin1(); QString aTimeStampId = Storable::FindValue(aMap,"myTimeStampId",&isExist).latin1(); // - SUIT_ResourceMgr* aResourceMgr = GetResourceMgr(); - VisuGUI* aMod = dynamic_cast(theModule); - int aPos = 1; - if (aMod) aPos = GetFreePositionOfDefaultScalarBar(aMod); - aResourceMgr->setValue("VISU","scalar_bar_position_num",aPos); + int aPos = GetFreePositionOfDefaultScalarBar(theModule); + GetResourceMgr()->setValue("VISU","scalar_bar_position_num",aPos); // QApplication::setOverrideCursor(Qt::waitCursor); @@ -152,6 +167,7 @@ namespace VISU dynamic_cast( aPrs3d ), aDlg, true ); // in creation mode + UpdateObjBrowser(theModule,true,theTimeStamp); QApplication::restoreOverrideCursor(); delete aDlg; } else { @@ -161,40 +177,57 @@ namespace VISU } } } - PublishInView(theModule,aPrs3d); - Prs3d_i* aPrs_i = dynamic_cast(aPrs3d); - if (aPrs_i != NULL && aMod != NULL) - AddScalarBarPosition(aMod,aPrs_i,aPos); + PublishInView(theModule,aPrs3d,true,theIsCreateView); + + AddScalarBarPosition(theModule,aPrs3d,aPos); + return true; } + return false; } - + //--------------------------------------------------------------- - template + template + inline void - CreatePrs3d(SalomeApp_Module* theModule) + CreatePrs3d(VisuGUI* theModule, + const bool theIsCreateView = true) { - if (CheckLock(GetCStudy(GetAppStudy(theModule)))) + if (CheckLock(GetCStudy(GetAppStudy(theModule)),GetDesktop(theModule))) return; _PTR(SObject) aTimeStampSObj; Handle(SALOME_InteractiveObject) anIO; - if (!CheckTimeStamp(theModule,aTimeStampSObj,&anIO)) + if(!CheckTimeStamp(theModule,aTimeStampSObj,&anIO)) return; - if (!CreatePrs3d(theModule,aTimeStampSObj,anIO)) + if(!CreatePrs3d(theModule,aTimeStampSObj,anIO,theIsCreateView)) return; theModule->application()->putInfo(QObject::tr("INF_DONE")); - theModule->updateObjBrowser(); - UpdateObjBrowser(theModule); - if (SVTK_ViewWindow* aView = GetViewWindow(theModule)) + typedef typename TViewer::TViewWindow TView; + if(TView* aView = GetViewWindow(theModule,theIsCreateView)) aView->onFitAll(); } + template + inline + void + CreatePrs3d(VisuGUI* theModule, + const bool theIsCreateView = true) + { + if(SUIT_ViewManager* aViewManager = theModule->getApp()->activeViewManager()){ + QString aType = aViewManager->getType(); + if(aType == SVTK_Viewer::Type()) + CreatePrs3d(theModule,theIsCreateView); + else if(aType == VVTK_Viewer::Type()) + CreatePrs3d(theModule,theIsCreateView); + } + } + } #endif diff --git a/src/VISUGUI/VisuGUI_ScalarBarDlg.cxx b/src/VISUGUI/VisuGUI_ScalarBarDlg.cxx index 5d89779d..9e811e47 100644 --- a/src/VISUGUI/VisuGUI_ScalarBarDlg.cxx +++ b/src/VISUGUI/VisuGUI_ScalarBarDlg.cxx @@ -30,7 +30,10 @@ #include "VisuGUI.h" #include "VisuGUI_Tools.h" -#include "VisuGUI_FontWg.h" + +#include "SVTK_FontWidget.h" + +#include "SVTK_ViewWindow.h" #include "SVTK_ViewWindow.h" @@ -80,10 +83,6 @@ VisuGUI_ScalarBarPane::VisuGUI_ScalarBarPane (QWidget * parent, bool SetPref): myModeLbl = new QLabel("Scalar Mode", RangeGroup); myModeCombo = new QComboBox(RangeGroup); - myModeCombo->insertItem("Modulus"); - myModeCombo->insertItem("Component 1"); - myModeCombo->insertItem("Component 2"); - myModeCombo->insertItem("Component 3"); CBLog = new QCheckBox (tr("LOGARITHMIC_SCALING"), RangeGroup); CBLog->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); @@ -538,7 +537,6 @@ void VisuGUI_ScalarBarPane::storeToResources() { void VisuGUI_ScalarBarPane::initFromPrsObject(VISU::ScalarMap_i* thePrs) { initFromResources(); myScalarMap = thePrs; - myModeCombo->setCurrentItem(thePrs->GetScalarMode()); setPosAndSize( thePrs->GetPosX(), thePrs->GetPosY(), thePrs->GetWidth(), @@ -557,7 +555,36 @@ void VisuGUI_ScalarBarPane::initFromPrsObject(VISU::ScalarMap_i* thePrs) { setRange( thePrs->GetMin(), thePrs->GetMax(), /*0.0, 0.0,*/ thePrs->IsRangeFixed() ); setScalarBarData( thePrs->GetNbColors(), thePrs->GetLabels() ); - bool isScalarMode = (thePrs->GetField()->myNbComp > 1); + + // Update myModeCombo + int aNbComp = thePrs->GetField()->myNbComp; + bool isScalarMode = (aNbComp > 1); + myModeCombo->clear(); + myModeCombo->insertItem(""); + const VISU::PField& aField = thePrs->GetField(); + const VISU::TNames& aCompNames = aField->myCompNames; + const VISU::TNames& aUnitNames = aField->myUnitNames; + for(int i = 0; i < aNbComp; i++){ + QString aComponent = QString(aCompNames[i]).simplifyWhiteSpace(); + if(aComponent.isNull() || aComponent == "") + aComponent = "Component " + QString::number(i+1); + else + aComponent = "[" + QString::number(i+1) + "] " + aComponent; + + QString anUnit = QString(aUnitNames[i]).simplifyWhiteSpace(); + if(anUnit.isNull() || anUnit == "") + anUnit = "-"; + + aComponent = aComponent + ", " + anUnit; + + myModeCombo->insertItem(aComponent); + } + // + myModeCombo->setCurrentItem(thePrs->GetScalarMode()); + if (aNbComp==1){ + myModeCombo->setCurrentItem(1); + } + // myModeLbl->setEnabled(isScalarMode); myModeCombo->setEnabled(isScalarMode); @@ -610,7 +637,7 @@ void VisuGUI_ScalarBarPane::createScalarBar() if (myPreviewActor != 0) return; if (myScalarMap == NULL) return; - if (!check()) return; + if(!check()) return; if ( myBusy ) return; @@ -706,9 +733,9 @@ void VisuGUI_ScalarBarPane::createScalarBar() void VisuGUI_ScalarBarPane::deleteScalarBar() { if ( myBusy ) return; - + if (myPreviewActor == 0) return; - if (SVTK_ViewWindow* vf = VISU::GetViewWindow()) { + if (SVTK_ViewWindow* vf = VISU::GetViewWindow()){ vf->RemoveActor(myPreviewActor); myPreviewActor->GetScalarBar()->VisibilityOff(); } @@ -724,8 +751,7 @@ void VisuGUI_ScalarBarPane::deletePreview() /** * Store values to presentation object */ -int VisuGUI_ScalarBarPane::storeToPrsObject(VISU::ScalarMap_i* thePrs) -{ +int VisuGUI_ScalarBarPane::storeToPrsObject(VISU::ScalarMap_i* thePrs) { thePrs->SetScalarMode(myModeCombo->currentItem()); thePrs->SetPosition(XSpin->value(), YSpin->value()); thePrs->SetSize(WidthSpin->value(), HeightSpin->value()); @@ -1081,7 +1107,7 @@ VisuGUI_TextPrefDlg::VisuGUI_TextPrefDlg (QWidget* parent) // font QHBox* aHBox = new QHBox (aTitleGrp); aHBox->setSpacing(5); - myTitleFont = new VisuGUI_FontWg (aHBox); + myTitleFont = new SVTK_FontWidget (aHBox); TopLayout->addWidget(aTitleGrp); @@ -1091,7 +1117,7 @@ VisuGUI_TextPrefDlg::VisuGUI_TextPrefDlg (QWidget* parent) // font aHBox = new QHBox (aLabelsGrp); aHBox->setSpacing(5); - myLabelFont = new VisuGUI_FontWg (aHBox); + myLabelFont = new SVTK_FontWidget (aHBox); TopLayout->addWidget(aLabelsGrp); diff --git a/src/VISUGUI/VisuGUI_ScalarBarDlg.h b/src/VISUGUI/VisuGUI_ScalarBarDlg.h index ccb704ad..f68b0f42 100644 --- a/src/VISUGUI/VisuGUI_ScalarBarDlg.h +++ b/src/VISUGUI/VisuGUI_ScalarBarDlg.h @@ -24,6 +24,7 @@ // File : VisuGUI_ScalarBarDlg.h // Author : Laurent CORNABE & Hubert ROLLAND // Module : VISU +// $Header$ #ifndef VISUGUI_SCALARBARDLG_H #define VISUGUI_SCALARBARDLG_H @@ -59,7 +60,7 @@ class QToolButton; class QtxDblSpinBox; class SalomeApp_Module; -class VisuGUI_FontWg; +class SVTK_FontWidget; class VISU_ScalarMapAct; class VisuGUI_TextPrefDlg: public QDialog @@ -77,8 +78,8 @@ class VisuGUI_TextPrefDlg: public QDialog { (isVisible)? myTitleEdt->show() : myTitleEdt->hide(); } public: - VisuGUI_FontWg* myTitleFont; - VisuGUI_FontWg* myLabelFont; + SVTK_FontWidget* myTitleFont; + SVTK_FontWidget* myLabelFont; private: QLineEdit* myTitleEdt; diff --git a/src/VISUGUI/VisuGUI_Selection.cxx b/src/VISUGUI/VisuGUI_Selection.cxx index 7b0bf293..5bcf465f 100644 --- a/src/VISUGUI/VisuGUI_Selection.cxx +++ b/src/VISUGUI/VisuGUI_Selection.cxx @@ -89,10 +89,13 @@ using namespace std; static VisuGUI_SelectionDlg* mySelectionDlg = NULL; -VisuGUI_SelectionDlg::VisuGUI_SelectionDlg (QWidget* parent) - : QDialog(parent, 0, false, WStyle_Customize | WStyle_NormalBorder | - WStyle_Title | WStyle_SysMenu | WDestructiveClose), - mySelectionMgr(NULL) +VisuGUI_SelectionDlg::VisuGUI_SelectionDlg (const SalomeApp_Module* theModule): + QDialog(VISU::GetDesktop(theModule), + 0, + false, + WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose), + mySelectionMgr(NULL), + myModule(theModule) { if (mySelectionDlg) mySelectionDlg->close(true); @@ -259,10 +262,9 @@ VisuGUI_SelectionDlg::VisuGUI_SelectionDlg (QWidget* parent) myFl = false; // Activate Points pane - SVTK_ViewWindow* aSVTKVW = VISU::GetViewWindow(); myWidgetStack->raiseWidget(myPointsPane); - if (aSVTKVW) - aSVTKVW->SetSelectionMode(NodeSelection); + if(SVTK_ViewWindow* aViewWindow = VISU::GetViewWindow(myModule)) + aViewWindow->SetSelectionMode(NodeSelection); onSelectionEvent(); mySelectionDlg = this; @@ -274,23 +276,23 @@ VisuGUI_SelectionDlg::~VisuGUI_SelectionDlg() void VisuGUI_SelectionDlg::onSelectionChange (int theId) { - SVTK_ViewWindow* aSVTKVW = VISU::GetViewWindow(); - if (!aSVTKVW) return; + SVTK_ViewWindow* aViewWindow = VISU::GetViewWindow(myModule); + if (!aViewWindow) return; switch (theId) { case 0: // Points myWidgetStack->raiseWidget(myPointsPane); - aSVTKVW->SetSelectionMode(NodeSelection); + aViewWindow->SetSelectionMode(NodeSelection); onPointIdEdit(myIDValLbl->text()); break; case 1: // Cells myWidgetStack->raiseWidget(myCellsPane); - aSVTKVW->SetSelectionMode(CellSelection); + aViewWindow->SetSelectionMode(CellSelection); onCellIdEdit(myCellIDValLbl->text()); break; case 2: // Actor myWidgetStack->raiseWidget(myActorsPane); - aSVTKVW->SetSelectionMode(ActorSelection); + aViewWindow->SetSelectionMode(ActorSelection); onSelectionEvent(); } } @@ -298,12 +300,19 @@ void VisuGUI_SelectionDlg::onSelectionChange (int theId) void VisuGUI_SelectionDlg::closeEvent (QCloseEvent* theEvent) { - SVTK_ViewWindow* aSVTKVW = VISU::GetViewWindow(); - - mySelectionDlg = NULL; - if (aSVTKVW) - aSVTKVW->SetSelectionMode(ActorSelection); - disconnect(mySelectionMgr,0,0,0); + if( mySelectionDlg ) + { + mySelectionDlg = NULL; + disconnect(mySelectionMgr,0,0,0); + if(SVTK_ViewWindow* aViewWindow = VISU::GetViewWindow(myModule)){ + switch(aViewWindow->SelectionMode()){ + case NodeSelection: + case CellSelection: + aViewWindow->SetSelectionMode(ActorSelection); + break; + } + } + } QDialog::closeEvent(theEvent); } @@ -328,8 +337,18 @@ template QString getVector(TData* theData, int theId){ #define ABS(a) (a>=0)?a:-a void VisuGUI_SelectionDlg::onSelectionEvent() { - SVTK_ViewWindow* aSVTKVW = VISU::GetViewWindow(); - if (!aSVTKVW) return; + SVTK_ViewWindow* aViewWindow = VISU::GetViewWindow(myModule); + if (!aViewWindow) return; + + switch(aViewWindow->SelectionMode()){ + case NodeSelection: + case CellSelection: + case ActorSelection: + break; + default: + close( TRUE ); + return; + } if (myFl) return; myFl = true; @@ -339,14 +358,14 @@ void VisuGUI_SelectionDlg::onSelectionEvent() { SalomeApp_Application* anApp = dynamic_cast (SUIT_Session::session()->activeApplication()); - SVTK_Selector* aSelector = aSVTKVW->GetSelector(); + SVTK_Selector* aSelector = aViewWindow->GetSelector(); VISU::Prs3d_i* aPrs3d = NULL; _PTR(SObject) aSObject; Handle(SALOME_InteractiveObject) anIO; SALOME_ListIO aListIO; - mySelectionMgr->selectedObjects(aListIO, SVTK_Viewer::Type()); + mySelectionMgr->selectedObjects(aListIO); if (aListIO.Extent() == 1) { anIO = aListIO.First(); @@ -392,7 +411,7 @@ void VisuGUI_SelectionDlg::onSelectionEvent() { myFieldName->setText((aFieldName == "NULL") ? QString("No name") : aFieldName); VISU_Actor* anVISUActor = - VISU::FindActor(aSVTKVW, aSObject->GetID().c_str()); + VISU::FindActor(aViewWindow, aSObject->GetID().c_str()); if (anVISUActor) { float aCoord[6]; anVISUActor->GetBounds(aCoord); @@ -414,33 +433,34 @@ void VisuGUI_SelectionDlg::onSelectionEvent() { vtkPointData* aPntData = aDataSet->GetPointData(); for (int ind = 1; ind <= aMapIndex.Extent(); ind++) { - int aID = aMapIndex(ind); + int anID = aMapIndex(ind); switch (aType) { case 0: { - float aCoord[3]; - aDataSet->GetPoint(aID, aCoord); + float* aCoord = anVISUActor->GetNodeCoord(anID); + int aVTKID = anVISUActor->GetNodeVTKID(anID); myXValLbl->setText( QString::number( aCoord[0] ) ); myYValLbl->setText( QString::number( aCoord[1] ) ); myZValLbl->setText( QString::number( aCoord[2] ) ); - myIDValLbl->setText( QString::number(aID) ); - myScalarValLbl->setText(getValue(aPntData, aID)); - myVectorValLbl->setText(getVector(aPntData, aID)); + myIDValLbl->setText( QString::number(anID) ); + myScalarValLbl->setText(getValue(aPntData, aVTKID)); + myVectorValLbl->setText(getVector(aPntData, aVTKID)); } break; case 1: { - vtkCellData* aData = aDataSet->GetCellData(); - vtkCell* aCell = aDataSet->GetCell(aID); + vtkCellData* aCellData = aDataSet->GetCellData(); + vtkCell* aCell = anVISUActor->GetElemCell(anID); + int aVTKID = anVISUActor->GetElemVTKID(anID); if (aCell != NULL) { int aNbOfPoints = aCell->GetNumberOfPoints(); - if (aNbOfPoints <=1 ) { // Cell is point + if ( aNbOfPoints <= 1 ) { // Cell is point clearFields(); } else { - myCellIDValLbl->setText( QString::number(aID) ); - myCellScalarValLbl->setText(getValue(aData, aID)); - myCellVectorValLbl->setText(getVector(aData, aID)); + myCellIDValLbl->setText( QString::number(anID) ); + myCellScalarValLbl->setText(getValue(aCellData, aVTKID)); + myCellVectorValLbl->setText(getVector(aCellData, aVTKID)); float* aCoord; vtkIdList *aPointList = aCell->GetPointIds(); @@ -511,16 +531,16 @@ typedef vtkIdType (vtkDataSet::* TDataSetMethod)(); bool onIdEdit (const QString& theText, TDataSetMethod theMethod, bool theIsCell, + const SalomeApp_Module* theModule, LightApp_SelectionMgr* theSelectionMgr, QLabel* theMeshName, QString theValue, QLabel* theFieldName) { - SalomeApp_Application* anApp = dynamic_cast - (SUIT_Session::session()->activeApplication()); - SVTK_ViewWindow* aSVTKVW = VISU::GetViewWindow(); - if (!aSVTKVW) return false; - SVTK_Selector* aSelector = aSVTKVW->GetSelector(); + SalomeApp_Application* anApp = theModule->getApp(); + SVTK_ViewWindow* aViewWindow = VISU::GetViewWindow(theModule); + if (!aViewWindow) return false; + SVTK_Selector* aSelector = aViewWindow->GetSelector(); VISU::Prs3d_i* aPrs3d = NULL; Handle(SALOME_InteractiveObject) anIO; @@ -560,7 +580,7 @@ bool onIdEdit (const QString& theText, TColStd_MapOfInteger newIndices; newIndices.Add(anId); aSelector->AddOrRemoveIndex(anIO, newIndices, false); - aSVTKVW->highlight(anIO, true, true); + aViewWindow->highlight(anIO, true, true); return true; @@ -575,7 +595,7 @@ void VisuGUI_SelectionDlg::onPointIdEdit (const QString& theText) { if (myFl) return; TDataSetMethod aMethod = &vtkDataSet::GetNumberOfPoints; - bool anIsSelected = onIdEdit(theText,aMethod,false,mySelectionMgr, + bool anIsSelected = onIdEdit(theText,aMethod,false,myModule,mySelectionMgr, myMeshName,tr("WRN_NO_AVAILABLE_DATA"), myFieldName); if (anIsSelected) @@ -589,7 +609,7 @@ void VisuGUI_SelectionDlg::onCellIdEdit (const QString& theText) { if (myFl) return; TDataSetMethod aMethod = &vtkDataSet::GetNumberOfCells; - bool anIsSelected = onIdEdit(theText,aMethod,true,mySelectionMgr, + bool anIsSelected = onIdEdit(theText,aMethod,true,myModule,mySelectionMgr, myMeshName,tr("WRN_NO_AVAILABLE_DATA"), myFieldName); if (anIsSelected) diff --git a/src/VISUGUI/VisuGUI_Selection.h b/src/VISUGUI/VisuGUI_Selection.h index 4fc4f265..467e9c18 100644 --- a/src/VISUGUI/VisuGUI_Selection.h +++ b/src/VISUGUI/VisuGUI_Selection.h @@ -38,12 +38,13 @@ class QLineEdit; class QTable; class LightApp_SelectionMgr; class SalomeApp_Application; +class SalomeApp_Module; class VisuGUI_SelectionDlg: public QDialog { Q_OBJECT public: - VisuGUI_SelectionDlg (QWidget*); + VisuGUI_SelectionDlg (const SalomeApp_Module* theModule); virtual ~VisuGUI_SelectionDlg (); protected: @@ -85,6 +86,7 @@ private slots: QLabel* myDYLbl; QLabel* myDZLbl; + const SalomeApp_Module* myModule; LightApp_SelectionMgr* mySelectionMgr; bool myFl; }; diff --git a/src/VISUGUI/VisuGUI_TimeAnimation.cxx b/src/VISUGUI/VisuGUI_TimeAnimation.cxx index 0918a05e..4d46d01d 100644 --- a/src/VISUGUI/VisuGUI_TimeAnimation.cxx +++ b/src/VISUGUI/VisuGUI_TimeAnimation.cxx @@ -18,6 +18,7 @@ #include "VisuGUI_VectorsDlg.h" #include "VisuGUI_IsoSurfacesDlg.h" #include "VisuGUI_StreamLinesDlg.h" +#include "VisuGUI_GaussPointsDlg.h" #include "VISU_TimeAnimation.h" @@ -29,6 +30,7 @@ #include "VISU_CutLines_i.hh" #include "VISU_Vectors_i.hh" #include "VISU_StreamLines_i.hh" +#include "VISU_GaussPoints_i.hh" #include "VISU_ViewManager_i.hh" @@ -95,7 +97,7 @@ ArrangeDlg::ArrangeDlg(QWidget* theParent, SVTK_ViewWindow* theViewWindow) VISU_Actor* anVISUActor = dynamic_cast(anActor); if (anVISUActor) if (anVISUActor->GetVisibility() != 0) { - VISU::Prs3d_i* aPrs = anVISUActor->GetParent()->GetPrs3d(); + VISU::Prs3d_i* aPrs = anVISUActor->GetPrs3d(); if (aPrs) { if (!myPrsMap.contains(aPrs)) { SALOMEDS::SObject_var aSObject = aPrs->GetSObject(); @@ -431,22 +433,25 @@ void ArrangeDlg::acceptViewWindow() } -//***************************************************************************************************** -//***************************************************************************************************** -//***************************************************************************************************** -SetupDlg::SetupDlg (VisuGUI* theModule, VISU_TimeAnimation* theAnimator) - : QDialog(VISU::GetDesktop(theModule), "SetupDlg", true, WStyle_Customize | - WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu), - myModule(theModule) +//------------------------------------------------------------------------ +//------------------------------------------------------------------------ +//------------------------------------------------------------------------ +SetupDlg::SetupDlg (QWidget* theParent, + VisuGUI* theModule, + VISU_TimeAnimation* theAnimator) : + QDialog(theParent, + "SetupDlg", + true, + WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu), + myAnimator(theAnimator), + myModule(theModule) { setCaption("Setup Animation"); setSizeGripEnabled( TRUE ); - myAnimator = theAnimator; QVBoxLayout* aMainLayout = new QVBoxLayout(this, 7, 6); aMainLayout->setSpacing(5); - QFrame* aRangeGrp = new QFrame(this); QGridLayout* aRangeLayout = new QGridLayout( aRangeGrp ); aRangeLayout->setSpacing( 6 ); @@ -548,7 +553,7 @@ SetupDlg::SetupDlg (VisuGUI* theModule, VISU_TimeAnimation* theAnimator) aMainLayout->addWidget(aBtnBox); } -//************************************************************************ +//------------------------------------------------------------------------ enum PrsComboItem { TSCALARMAP_ITEM = 0, // VISU::TSCALARMAP TISOSURFACE_ITEM = 1, // VISU::TISOSURFACE @@ -556,59 +561,93 @@ enum PrsComboItem { TPLOT3D_ITEM = 3, // VISU::TPLOT3D TDEFORMEDSHAPE_ITEM = 4, // VISU::TDEFORMEDSHAPE TVECTORS_ITEM = 5, // VISU::TVECTORS - TSTREAMLINES_ITEM = 6 // VISU::TSTREAMLINES + TSTREAMLINES_ITEM = 6, // VISU::TSTREAMLINES + TGAUSSPOINTS_ITEM = 7 // VISU::TGAUSSPOINTS }; -//************************************************************************ +//------------------------------------------------------------------------ void SetupDlg::onFieldChange (int theIndex) { FieldData& aData = myAnimator->getFieldData(theIndex); myTypeCombo->clear(); + myTypeId2ComboId.clear(); + myComboId2TypeId.clear(); + // ATTENTION: append items in the same order like it is done in the PrsComboItem enumeration myTypeCombo->insertItem("Scalar Map"); // item 0 + myTypeId2ComboId[TSCALARMAP_ITEM] = myComboId2TypeId.size(); + myComboId2TypeId.push_back(TSCALARMAP_ITEM);; + myTypeCombo->insertItem("Iso Surfaces"); // item 1 + myTypeId2ComboId[TISOSURFACE_ITEM] = myComboId2TypeId.size(); + myComboId2TypeId.push_back(TISOSURFACE_ITEM);; + myTypeCombo->insertItem("Cut Planes"); // item 2 + myTypeId2ComboId[TCUTPLANES_ITEM] = myComboId2TypeId.size(); + myComboId2TypeId.push_back(TCUTPLANES_ITEM);; + myTypeCombo->insertItem("Plot 3D"); // item 3 + myTypeId2ComboId[TPLOT3D_ITEM] = myComboId2TypeId.size(); + myComboId2TypeId.push_back(TPLOT3D_ITEM);; _PTR(SObject) aSObject = aData.myField; long aNumComp = VISU::getValue(aSObject, "myNumComponent").toLong(); if (aNumComp > 1) { myTypeCombo->insertItem("Deformed Shape"); // item 4 + myTypeId2ComboId[TDEFORMEDSHAPE_ITEM] = myComboId2TypeId.size(); + myComboId2TypeId.push_back(TDEFORMEDSHAPE_ITEM);; + myTypeCombo->insertItem("Vectors"); // item 5 + myTypeId2ComboId[TVECTORS_ITEM] = myComboId2TypeId.size(); + myComboId2TypeId.push_back(TVECTORS_ITEM);; + myTypeCombo->insertItem("Stream Lines"); // item 6 + myTypeId2ComboId[TSTREAMLINES_ITEM] = myComboId2TypeId.size(); + myComboId2TypeId.push_back(TSTREAMLINES_ITEM);; + } + + long anEntityId = VISU::getValue(aSObject, "myEntityId").toLong(); + if(anEntityId == VISU::CELL){ + myTypeCombo->insertItem("Gauss Points"); // item 7 + myTypeId2ComboId[TGAUSSPOINTS_ITEM] = myComboId2TypeId.size(); + myComboId2TypeId.push_back(TGAUSSPOINTS_ITEM);; } + switch (aData.myPrsType) { case VISU::TSCALARMAP: //Scalar Map - myTypeCombo->setCurrentItem(TSCALARMAP_ITEM); + myTypeCombo->setCurrentItem(myTypeId2ComboId[TSCALARMAP_ITEM]); break; case VISU::TISOSURFACE: //Iso Surfaces - myTypeCombo->setCurrentItem(TISOSURFACE_ITEM); + myTypeCombo->setCurrentItem(myTypeId2ComboId[TISOSURFACE_ITEM]); break; case VISU::TCUTPLANES: //Cut Planes - myTypeCombo->setCurrentItem(TCUTPLANES_ITEM); + myTypeCombo->setCurrentItem(myTypeId2ComboId[TCUTPLANES_ITEM]); break; case VISU::TPLOT3D: //Plot 3D - myTypeCombo->setCurrentItem(TPLOT3D_ITEM); + myTypeCombo->setCurrentItem(myTypeId2ComboId[TPLOT3D_ITEM]); break; case VISU::TDEFORMEDSHAPE: //Deformed Shape - myTypeCombo->setCurrentItem(TDEFORMEDSHAPE_ITEM); + myTypeCombo->setCurrentItem(myTypeId2ComboId[TDEFORMEDSHAPE_ITEM]); break; case VISU::TVECTORS: //Vectors - myTypeCombo->setCurrentItem(TVECTORS_ITEM); + myTypeCombo->setCurrentItem(myTypeId2ComboId[TVECTORS_ITEM]); break; case VISU::TSTREAMLINES: //Stream Lines - myTypeCombo->setCurrentItem(TSTREAMLINES_ITEM); - aData.myPrsType = VISU::TSTREAMLINES; + myTypeCombo->setCurrentItem(myTypeId2ComboId[TSTREAMLINES_ITEM]); + break; + case VISU::TGAUSSPOINTS: //Gauss Points + myTypeCombo->setCurrentItem(myTypeId2ComboId[TGAUSSPOINTS_ITEM]); break; } //myPropBtn->setEnabled(aData.myPrsType != VISU::TSCALARMAP); } -//************************************************************************ +//------------------------------------------------------------------------ void SetupDlg::onTypeChanged (int theIndex) { FieldData& aData = myAnimator->getFieldData(myFieldLst->currentItem()); - switch (theIndex) { + int aType = myComboId2TypeId[theIndex]; + switch (aType) { case TSCALARMAP_ITEM: //Scalar Map aData.myPrsType = VISU::TSCALARMAP; break; @@ -630,30 +669,33 @@ void SetupDlg::onTypeChanged (int theIndex) case TSTREAMLINES_ITEM: //Stream Lines aData.myPrsType = VISU::TSTREAMLINES; break; + case TGAUSSPOINTS_ITEM: //Gauss Points + aData.myPrsType = VISU::TGAUSSPOINTS; + break; } myAnimator->clearData(aData); //myPropBtn->setEnabled(aData.myPrsType != VISU::TSCALARMAP); //myAnimator->generatePresentations(myFieldLst->currentItem()); } -//************************************************************************ -/*void SetupDlg::onScalarBarDlg() { - QApplication::setOverrideCursor( Qt::waitCursor ); - FieldData& aData = myAnimator->getFieldData(myFieldLst->currentItem()); - if (aData.myPrs == 0) - myAnimator->generatePresentations(myFieldLst->currentItem()); - QApplication::restoreOverrideCursor(); - VisuGUI_ScalarBarDlg* aScalarBarDlg = new VisuGUI_ScalarBarDlg(); - aScalarBarDlg->initFromPrsObject(aData.myPrs[0]); - if (aScalarBarDlg->exec()) { - for (int i = 0; i < aData.myNbFrames; i++) - aScalarBarDlg->storeToPrsObject(aData.myPrs[i]); +//------------------------------------------------------------------------ +namespace +{ + template + void + EditPrs(VisuGUI* theModule, + FieldData& theData) + { + TDialog* aDlg = new TDialog(theModule); + aDlg->initFromPrsObject(dynamic_cast(theData.myPrs[0])); + if (aDlg->exec()) + for (int i = 0; i < theData.myNbFrames; i++) + aDlg->storeToPrsObject(dynamic_cast(theData.myPrs[i])); + delete aDlg; } } -*/ - -//************************************************************************ + void SetupDlg::onPreferencesDlg() { SUIT_OverrideCursor c; @@ -661,83 +703,52 @@ void SetupDlg::onPreferencesDlg() if (aData.myPrs.empty()) myAnimator->generatePresentations(myFieldLst->currentItem()); -// BUG VISU5725 : Compatibility gcc 2.95 -// #define EDITPRS(TYPE, DLG) \ -// { \ -// DLG* aDlg = new DLG(); \ -// aDlg->initFromPrsObject(dynamic_cast(aData.myPrs.at(0))); \ -// if (aDlg->exec()) { \ -// for (int i = 0; i < aData.myNbFrames; i++) \ -// aDlg->storeToPrsObject(dynamic_cast(aData.myPrs.at(i))); \ -// } \ -// delete aDlg; \ -// } - - -#define EDITPRS(TYPE, DLG) {\ - DLG* aDlg = new DLG (myModule);\ - aDlg->initFromPrsObject(dynamic_cast(aData.myPrs[0]));\ - if (aDlg->exec())\ - { \ - for (int i = 0; i < aData.myNbFrames; i++)\ - aDlg->storeToPrsObject(dynamic_cast(aData.myPrs[i]));\ - } \ - delete aDlg;} - - switch (myTypeCombo->currentItem()) { + int aType = myComboId2TypeId[myTypeCombo->currentItem()]; + switch (aType) { case TSCALARMAP_ITEM: //Scalar Map c.suspend(); - EDITPRS(VISU::ScalarMap_i, VisuGUI_ScalarBarDlg); + EditPrs(myModule,aData); break; case TISOSURFACE_ITEM: //Iso Surfaces c.suspend(); - EDITPRS(VISU::IsoSurfaces_i, VisuGUI_IsoSurfacesDlg); + EditPrs(myModule,aData); break; case TCUTPLANES_ITEM: //Cut Planes c.suspend(); - EDITPRS(VISU::CutPlanes_i, VisuGUI_CutPlanesDlg); - /*{ - VisuGUI_CutPlanesDlg* aDlg = new VisuGUI_CutPlanesDlg (myModule); - //_CS_PhB :operator [] .at aDlg->initFromPrsObject(dynamic_cast(aData.myPrs.at(0))); - aDlg->initFromPrsObject(dynamic_cast(aData.myPrs[0])); - - if (aDlg->exec()) { - for (int i = 0; i < aData.myNbFrames; i++) - //_CS_PhB:operator [] .at aDlg->storeToPrsObject(dynamic_cast(aData.myPrs.at(i))); - aDlg->storeToPrsObject(dynamic_cast(aData.myPrs[i])); - } - delete aDlg; - }*/ + EditPrs(myModule,aData); break; case TPLOT3D_ITEM: //Plot 3D c.suspend(); - EDITPRS(VISU::Plot3D_i, VisuGUI_Plot3DDlg); + EditPrs(myModule,aData); break; case TDEFORMEDSHAPE_ITEM: //Deformed Shape c.suspend(); - EDITPRS(VISU::DeformedShape_i, VisuGUI_DeformedShapeDlg); + EditPrs(myModule,aData); break; case TVECTORS_ITEM: //Vectors c.suspend(); - EDITPRS(VISU::Vectors_i, VisuGUI_VectorsDlg); + EditPrs(myModule,aData); break; case TSTREAMLINES_ITEM: //Stream Lines c.suspend(); - EDITPRS(VISU::StreamLines_i, VisuGUI_StreamLinesDlg); + EditPrs(myModule,aData); + break; + case TGAUSSPOINTS_ITEM: //Gauss Points + c.suspend(); + EditPrs(myModule,aData); break; } -#undef EDITPRS } -//************************************************************************ +//------------------------------------------------------------------------ void SetupDlg::onArrangeDlg() { ArrangeDlg aDlg(this, myAnimator); aDlg.exec(); } -//************************************************************************ +//------------------------------------------------------------------------ void SetupDlg::onRangeCheck (bool theCheck) { for (int i = 0; i < myAnimator->getNbFields(); i++) @@ -758,7 +769,7 @@ void SetupDlg::onRangeCheck (bool theCheck) } } -//************************************************************************ +//------------------------------------------------------------------------ void SetupDlg::onMinValue (double theVal) { if (theVal > myAnimator->getMaxRange()) { @@ -771,7 +782,7 @@ void SetupDlg::onMinValue (double theVal) myAnimator->setAnimationRange(theVal, myAnimator->getMaxRange()); } -//************************************************************************ +//------------------------------------------------------------------------ void SetupDlg::onMaxValue (double theVal) { if (theVal < myAnimator->getMinRange()) { @@ -891,11 +902,14 @@ static const char * pauseIco[] = { static QPixmap MYpausePixmap(pauseIco); -VisuGUI_TimeAnimationDlg::VisuGUI_TimeAnimationDlg (VisuGUI* theModule, _PTR(Study) theStudy) - : QDialog(VISU::GetDesktop(theModule), "VisuGUI_TimeAnimationDlg", false, WStyle_Customize | - WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose), - myModule(theModule), - myStudy(theStudy) +VisuGUI_TimeAnimationDlg::VisuGUI_TimeAnimationDlg (VisuGUI* theModule, _PTR(Study) theStudy) : + QDialog(VISU::GetDesktop(theModule), + "VisuGUI_TimeAnimationDlg", + false, + WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose), + myModule(theModule), + myStudy(theStudy), + mySetupDlg(NULL) { setCaption("Animation"); setSizeGripEnabled( TRUE ); @@ -903,7 +917,7 @@ VisuGUI_TimeAnimationDlg::VisuGUI_TimeAnimationDlg (VisuGUI* theModule, _PTR(Stu myAnimator = new VISU_TimeAnimation (theStudy); myAnimator->setSpeed(1); - myAnimator->setViewer(VISU::GetViewWindow()); + myAnimator->setViewer(VISU::GetViewWindow(theModule)); connect(myAnimator, SIGNAL(frameChanged(long, double)), this, SLOT(onExecution(long, double))); connect(myAnimator, SIGNAL(stopped()), this, SLOT(onStop())); @@ -1086,13 +1100,13 @@ VisuGUI_TimeAnimationDlg::VisuGUI_TimeAnimationDlg (VisuGUI* theModule, _PTR(Stu myPlayFrame->setEnabled(false); } -//************************************************************************ +//------------------------------------------------------------------------ VisuGUI_TimeAnimationDlg::~VisuGUI_TimeAnimationDlg() { delete myAnimator; } -//************************************************************************ +//------------------------------------------------------------------------ void VisuGUI_TimeAnimationDlg::onTypeChange (int index) { stopAnimation(); @@ -1102,14 +1116,14 @@ void VisuGUI_TimeAnimationDlg::onTypeChange (int index) myPlayFrame->setEnabled(false); } -//************************************************************************ +//------------------------------------------------------------------------ void VisuGUI_TimeAnimationDlg::addField (_PTR(SObject) theSObject) { myPlayFrame->setEnabled(false); myAnimator->addField(theSObject); } -//************************************************************************ +//------------------------------------------------------------------------ void VisuGUI_TimeAnimationDlg::createFrames() { stopAnimation(); @@ -1142,7 +1156,7 @@ void VisuGUI_TimeAnimationDlg::createFrames() //myPlayFrame->setEnabled(true); } -//************************************************************************ +//------------------------------------------------------------------------ void VisuGUI_TimeAnimationDlg::onPlayPressed() { if (myPlayBtn->isOn() && (!myAnimator->running())) { @@ -1165,38 +1179,44 @@ void VisuGUI_TimeAnimationDlg::onPlayPressed() } } -//************************************************************************ +//------------------------------------------------------------------------ void VisuGUI_TimeAnimationDlg::onBackPressed() { //stopAnimation(); myAnimator->prevFrame(); } -//************************************************************************ +//------------------------------------------------------------------------ void VisuGUI_TimeAnimationDlg::onForvardPressed() { myAnimator->nextFrame(); } -//************************************************************************ +//------------------------------------------------------------------------ void VisuGUI_TimeAnimationDlg::onLastPressed() { myAnimator->lastFrame(); } -//************************************************************************ +//------------------------------------------------------------------------ void VisuGUI_TimeAnimationDlg::onFirstPressed() { myAnimator->firstFrame(); } -//************************************************************************ +//------------------------------------------------------------------------ void VisuGUI_TimeAnimationDlg::clearView() { myAnimator->clearView(); } -//************************************************************************ +//------------------------------------------------------------------------ +void VisuGUI_TimeAnimationDlg::showEvent(QShowEvent* theEvent) +{ + mySetupDlg = new SetupDlg(this,myModule, myAnimator); +} + +//------------------------------------------------------------------------ void VisuGUI_TimeAnimationDlg::closeEvent (QCloseEvent* theEvent) { myAnimator->stopAnimation(); @@ -1209,20 +1229,20 @@ void VisuGUI_TimeAnimationDlg::closeEvent (QCloseEvent* theEvent) } } -//************************************************************************ +//------------------------------------------------------------------------ void VisuGUI_TimeAnimationDlg::onWindowChanged (int index) { if (myAnimator->isRunning()) return; myAnimator->gotoFrame(index); } -//************************************************************************ +//------------------------------------------------------------------------ void VisuGUI_TimeAnimationDlg::onSpeedChange (double theSpeed) { myAnimator->setSpeed((int)theSpeed); } -//************************************************************************ +//------------------------------------------------------------------------ void VisuGUI_TimeAnimationDlg::stopAnimation() { myAnimator->stopAnimation(); @@ -1232,24 +1252,23 @@ void VisuGUI_TimeAnimationDlg::stopAnimation() myGenBtn->setEnabled(true); } -//************************************************************************ +//------------------------------------------------------------------------ void VisuGUI_TimeAnimationDlg::onExecution (long theNewFrame, double theTime) { myTimeLbl->setText(QString("%1").arg(theTime)); mySlider->setValue(theNewFrame); } -//************************************************************************ +//------------------------------------------------------------------------ void VisuGUI_TimeAnimationDlg::onSetupDlg() { - if (myAnimator->getNbFrames() > 0) myAnimator->firstFrame(); - SetupDlg* aDlg = new SetupDlg (myModule, myAnimator); - aDlg->exec(); + if (myAnimator->getNbFrames() > 0) + myAnimator->firstFrame(); + mySetupDlg->exec(); myPlayFrame->setEnabled(false); - delete aDlg; } -//************************************************************************ +//------------------------------------------------------------------------ void VisuGUI_TimeAnimationDlg::onBrowse() { QString aPath = SUIT_FileDlg::getExistingDirectory(this, "/", "Select path"); @@ -1257,7 +1276,7 @@ void VisuGUI_TimeAnimationDlg::onBrowse() myPathEdit->setText(Qtx::addSlash(aPath)); } -//************************************************************************ +//------------------------------------------------------------------------ void VisuGUI_TimeAnimationDlg::onStop() { if (isClosing) { @@ -1270,14 +1289,14 @@ void VisuGUI_TimeAnimationDlg::onStop() } } -//************************************************************************ +//------------------------------------------------------------------------ void VisuGUI_TimeAnimationDlg::saveToStudy() { myAnimator->saveAnimation(); VISU::UpdateObjBrowser(myModule, true); } -//************************************************************************ +//------------------------------------------------------------------------ void VisuGUI_TimeAnimationDlg::publishToStudy() { myAnimator->publishInStudy(); @@ -1285,7 +1304,7 @@ void VisuGUI_TimeAnimationDlg::publishToStudy() mySaveBtn->setEnabled(myAnimator->isSavedInStudy()); } -//************************************************************************ +//------------------------------------------------------------------------ void VisuGUI_TimeAnimationDlg::restoreFromStudy(_PTR(SObject) theAnimation) { myAnimator->restoreFromStudy(theAnimation); diff --git a/src/VISUGUI/VisuGUI_TimeAnimation.h b/src/VISUGUI/VisuGUI_TimeAnimation.h index daeb134e..53191604 100644 --- a/src/VISUGUI/VisuGUI_TimeAnimation.h +++ b/src/VISUGUI/VisuGUI_TimeAnimation.h @@ -90,7 +90,9 @@ class SetupDlg: public QDialog { Q_OBJECT public: - SetupDlg(VisuGUI* theModule, VISU_TimeAnimation* theAnimator); + SetupDlg(QWidget* theParent, + VisuGUI* theModule, + VISU_TimeAnimation* theAnimator); ~SetupDlg() {}; private slots: @@ -106,8 +108,12 @@ class SetupDlg: public QDialog { private: VisuGUI* myModule; VISU_TimeAnimation* myAnimator; + QListBox* myFieldLst; QComboBox* myTypeCombo; + std::vector myComboId2TypeId; + std::map myTypeId2ComboId; + QPushButton* myPropBtn; QPushButton* myArrangeBtn; QCheckBox* myUseRangeChk; @@ -130,6 +136,7 @@ class VisuGUI_TimeAnimationDlg: public QDialog protected: virtual void closeEvent(QCloseEvent* theEvent); + virtual void showEvent(QShowEvent* theEvent); void stopAnimation(); private slots: @@ -159,6 +166,7 @@ class VisuGUI_TimeAnimationDlg: public QDialog QPushButton* myGenBtn; QFrame* myPlayFrame; + SetupDlg* mySetupDlg; _PTR(Study) myStudy; VisuGUI* myModule; diff --git a/src/VISUGUI/VisuGUI_Timer.cxx b/src/VISUGUI/VisuGUI_Timer.cxx new file mode 100644 index 00000000..ca1eea96 --- /dev/null +++ b/src/VISUGUI/VisuGUI_Timer.cxx @@ -0,0 +1,104 @@ +// VISU VISUGUI : GUI of VISU 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 : VisuGUI_Timer.cxx +// Module : SALOME + +#include "VisuGUI_Timer.h" + +#include "SUIT_Desktop.h" + +#include "utilities.h" + +#ifndef WNT +static struct timezone *tz=(struct timezone*) malloc(sizeof(struct timezone)); +#else +//timezone *tz=_timezone; +#endif + +#ifndef CLK_TCK +# define CLK_TCK CLOCKS_PER_SEC +#endif + +VisuGUI_Timer::VisuGUI_Timer() : + Utils_Timer() +{ +} + +VisuGUI_Timer::~VisuGUI_Timer() +{ +} + +void VisuGUI_Timer::Start() +{ + if (Stopped) { + Stopped = 0; +#ifndef WNT + times(RefToInitialTMS); + gettimeofday(RefToInitialTimeB,tz); +#else + SYSTEMTIME st; + GetSystemTime(&st); + SystemTimeToFileTime(&st, RefToInitialTMS); + time(RefToCurrentTimeB); +#endif + } +} + +void VisuGUI_Timer::Stop() +{ + if (!Stopped) { +#ifndef WNT + times(RefToCurrentTMS); + int diffr_user = RefToCurrentTMS->tms_utime - RefToInitialTMS->tms_utime; + int diffr_sys = RefToCurrentTMS->tms_stime - RefToInitialTMS->tms_stime; + gettimeofday(RefToCurrentTimeB,tz); + + static long aCLK_TCK=sysconf(_SC_CLK_TCK); + Cumul_user += (double) diffr_user / aCLK_TCK ; + Cumul_sys += (double) diffr_sys / aCLK_TCK ; +#else + SYSTEMTIME st; + GetSystemTime(&st); + SystemTimeToFileTime(&st, RefToCurrentTMS); + Cumul_user += (int)(((ULARGE_INTEGER*)(RefToCurrentTMS))->QuadPart - ((ULARGE_INTEGER*)(RefToInitialTMS))->QuadPart) / 10000000; + Cumul_sys = Cumul_user; + time(RefToCurrentTimeB); +#endif + Stopped = 1; + } +} + +void VisuGUI_Timer::Reset() { + Stopped = 1; + Cumul_user = Cumul_sys = 0. ; +} + +QString VisuGUI_Timer::GetTime() { + bool StopSav = Stopped; + if (!StopSav) Stop(); + + return QString::number( Cumul_user ); + + if (!StopSav) Start(); +} diff --git a/src/VISUGUI/VisuGUI_Timer.h b/src/VISUGUI/VisuGUI_Timer.h new file mode 100644 index 00000000..bbfb7e57 --- /dev/null +++ b/src/VISUGUI/VisuGUI_Timer.h @@ -0,0 +1,43 @@ +// VISU VISUGUI : GUI of VISU 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 : VisuGUI_Timer.h +// Module : SALOME + +#include + +#include + +class VisuGUI_Timer : public Utils_Timer +{ + public: + VisuGUI_Timer(); + virtual ~VisuGUI_Timer(); + + public: + void Start(); + void Stop(); + void Reset(); + + QString GetTime(); +}; diff --git a/src/VISUGUI/VisuGUI_Tools.cxx b/src/VISUGUI/VisuGUI_Tools.cxx index 300112d5..b59e97ca 100644 --- a/src/VISUGUI/VisuGUI_Tools.cxx +++ b/src/VISUGUI/VisuGUI_Tools.cxx @@ -41,6 +41,9 @@ #include "SalomeApp_Module.h" #include "SalomeApp_Study.h" #include "SalomeApp_Application.h" + +#include "OB_Browser.h" +#include "LightApp_DataObject.h" #include "LightApp_SelectionMgr.h" #include "SALOME_ListIO.hxx" @@ -101,21 +104,83 @@ namespace VISU } bool - CheckLock( _PTR(Study) theStudy ) + CheckLock( _PTR(Study) theStudy, + QWidget* theWidget ) { - if(IsStudyLocked(theStudy)) - { - SalomeApp_Application* anApp = dynamic_cast - (SUIT_Session::session()->activeApplication()); - if (anApp) - { - SUIT_MessageBox::warn1(anApp->desktop(), - QObject::tr("WRN_VISU_WARNING"), - QObject::tr("WRN_STUDY_LOCKED"), - QObject::tr("BUT_OK")); - return true; + if(IsStudyLocked(theStudy)){ + SUIT_MessageBox::warn1(theWidget, + QObject::tr("WRN_VISU_WARNING"), + QObject::tr("WRN_STUDY_LOCKED"), + QObject::tr("BUT_OK")); + return true; + } + return false; + } + + LightApp_DataObject* + FindDataObject(SUIT_DataObject* theDataObject, + const QString& theEntry, + int theLevel) + { + int aLevel = theDataObject->level() + 2; + QString aSourceEntry = theEntry.section(':',0,aLevel); + DataObjectList aList; + theDataObject->children(aList); + DataObjectListIterator aDataObjectIter(aList); + while(SUIT_DataObject* aDataObject = aDataObjectIter.current()){ + if(LightApp_DataObject* aChildDataObject = dynamic_cast(aDataObject)){ + QString anEntry = aChildDataObject->entry(); + QString aCurrentEntry = anEntry.section(':',0,aLevel); + if(aSourceEntry == aCurrentEntry){ + if(theLevel == aLevel){ + return aChildDataObject; + }else{ + return FindDataObject(aChildDataObject,theEntry,theLevel); } + } } + ++aDataObjectIter; + } + return NULL; + } + + LightApp_DataObject* + FindDataObject(CAM_Module* theModule, + _PTR(SObject) theSObject) + { + CAM_DataModel* aDataModel = theModule->dataModel(); + CAM_DataObject* aRootDataObject = aDataModel->root(); + if(_PTR(SComponent) aComponent = theSObject) + return dynamic_cast(aRootDataObject); + + int aLevel = theSObject->Depth(); + std::string anEntry = theSObject->GetID(); + return FindDataObject(aRootDataObject,anEntry.c_str(),aLevel); + } + + void + UpdateObjBrowser(SalomeApp_Module* theModule, + bool theIsUpdateDataModel, + _PTR(SObject) theSObject) + { + LightApp_DataObject* aDataObject = NULL; + if(theSObject) + aDataObject = FindDataObject(theModule,theSObject); + + theModule->updateObjBrowser(theIsUpdateDataModel,aDataObject); + theModule->getApp()->updateActions(); + } + + bool + IsSObjectTable( _PTR(SObject) theSObject ) + { + if ( theSObject ) { + _PTR(GenericAttribute) anAttr; + if (theSObject->FindAttribute( anAttr, "AttributeTableOfInteger" )) + return true; + if (theSObject->FindAttribute( anAttr, "AttributeTableOfReal" )) + return true; + } return false; } @@ -225,7 +290,7 @@ namespace VISU Handle(SALOME_InteractiveObject)* theIO, VISU::Storable::TRestoringMap* theMap) { - if (CheckLock(GetCStudy(GetAppStudy(theModule)))) + if (CheckLock(GetCStudy(GetAppStudy(theModule)),GetDesktop(theModule))) return NULL; CORBA::Object_var anObject = GetSelectedObj(theModule, theIO); @@ -400,27 +465,24 @@ namespace VISU } void - DeleteSObject (SalomeApp_Module* theModule, - _PTR(Study) theStudy, - _PTR(SObject) theSObject) + DeleteSObject(VisuGUI* theModule, + _PTR(Study) theStudy, + _PTR(SObject) theSObject) { - //SalomeApp_Study* study = GetAppStudy( theModule ); - _PTR(ChildIterator) aChildIter = theStudy->NewChildIterator(theSObject); for (aChildIter->InitEx(true); aChildIter->More(); aChildIter->Next()) { _PTR(SObject) aChildSObject = aChildIter->Value(); CORBA::Object_var aChildObj = VISU::ClientSObjectToObject(aChildSObject); - VisuGUI* aMod = dynamic_cast(theModule); - if(aMod) RemoveScalarBarPosition(aMod,aChildObj); + RemoveScalarBarPosition(theModule,aChildObj); ErasePrs(theModule, aChildObj); } CORBA::Object_var anObj = VISU::ClientSObjectToObject(theSObject); if (!CORBA::is_nil(anObj)) { - VisuGUI* aMod = dynamic_cast(theModule); - if(aMod) RemoveScalarBarPosition(aMod,anObj); + RemoveScalarBarPosition(theModule,anObj); ErasePrs(theModule, anObj); + VISU::RemovableObject_var aRemovableObject = VISU::RemovableObject::_narrow(anObj); if (!CORBA::is_nil(aRemovableObject)) { aRemovableObject->RemoveFromStudy(); @@ -435,32 +497,17 @@ namespace VISU } void - DeletePrs3d(SalomeApp_Module* theModule, + DeletePrs3d(VisuGUI* theModule, VISU::Prs3d_i* thePrs, const Handle(SALOME_InteractiveObject)& theIO) { if (!thePrs) return; - if (CheckLock(GetCStudy(GetAppStudy(theModule)))) + if (CheckLock(GetCStudy(GetAppStudy(theModule)),GetDesktop(theModule))) return; - SALOMEDS::SObject_var aSObject = thePrs->GetSObject(); - CORBA::String_var anEntry = aSObject->GetID(); - LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(theModule); - Remove(aSelectionMgr,theIO); - TViewWindows aViewWindows = GetViews(theModule); - for(int i = 0, iEnd = aViewWindows.size(); i < iEnd; i++){ - SVTK_ViewWindow* aView = aViewWindows[i]; - if(VISU_Actor* anActor = FindActor(aView,anEntry.in())){ - aView->RemoveActor(anActor); - anActor->Delete(); - } - } - thePrs->RemoveFromStudy(); - VisuGUI* aMod = dynamic_cast(theModule); - Prs3d_i* aPrs_i = dynamic_cast(thePrs); - if (aMod && aPrs_i) - RemoveScalarBarPosition(aMod,aPrs_i); + RemoveScalarBarPosition(theModule,thePrs); + thePrs->RemoveFromStudy(); } void @@ -468,9 +515,7 @@ namespace VISU VISU::Prs3d_i* thePrs) { if ( SVTK_ViewWindow* vw = GetViewWindow( theModule ) ){ - VISU_Actor* anVISUActor = FindActor( vw, thePrs ); - - if (anVISUActor) { + if (VISU_Actor* anVISUActor = FindActor( vw, thePrs )) { anVISUActor->VisibilityOff(); } } @@ -482,9 +527,7 @@ namespace VISU ChangeRepresentation (const SalomeApp_Module* theModule, VISU::PresentationType theType) { - SUIT_ViewWindow* aView = GetActiveView(theModule, SVTK_Viewer::Type()); - if (!aView) return; - SVTK_ViewWindow* vw = dynamic_cast( aView ); + SVTK_ViewWindow* vw = GetViewWindow( theModule, false ); if( !vw ) return; @@ -581,6 +624,9 @@ namespace VISU _PTR(SObject) theSource, VISU::Result_var& theResult) { + if(theSource->Depth() < 3) // Bug of SALOMEDS : can\t get father from root object + return NULL; + _PTR(SObject) aSObj = theSource->GetFather(); if (!aSObj) return NULL; @@ -605,13 +651,7 @@ namespace VISU return NULL; theResult = VISU::Result::_narrow(anObject); - VISU::Result_i* pResult = dynamic_cast(VISU::GetServant(anObject).in()); - if (pResult == NULL) - SUIT_MessageBox::warn1(GetDesktop(theModule), - QObject::tr("WRN_VISU"), - QObject::tr("WRN_NO_AVAILABLE_DATA"), - QObject::tr("BUT_OK")); - return pResult; + return dynamic_cast(VISU::GetServant(anObject).in()); } // Views @@ -673,11 +713,15 @@ namespace VISU /*SVTK_ViewWindow* GetViewWindow(const SalomeApp_Module* theModule, const bool theCreate ) { - if(SalomeApp_Application* anApp = theModule->getApp()){ - if(SUIT_ViewManager* aViewManager = anApp->getViewManager( SVTK_Viewer::Type(), theCreate )){ - if(SUIT_ViewWindow* aViewWindow = aViewManager->getActiveView()){ - return dynamic_cast(aViewWindow); - } + if (SalomeApp_Application* anApp = theModule->getApp()) + { + SVTK_ViewWindow* wnd = dynamic_cast(anApp->desktop()->activeWindow()); + if( wnd ) + return wnd; + else + { + if(SUIT_ViewManager* aViewManager = anApp->getViewManager( SVTK_Viewer::Type(), theCreate )) + return dynamic_cast( aViewManager->getActiveView() ); } } return NULL; @@ -734,20 +778,19 @@ namespace VISU vtkRenderer *aRen = vw->getRenderer(); vtkActorCollection *anActColl = aRen->GetActors(); + anActColl->InitTraversal(); vtkActor *anActor; VISU_Actor* anVISUActor = NULL; VISU_Actor* aResActor = NULL; - for(anActColl->InitTraversal(); (anActor = anActColl->GetNextActor()) != NULL; ){ - if(!SALOME_Actor::SafeDownCast(anActor)) - continue; - if(anActor->IsA("VISU_Actor")){ - anVISUActor = VISU_Actor::SafeDownCast(anActor); + while(vtkActor *anActor = anActColl->GetNextActor()){ + anVISUActor = VISU_Actor::SafeDownCast(anActor); + if(anVISUActor){ VISU::Prs3d_i* aPrs = anVISUActor->GetPrs3d(); if(aPrs == NULL) continue; if (thePrs == aPrs) { - aResActor = anVISUActor->GetParent(); try { + aResActor = anVISUActor; thePrs->UpdateActor(aResActor); aResActor->VisibilityOn(); } catch (std::runtime_error& ex) { @@ -758,7 +801,7 @@ namespace VISU QObject::tr("BUT_OK")); } } else if (theDispOnly) { - anVISUActor->GetParent()->VisibilityOff(); + anVISUActor->VisibilityOff(); } else { } } else if (theDispOnly && anActor->GetVisibility()) { @@ -804,11 +847,11 @@ namespace VISU FindActor(SVTK_ViewWindow* theViewWindow, const char* theEntry) { - using namespace VTK; + using namespace SVTK; if(vtkRenderer* aRenderer = theViewWindow->getRenderer()){ if(vtkActorCollection* aCollection = aRenderer->GetActors()){ if(VISU_Actor* anActor = Find(aCollection,TIsSameEntry(theEntry))){ - return anActor->GetParent(); + return anActor; } } } @@ -829,22 +872,13 @@ namespace VISU VISU::Prs3d_i* thePrs) { QApplication::setOverrideCursor(Qt::waitCursor); - bool isPublished = false; SALOMEDS::SObject_var aSObject = thePrs->GetSObject(); CORBA::String_var anEntry = aSObject->GetID(); try { thePrs->Update(); - - TViewWindows aViewWindows = GetViews(theModule); - for (int i = 0, iEnd = aViewWindows.size(); i < iEnd; i++) { - SVTK_ViewWindow* aView = aViewWindows[i]; - if (VISU_Actor* anActor = FindActor(aView, anEntry.in())) { - isPublished = true; - thePrs->UpdateActor(anActor); - } - } + thePrs->UpdateActors(); } catch (std::runtime_error& ex) { INFOS(ex.what()); QApplication::restoreOverrideCursor(); @@ -852,20 +886,10 @@ namespace VISU QObject::tr("ERR_CANT_BUILD_PRESENTATION") + ": " + QObject::tr(ex.what()), QObject::tr("BUT_OK")); - TViewWindows aViewWindows = GetViews(theModule); - for (int i = 0, iEnd = aViewWindows.size(); i < iEnd; i++) { - SVTK_ViewWindow* aView = aViewWindows[i]; - if (VISU_Actor* anActor = FindActor(aView, anEntry.in())) { - aView->RemoveActor(anActor); - anActor->Delete(); - } - } + thePrs->RemoveActors(); return; } QApplication::restoreOverrideCursor(); - - if (!isPublished) - PublishInView(theModule, thePrs); } static bool ComputeVisiblePropBounds(SVTK_ViewWindow* theViewWindow, @@ -1156,6 +1180,12 @@ namespace VISU } } PlotContainer( theModule, pContainer, VISU::eDisplay ); + + QString anEntry = pContainer->GetEntry(); + _PTR(Study) aStudy = theTableSO->GetStudy(); + _PTR(SObject) aContainerSO = aStudy->FindObjectID(anEntry.latin1()); + _PTR(SObject) aParentSO = aContainerSO->GetFather(); + UpdateObjBrowser(theModule,true,aParentSO); } } } diff --git a/src/VISUGUI/VisuGUI_Tools.h b/src/VISUGUI/VisuGUI_Tools.h index 3fcfa37e..d514b4b3 100644 --- a/src/VISUGUI/VisuGUI_Tools.h +++ b/src/VISUGUI/VisuGUI_Tools.h @@ -32,14 +32,13 @@ #include "VISUConfig.hh" -#include "SalomeApp_Module.h" -#include "SalomeApp_Application.h" - #include "SALOMEDSClient_Study.hxx" #include "SALOMEconfig.h" #include CORBA_SERVER_HEADER(MED_Gen) +class QWidget; + class SUIT_Desktop; class SUIT_ViewWindow; class VISU_Actor; @@ -49,6 +48,7 @@ class SPlot2d_Curve; class Plot2d_ViewFrame; class CAM_Module; class LightApp_SelectionMgr; +class SalomeApp_Module; class SalomeApp_Study; class VisuGUI; @@ -66,10 +66,12 @@ namespace VISU { _PTR(Study) GetCStudy(const SalomeApp_Study* theStudy); bool IsStudyLocked( _PTR(Study) theStudy ); - bool CheckLock( _PTR(Study) theStudy ); + bool CheckLock( _PTR(Study) theStudy, + QWidget* theWidget ); - inline void UpdateObjBrowser(SalomeApp_Module* theModule, - bool updateDataModel = true); + void UpdateObjBrowser(SalomeApp_Module* theModule, + bool theIsUpdateDataModel = true, + _PTR(SObject) theSObject = _PTR(SObject)()); VISU_Gen_i* GetVisuGen(const CAM_Module* theModule); SALOME_MED::MED_Gen_var GetMEDEngine(); @@ -100,10 +102,10 @@ namespace VISU { void ErasePrs(const SalomeApp_Module* theModule, CORBA::Object_ptr theObject, bool theUpdate = true); - void DeleteSObject(SalomeApp_Module* theModule, + void DeleteSObject(VisuGUI* theModule, _PTR(Study) theStudy, _PTR(SObject) theSObject); - void DeletePrs3d(SalomeApp_Module* theModule, + void DeletePrs3d(VisuGUI* theModule, VISU::Prs3d_i* thePrs, const Handle(SALOME_InteractiveObject)& theIO); void ErasePrs3d(const SalomeApp_Module* theModule, @@ -122,7 +124,7 @@ namespace VISU { VISU::Result_i* CheckResult(const SalomeApp_Module* theModule, _PTR(SObject) theSource, VISU::Result_var& theResult); - inline bool IsSObjectTable(_PTR(SObject) theSObject); + bool IsSObjectTable(_PTR(SObject) theSObject); // Views SUIT_ViewWindow* GetActiveView(const SalomeApp_Module* theModule, @@ -203,23 +205,4 @@ namespace VISU { void RemoveScalarBarPosition(VisuGUI* theModule,CORBA::Object_ptr theObject); } -bool VISU::IsSObjectTable( _PTR(SObject) theSObject ) -{ - if ( theSObject ) { - _PTR(GenericAttribute) anAttr; - if (theSObject->FindAttribute( anAttr, "AttributeTableOfInteger" )) - return true; - if (theSObject->FindAttribute( anAttr, "AttributeTableOfReal" )) - return true; - } - return false; -} - -void VISU::UpdateObjBrowser(SalomeApp_Module* theModule, - bool updateDataModel) -{ - theModule->updateObjBrowser(updateDataModel); - theModule->getApp()->updateActions(); -} - #endif diff --git a/src/VISUGUI/VisuGUI_TransparencyDlg.cxx b/src/VISUGUI/VisuGUI_TransparencyDlg.cxx new file mode 100644 index 00000000..bf893f50 --- /dev/null +++ b/src/VISUGUI/VisuGUI_TransparencyDlg.cxx @@ -0,0 +1,245 @@ +// VISU VISUGUI : GUI of VISU 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 : VisuGUI_TransparencyDlg.cxx +// Author : Nicolas REJNERI +// Module : VISU +// $Header$ + +#include "VisuGUI_TransparencyDlg.h" + +#include "VisuGUI.h" +#include "VisuGUI_ViewTools.h" +#include "VisuGUI_Tools.h" +#include "VISU_Actor.h" + +#include "SUIT_Desktop.h" +#include "SUIT_OverrideCursor.h" + +#include "SALOME_ListIO.hxx" +#include "SALOME_ListIteratorOfListIO.hxx" +#include "SALOME_InteractiveObject.hxx" + +#include "LightApp_Study.h" +#include "LightApp_SelectionMgr.h" + +#include "SVTK_ViewWindow.h" + +// QT Includes +#include +#include +#include +#include +#include + +using namespace std; + +//================================================================================= +// class : VisuGUI_TransparencyDlg() +// purpose : +// +//================================================================================= +VisuGUI_TransparencyDlg::VisuGUI_TransparencyDlg( VisuGUI* theModule, + const char* name, + bool modal, + WFlags fl) + : QDialog( VISU::GetDesktop( theModule ), name, modal, WStyle_Customize | WStyle_NormalBorder | + WStyle_Title | WStyle_SysMenu | WDestructiveClose ), + mySelectionMgr( VISU::GetSelectionMgr( theModule ) ), + myViewWindow( VISU::GetViewWindow( theModule ) ) +{ + if (!name) + setName("VisuGUI_TransparencyDlg"); + setCaption(tr("TRANSPARENCY_TITLE" )); + setSizeGripEnabled(TRUE); + QGridLayout* VisuGUI_TransparencyDlgLayout = new QGridLayout(this); + VisuGUI_TransparencyDlgLayout->setSpacing(6); + VisuGUI_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("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("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("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); + + VisuGUI_TransparencyDlgLayout->addWidget(GroupC1, 0, 0); + VisuGUI_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(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(onSelectionChanged())); +} + +//================================================================================= +// function : ~VisuGUI_TransparencyDlg() +// purpose : +//================================================================================= +VisuGUI_TransparencyDlg::~VisuGUI_TransparencyDlg() +{ + // no need to delete child widgets, Qt does it all for us +} + +//======================================================================= +// function : ClickOnOk() +// purpose : +//======================================================================= +void VisuGUI_TransparencyDlg::ClickOnOk() +{ + close(); +} + +//================================================================================= +// function : SetTransparency() +// purpose : Called when value of slider change +// : or the first time as initilisation +//================================================================================= +void VisuGUI_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(); + VISU_Actor* anActor = VISU::FindActor(myViewWindow, IOS->getEntry()); + if (anActor) + anActor->SetOpacity(opacity); + } + myViewWindow->Repaint(); + } + ValueHasChanged(); +} + +//================================================================================= +// function : ValueHasChanged() +// purpose : Called when user moves a slider +//================================================================================= +void VisuGUI_TransparencyDlg::ValueHasChanged() +{ + ValueLab->setText(QString::number(this->Slider1->value()) + "%"); +} + +//================================================================================= +// function : onSelectionChanged() +// purpose : Called when selection is changed +//================================================================================= +void VisuGUI_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()) { + VISU_Actor* anActor = VISU::FindActor(myViewWindow, 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()) { + VISU_Actor* anActor = VISU::FindActor(myViewWindow, 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/VISUGUI/VisuGUI_TransparencyDlg.h b/src/VISUGUI/VisuGUI_TransparencyDlg.h new file mode 100644 index 00000000..6dbc9437 --- /dev/null +++ b/src/VISUGUI/VisuGUI_TransparencyDlg.h @@ -0,0 +1,76 @@ +// VISU VisuGUI : GUI for VISU 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 : VisuGUI_TransparencyDlg.h +// Author : Nicolas REJNERI +// Module : VISU +// $Header$ + +#ifndef VISUGUI_TRANSPARENCYDLG_H +#define VISUGUI_TRANSPARENCYDLG_H + +// QT Includes +#include + +class QLabel; +class QPushButton; +class QSlider; +class LightApp_SelectionMgr; +class SVTK_Selector; +class SVTK_ViewWindow; +class VisuGUI; + +//================================================================================= +// class : VisuGUI_TransparencyDlg +// purpose : +//================================================================================= +class VisuGUI_TransparencyDlg : public QDialog +{ + Q_OBJECT + +public: + VisuGUI_TransparencyDlg( VisuGUI* = 0, + const char* name = 0, + bool modal = false, + WFlags fl = 0 ); + + ~VisuGUI_TransparencyDlg(); + +private : + LightApp_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 diff --git a/src/VISUGUI/VisuGUI_ViewTools.cxx b/src/VISUGUI/VisuGUI_ViewTools.cxx new file mode 100644 index 00000000..868ab606 --- /dev/null +++ b/src/VISUGUI/VisuGUI_ViewTools.cxx @@ -0,0 +1,74 @@ +// VISU VISUGUI : GUI of VISU component +// +// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : VisuGUI_Tools.cxx +// Author : Sergey Anikin +// Module : VISU + + +#include "VisuGUI_ViewTools.h" + +#include "VISU_Actor.h" + +#include "SVTK_ViewModel.h" +#include "SVTK_ViewWindow.h" + +namespace VISU +{ + void + ErasePrs(VisuGUI* theModule, + VISU::Base_ptr theBase, + bool thIsUpdate) + { + VISU::VISUType aType = theBase->GetType(); + switch (aType) { + case VISU::TCURVE: { + if (VISU::Curve_i* aCurve = dynamic_cast(VISU::GetServant(theBase).in())) + PlotCurve(theModule, aCurve, VISU::eErase ); + break; + } + case VISU::TCONTAINER: { + if (VISU::Container_i* aContainer = dynamic_cast(VISU::GetServant(theBase).in())) + PlotContainer(theModule, aContainer, VISU::eErase ); + break; + } + case VISU::TTABLE: { + if (VISU::Table_i* aTable = dynamic_cast(VISU::GetServant(theBase).in())) + PlotTable(theModule, aTable, VISU::eErase ); + break; + } + default: { + if(VISU::Prs3d_i* aPrsObject = dynamic_cast(VISU::GetServant(theBase).in())){ + if(aType == VISU::TGAUSSPOINTS) + ErasePrs3d(theModule,aPrsObject,thIsUpdate); + else if(SUIT_ViewManager* aViewManager = theModule->getApp()->activeViewManager()){ + QString aType = aViewManager->getType(); + if(aType == SVTK_Viewer::Type()) + ErasePrs3d(theModule,aPrsObject,thIsUpdate); + else if(aType == VVTK_Viewer::Type()) + ErasePrs3d(theModule,aPrsObject,thIsUpdate); + } + } + }} // switch (aType) + } +} diff --git a/src/VISUGUI/VisuGUI_ViewTools.h b/src/VISUGUI/VisuGUI_ViewTools.h new file mode 100644 index 00000000..49500541 --- /dev/null +++ b/src/VISUGUI/VisuGUI_ViewTools.h @@ -0,0 +1,241 @@ +// VISU VISUGUI : GUI of VISU component +// +// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : VisuGUI_Tools.h +// Author : Sergey Anikin +// Module : VISU + +#ifndef VisuGUI_ViewTools_HeaderFile +#define VisuGUI_ViewTools_HeaderFile + +#include "VisuGUI.h" + +#include "SUIT_MessageBox.h" +#include "SUIT_ViewManager.h" +#include "SUIT_ViewWindow.h" + +#include "SalomeApp_Module.h" +#include "SalomeApp_Application.h" + +#include "VISU_Prs3d_i.hh" + +#include "VVTK_ViewModel.h" +#include "VVTK_ViewWindow.h" + +#include "SVTK_ViewModel.h" +#include "SVTK_ViewWindow.h" + +#include "VisuGUI_Tools.h" +#include "VTKViewer_Algorithm.h" +#include "SVTK_Functor.h" + +#include "VISU_Table_i.hh" +#include "VISU_ViewManager_i.hh" +#include "SALOME_ListIO.hxx" +#include "SALOME_ListIteratorOfListIO.hxx" + +#include "SPlot2d_ViewModel.h" + +#include "VISU_Actor.h" + +#include +#include + +class VVTK_Viewer; + +namespace VISU +{ + //--------------------------------------------------------------- + template + inline + typename TViewer::TViewWindow* + GetViewWindow(VisuGUI* theModule, + const bool theIsViewCreate = false) + { + typedef typename TViewer::TViewWindow TView; + if(SUIT_ViewManager* aViewManager = theModule->getViewManager(TViewer::Type(),theIsViewCreate)){ + if(SUIT_ViewWindow* aViewWindow = aViewManager->getActiveView()){ + if(TView* aView = dynamic_cast(aViewWindow)){ + aViewWindow->raise(); + aViewWindow->setFocus(); + return aView; + } + } + } + return NULL; + } + + + //--------------------------------------------------------------- + template + inline + VISU_Actor* + PublishInView(VisuGUI* theModule, + Prs3d_i* thePrs, + const bool theIsHighlight = false, + const bool theIsCreateView = false) + { + typedef typename TViewer::TViewWindow TView; + if(TView* aView = GetViewWindow(theModule,theIsCreateView)){ + QApplication::setOverrideCursor( Qt::waitCursor ); + try{ + if(VISU_Actor* anActor = thePrs->CreateActor()){ + aView->AddActor(anActor); + if(theIsHighlight) + aView->highlight(anActor->getIO(),true); + aView->getRenderer()->ResetCameraClippingRange(); + aView->Repaint(); + QApplication::restoreOverrideCursor(); + return anActor; + } + }catch(std::exception& exc){ + SUIT_MessageBox::warn1(GetDesktop(theModule), + QObject::tr("WRN_VISU"), + QObject::tr("ERR_CANT_CREATE_ACTOR"), + QObject::tr("BUT_OK")); + } + } + return NULL; + } + + + //--------------------------------------------------------------- + template + inline + VISU_Actor* + UpdateViewer(VisuGUI* theModule, + VISU::Prs3d_i* thePrs, + bool theDispOnly = false, + const bool theIsHighlight = false, + const bool theIsViewCreate = false) + { + typedef typename TViewer::TViewWindow TView; + if(TView* aView = GetViewWindow(theModule,theIsViewCreate)){ + vtkRenderer *aRen = aView->getRenderer(); + vtkActorCollection *anActColl = aRen->GetActors(); + anActColl->InitTraversal(); + VISU_Actor* aResActor = NULL; + while(vtkActor *anAct = anActColl->GetNextActor()){ + if(VISU_Actor* anActor = dynamic_cast(anAct)){ + if(VISU::Prs3d_i* aPrs3d = anActor->GetPrs3d()){ + if(thePrs == aPrs3d){ + aResActor = anActor; + thePrs->UpdateActors(); + aResActor->VisibilityOn(); + }else if(theDispOnly){ + anActor->VisibilityOff(); + } + }else if(theDispOnly && anActor->GetVisibility()){ + anActor->VisibilityOff(); + } + } + } + if(aResActor){ + if(theIsHighlight) + aView->highlight(aResActor->getIO(),true); + aView->getRenderer()->ResetCameraClippingRange(); + aView->Repaint(); + return aResActor; + } + return PublishInView(theModule,thePrs,theIsHighlight,theIsViewCreate); + } + return NULL; + } + + + //--------------------------------------------------------------- + template + inline + void + OnEraseAll(VisuGUI* theModule) + { + typedef typename TViewer::TViewWindow TViewWindow; + if(TViewWindow* aViewWindow = GetViewWindow(theModule)){ + aViewWindow->unHighlightAll(); + if(vtkRenderer *aRen = aViewWindow->getRenderer()){ + vtkActorCollection *aCollection = aRen->GetActors(); + aCollection->InitTraversal(); + while(vtkActor *anAct = aCollection->GetNextActor()){ + if(anAct->GetVisibility() > 0) + if(SALOME_Actor* anActor = dynamic_cast(anAct)){ + anActor->VisibilityOff(); + } + } + aViewWindow->Repaint(); + } + } + } + + template<> + inline + void + OnEraseAll(VisuGUI* theModule) + { + if(SPlot2d_Viewer* aPlot2d = GetPlot2dViewer(theModule,false)) + aPlot2d->EraseAll(); + } + + + //--------------------------------------------------------------- + template + inline + VISU_Actor* + FindActor(TVieweWindow* theViewWindow, + const char* theEntry) + { + using namespace SVTK; + if(vtkRenderer* aRenderer = theViewWindow->getRenderer()){ + if(vtkActorCollection* aCollection = aRenderer->GetActors()){ + if(VISU_Actor* anActor = Find(aCollection,TIsSameEntry(theEntry))){ + return anActor; + } + } + } + return NULL; + } + + template + inline + void + ErasePrs3d(VisuGUI* theModule, + VISU::Prs3d_i* thePrs, + const bool thIsUpdate = true) + { + typedef typename TViewer::TViewWindow TViewWindow; + if(TViewWindow* aViewWindow = GetViewWindow(theModule)){ + if(VISU_Actor* anActor = FindActor(aViewWindow,thePrs)){ + anActor->VisibilityOff(); + if(thIsUpdate) + aViewWindow->Repaint(); + } + } + } + + + void + ErasePrs(VisuGUI* theModule, + VISU::Base_ptr theBase, + bool thIsUpdate); +} + +#endif diff --git a/src/VISU_I/Makefile.in b/src/VISU_I/Makefile.in index 330d5468..68d8f5cb 100644 --- a/src/VISU_I/Makefile.in +++ b/src/VISU_I/Makefile.in @@ -18,50 +18,152 @@ VPATH=.:@srcdir@:@top_srcdir@/idl # Libraries targets LIB = libVISUEngineImpl.la -LIB_SRC = VISUConfig.cc VISU_Gen_i.cc \ - VISU_Result_i.cc VISU_PrsObject_i.cc VISU_Table_i.cc \ - VISU_Prs3d_i.cc VISU_Mesh_i.cc VISU_ScalarMap_i.cc \ - VISU_IsoSurfaces_i.cc VISU_DeformedShape_i.cc \ - VISU_Plot3D_i.cc VISU_CutPlanes_i.cc VISU_CutLines_i.cc \ - VISU_Vectors_i.cc VISU_StreamLines_i.cc \ - VISU_ViewManager_i.cc VISU_View_i.cc \ - VISU_TimeAnimation.cxx VISU_CorbaMedConvertor.cxx \ +LIB_SRC = \ + VISU_Result_i.cc \ + VISUConfig.cc \ + VISU_PrsObject_i.cc \ + VISU_Prs3d_i.cc \ + VISU_ColoredPrs3d_i.cc \ + VISU_ScalarMap_i.cc \ + VISU_GaussPoints_i.cc \ + VISU_IsoSurfaces_i.cc \ + VISU_DeformedShape_i.cc \ + VISU_Plot3D_i.cc \ + VISU_CutPlanes_i.cc \ + VISU_CutLines_i.cc \ + VISU_Vectors_i.cc \ + VISU_StreamLines_i.cc \ + VISU_Mesh_i.cc \ + VISU_Table_i.cc \ + VISU_Gen_i.cc \ + VISU_ViewManager_i.cc \ + VISU_View_i.cc \ + VISU_TimeAnimation.cxx \ + VISU_CorbaMedConvertor.cxx \ VISU_DumpPython.cc -LIB_MOC = VISU_TimeAnimation.h +LIB_MOC = \ + VISU_TimeAnimation.h -LIB_SERVER_IDL = VISU_Gen.idl SALOME_Component.idl \ - SALOME_Exception.idl SALOME_GenericObj.idl MED.idl +LIB_SERVER_IDL = \ + MED.idl \ + VISU_Gen.idl \ + SALOME_Component.idl \ + SALOME_Exception.idl \ + SALOME_GenericObj.idl -LIB_CLIENT_IDL = SALOMEDS.idl SALOMEDS_Attributes.idl SALOME_Comm.idl +LIB_CLIENT_IDL = \ + SALOMEDS.idl \ + SALOMEDS_Attributes.idl \ + SALOME_Comm.idl # Executables targets -BIN = +BIN = VISU_I BIN_SRC = BIN_CLIENT_IDL = BIN_SERVER_IDL = -EXPORT_HEADERS = VISUConfig.hh VISU_Gen_i.hh \ - VISU_Result_i.hh VISU_PrsObject_i.hh VISU_Table_i.hh \ - VISU_Prs3d_i.hh VISU_Mesh_i.hh VISU_ScalarMap_i.hh \ - VISU_IsoSurfaces_i.hh VISU_DeformedShape_i.hh \ - VISU_Plot3D_i.hh VISU_CutPlanes_i.hh VISU_CutLines_i.hh \ - VISU_Vectors_i.hh VISU_StreamLines_i.hh \ - VISU_ViewManager_i.hh VISU_View_i.hh \ +EXPORT_HEADERS = \ + VISUConfig.hh \ + VISU_Gen_i.hh \ + VISU_Result_i.hh \ + VISU_PrsObject_i.hh \ + VISU_Table_i.hh \ + VISU_Prs3d_i.hh \ + VISU_Mesh_i.hh \ + VISU_ColoredPrs3d_i.hh \ + VISU_ScalarMap_i.hh \ + VISU_IsoSurfaces_i.hh \ + VISU_DeformedShape_i.hh \ + VISU_Plot3D_i.hh \ + VISU_CutPlanes_i.hh \ + VISU_CutLines_i.hh \ + VISU_Vectors_i.hh \ + VISU_StreamLines_i.hh \ + VISU_GaussPoints_i.hh \ + VISU_ViewManager_i.hh \ + VISU_View_i.hh \ VISU_TimeAnimation.h # additionnal information to compil and link file -CPPFLAGS += -ftemplate-depth-32 $(QT_INCLUDES) $(PYTHON_INCLUDES) $(OCC_INCLUDES) $(VTK_INCLUDES) \ - $(HDF5_INCLUDES) $(QWT_INCLUDES) $(BOOST_CPPFLAGS)\ - -I${KERNEL_ROOT_DIR}/include/salome -I${GUI_ROOT_DIR}/include/salome - -LDFLAGS += $(PYTHON_LIBS) $(QT_MT_LIBS) $(VTK_LIBS) $(QWT_LIBS) -lSalomeNS -lTOOLSDS \ - -lSalomeContainer -lOpUtil -lSalomeApp -lVTKViewer -lSVTK -lSPlot2d -lSalomeHDFPersist \ - -lSalomeGenericObj -lVisuConvertor -lVisuPipeLine -lVisuObject -lVISUGUITOOLS \ - -L${KERNEL_ROOT_DIR}/lib/salome -L${GUI_ROOT_DIR}/lib/salome -lEvent - -LIBS+= -lPlot2d -L${KERNEL_ROOT_DIR}/lib/salome +CPPFLAGS += \ + -ftemplate-depth-32 \ + $(QT_INCLUDES) \ + $(PYTHON_INCLUDES) \ + $(OCC_INCLUDES) \ + $(VTK_INCLUDES) \ + $(HDF5_INCLUDES) \ + $(QWT_INCLUDES) \ + $(BOOST_CPPFLAGS)\ + -I${KERNEL_ROOT_DIR}/include/salome \ + -I${MED_ROOT_DIR}/include/salome \ + -I${GUI_ROOT_DIR}/include/salome + +LDFLAGS += \ + $(PYTHON_LIBS) \ + $(QT_MT_LIBS) \ + $(VTK_LIBS) \ + $(QWT_LIBS) \ + $(BOOST_LIBS) \ + -L${KERNEL_ROOT_DIR}/lib/salome \ + -L${GUI_ROOT_DIR}/lib/salome \ + -L${MED_ROOT_DIR}/lib/salome + +LIBS+= -lboost_signals-mt \ + -lSalomeHDFPersist \ + -lSalomeGenericObj \ + -lSalomeContainer \ + -lSalomeNS \ + -lTOOLSDS \ + -lOpUtil \ + -lEvent \ + -lCASCatch \ + -lSalomeApp \ + -lSalomeSession \ + -lVTKViewer \ + -lSVTK \ + -lSPlot2d \ + -lVisuConvertor \ + -lVisuPipeLine \ + -lVisuObject \ + -lVISUGUITOOLS + +LDFLAGSFORBIN=$(LDFLAGS) $(LIBS) \ + -L${KERNEL_ROOT_DIR}/lib/salome \ + -lSALOMEBasics \ + -lSalomeCatalog \ + -lwith_loggerTraceCollector \ + -lSalomeLifeCycleCORBA \ + -lRegistry \ + -lSalomeNotification \ + -lSALOMELocalTrace \ + -lSalomeResourcesManager \ + -lSalomeDS \ + -lSalomeDSImpl \ + -lSalomeObject \ + -lqtx \ + -lsuit \ + -lstd \ + -lCAM \ + -lLightApp \ + -lObjBrowser \ + -lSalomePrs \ + -lPyInterp \ + -lPythonConsole \ + -lLogWindow \ + -lToolsGUI \ + -lGLViewer \ + -lOCCViewer \ + -lSUPERVGraph \ + -lSOCC \ + -lVVTK \ + -lPlot2d \ + -lMEDWrapper \ + -lMEDWrapperBase \ + -lMEDWrapper_V2_2 \ + -lMEDWrapper_V2_1 \ + -lmed_V2_1 # additional file to be cleaned MOSTLYCLEAN = diff --git a/src/VISU_I/VISUConfig.hh b/src/VISU_I/VISUConfig.hh index 3224f05a..6ec9a2d0 100644 --- a/src/VISU_I/VISUConfig.hh +++ b/src/VISU_I/VISUConfig.hh @@ -39,8 +39,8 @@ #include "Utils_CorbaException.hxx" #include "utilities.h" -#include -#include +#include "SALOMEDSClient_SObject.hxx" +#include "SALOMEDSClient_Study.hxx" // QT headers #include @@ -61,8 +61,8 @@ class SUIT_Session; class SUIT_ResourceMgr; - -namespace VISU{ +namespace VISU +{ SUIT_Session *GetSession(); SUIT_ResourceMgr *GetResourceMgr(); diff --git a/src/VISU_I/VISU_ColoredPrs3d_i.cc b/src/VISU_I/VISU_ColoredPrs3d_i.cc new file mode 100644 index 00000000..94b2e9d1 --- /dev/null +++ b/src/VISU_I/VISU_ColoredPrs3d_i.cc @@ -0,0 +1,727 @@ +// VISU OBJECT : interactive object for VISU entities implementation +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// File : VISU_PrsObject_i.cxx +// Author : Alexey PETROV +// Module : VISU + +#include "VISU_ColoredPrs3d_i.hh" + +#include "VISU_ScalarMapPL.hxx" +#include "VISU_Result_i.hh" +#include "VISU_Convertor.hxx" + +#include "SUIT_ResourceMgr.h" + +#include + +using namespace VISU; +using namespace std; + +#ifdef _DEBUG_ +static int MYDEBUG = 0; +//#define _DEXCEPT_ +#else +static int MYDEBUG = 0; +#endif + + +//============================================================================ +VISU::ColoredPrs3d_i:: +ColoredPrs3d_i(Result_i* theResult, + bool theAddToStudy) : + PrsObject_i(theResult->GetStudyDocument()), + Prs3d_i(theResult,theAddToStudy), + myScalarMapPL(NULL), + myIsFixedRange(false) +{} + +VISU::ColoredPrs3d_i:: +ColoredPrs3d_i(Result_i* theResult, + SALOMEDS::SObject_ptr theSObject) : + PrsObject_i(theResult->GetStudyDocument()), + Prs3d_i(theResult,theSObject), + myScalarMapPL(NULL), + myIsFixedRange(false) +{} + +VISU::ColoredPrs3d_i +::~ColoredPrs3d_i() +{} + +void +VISU::ColoredPrs3d_i +::RemoveFromStudy() +{ + TSuperClass::RemoveFromStudy(); + VISU::RemoveFromStudy(mySObject,false); +} + +void +VISU::ColoredPrs3d_i +::SameAs(const Prs3d_i* theOrigin) +{ + if(const ColoredPrs3d_i* aPrs3d = dynamic_cast(theOrigin)){ + DoHook(); + + ColoredPrs3d_i* anOrigin = const_cast(aPrs3d); + + myField = anOrigin->GetField(); + myMeshName = myField->myMeshName; + myEntity = myField->myEntity; + myIteration = anOrigin->GetIteration(); + myFieldName = anOrigin->GetFieldName(); + + Build(-1); + + TSuperClass::SameAs(theOrigin); + + SetScalarMode(anOrigin->GetScalarMode()); + SetNbColors(anOrigin->GetNbColors()); + SetBarOrientation(anOrigin->GetBarOrientation()); + + SetPosition(anOrigin->GetPosX(), anOrigin->GetPosY()); + SetSize(anOrigin->GetWidth(), anOrigin->GetHeight()); + SetLabels(anOrigin->GetLabels()); + SetTitle(anOrigin->GetTitle()); + + SetBoldTitle(anOrigin->IsBoldTitle()); + SetItalicTitle(anOrigin->IsItalicTitle()); + SetShadowTitle(anOrigin->IsShadowTitle()); + SetTitFontType(anOrigin->GetTitFontType()); + float r,g,b; + anOrigin->GetTitleColor(&r,&g,&b); + SetTitleColor(r,g,b); + + SetBoldLabel(anOrigin->IsBoldLabel()); + SetItalicLabel(anOrigin->IsItalicLabel()); + SetShadowLabel(anOrigin->IsShadowLabel()); + SetLblFontType(anOrigin->GetLblFontType()); + anOrigin->GetLabelColor(&r,&g,&b); + SetLabelColor(r,g,b); + } +} + +void +VISU::ColoredPrs3d_i +::SameAsParams(const ColoredPrs3d_i* theOrigin) +{ + int anIteration = GetIteration(); + SameAs(theOrigin); + myIteration = anIteration; + + Build(-1); + Update(); +} + + +//---------------------------------------------------------------------------- +CORBA::Long +VISU::ColoredPrs3d_i +::GetScalarMode() +{ + return myScalarMapPL->GetScalarMode(); +} + +void +VISU::ColoredPrs3d_i +::SetScalarMode(CORBA::Long theScalarMode) +{ + myScalarMapPL->SetScalarMode(theScalarMode); +} + +CORBA::Double +VISU::ColoredPrs3d_i +::GetMin() +{ + return myScalarMapPL->GetScalarRange()[0]; +} + +CORBA::Double +VISU::ColoredPrs3d_i +::GetMax() +{ + return myScalarMapPL->GetScalarRange()[1]; +} + +void +VISU::ColoredPrs3d_i +::SetNbColors(CORBA::Long theNbColors) +{ + myScalarMapPL->SetNbColors(theNbColors); +} + +CORBA::Long +VISU::ColoredPrs3d_i +::GetNbColors() +{ + return myScalarMapPL->GetNbColors(); +} + +void +VISU::ColoredPrs3d_i +::SetBarOrientation(VISU::ScalarMap::Orientation theOrientation) +{ + myOrientation = theOrientation; +} + +VISU::ScalarMap::Orientation +VISU::ColoredPrs3d_i +::GetBarOrientation() +{ + return myOrientation; +} + +void +VISU::ColoredPrs3d_i +::SetPosition(CORBA::Double X, CORBA::Double Y) +{ + myPosition[0] = X; + myPosition[1] = Y; +} + +CORBA::Double +VISU::ColoredPrs3d_i +::GetPosX() +{ + return myPosition[0]; +} + +CORBA::Double +VISU::ColoredPrs3d_i +::GetPosY() +{ + return myPosition[1]; +} + +void +VISU::ColoredPrs3d_i +::SetSize(CORBA::Double theWidth, CORBA::Double theHeight) +{ + myWidth = theWidth; + myHeight = theHeight; +} + +CORBA::Double +VISU::ColoredPrs3d_i +::GetWidth() +{ + return myWidth; +} + +CORBA::Double +VISU::ColoredPrs3d_i +::GetHeight() +{ + return myHeight; +} + +void +VISU::ColoredPrs3d_i +::SetLabels(CORBA::Long theNbLabels) +{ + myNumberOfLabels = theNbLabels; +} + +CORBA::Long +VISU::ColoredPrs3d_i +::GetLabels() +{ + return myNumberOfLabels; +} + +void +VISU::ColoredPrs3d_i +::SetTitle(const char* theName) +{ + myTitle = theName; +} + +char* +VISU::ColoredPrs3d_i +::GetTitle() +{ + return CORBA::string_dup(myTitle.c_str()); +} + +bool +VISU::ColoredPrs3d_i +::IsBoldTitle() +{ + return myIsBoldTitle; +} + +void +VISU::ColoredPrs3d_i +::SetBoldTitle(bool isBold) +{ + myIsBoldTitle = isBold; +} + +bool +VISU::ColoredPrs3d_i +::IsItalicTitle() +{ + return myIsItalicTitle; +} + +void +VISU::ColoredPrs3d_i +::SetItalicTitle(bool isItalic) +{ + myIsItalicTitle = isItalic; +} + +bool +VISU::ColoredPrs3d_i +::IsShadowTitle() +{ + return myIsShadowTitle; +} + +void +VISU::ColoredPrs3d_i +::SetShadowTitle(bool isShadow) +{ + myIsShadowTitle = isShadow; +} + +int +VISU::ColoredPrs3d_i +::GetTitFontType() +{ + return myTitFontType; +} + +void +VISU::ColoredPrs3d_i +::SetTitFontType(int theType) +{ + myTitFontType = theType; +} + +void +VISU::ColoredPrs3d_i +::GetTitleColor(float* theR, float* theG, float* theB) +{ + *theR = myTitleColor[0]; + *theG = myTitleColor[1]; + *theB = myTitleColor[2]; +} + +void +VISU::ColoredPrs3d_i +::SetTitleColor(float theR, float theG, float theB) +{ + myTitleColor[0] = theR; + myTitleColor[1] = theG; + myTitleColor[2] = theB; +} + +bool +VISU::ColoredPrs3d_i +::IsBoldLabel() +{ + return myIsBoldLabel; +} + +void +VISU::ColoredPrs3d_i +::SetBoldLabel(bool isBold) +{ + myIsBoldLabel = isBold; +} + +bool +VISU::ColoredPrs3d_i +::IsItalicLabel() +{ + return myIsItalicLabel; +} + +void +VISU::ColoredPrs3d_i +::SetItalicLabel(bool isItalic) +{ + myIsItalicLabel = isItalic; +} + +bool +VISU::ColoredPrs3d_i +::IsShadowLabel() +{ + return myIsShadowLabel; +} + +void +VISU::ColoredPrs3d_i +::SetShadowLabel(bool isShadow) +{ + myIsShadowLabel = isShadow; +} + +int +VISU::ColoredPrs3d_i +::GetLblFontType() +{ + return myLblFontType; +} + +void +VISU::ColoredPrs3d_i +::SetLblFontType(int theType) +{ + myLblFontType = theType; +} + +void +VISU::ColoredPrs3d_i +::GetLabelColor(float* theR, float* theG, float* theB) +{ + *theR = myLabelColor[0]; + *theG = myLabelColor[1]; + *theB = myLabelColor[2]; +} + +void +VISU::ColoredPrs3d_i +::SetLabelColor(float theR, float theG, float theB) +{ + myLabelColor[0] = theR; + myLabelColor[1] = theG; + myLabelColor[2] = theB; +} + + +//---------------------------------------------------------------------------- +/** + * Creates ColoredPrs3d and initialises it from resources + */ +VISU::Storable* +VISU::ColoredPrs3d_i +::Create(const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + int theIteration) +{ + DoHook(); // to create proper pipeline + + myMeshName = theMeshName; + myEntity = (VISU::TEntity)theEntity; + myFieldName =theFieldName; + myIteration = theIteration; + + Build(false); // to get corresponding input from result and initilize the pipeline + + SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr(); + + int aScalarMode = aResourceMgr->integerValue("VISU", "scalar_bar_mode", 0); + SetScalarMode(aScalarMode); + + int aNumberOfColors = aResourceMgr->integerValue( "VISU", "scalar_bar_num_colors", 64 ); + SetNbColors(aNumberOfColors); + + // Orientation + int anOrientation = aResourceMgr->integerValue("VISU", "scalar_bar_orientation", 0); + if(anOrientation == 1) + myOrientation = VISU::ScalarMap::HORIZONTAL; + else + myOrientation = VISU::ScalarMap::VERTICAL; + + // Scalar Bar origin + QString propertyName = QString( "scalar_bar_%1_" ).arg( anOrientation == 0 ? "vertical" : "horizontal" ); + + float aXorigin = (myOrientation == VISU::ScalarMap::VERTICAL) ? 0.01 : 0.2; + aXorigin = aResourceMgr->doubleValue("VISU", propertyName + "x", aXorigin); + myPosition[0] = aXorigin; + + float aYorigin = (myOrientation == VISU::ScalarMap::VERTICAL) ? 0.1 : 0.012; + aYorigin = aResourceMgr->doubleValue("VISU", propertyName + "y", aYorigin); + myPosition[1] = aYorigin; + + // Scalar Bar size + myWidth = (myOrientation == VISU::ScalarMap::VERTICAL)? 0.1 : 0.6; + myWidth = aResourceMgr->doubleValue("VISU", propertyName + "width", myWidth); + + myHeight = (myOrientation == VISU::ScalarMap::VERTICAL)? 0.8:0.12; + myHeight = aResourceMgr->doubleValue("VISU", propertyName + "height", myHeight); + + // scalar bar default position + bool anIsArrangeBar = aResourceMgr->booleanValue("VISU", "scalar_bars_default_position", 0); + int aPlace = 1; + if (anIsArrangeBar){ + aPlace = aResourceMgr->integerValue("VISU", "scalar_bar_position_num",0); + } + if(myOrientation == VISU::ScalarMap::HORIZONTAL){ + myPosition[1] += myHeight*(aPlace-1); + } else { + myPosition[0] += myWidth*(aPlace-1); + } + + // Nb of Labels + myNumberOfLabels = aResourceMgr->integerValue( "VISU", "scalar_bar_num_labels", 5 ); + + // Fonts properties definition + myIsBoldTitle = myIsItalicTitle = myIsShadowTitle = true; + myTitFontType = VTK_ARIAL; + + if(aResourceMgr->hasValue( "VISU", "scalar_bar_title_font" )){ + QFont f = aResourceMgr->fontValue( "VISU", "scalar_bar_title_font" ); + if ( f.family() == "Arial" ) + myTitFontType = VTK_ARIAL; + else if ( f.family() == "Courier" ) + myTitFontType = VTK_COURIER; + else if ( f.family() == "Times" ) + myTitFontType = VTK_TIMES; + + myIsBoldTitle = f.bold(); + myIsItalicTitle = f.italic(); + myIsShadowTitle = f.underline(); + } + + QColor aTextColor = aResourceMgr->colorValue( "VISU", "scalar_bar_title_color", QColor( 255, 255, 255 ) ); + + myTitleColor[0] = aTextColor.red() / 255; + myTitleColor[1] = aTextColor.green() / 255; + myTitleColor[2] = aTextColor.blue() / 255; + + myIsBoldLabel = myIsItalicLabel = myIsShadowLabel = true; + myLblFontType = VTK_ARIAL; + + if( aResourceMgr->hasValue( "VISU", "scalar_bar_label_font" )){ + QFont f = aResourceMgr->fontValue( "VISU", "scalar_bar_label_font" ); + if ( f.family() == "Arial" ) + myLblFontType = VTK_ARIAL; + else if ( f.family() == "Courier" ) + myLblFontType = VTK_COURIER; + else if ( f.family() == "Times" ) + myLblFontType = VTK_TIMES; + + myIsBoldLabel = f.bold(); + myIsItalicLabel = f.italic(); + myIsShadowLabel = f.underline(); + } + + QColor aLabelColor = aResourceMgr->colorValue( "VISU", "scalar_bar_label_color", QColor( 255, 255, 255 ) ); + + myLabelColor[0] = aLabelColor.red() / 255; + myLabelColor[1] = aLabelColor.green() / 255; + myLabelColor[2] = aLabelColor.blue() / 255; + + return this; +} + +VISU::Storable* +VISU::ColoredPrs3d_i +::Restore(const Storable::TRestoringMap& theMap) +{ + DoHook(); + + myMeshName = VISU::Storable::FindValue(theMap,"myMeshName").latin1(); + myEntity = (VISU::TEntity)VISU::Storable::FindValue(theMap,"myEntity").toInt(); + myFieldName = VISU::Storable::FindValue(theMap,"myFieldName").latin1(); + myIteration = VISU::Storable::FindValue(theMap,"myIteration").toInt(); + + myAddToStudy = false; //SRN Added 21/06/2003 SAL2983: to avoid addition of the new ScalarMap to study. + + Build(true); + + TSuperClass::Restore(theMap); + + SetScalarMode(VISU::Storable::FindValue(theMap,"myScalarMode").toInt()); + SetNbColors(VISU::Storable::FindValue(theMap,"myNumberOfColors").toInt()); + SetBarOrientation((VISU::ScalarMap::Orientation)VISU::Storable::FindValue(theMap,"myOrientation").toInt()); + + myTitle = VISU::Storable::FindValue(theMap,"myTitle").latin1(); + myNumberOfLabels = VISU::Storable::FindValue(theMap,"myNumberOfLabels").toInt(); + myPosition[0] = VISU::Storable::FindValue(theMap,"myPosition[0]").toDouble(); + myPosition[1] = VISU::Storable::FindValue(theMap,"myPosition[1]").toDouble(); + myWidth = VISU::Storable::FindValue(theMap,"myWidth").toDouble(); + myHeight = VISU::Storable::FindValue(theMap,"myHeight").toDouble(); + + myTitFontType = VISU::Storable::FindValue(theMap,"myTitFontType").toInt(); + myIsBoldTitle = VISU::Storable::FindValue(theMap,"myIsBoldTitle").toInt(); + myIsItalicTitle = VISU::Storable::FindValue(theMap,"myIsItalicTitle").toInt(); + myIsShadowTitle = VISU::Storable::FindValue(theMap,"myIsShadowTitle").toInt(); + myTitleColor[0] = VISU::Storable::FindValue(theMap,"myTitleColor[0]").toFloat(); + myTitleColor[1] = VISU::Storable::FindValue(theMap,"myTitleColor[1]").toFloat(); + myTitleColor[2] = VISU::Storable::FindValue(theMap,"myTitleColor[2]").toFloat(); + + myLblFontType = VISU::Storable::FindValue(theMap,"myLblFontType").toInt(); + myIsBoldLabel = VISU::Storable::FindValue(theMap,"myIsBoldLabel").toInt(); + myIsItalicLabel = VISU::Storable::FindValue(theMap,"myIsItalicLabel").toInt(); + myIsShadowLabel = VISU::Storable::FindValue(theMap,"myIsShadowLabel").toInt(); + myLabelColor[0] = VISU::Storable::FindValue(theMap,"myLabelColor[0]").toFloat(); + myLabelColor[1] = VISU::Storable::FindValue(theMap,"myLabelColor[1]").toFloat(); + myLabelColor[2] = VISU::Storable::FindValue(theMap,"myLabelColor[2]").toFloat(); + + return this; +} + +void +VISU::ColoredPrs3d_i +::ToStream(std::ostringstream& theStr) +{ + TSuperClass::ToStream(theStr); + + Storable::DataToStream( theStr, "myScalarMode", int(GetScalarMode()) ); + Storable::DataToStream( theStr, "myNumberOfColors", int(GetNbColors()) ); + Storable::DataToStream( theStr, "myOrientation", myOrientation ); + + Storable::DataToStream( theStr, "myMeshName", myMeshName.c_str() ); + Storable::DataToStream( theStr, "myEntity", myEntity ); + Storable::DataToStream( theStr, "myFieldName", myFieldName.c_str() ); + Storable::DataToStream( theStr, "myIteration", myIteration ); + + Storable::DataToStream( theStr, "myTitle", myTitle.c_str() ); + Storable::DataToStream( theStr, "myNumberOfLabels", myNumberOfLabels ); + Storable::DataToStream( theStr, "myPosition[0]", myPosition[0] ); + Storable::DataToStream( theStr, "myPosition[1]", myPosition[1] ); + Storable::DataToStream( theStr, "myWidth", myWidth ); + Storable::DataToStream( theStr, "myHeight", myHeight ); + + Storable::DataToStream( theStr, "myTitFontType", myTitFontType ); + Storable::DataToStream( theStr, "myIsBoldTitle", myIsBoldTitle ); + Storable::DataToStream( theStr, "myIsItalicTitle", myIsItalicTitle ); + Storable::DataToStream( theStr, "myIsShadowTitle", myIsShadowTitle ); + Storable::DataToStream( theStr, "myTitleColor[0]", myTitleColor[0] ); + Storable::DataToStream( theStr, "myTitleColor[1]", myTitleColor[1] ); + Storable::DataToStream( theStr, "myTitleColor[2]", myTitleColor[2] ); + + Storable::DataToStream( theStr, "myLblFontType", myLblFontType ); + Storable::DataToStream( theStr, "myIsBoldLabel", myIsBoldLabel ); + Storable::DataToStream( theStr, "myIsItalicLabel", myIsItalicLabel ); + Storable::DataToStream( theStr, "myIsShadowLabel", myIsShadowLabel ); + Storable::DataToStream( theStr, "myLabelColor[0]", myLabelColor[0] ); + Storable::DataToStream( theStr, "myLabelColor[1]", myLabelColor[1] ); + Storable::DataToStream( theStr, "myLabelColor[2]", myLabelColor[2] ); +} + + +//---------------------------------------------------------------------------- +void +VISU::ColoredPrs3d_i +::DoHook() +{ + if(MYDEBUG) MESSAGE("ColoredPrs3d_i::DoHook() - "<GetMapper()->SetScalarVisibility(1); + } + myScalarMapPL = dynamic_cast(myPipeLine); +} + +//---------------------------------------------------------------------------- +VISU::Storable* +VISU::ColoredPrs3d_i +::Build(int theRestoring) +{ + if(MYDEBUG) + MESSAGE("ColoredPrs3d_i::Build - "<Init(); + if(!myIsFixedRange) myScalarMapPL->SetSourceRange(); + const VISU::TValField& aValField = myField->myValField; + const VISU::PValForTime aValForTime = aValField.find(myIteration)->second; + aComment.sprintf("%s %s",myFieldName.c_str(),VISU_Convertor::GenerateName(aValForTime->myTime).c_str()); + if (theRestoring == 0) myTitle = aComment.simplifyWhiteSpace().latin1(); + } + if(myAddToStudy){ + myName = GenerateName().latin1(); + aComment.sprintf("myComment=TIMESTAMP;myType=%d;myMeshName=%s;myEntityId=%d;myFieldName=%s;myTimeStampId=%d;myNumComponent=%d", + VISU::TTIMESTAMP,myMeshName.c_str(),myEntity,myFieldName.c_str(),myIteration,myField->myNbComp); + string aResultEntry = myResult->GetEntry(); + string aRefFatherEntry = myResult->GetRefFatherEntry(); + string anEntry = myResult->GetEntry(aComment.latin1()); + if(anEntry == "") throw std::runtime_error("There is no Entry for binding the presentation !!!"); + aComment.sprintf("myComment=%s;myMeshName=%s;myEntityId=%d;myFieldName=%s;myTimeStampId=%d;myNumComponent=%d", + GetComment(),myMeshName.c_str(),myEntity,myFieldName.c_str(),myIteration,myField->myNbComp); + CORBA::String_var anIOR = GetID(); + CreateAttributes(myStudy,anEntry.c_str(),aRefFatherEntry.c_str(),anIOR,myName.c_str(),"",aComment.latin1(),true); + mySObject = myStudy->FindObjectIOR(anIOR); + } +#ifndef _DEXCEPT_ + }catch(std::exception& exc){ + INFOS("Follow exception was occured :\n"<CommitCommand(); + return this; +} + + +//---------------------------------------------------------------------------- +const VISU::PField& +VISU::ColoredPrs3d_i +::GetField() const +{ + return myField; +} + +const std::string& +VISU::ColoredPrs3d_i +::GetMeshName() const +{ + return myMeshName; +} + +VISU::Entity +VISU::ColoredPrs3d_i +::GetEntity() const +{ + return VISU::Entity(myEntity); +} + +const std::string& +VISU::ColoredPrs3d_i +::GetFieldName() const +{ + return myFieldName; +} + +int +VISU::ColoredPrs3d_i +::GetIteration() const +{ + return myIteration; +} + +VISU_ScalarMapPL* +VISU::ColoredPrs3d_i +::GetScalarMapPL() +{ + return myScalarMapPL; +} diff --git a/src/VISU_I/VISU_ColoredPrs3d_i.hh b/src/VISU_I/VISU_ColoredPrs3d_i.hh new file mode 100644 index 00000000..e03d772e --- /dev/null +++ b/src/VISU_I/VISU_ColoredPrs3d_i.hh @@ -0,0 +1,304 @@ +// VISU OBJECT : interactive object for VISU entities implementation +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// File : VISU_PrsObject_i.hxx +// Author : Alexey PETROV +// Module : VISU + +#ifndef VISU_ColoredPrs3d_i_HeaderFile +#define VISU_ColoredPrs3d_i_HeaderFile + +#include "VISU_Prs3d_i.hh" + +class VISU_ScalarMapPL; + +namespace VISU +{ + //============================================================================ + class ColoredPrs3d_i : public virtual POA_VISU::ColoredPrs3d, + public virtual Prs3d_i + { + ColoredPrs3d_i(); + ColoredPrs3d_i(const ColoredPrs3d_i&); + public: + //---------------------------------------------------------------------------- + typedef Prs3d_i TSuperClass; + + explicit + ColoredPrs3d_i(Result_i* theResult, + bool theAddToStudy); + explicit + ColoredPrs3d_i(Result_i* theResult, + SALOMEDS::SObject_ptr theSObject); + + virtual + ~ColoredPrs3d_i(); + + virtual + void + RemoveFromStudy(); + + //---------------------------------------------------------------------------- + virtual + CORBA::Long + GetScalarMode(); + + virtual + void + SetScalarMode(CORBA::Long theScalarMode); + + virtual + CORBA::Double + GetMin(); + + virtual + CORBA::Double + GetMax(); + + virtual + void + SetNbColors(CORBA::Long theNbColors); + + virtual + CORBA::Long + GetNbColors(); + + virtual + void + SetBarOrientation(VISU::ScalarMap::Orientation theOrientation); + + virtual + VISU::ScalarMap::Orientation + GetBarOrientation(); + + virtual + void + SetPosition(CORBA::Double X, CORBA::Double Y); + + virtual + CORBA::Double + GetPosX(); + + virtual + CORBA::Double + GetPosY(); + + virtual + void + SetSize(CORBA::Double theWidth, CORBA::Double theHeight); + + virtual + CORBA::Double + GetWidth(); + + virtual + CORBA::Double + GetHeight(); + + virtual + void + SetLabels(CORBA::Long theNbLabels); + + virtual + CORBA::Long + GetLabels(); + + virtual + void + SetTitle(const char* theName); + + virtual + char* + GetTitle(); + + //---------------------------------------------------------------------------- + protected: + VISU::ScalarMap::Orientation myOrientation; + std::string myTitle; + int myNumberOfLabels; + float myPosition[2], myWidth, myHeight; + + public: + //---------------------------------------------------------------------------- + virtual + Storable* + Create(const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + int theIteration); + + virtual + Storable* + Restore(const Storable::TRestoringMap& theMap); + + virtual + void + ToStream(std::ostringstream& theStr); + + virtual + void + SameAs(const Prs3d_i* theOrigin); + + /*! + * \brief Works like SameAs() method, but keep myIteration value unchanged. + * + * Is used in VISU_TimeAnimation class implementation. + */ + void + SameAsParams(const ColoredPrs3d_i* theOrigin); + + const VISU::PField& + GetField() const; + + const std::string& + GetMeshName() const; + + VISU::Entity + GetEntity() const; + + const std::string& + GetFieldName() const; + + int + GetIteration() const; + + VISU_ScalarMapPL* + GetScalarMapPL(); + + virtual + bool + IsBoldTitle(); + + virtual + void + SetBoldTitle(bool isBold); + + virtual + bool + IsItalicTitle(); + + virtual + void + SetItalicTitle(bool isItalic); + + virtual + bool + IsShadowTitle(); + + virtual + void + SetShadowTitle(bool isShadow); + + virtual + int + GetTitFontType(); + + virtual + void + SetTitFontType(int theType); + + virtual + void + GetTitleColor(float* theR, float* theG, float* theB); + + virtual + void + SetTitleColor(float theR, float theG, float theB); + + virtual + bool + IsBoldLabel(); + + virtual + void + SetBoldLabel(bool isBold); + + virtual + bool + IsItalicLabel(); + + virtual + void + SetItalicLabel(bool isItalic); + + virtual + bool + IsShadowLabel(); + + virtual + void + SetShadowLabel(bool isShadow); + + virtual + int + GetLblFontType(); + + virtual + void + SetLblFontType(int theType); + + virtual + void + GetLabelColor(float* theR, float* theG, float* theB); + + virtual + void + SetLabelColor(float theR, float theG, float theB); + + //---------------------------------------------------------------------------- + protected: + PField myField; + TEntity myEntity; + std::string myFieldName; + int myIteration; + + //Font management + bool myIsBoldTitle; + bool myIsItalicTitle; + bool myIsShadowTitle; + int myTitFontType; + float myTitleColor[3]; + + bool myIsBoldLabel; + bool myIsItalicLabel; + bool myIsShadowLabel; + int myLblFontType; + float myLabelColor[3]; + + VISU_ScalarMapPL* myScalarMapPL; + bool myIsFixedRange; + + virtual + void + DoSetInput(Result_i* theResult) = 0; + + Storable* + Build(int theRestoring); + + virtual + void + DoHook(); + }; + +} + +#endif diff --git a/src/VISU_I/VISU_CorbaMedConvertor.cxx b/src/VISU_I/VISU_CorbaMedConvertor.cxx index 56c39876..06bd2b6b 100644 --- a/src/VISU_I/VISU_CorbaMedConvertor.cxx +++ b/src/VISU_I/VISU_CorbaMedConvertor.cxx @@ -58,7 +58,8 @@ extern "C" { } } -namespace{ +namespace +{ using namespace SALOME_MED; const int MED_NBR_GEOMETRIE_MAILLE = 15; @@ -107,7 +108,10 @@ namespace{ MED_POINT1, }; - int GetEntity2Geom(const VISU::TEntity& theEntity, medGeometryElement*& theVector) + + //--------------------------------------------------------------- + int + GetEntity2Geom(const VISU::TEntity& theEntity, medGeometryElement*& theVector) { switch(theEntity){ case CELL_ENTITY: theVector = CELLGEOM; return MED_NBR_GEOMETRIE_MAILLE; break; @@ -118,7 +122,10 @@ namespace{ return -1; } - int MEDGeom2NbNodes(int theMEDGeomType) + + //--------------------------------------------------------------- + int + MEDGeom2NbNodes(int theMEDGeomType) { switch(theMEDGeomType){ case MED_NONE: return 0; @@ -141,45 +148,35 @@ namespace{ return -1; } - int MEDGeomToVTK(medGeometryElement theMEDGeomType) - { - switch(theMEDGeomType){ - case MED_NONE: return VTK_EMPTY_CELL; - case MED_POINT1: return VTK_VERTEX; - case MED_SEG2: return VTK_LINE; - case MED_SEG3: return VTK_LINE; - case MED_TRIA3: return VTK_TRIANGLE; - case MED_TRIA6: return VTK_TRIANGLE; - case MED_QUAD4: return VTK_QUAD; - case MED_QUAD8: return VTK_QUAD; - case MED_TETRA4: return VTK_TETRA; - case MED_TETRA10: return VTK_TETRA; - case MED_HEXA8: return VTK_HEXAHEDRON; - case MED_HEXA20: return VTK_HEXAHEDRON; - case MED_PENTA6: return VTK_WEDGE; - case MED_PENTA15: return VTK_WEDGE; - case MED_PYRA5: return VTK_PYRAMID; - case MED_PYRA13: return VTK_PYRAMID; - } - return -1; - } - - int VTKGeom2NbNodes(int theVTKGeomType) + + //--------------------------------------------------------------- + VISU::EGeometry + MEDGeom2VISU(medGeometryElement theGeom) { - switch(theVTKGeomType){ - case VTK_VERTEX: return 1; - case VTK_LINE: return 2; - case VTK_TRIANGLE: return 3; - case VTK_QUAD: return 4; - case VTK_TETRA: return 4; - case VTK_HEXAHEDRON: return 8; - case VTK_WEDGE: return 6; - case VTK_PYRAMID: return 5; + switch(theGeom){ + case MED_POINT1: return VISU::ePOINT1; + case MED_SEG2: return VISU::eSEG2; + case MED_SEG3: return VISU::eSEG3; + case MED_TRIA3: return VISU::eTRIA3; + case MED_TRIA6: return VISU::eTRIA6; + case MED_QUAD4: return VISU::eQUAD4; + case MED_QUAD8: return VISU::eQUAD8; + case MED_TETRA4: return VISU::eTETRA4; + case MED_TETRA10: return VISU::eTETRA10; + case MED_HEXA8: return VISU::eHEXA8; + case MED_HEXA20: return VISU::eHEXA20; + case MED_PENTA6: return VISU::ePENTA6; + case MED_PENTA15: return VISU::ePENTA15; + case MED_PYRA5: return VISU::ePYRA5; + case MED_PYRA13: return VISU::ePYRA13; } - return -1; + return VISU::eNONE; } - medGeometryElement VTKGeomToMED(int theVTKGeomType) + + //--------------------------------------------------------------- + medGeometryElement + VTKGeomToMED(int theVTKGeomType) { switch(theVTKGeomType){ case VTK_VERTEX: return MED_POINT1; @@ -194,7 +191,9 @@ namespace{ return medGeometryElement(-1); } - VISU::TEntity MEDEntityToVTK(medEntityMesh theMEDEntity) + //--------------------------------------------------------------- + VISU::TEntity + MEDEntityToVTK(medEntityMesh theMEDEntity) { switch(theMEDEntity){ case MED_NODE: return NODE_ENTITY; @@ -205,7 +204,9 @@ namespace{ return VISU::TEntity(-1); } - medEntityMesh VTKEntityToMED(VISU::TEntity theVTKEntity) + //--------------------------------------------------------------- + medEntityMesh + VTKEntityToMED(VISU::TEntity theVTKEntity) { switch(theVTKEntity){ case NODE_ENTITY: return MED_NODE; @@ -215,8 +216,12 @@ namespace{ } return medEntityMesh(-1); } + - string GetSObjectName(SALOMEDS::SObject_ptr aSObject){ + //--------------------------------------------------------------- + std::string + GetSObjectName(SALOMEDS::SObject_ptr aSObject) + { SALOMEDS::GenericAttribute_var anAttr; if (aSObject->FindAttribute(anAttr,"AttributeName")) { SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow(anAttr); @@ -226,6 +231,8 @@ namespace{ return ""; } + + //--------------------------------------------------------------- void GetCellsSize(vtkIdType& theNbCells, vtkIdType& theCellsSize, SALOME_MED::MESH_ptr theMEDMesh, @@ -248,6 +255,7 @@ namespace{ } + //--------------------------------------------------------------- void GetCellsSize(vtkIdType& theNbCells, vtkIdType& theCellsSize, SALOME_MED::FAMILY_ptr theMEDFamily) @@ -269,6 +277,7 @@ namespace{ } + //--------------------------------------------------------------- void GetCellsSize(VISU::PCMesh theMesh, SALOME_MED::MESH_ptr theMEDMesh, @@ -277,17 +286,14 @@ namespace{ TMeshOnEntityMap& aMeshOnEntityMap = theMesh->myMeshOnEntityMap; VISU::PCMeshOnEntity aMeshOnEntity = aMeshOnEntityMap[theEntity]; if(theEntity == NODE_ENTITY){ - theMesh->myNbPoints = theMEDMesh->getNumberOfNodes(); aMeshOnEntity->myNbCells = theMesh->myNbPoints; aMeshOnEntity->myCellsSize = 2*theMesh->myNbPoints; vtkIdType aNbCells, aCellsSize; GetCellsSize(aNbCells,aCellsSize,theMEDMesh,CELL_ENTITY); if(aNbCells > 0){ - TMeshOnEntityMap::iterator aIter = aMeshOnEntityMap.find(CELL_ENTITY); if (aIter != aMeshOnEntityMap.end()){ VISU::PCMeshOnEntity aMeshOnCells = aIter->second; - aMeshOnCells->myEntity = VISU::CELL_ENTITY; aMeshOnCells->myMeshName = theMesh->myName; aMeshOnCells->myNbCells = aNbCells; @@ -302,6 +308,7 @@ namespace{ } +//--------------------------------------------------------------- VISU_Convertor* VISU_MEDFieldConvertor::Build() { @@ -322,11 +329,15 @@ VISU_MEDFieldConvertor::Build() CORBA::String_var aFieldName = myField->getName(); PCMesh aMesh = myMeshMap[aMeshName.in()](new TCMesh()); + aMesh->myNamedPointCoords(new TNamedPointCoords()); + aMesh->myNbPoints = aMEDMesh->getNumberOfNodes(); aMesh->myDim = aMEDMesh->getSpaceDimension(); - aMesh->myPointsDim.resize(aMesh->myDim); aMesh->myName = aMeshName.in(); aMesh->myMesh = aMEDMesh; + TNamedPointCoords& aCoords = aMesh->myNamedPointCoords; + aCoords.Init(aMesh->myNbPoints,aMesh->myDim); + if(MYDEBUG) MESSAGE("VISU_MEDFieldConvertor::Build - aMeshName = "<myEntity); - aFamilyAndEntitySet.insert(aFamilyAndEntity); - - aGroup->myNbCells += aFamily->myNbCells; - aGroup->myCellsSize += aFamily->myCellsSize; - - VISU::TBindGroups& aBindGroups = aFamily->myGroups; - aBindGroups.insert(aSupportName.in()); + aFamilySet.insert(aFamily); } } - if(!aGroup->myFamilyAndEntitySet.empty()){ + if(!aFamilySet.empty()){ TGroupMap& aGroupMap = aMesh->myGroupMap; aGroupMap[aSupportName.in()] = aGroup; } @@ -731,12 +758,10 @@ VISU_MEDConvertor::Build(SALOME_MED::MED_ptr theMED) aField->myName = aFieldName.in(); aField->myEntity = anEntity; aField->myMeshName = aMeshName.in(); - aField->myNbComp = aMEDField->getNumberOfComponents(); + aField->InitArrays(aMEDField->getNumberOfComponents()); aField->myDataSize = aMeshOnEntity->myNbCells * aField->myNbComp; if(MYDEBUG) MESSAGE("VISU_MEDConvertor::Build - aMeshOnEntity->myNbCells = "<myNbCells); - aField->myCompNames.resize(aField->myNbComp); - aField->myUnitNames.resize(aField->myNbComp); }else aField = aFieldMapIter->second; @@ -757,6 +782,7 @@ VISU_MEDConvertor::Build(SALOME_MED::MED_ptr theMED) } +//--------------------------------------------------------------- VISU_Convertor* VISU_MEDConvertor::Build(SALOMEDS::ChildIterator_ptr theTimeStampIterator) { @@ -784,48 +810,88 @@ VISU_MEDConvertor::Build(SALOMEDS::ChildIterator_ptr theTimeStampIterator) CORBA::String_var aMeshName = aMEDMesh->getName(); CORBA::String_var aFieldName = aMEDField->getName(); - PCMesh aMesh = myMeshMap[aMeshName.in()](new TCMesh()); - aMesh->myDim = aMEDMesh->getSpaceDimension(); - aMesh->myPointsDim.resize(aMesh->myDim); - aMesh->myName = aMeshName.in(); - aMesh->myNbPoints = aMEDMesh->getNumberOfNodes(); - aMesh->myMesh = aMEDMesh; - if(MYDEBUG) MESSAGE("VISU_MEDConvertor::Build - aMeshName = '"<myNbCells = "<myNbCells); - aField->myCompNames.resize(aField->myNbComp); - aField->myUnitNames.resize(aField->myNbComp); - } + }else + aField = aFieldMapIter->second; + TValField& aValField = aField->myValField; int anId = aMEDField->getIterationNumber(); PCValForTime aValForTime = aValField[anId](new TCValForTime()); @@ -834,50 +900,75 @@ VISU_MEDConvertor::Build(SALOMEDS::ChildIterator_ptr theTimeStampIterator) aValForTime->myTime = TTime(aDT,""); aValForTime->myField = aMEDField; if(MYDEBUG) - MESSAGE("VISU_MEDConvertor::Build - aMeshName = '"<myIsDone) + return 0; + SALOME_MED::MESH_var& aMedMesh = theMesh->myMesh; - int iNumElemEnd = aMedMesh->getNumberOfNodes(); - TMeshImpl::TPointsCoord& aPointsCoord = theMesh->myPointsCoord; + int aDim = theMesh->myDim; + TNamedPointCoords& aCoords = theMesh->myNamedPointCoords; + int aNbElem = aCoords.GetNbPoints(); - if(MYDEBUG) MESSAGE("LoadPoints - iNumElemEnd = "<> There is no points in the mesh !!!"); - aPointsCoord.resize(theMesh->myDim*iNumElemEnd,0.0); - SALOME_MED::double_array_var coord = aMedMesh->getCoordinates(SALOME_MED::MED_FULL_INTERLACE); - if(!isPointsLoaded){ - for (int iNumElem = 0; iNumElem < iNumElemEnd; iNumElem++) - for(int iDim = 0, iNumElem2Dim = iNumElem*theMesh->myDim; iDim < theMesh->myDim; iDim++, iNumElem2Dim++) - aPointsCoord[iNumElem2Dim] = coord[iNumElem2Dim]; + SALOME_MED::double_array_var aCCoord = aMedMesh->getCoordinates(SALOME_MED::MED_FULL_INTERLACE); + for(int iElem = 0, anId = 0; iElem < aNbElem; iElem++){ + VISU::TCoordSlice aCoordSlice = aCoords.GetCoordSlice(iElem); + for(int iDim = 0; iDim < aDim; iDim++) + aCoordSlice[iDim] = aCCoord[anId++]; + } + + if(MYDEBUG) MESSAGE("LoadPoints - Filling aMeshOnEntity with type NODE_ENTITY"); + + TGeom2SubMesh& aGeom2SubMesh = aMeshOnEntity->myGeom2SubMesh; + PSubMeshImpl aSubMesh = aGeom2SubMesh[VISU::ePOINT1](new TCSubMesh()); - if(MYDEBUG) MESSAGE("LoadPoints - Filling aMeshOnEntity with type NODE_ENTITY"); + aSubMesh->myNbCells = theMesh->myNbPoints; + aSubMesh->myCellsSize = 2*theMesh->myNbPoints; - TMeshOnEntityImpl::TConnForCellType& aConnForCellType = aMeshOnEntity->myCellsConn[VTK_VERTEX]; - aConnForCellType.resize(iNumElemEnd); - for (int iNumElem = 0; iNumElem < iNumElemEnd; iNumElem++) - aConnForCellType[iNumElem] = TMeshOnEntityImpl::TConnect(1,iNumElem); - } - if(aFamily){ - if(MYDEBUG) MESSAGE("LoadPoints - Filling aFamily SubMesh"); - - SALOME_MED::FAMILY_var aMedFamily = aFamily->myFamily; - CORBA::Boolean anIsOnAllElements = aMedFamily->isOnAllElements(); - TFamilyImpl::TSubMeshOnCellType& aSubMeshOnCellType = aFamily->mySubMesh[VTK_VERTEX]; - - if(!anIsOnAllElements){ - SALOME_MED::medGeometryElement_array_var aGeom = aMedFamily->getTypes(); - SALOME_MED::long_array_var aCellNumForType = aMedFamily->getNumber(aGeom[0]); - int iNumElemEndTmp = iNumElemEnd; - iNumElemEnd = aCellNumForType->length(); - for (int iNumElem = 0; iNumElem < iNumElemEnd; iNumElem++) { - int tmp = aCellNumForType[iNumElem]-1; - if(0 > tmp || tmp >= iNumElemEndTmp) { - static QString aString; - aString.sprintf("LoadPoints >> iNumElemEndTmp(%d) <= aCellNumForType[%d]=%d < 0 !!!",iNumElemEnd,iNumElem,tmp); - throw std::runtime_error(aString.latin1()); - } - aSubMeshOnCellType.insert(tmp); - } - }else{ - for(int iNumElem = 0; iNumElem < iNumElemEnd; iNumElem++){ - aSubMeshOnCellType.insert(iNumElem); + TCell2Connect& aCell2Connect = aSubMesh->myCell2Connect; + aCell2Connect.resize(aNbElem); + for(int iElem = 0; iElem < aNbElem; iElem++) + aCell2Connect[iElem] = TConnect(1,iElem); + + theMesh->myIsDone = true; + + return 1; +} + + +//--------------------------------------------------------------- +int +VISU_MEDConvertor +::LoadPointsOnFamily(VISU::PCMesh theMesh, + VISU::PCFamily theFamily) +{ + PCMeshOnEntity aMeshOnEntity = theMesh->myMeshOnEntityMap[VISU::NODE_ENTITY]; + + if(theFamily->myIsDone) + return 0; + + TNamedPointCoords& aCoords = theMesh->myNamedPointCoords; + int aNbElem = aCoords.GetNbPoints(); + + SALOME_MED::FAMILY_var aMedFamily = theFamily->myFamily; + CORBA::Boolean anIsOnAllElements = aMedFamily->isOnAllElements(); + TSubMeshID& aSubMeshID = theFamily->myGeom2SubMeshID[VISU::ePOINT1]; + + if(!anIsOnAllElements){ + SALOME_MED::medGeometryElement_array_var aGeom = aMedFamily->getTypes(); + SALOME_MED::long_array_var aCellNumForType = aMedFamily->getNumber(aGeom[0]); + int aMaxElemId = aNbElem; + aNbElem = aCellNumForType->length(); + for(int iElem = 0; iElem < aNbElem; iElem++){ + int aTmp = aCellNumForType[iElem]-1; + if(0 > aTmp || aTmp >= aMaxElemId){ + static QString aString; + aString.sprintf("LoadPointsOnFamily - aMaxElemId(%d) <= aCellNumForType[%d]=%d < 0",aMaxElemId,iElem,aTmp); + throw std::runtime_error(aString.latin1()); } + aSubMeshID.push_back(aTmp); + } + }else{ + for(int iElem = 0; iElem < aNbElem; iElem++){ + aSubMeshID.push_back(iElem); } } + + theFamily->myIsDone = true; + return 1; } +//--------------------------------------------------------------- int -VISU_MEDConvertor::LoadCellsOnEntity(VISU::PCMesh theMesh, - VISU::PCMeshOnEntity theMeshOnEntity, - const string& theFamilyName) +VISU_MEDConvertor +::LoadCellsOnEntity(VISU::PCMesh theMesh, + VISU::PCMeshOnEntity theMeshOnEntity) { - //Check on existing family - PCFamily aFamily = GetFamily(theMeshOnEntity,theFamilyName); - //Check on loading already done - bool isCellsLoaded = !theMeshOnEntity->myCellsConn.empty(); - if(isCellsLoaded) - if(!aFamily) - return 0; - else if(!aFamily->mySubMesh.empty()) - return 0; + if(theMeshOnEntity->myIsDone) + return 0; SALOME_MED::SUPPORT_var& aMedSupport = theMeshOnEntity->mySupport; SALOME_MED::MESH_var aMedMesh = aMedSupport->getMesh(); - if(MYDEBUG) { - MESSAGE("LoadCellsOnEntity - theFamilyName = '"<> aNbPoints(%d) <= anArray[%d][%d]=%d < 0 !!!",aNbPoints,iNumElem,k,anArray[k]); - throw std::runtime_error(aString.latin1()); - } - aConnForCellType.push_back(anArray); + anArray[k] = aConnect[k]; } - //Workaround for MED Component data structure - int aSize = aConnForCellType.size(); - theMeshOnEntity->myCellsFirstIndex[aGeom] = TCMeshOnEntity::TIndexAndSize(aCounter,aSize); - aCounter += aSize; - } - } - } - //Filling aFamily SubMesh - if(aFamily){ - SALOME_MED::FAMILY_var aMedFamily = aFamily->myFamily; - CORBA::Boolean anIsOnAllElements = aMedFamily->isOnAllElements(); - if(!anIsOnAllElements){ - SALOME_MED::medGeometryElement_array_var aGeoms = aMedFamily->getTypes(); - iGeomEnd = aGeoms->length(); - if(MYDEBUG) MESSAGE("LoadCellsOnEntity - iGeomEnd = "<getNumber(aGeom); - int aVGeom = MEDGeomToVTK(aGeom); - TFamilyImpl::TSubMeshOnCellType& aSubMeshOnCellType = aFamily->mySubMesh[aVGeom]; - int iNumElemEndTmp = theMeshOnEntity->myCellsConn[aVGeom].size(); - int iNumElemEnd = aCellNumForType->length(); - int aCounter = theMeshOnEntity->myCellsFirstIndex[aGeom].first; - if(MYDEBUG) - MESSAGE("LoadCellsOnEntity - aGeom = "<> iNumElemEndTmp(%d) <= aCellNumForType[%d]=%d < 0 !!!",iNumElemEndTmp,iNumElem,tmp); + aString.sprintf("ImportCells >> aNbPoints(%d) <= anArray[%d][%d]=%d < 0 !!!",aNbPoints,iElem,k,anArray[k]); throw std::runtime_error(aString.latin1()); } - aSubMeshOnCellType.insert(tmp); - } + aCell2Connect.push_back(anArray); } - }else{ - const TMeshOnEntityImpl::TCellsConn& aCellsConn = theMeshOnEntity->myCellsConn; - TMeshOnEntityImpl::TCellsConn::const_iterator aCellsConnIter = aCellsConn.begin(); - for(; aCellsConnIter != aCellsConn.end(); aCellsConnIter++){ - int aVGeom = aCellsConnIter->first; - const TMeshOnEntityImpl::TConnForCellType& aConnForCellType = aCellsConnIter->second; - TFamilyImpl::TSubMeshOnCellType& aSubMeshOnCellType = aFamily->mySubMesh[aVGeom]; - int iNumElemEnd = aConnForCellType.size(); - for(int iNumElem = 0; iNumElem < iNumElemEnd; iNumElem++) - aSubMeshOnCellType.insert(iNumElem); + //Workaround for MED Component data structure + int aSize = aCell2Connect.size(); + theMeshOnEntity->myCellsFirstIndex[aMGeom] = TCMeshOnEntity::TIndexAndSize(aCounter,aSize); + aCounter += aSize; + } + } + + theMeshOnEntity->myIsDone = true; + + return 1; +} + + +//--------------------------------------------------------------- +int +VISU_MEDConvertor +::LoadCellsOnFamily(VISU::PCMesh theMesh, + VISU::PCMeshOnEntity theMeshOnEntity, + VISU::PCFamily theFamily) +{ + if(theFamily->myIsDone) + return 0; + + const VISU::TGeom2SubMesh& aGeom2SubMesh = theMeshOnEntity->myGeom2SubMesh; + SALOME_MED::FAMILY_var aMedFamily = theFamily->myFamily; + CORBA::Boolean anIsOnAllElements = aMedFamily->isOnAllElements(); + if(!anIsOnAllElements){ + SALOME_MED::medGeometryElement_array_var aGeoms = aMedFamily->getTypes(); + int iGeomEnd = aGeoms->length(); + if(MYDEBUG) MESSAGE("LoadCellsOnEntity - iGeomEnd = "<getNumber(aMGeom); + VISU::EGeometry aEGeom = MEDGeom2VISU(aMGeom); + + int iNumElemEndTmp = 0; + TGeom2SubMesh::const_iterator anIter = aGeom2SubMesh.find(aEGeom); + if(anIter != aGeom2SubMesh.end()){ + const VISU::TSubMeshImpl& aSubMesh = anIter->second; + const VISU::TCell2Connect& anArray = aSubMesh.myCell2Connect; + iNumElemEndTmp = anArray.size(); + } + + TSubMeshID& aSubMeshID = theFamily->myGeom2SubMeshID[aEGeom]; + + int iNumElemEnd = aCellNumForType->length(); + int aCounter = theMeshOnEntity->myCellsFirstIndex[aMGeom].first; + + if(MYDEBUG) + MESSAGE("LoadCellsOnFamily "<< + "- aMGeom = "<> iNumElemEndTmp(%d) <= aCellNumForType[%d]=%d < 0 !!!",iNumElemEndTmp,iNumElem,tmp); + throw std::runtime_error(aString.latin1()); + } + aSubMeshID.push_back(tmp); } } + }else{ + const VISU::TGeom2SubMesh& aGeom2SubMesh = theMeshOnEntity->myGeom2SubMesh; + VISU::TGeom2SubMesh::const_iterator anIter = aGeom2SubMesh.begin(); + for(; anIter != aGeom2SubMesh.end(); anIter++){ + VISU::EGeometry aEGeom = anIter->first; + const VISU::TSubMeshImpl& aSubMesh = anIter->second; + const VISU::TCell2Connect& aCell2Connect = aSubMesh.myCell2Connect; + TSubMeshID& aSubMeshID = theFamily->myGeom2SubMeshID[aEGeom]; + int iNumElemEnd = aCell2Connect.size(); + for(int iNumElem = 0; iNumElem < iNumElemEnd; iNumElem++) + aSubMeshID.push_back(iNumElem); + } } + + theFamily->myIsDone = true; + return 1; } + template int ImportField(TArray& theArray, @@ -1110,35 +1292,55 @@ ImportField(TArray& theArray, VISU::PCValForTime theValForTime, VISU::PCMeshOnEntity theMeshOnEntity) { + int aNbComp = theField->myNbComp; if(theField->myEntity == NODE_ENTITY){ - TValForTimeImpl::TValForCellsWithType& aValForCellsWithType = - theValForTime->myValForCells[VTK_VERTEX]; - int iNumElemEnd = theMesh->myPointsCoord.size()/theMesh->myDim*theField->myNbComp; - if(MYDEBUG) MESSAGE("ImportField - iNumElemEnd = "<GetNbGauss(aEGeom); + const TNamedPointCoords& aCoords = theMesh->myNamedPointCoords; + int aNbElem = aCoords.GetNbPoints(); + + if(MYDEBUG) MESSAGE("ImportField - aNbElem = "<GetMeshValue(VISU::ePOINT1); + aMeshValue.Init(aNbElem,aNbGauss,aNbComp); + for(int iElem = 0, anId = 0; iElem < aNbElem; iElem++){ + TValueSliceArr aValueSliceArr = aMeshValue.GetGaussValueSliceArr(iElem); + for(int iGauss = 0; iGauss < aNbGauss; iGauss++){ + TValueSlice& aValueSlice = aValueSliceArr[iGauss]; + for(int iComp = 0; iComp < aNbComp; iComp++){ + aValueSlice[iComp] = theArray[anId++]; + } + } + } }else{ SALOME_MED::medGeometryElement* aGeomElems; const TEntity& aVEntity = theField->myEntity; int iGeomEnd = GetEntity2Geom(aVEntity,aGeomElems); for(int iGeom = 0; iGeom < iGeomEnd; iGeom++){ - SALOME_MED::medGeometryElement aGeom = aGeomElems[iGeom]; - int aVGeom = MEDGeomToVTK(aGeom); + SALOME_MED::medGeometryElement aMGeom = aGeomElems[iGeom]; + VISU::EGeometry aEGeom = MEDGeom2VISU(aMGeom); + int aNbGauss = theValForTime->GetNbGauss(aEGeom); const TCMeshOnEntity::TCellsFirstIndex& aCellsFirstIndex = theMeshOnEntity->myCellsFirstIndex; - TCMeshOnEntity::TCellsFirstIndex::const_iterator aCellsFirstIndexIter = aCellsFirstIndex.find(aGeom); + TCMeshOnEntity::TCellsFirstIndex::const_iterator aCellsFirstIndexIter = aCellsFirstIndex.find(aMGeom); if(aCellsFirstIndexIter != aCellsFirstIndex.end()){ const TCMeshOnEntity::TIndexAndSize& aIndexAndSize = aCellsFirstIndexIter->second; - int iNumElemEnd = aIndexAndSize.second; if(MYDEBUG) - MESSAGE("ImportField - aGeom = "<myValForCells[aVGeom]; - aValForCellsWithType.resize(iNumElemEnd*theField->myNbComp); - for(int iNumElem = 0; iNumElem < iNumElemEnd; iNumElem++) - for(int k = 0, kj = iNumElem*theField->myNbComp; k < theField->myNbComp; k++) - aValForCellsWithType[kj+k] = theArray[aIndexAndSize.first*theField->myNbComp+kj+k]; + + int aNbElem = aIndexAndSize.second; + int aStart = aIndexAndSize.first*aNbComp; + TMeshValue& aMeshValue = theValForTime->GetMeshValue(aEGeom); + aMeshValue.Init(aNbElem,aNbGauss,aNbComp); + for(int iElem = 0, anId = 0; iElem < aNbElem; iElem++, anId += aNbComp){ + TValueSliceArr aValueSliceArr = aMeshValue.GetGaussValueSliceArr(iElem); + for(int iGauss = 0; iGauss < aNbGauss; iGauss++){ + TValueSlice& aValueSlice = aValueSliceArr[iGauss]; + for(int iComp = 0; iComp < aNbComp; iComp++) + aValueSlice[iComp] = theArray[aStart+anId+iComp]; + } + } } } } @@ -1146,15 +1348,21 @@ ImportField(TArray& theArray, } int -VISU_MEDConvertor::LoadField(VISU::PCMesh theMesh, - VISU::PCMeshOnEntity theMeshOnEntity, - VISU::PField theField, - VISU::PCValForTime theValForTime) +VISU_MEDConvertor +::LoadField(VISU::PCMesh theMesh, + VISU::PCMeshOnEntity theMeshOnEntity, + VISU::PField theField, + VISU::PCValForTime theValForTime) { //Check on loading already done - if(!theValForTime->myValForCells.empty()) + PIDMapperFilter anIDMapperFilter = theValForTime->myIDMapperFilter; + if(anIDMapperFilter->myIsVTKDone) return 0; - + + PCProfile aProfile(new TCProfile()); + aProfile->myIsAll = true; + theValForTime->myProfile = aProfile; + SALOME_MED::FIELD_var aMEDField = theValForTime->myField; SALOME_MED::FIELDDOUBLE_ptr aFieldDouble = SALOME_MED::FIELDDOUBLE::_narrow(aMEDField); if(!aFieldDouble->_is_nil()){ @@ -1168,5 +1376,8 @@ VISU_MEDConvertor::LoadField(VISU::PCMesh theMesh, if(MYDEBUG) MESSAGE("VISU_MEDConvertor::LoadField - There is FIELDINT = "<length()); ::ImportField(anArray,theMesh,theField,theValForTime,theMeshOnEntity); } + + anIDMapperFilter->myIsVTKDone = true; + return 1; } diff --git a/src/VISU_I/VISU_CorbaMedConvertor.hxx b/src/VISU_I/VISU_CorbaMedConvertor.hxx index 6b7c9410..f4a975aa 100644 --- a/src/VISU_I/VISU_CorbaMedConvertor.hxx +++ b/src/VISU_I/VISU_CorbaMedConvertor.hxx @@ -35,39 +35,67 @@ #include -namespace VISU{ - - struct TCMesh: TMeshImpl{ +namespace VISU +{ + //--------------------------------------------------------------- + struct TCMesh: virtual TMeshImpl + { SALOME_MED::MESH_var myMesh; }; - typedef shared_ptr PCMesh; + typedef SharedPtr PCMesh; + + + //--------------------------------------------------------------- + struct TCProfile: virtual TProfileImpl + {}; + typedef SharedPtr PCProfile; + + + //--------------------------------------------------------------- + struct TCSubMesh: virtual TSubMeshImpl + {}; + typedef SharedPtr PCSubMesh; + - struct TCMeshOnEntity: TMeshOnEntityImpl{ + //--------------------------------------------------------------- + struct TCMeshOnEntity: virtual TMeshOnEntityImpl + { SALOME_MED::SUPPORT_var mySupport; typedef std::pair TIndexAndSize; typedef std::map TCellsFirstIndex; TCellsFirstIndex myCellsFirstIndex; }; - typedef shared_ptr PCMeshOnEntity; + typedef SharedPtr PCMeshOnEntity; - struct TCFamily: TFamilyImpl{ + + //--------------------------------------------------------------- + struct TCFamily: virtual TFamilyImpl + { SALOME_MED::FAMILY_var myFamily; }; - typedef shared_ptr PCFamily; + typedef SharedPtr PCFamily; - struct TCGroup: TGroupImpl{ + + //--------------------------------------------------------------- + struct TCGroup: virtual TGroupImpl + { SALOME_MED::GROUP_var myGroup; }; - typedef shared_ptr PCGroup; + typedef SharedPtr PCGroup; - struct TCField: TFieldImpl{ - }; - typedef shared_ptr PCField; - struct TCValForTime: TValForTimeImpl{ + //--------------------------------------------------------------- + struct TCField: virtual TFieldImpl + {}; + typedef SharedPtr PCField; + + + //--------------------------------------------------------------- + struct TCValForTime: virtual TValForTimeImpl + { SALOME_MED::FIELD_var myField; }; - typedef shared_ptr PCValForTime; + typedef SharedPtr PCValForTime; } @@ -78,47 +106,93 @@ class VISU_MEDConvertor: public VISU_Convertor_impl{ VISU_MEDConvertor() {}; public: - VISU_MEDConvertor(SALOMEDS::SObject_ptr theMedSObject) : mySObject(SALOMEDS::SObject::_duplicate(theMedSObject)) {} - virtual VISU_Convertor* Build(); - - protected: - - VISU_Convertor* Build(SALOME_MED::MED_ptr theMED); - VISU_Convertor* Build(SALOMEDS::ChildIterator_ptr theTimeStampIterator); - - virtual int LoadMeshOnEntity(VISU::PMeshOnEntityImpl theMeshOnEntity, - const std::string& theFamilyName = ""); + VISU_MEDConvertor(SALOMEDS::SObject_ptr theMedSObject): + mySObject(SALOMEDS::SObject::_duplicate(theMedSObject)) + {} - virtual int LoadMeshOnGroup(VISU::PMeshImpl theMesh, - const VISU::TFamilyAndEntitySet& theFamilyAndEntitySet); + virtual + VISU_Convertor* + Build(); - virtual int LoadFieldOnMesh(VISU::PMeshImpl theMesh, - VISU::PMeshOnEntityImpl theMeshOnEntity, - VISU::PFieldImpl theField, - VISU::PValForTimeImpl theValForTime); + protected: - int LoadPoints(VISU::PCMesh theMesh, - const std::string& theFamilyName = "") ; + VISU_Convertor* + Build(SALOME_MED::MED_ptr theMED); + + VISU_Convertor* + Build(SALOMEDS::ChildIterator_ptr theTimeStampIterator); - int LoadCellsOnEntity(VISU::PCMesh theMesh, - VISU::PCMeshOnEntity theMeshOnEntity, - const std::string& theFamilyName = ""); + virtual + int + LoadMeshOnEntity(VISU::PMeshImpl theMesh, + VISU::PMeshOnEntityImpl theMeshOnEntity); - int LoadField(VISU::PCMesh theMesh, - VISU::PCMeshOnEntity theMeshOnEntity, - VISU::PField theField, - VISU::PCValForTime theValForTime); + virtual + int + LoadFamilyOnEntity(VISU::PMeshImpl theMesh, + VISU::PMeshOnEntityImpl theMeshOnEntity, + VISU::PFamilyImpl theFamily); + + virtual + int + LoadMeshOnGroup(VISU::PMeshImpl theMesh, + const VISU::TFamilySet& theFamilySet); + + virtual + int + LoadValForTimeOnMesh(VISU::PMeshImpl theMesh, + VISU::PMeshOnEntityImpl theMeshOnEntity, + VISU::PFieldImpl theField, + VISU::PValForTimeImpl theValForTime); + + virtual + int + LoadValForTimeOnGaussPts(VISU::PMeshImpl theMesh, + VISU::PMeshOnEntityImpl theMeshOnEntity, + VISU::PFieldImpl theField, + VISU::PValForTimeImpl theValForTime) + { + return 0; + } + + int + LoadPoints(VISU::PCMesh theMesh) ; + + int + LoadPointsOnFamily(VISU::PCMesh theMesh, + VISU::PCFamily theFamily) ; + + int + LoadCellsOnEntity(VISU::PCMesh theMesh, + VISU::PCMeshOnEntity theMeshOnEntity); + + int + LoadCellsOnFamily(VISU::PCMesh theMesh, + VISU::PCMeshOnEntity theMeshOnEntity, + VISU::PCFamily theFamily); + + int + LoadField(VISU::PCMesh theMesh, + VISU::PCMeshOnEntity theMeshOnEntity, + VISU::PField theField, + VISU::PCValForTime theValForTime); }; -class VISU_MEDFieldConvertor: public VISU_MEDConvertor{ +class VISU_MEDFieldConvertor: public VISU_MEDConvertor +{ protected: SALOME_MED::FIELD_var myField; + public: + VISU_MEDFieldConvertor(SALOME_MED::FIELD_ptr theField) : myField(SALOME_MED::FIELD::_duplicate(theField)) {} - virtual VISU_Convertor* Build() ; + + virtual + VISU_Convertor* + Build(); }; extern "C" { diff --git a/src/VISU_I/VISU_CutLines_i.cc b/src/VISU_I/VISU_CutLines_i.cc index e08e3ff7..879b0531 100644 --- a/src/VISU_I/VISU_CutLines_i.cc +++ b/src/VISU_I/VISU_CutLines_i.cc @@ -24,11 +24,12 @@ // Author : Alexey PETROV // Module : VISU -#include "VISU_CutLinesPL.hxx" -#include "VISU_Result_i.hh" #include "VISU_CutLines_i.hh" -#include "VISU_Actor.h" +#include "VISU_Result_i.hh" +#include "VISU_Actor.h" +#include "VISU_CutLinesPL.hxx" +#include "VISU_Convertor.hxx" #include "VISU_PipeLineUtils.hxx" #include @@ -62,10 +63,10 @@ CutLines_i(Result_i* theResult, bool theAddToStudy) : PrsObject_i(theResult->GetStudyDocument()), Prs3d_i(theResult,theAddToStudy), + ColoredPrs3d_i(theResult,theAddToStudy), ScalarMap_i(theResult,theAddToStudy), myCutLinesPL(NULL) -{ -} +{} VISU::CutLines_i:: @@ -73,6 +74,7 @@ CutLines_i(Result_i* theResult, SALOMEDS::SObject_ptr theSObject) : PrsObject_i(theResult->GetStudyDocument()), Prs3d_i(theResult,theSObject), + ColoredPrs3d_i(theResult,theSObject), ScalarMap_i(theResult,theSObject), myCutLinesPL(NULL) { @@ -95,7 +97,8 @@ VISU::Storable* VISU::CutLines_i::Create(const char* theMeshName, VISU::Entity t VISU::Storable* VISU::CutLines_i::Restore(const Storable::TRestoringMap& theMap) { - DoHook(); + TSuperClass::Restore(theMap); + SetNbLines(VISU::Storable::FindValue(theMap,"myNbLines").toInt()); SetDisplacement(VISU::Storable::FindValue(theMap,"myDisplacement[0]").toDouble()); SetDisplacement2(VISU::Storable::FindValue(theMap,"myDisplacement[1]").toDouble()); @@ -130,7 +133,7 @@ VISU::Storable* VISU::CutLines_i::Restore(const Storable::TRestoringMap& theMap) SetCurveInverted(i,false); } - return ScalarMap_i::Restore(theMap); + return this; } @@ -302,6 +305,17 @@ void VISU::CutLines_i::DoHook(){ ScalarMap_i::DoHook(); } +VISU_Actor* +VISU::CutLines_i +::CreateActor(const Handle(SALOME_InteractiveObject)& theIO) +{ + if(VISU_Actor* anActor = ScalarMap_i::CreateActor(theIO)){ + anActor->SetVTKMapping(true); + return anActor; + } + return NULL; +} + void VISU::CutLines_i::BuildTableOfReal(SALOMEDS::SObject_ptr theSObject){ try{ if(MYDEBUG) MESSAGE("CutPlanes_i::BuildTableOfReal"); diff --git a/src/VISU_I/VISU_CutLines_i.hh b/src/VISU_I/VISU_CutLines_i.hh index 84540a18..cdc7184a 100644 --- a/src/VISU_I/VISU_CutLines_i.hh +++ b/src/VISU_I/VISU_CutLines_i.hh @@ -111,6 +111,10 @@ namespace VISU{ virtual Storable* Restore(const Storable::TRestoringMap& theMap); + virtual + VISU_Actor* + CreateActor(const Handle(SALOME_InteractiveObject)& theIO = NULL); + void BuildTableOfReal(SALOMEDS::SObject_ptr theSObject); static const std::string myComment; diff --git a/src/VISU_I/VISU_CutPlanes_i.cc b/src/VISU_I/VISU_CutPlanes_i.cc index 9cd09af5..d5c0ea04 100644 --- a/src/VISU_I/VISU_CutPlanes_i.cc +++ b/src/VISU_I/VISU_CutPlanes_i.cc @@ -58,10 +58,10 @@ CutPlanes_i(Result_i* theResult, bool theAddToStudy) : PrsObject_i(theResult->GetStudyDocument()), Prs3d_i(theResult,theAddToStudy), + ColoredPrs3d_i(theResult,theAddToStudy), ScalarMap_i(theResult,theAddToStudy), myCutPlanesPL(NULL) -{ -} +{} VISU::CutPlanes_i:: @@ -69,6 +69,7 @@ CutPlanes_i(Result_i* theResult, SALOMEDS::SObject_ptr theSObject) : PrsObject_i(theResult->GetStudyDocument()), Prs3d_i(theResult,theSObject), + ColoredPrs3d_i(theResult,theSObject), ScalarMap_i(theResult,theSObject), myCutPlanesPL(NULL) { @@ -84,7 +85,8 @@ VISU::Storable* VISU::CutPlanes_i::Create(const char* theMeshName, VISU::Entity VISU::Storable* VISU::CutPlanes_i::Restore(const Storable::TRestoringMap& theMap) { - DoHook(); + TSuperClass::Restore(theMap); + SetNbPlanes(VISU::Storable::FindValue(theMap,"myNbPlanes").toInt()); SetDisplacement(VISU::Storable::FindValue(theMap,"myDisplacement").toDouble()); SetOrientation(VISU::CutPlanes::Orientation(VISU::Storable::FindValue(theMap,"myBasePlane").toInt()), @@ -96,7 +98,7 @@ VISU::Storable* VISU::CutPlanes_i::Restore(const Storable::TRestoringMap& theMap if(aCondList[i].toInt() == 0) SetPlanePosition(i,aPosList[i].toDouble()); - return ScalarMap_i::Restore(theMap); + return this; } @@ -180,3 +182,15 @@ void VISU::CutPlanes_i::DoHook(){ ScalarMap_i::DoHook(); } + +VISU_Actor* +VISU::CutPlanes_i +::CreateActor(const Handle(SALOME_InteractiveObject)& theIO) +{ + if(VISU_Actor* anActor = ScalarMap_i::CreateActor(theIO)){ + anActor->SetVTKMapping(true); + return anActor; + } + return NULL; +} + diff --git a/src/VISU_I/VISU_CutPlanes_i.hh b/src/VISU_I/VISU_CutPlanes_i.hh index 7c76d8c8..66c2d913 100644 --- a/src/VISU_I/VISU_CutPlanes_i.hh +++ b/src/VISU_I/VISU_CutPlanes_i.hh @@ -86,6 +86,10 @@ namespace VISU{ virtual Storable* Restore(const Storable::TRestoringMap& theMap); + virtual + VISU_Actor* + CreateActor(const Handle(SALOME_InteractiveObject)& theIO = NULL); + static const std::string myComment; virtual const char* GetComment() const; virtual QString GenerateName(); diff --git a/src/VISU_I/VISU_DeformedShape_i.cc b/src/VISU_I/VISU_DeformedShape_i.cc index f99b0794..64f13d0a 100644 --- a/src/VISU_I/VISU_DeformedShape_i.cc +++ b/src/VISU_I/VISU_DeformedShape_i.cc @@ -24,10 +24,12 @@ // Author : Alexey PETROV // Module : VISU -#include "VISU_DeformedShapePL.hxx" -#include "VISU_Result_i.hh" #include "VISU_DeformedShape_i.hh" +#include "VISU_Result_i.hh" + #include "VISU_ScalarMapAct.h" +#include "VISU_DeformedShapePL.hxx" +#include "VISU_Convertor.hxx" #include @@ -67,6 +69,7 @@ DeformedShape_i(Result_i* theResult, bool theAddToStudy) : PrsObject_i(theResult->GetStudyDocument()), Prs3d_i(theResult,theAddToStudy), + ColoredPrs3d_i(theResult,theAddToStudy), ScalarMap_i(theResult,theAddToStudy), myDeformedShapePL(NULL) { @@ -79,6 +82,7 @@ DeformedShape_i(Result_i* theResult, SALOMEDS::SObject_ptr theSObject) : PrsObject_i(theResult->GetStudyDocument()), Prs3d_i(theResult,theSObject), + ColoredPrs3d_i(theResult,theSObject), ScalarMap_i(theResult,theSObject), myDeformedShapePL(NULL) { @@ -88,12 +92,12 @@ DeformedShape_i(Result_i* theResult, void VISU::DeformedShape_i::SameAs(const Prs3d_i* theOrigin) { - VISU::ScalarMap_i::SameAs(theOrigin); + TSuperClass::SameAs(theOrigin); - if (const DeformedShape_i* aConstDefShape = dynamic_cast(theOrigin)) { - DeformedShape_i* aDefShape = const_cast(aConstDefShape); - SetColor(aDefShape->GetColor()); - ShowColored(aDefShape->IsColored()); + if(const DeformedShape_i* aPrs3d = dynamic_cast(theOrigin)){ + DeformedShape_i* anOrigin = const_cast(aPrs3d); + SetColor(anOrigin->GetColor()); + ShowColored(anOrigin->IsColored()); } } @@ -109,14 +113,15 @@ VISU::Storable* VISU::DeformedShape_i::Create(const char* theMeshName, VISU::Ent VISU::Storable* VISU::DeformedShape_i::Restore(const Storable::TRestoringMap& theMap) { - DoHook(); + TSuperClass::Restore(theMap); + SetScale(VISU::Storable::FindValue(theMap,"myFactor").toDouble()); myIsColored = VISU::Storable::FindValue(theMap,"myIsColored").toInt(); myColor.R = VISU::Storable::FindValue(theMap,"myColor.R").toDouble(); myColor.G = VISU::Storable::FindValue(theMap,"myColor.G").toDouble(); myColor.B = VISU::Storable::FindValue(theMap,"myColor.B").toDouble(); - return ScalarMap_i::Restore(theMap); + return this; } @@ -159,11 +164,14 @@ void VISU::DeformedShape_i::SetMapScale(double theMapScale){ } -VISU_Actor* VISU::DeformedShape_i::CreateActor(const Handle(SALOME_InteractiveObject)& theIO) +VISU_Actor* +VISU::DeformedShape_i +::CreateActor(const Handle(SALOME_InteractiveObject)& theIO) { VISU_Actor* anActor = VISU::ScalarMap_i::CreateActor(theIO); anActor->SetRepresentation(1); anActor->GetProperty()->SetColor(myColor.R,myColor.G,myColor.B); + anActor->SetVTKMapping(false); return anActor; } diff --git a/src/VISU_I/VISU_DeformedShape_i.hh b/src/VISU_I/VISU_DeformedShape_i.hh index de9167b4..e6fccb44 100644 --- a/src/VISU_I/VISU_DeformedShape_i.hh +++ b/src/VISU_I/VISU_DeformedShape_i.hh @@ -85,7 +85,9 @@ namespace VISU{ virtual void SetMapScale(double theMapScale = 1.0); - virtual VISU_Actor* CreateActor(const Handle(SALOME_InteractiveObject)& theIO = NULL); + virtual + VISU_Actor* + CreateActor(const Handle(SALOME_InteractiveObject)& theIO = NULL); virtual void UpdateActor(VISU_Actor* theActor) ; }; diff --git a/src/VISU_I/VISU_GaussPoints_i.cc b/src/VISU_I/VISU_GaussPoints_i.cc new file mode 100644 index 00000000..3539d262 --- /dev/null +++ b/src/VISU_I/VISU_GaussPoints_i.cc @@ -0,0 +1,835 @@ +// VISU OBJECT : interactive object for VISU entities implementation +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// File : +// Author : +// Module : + +#include "VISU_GaussPoints_i.hh" +#include "VISU_ScalarMap_i.hh" + +#include "VISU_Result_i.hh" +#include "VISU_GaussPtsAct.h" +#include "VISU_GaussPointsPL.hxx" +#include "VVTK_SegmentationCursorDlg.h" + +#include "VISU_OpenGLPointSpriteMapper.hxx" +#include "VISU_ScalarBarCtrl.hxx" + +#include "SUIT_ResourceMgr.h" + +#include +#include +#include +#include + + +using namespace VISU; +using namespace std; + +#ifdef _DEBUG_ +static int MYDEBUG = 0; +#else +static int MYDEBUG = 0; +#endif + +//---------------------------------------------------------------------------- +int +VISU::GaussPoints_i +::IsPossible(Result_i* theResult, + const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + int theIteration, + int isMemoryCheck) +{ + try{ + if(theEntity != VISU::NODE) + return VISU::ScalarMap_i::IsPossible(theResult,theMeshName,theEntity,theFieldName,theIteration,isMemoryCheck); + else + return false; + }catch(std::exception& exc){ + INFOS("Follow exception was occured :\n"<GetStudyDocument()), + Prs3d_i(theResult,theAddToStudy), + ColoredPrs3d_i(theResult,theAddToStudy), + myGaussPointsPL(NULL), + myIsColored(true), + myColor(Qt::blue), + myIsActiveLocalScalarBar(true), + myIsDispGlobalScalarBar(true), + mySpacing(0.01), + myFaceLimit(50000) +{ + if(MYDEBUG) MESSAGE("GaussPoints_i::GaussPoints_i - this = "<GetStudyDocument()), + Prs3d_i(theResult,theSObject), + ColoredPrs3d_i(theResult,theSObject), + myGaussPointsPL(NULL), + myIsColored(true), + myColor(Qt::blue), + myIsActiveLocalScalarBar(true), + myIsDispGlobalScalarBar(true), + myFaceLimit(50000) +{ + if(MYDEBUG) MESSAGE("GaussPoints_i::GaussPoints_i - this = "<integerValue( "VISU", "scalar_bar_active_local", GetIsActiveLocalScalarBar() ); + SetIsActiveLocalScalarBar( anActiveLocal == 0 ); + + bool aDisplayGlobal = aResourceMgr->booleanValue( "VISU", "scalar_bar_diplay_global", GetIsDispGlobalScalarBar() ); + SetIsDispGlobalScalarBar( aDisplayGlobal ); + + int aBicolor = aResourceMgr->integerValue( "VISU", "scalar_bar_bicolor", GetBiColor() ); + SetBiColor( aBicolor == 0 ); + + float aSpacing = aResourceMgr->doubleValue( "VISU", "scalar_bar_spacing", GetSpacing() ); + SetSpacing( aSpacing ); + + float aScaleFactor = aResourceMgr->doubleValue( "VISU", "deformed_shape_scale_factor", GetScaleFactor() ); + SetScaleFactor( aScaleFactor ); + + int aPrimitiveType = aResourceMgr->integerValue( "VISU", "point_sprite_primitive_type", GetPrimitiveType() ); + SetPrimitiveType( aPrimitiveType ); + + float aClamp = aResourceMgr->doubleValue( "VISU", "point_sprite_clamp", GetClamp() ); + SetClamp( aClamp ); + + int aMinSize = aResourceMgr->integerValue( "VISU", "point_sprite_min_size", ( int )( GetMinSize() * 100.0 ) ); + SetMinSize( aMinSize / 100.0 ); + + int aMaxSize = aResourceMgr->integerValue( "VISU", "point_sprite_max_size", ( int )( GetMaxSize() * 100.0 ) ); + SetMaxSize( aMaxSize / 100.0 ); + + int aGeomSize = aResourceMgr->integerValue( "VISU", "point_sprite_size", ( int )( GetGeomSize() * 100.0 ) ); + SetGeomSize( aGeomSize / 100.0 ); + + int aMagnification = aResourceMgr->integerValue( "VISU", "point_sprite_magnification", ( int )( GetMagnification() * 100.0 ) ); + SetMagnification( aMagnification / 100.0 ); + + float anIncrement = aResourceMgr->doubleValue( "VISU", "point_sprite_increment", GetMagnificationIncrement() ); + SetMagnificationIncrement( anIncrement ); + + bool isColored = aResourceMgr->booleanValue( "VISU", "point_sprite_results", GetIsColored() ); + SetIsColored( isColored ); + + QColor aColor = aResourceMgr->colorValue( "VISU", "point_sprite_color", GetColor() ); + SetColor( aColor ); + + float anAlphaThreshold = aResourceMgr->doubleValue( "VISU", "point_sprite_alpha_threshold", GetAlphaThreshold() ); + SetAlphaThreshold( anAlphaThreshold ); + + int aResolution = aResourceMgr->integerValue( "VISU", "geom_sphere_resolution", GetResolution() ); + SetResolution( aResolution ); + + int aFaceLimit = aResourceMgr->integerValue( "VISU", "geom_sphere_face_limit", GetFaceLimit() ); + SetFaceLimit( aFaceLimit ); + + QString aMainTexture = QString( getenv( "VISU_ROOT_DIR") ) + "/share/salome/resources/sprite_texture.bmp"; + aMainTexture = aResourceMgr->stringValue( "VISU", "point_sprite_main_texture", aMainTexture ); + + QString anAlphaTexture = QString( getenv( "VISU_ROOT_DIR") ) + "/share/salome/resources/sprite_alpha.bmp"; + anAlphaTexture = aResourceMgr->stringValue( "VISU", "point_sprite_alpha_texture", anAlphaTexture ); + + SetTextures( aMainTexture, anAlphaTexture ); + + return this; +} + + +//---------------------------------------------------------------------------- +VISU::Storable* +VISU::GaussPoints_i +::Restore(const Storable::TRestoringMap& theMap) +{ + TSuperClass::Restore(theMap); + + SetIsActiveLocalScalarBar(Storable::FindValue(theMap,"myIsActiveLocalScalarBar").toInt()); + SetIsDispGlobalScalarBar(Storable::FindValue(theMap,"myIsDispGlobalScalarBar").toInt()); + SetBiColor(Storable::FindValue(theMap,"myIsBiColor").toInt()); + SetSpacing(Storable::FindValue(theMap,"mySpacing").toDouble()); + + SetPrimitiveType(Storable::FindValue(theMap,"myPrimitiveType").toInt()); + SetClamp(Storable::FindValue(theMap,"myClamp").toDouble()); + SetMinSize(Storable::FindValue(theMap,"myMinSize").toDouble()); + SetMaxSize(Storable::FindValue(theMap,"myMaxSize").toDouble()); + SetGeomSize(Storable::FindValue(theMap,"myGeomSize").toDouble()); + + SetMagnification(Storable::FindValue(theMap,"myMagnification").toDouble()); + SetMagnificationIncrement(Storable::FindValue(theMap,"myMagnificationIncrement").toDouble()); + + SetIsDeformed(Storable::FindValue(theMap,"myIsDeformed").toInt()); + SetScaleFactor(Storable::FindValue(theMap,"myScaleFactor").toDouble()); + + SetFaceLimit(Storable::FindValue(theMap,"myFaceLimit").toInt()); + + SetIsColored(Storable::FindValue(theMap,"myIsColored").toInt()); + int aRed = Storable::FindValue(theMap,"myColor.R").toInt(); + int aGreen = Storable::FindValue(theMap,"myColor.G").toInt(); + int aBlue = Storable::FindValue(theMap,"myColor.B").toInt(); + SetColor( QColor(aRed,aGreen,aBlue) ); + + SetAlphaThreshold(Storable::FindValue(theMap,"myAlphaThreshold").toDouble()); + + SetTextures( Storable::FindValue(theMap,"myMainTexture"), + Storable::FindValue(theMap,"myAlphaTexture") ); + + SetResolution(Storable::FindValue(theMap,"myResolution").toInt()); + + return this; +} + + +//---------------------------------------------------------------------------- +void +VISU::GaussPoints_i +::ToStream(std::ostringstream& theStr) +{ + TSuperClass::ToStream(theStr); + + Storable::DataToStream( theStr, "myIsActiveLocalScalarBar", myIsActiveLocalScalarBar ); + Storable::DataToStream( theStr, "myIsDispGlobalScalarBar", myIsDispGlobalScalarBar ); + Storable::DataToStream( theStr, "myIsBiColor", GetBiColor() ); + Storable::DataToStream( theStr, "mySpacing", GetSpacing() ); + + Storable::DataToStream( theStr, "myPrimitiveType", GetPrimitiveType() ); + Storable::DataToStream( theStr, "myClamp", GetClamp() ); + Storable::DataToStream( theStr, "myMinSize", GetMinSize() ); + Storable::DataToStream( theStr, "myMaxSize", GetMaxSize() ); + Storable::DataToStream( theStr, "myGeomSize", GetGeomSize() ); + + Storable::DataToStream( theStr, "myMagnification", GetMagnification() ); + Storable::DataToStream( theStr, "myMagnificationIncrement", GetMagnificationIncrement() ); + + Storable::DataToStream( theStr, "myIsDeformed", GetIsDeformed() ); + Storable::DataToStream( theStr, "myScaleFactor", GetScaleFactor() ); + + Storable::DataToStream( theStr, "myFaceLimit", GetFaceLimit() ); + + Storable::DataToStream( theStr, "myIsColored", GetIsColored() ); + QColor aColor = GetColor(); + Storable::DataToStream( theStr, "myColor.R", aColor.red() ); + Storable::DataToStream( theStr, "myColor.G", aColor.green() ); + Storable::DataToStream( theStr, "myColor.B", aColor.blue() ); + + Storable::DataToStream( theStr, "myAlphaThreshold", GetAlphaThreshold() ); + Storable::DataToStream( theStr, "myMainTexture", GetMainTexture() ); + Storable::DataToStream( theStr, "myAlphaTexture", GetAlphaTexture() ); + + Storable::DataToStream( theStr, "myResolution", GetResolution() ); +} + + +VISU::GaussPoints_i +::~GaussPoints_i() +{ + if(MYDEBUG) MESSAGE("GaussPoints_i::~GaussPoints_i() - this = "<SetIsDeformed( theIsDeformed ); +} + +bool +VISU::GaussPoints_i +::GetIsDeformed() +{ + return myGaussPointsPL->GetIsDeformed(); +} + +void +VISU::GaussPoints_i +::SetScaleFactor( float theScaleFactor ) +{ + myGaussPointsPL->SetScale( theScaleFactor ); +} + +float +VISU::GaussPoints_i +::GetScaleFactor() +{ + return myGaussPointsPL->GetScale(); +} + +void +VISU::GaussPoints_i +::SetIsColored( bool theIsColored ) +{ + myIsColored = theIsColored; + myGaussPointsPL->SetIsColored( theIsColored ); +} + +bool +VISU::GaussPoints_i +::SetMainTexture( const QString& theMainTexture ) +{ + bool update = myMainTexture != theMainTexture; + myMainTexture = theMainTexture; + return update; +} + +const QString& +VISU::GaussPoints_i +::GetMainTexture() +{ + return myMainTexture; +} + +bool +VISU::GaussPoints_i +::SetAlphaTexture( const QString& theAlphaTexture ) +{ + bool update = myAlphaTexture != theAlphaTexture; + myAlphaTexture = theAlphaTexture; + return update; +} + +const QString& +VISU::GaussPoints_i +::GetAlphaTexture() +{ + return myAlphaTexture; +} + +void +VISU::GaussPoints_i +::SetAlphaThreshold( float theAlphaThreshold ) +{ + myGaussPointsPL->SetAlphaThreshold( theAlphaThreshold ); +} + +float +VISU::GaussPoints_i +::GetAlphaThreshold() +{ + return myGaussPointsPL->GetAlphaThreshold(); +} + +void +VISU::GaussPoints_i +::SetResolution( int theResolution ) +{ + myGaussPointsPL->SetResolution( theResolution ); +} + +int +VISU::GaussPoints_i +::GetResolution() +{ + return myGaussPointsPL->GetResolution(); +} + +void +VISU::GaussPoints_i +::SetPrimitiveType(int thePrimitiveType) +{ + myGaussPointsPL->SetPrimitiveType( thePrimitiveType ); +} + +int +VISU::GaussPoints_i +::GetPrimitiveType() +{ + return myGaussPointsPL->GetPrimitiveType(); +} + +float +VISU::GaussPoints_i +::GetMaximumSupportedSize() +{ + return myGaussPointsPL->GetMaximumSupportedSize(); +} + +void +VISU::GaussPoints_i +::SetClamp(float theClamp) +{ + myGaussPointsPL->SetClamp( theClamp ); +} + +float +VISU::GaussPoints_i +::GetClamp() +{ + return myGaussPointsPL->GetClamp(); +} + +void +VISU::GaussPoints_i +::SetGeomSize( float theGeomSize ) +{ + myGaussPointsPL->SetSize( theGeomSize ); +} + +float +VISU::GaussPoints_i +::GetGeomSize() +{ + return myGaussPointsPL->GetSize(); +} + +void +VISU::GaussPoints_i +::SetMinSize( float theMinSize ) +{ + myGaussPointsPL->SetMinSize( theMinSize ); +} + +float +VISU::GaussPoints_i +::GetMinSize() +{ + return myGaussPointsPL->GetMinSize(); +} + +void +VISU::GaussPoints_i +::SetMaxSize( float theMaxSize ) +{ + myGaussPointsPL->SetMaxSize( theMaxSize ); +} + +float +VISU::GaussPoints_i +::GetMaxSize() +{ + return myGaussPointsPL->GetMaxSize(); +} + +void +VISU::GaussPoints_i +::SetMagnification( float theMagnification ) +{ + myGaussPointsPL->SetMagnification( theMagnification ); +} + +float +VISU::GaussPoints_i +::GetMagnification() +{ + return myGaussPointsPL->GetMagnification(); +} + +void +VISU::GaussPoints_i +::SetMagnificationIncrement( float theIncrement ) +{ + myGaussPointsPL->SetMagnificationIncrement( theIncrement ); +} + +float +VISU::GaussPoints_i +::GetMagnificationIncrement() +{ + return myGaussPointsPL->GetMagnificationIncrement(); +} + +//---------------------------------------------------------------------------- +void +VISU::GaussPoints_i +::DoSetInput(Result_i* theResult) +{ + VISU::Result_i::TInput* anInput = theResult->GetInput(); + if(!anInput) + throw std::runtime_error("Mesh_i::Build - theResult->GetInput() == NULL !!!"); + + myField = anInput->GetField(myMeshName,myEntity,myFieldName); + if(!myField) + throw std::runtime_error("There is no Field with the parameters !!!"); + + VISU::PGaussPtsIDMapper aGaussPtsIDMapper = + anInput->GetTimeStampOnGaussPts(myMeshName,myEntity,myFieldName,myIteration); + + if(!aGaussPtsIDMapper) + throw std::runtime_error("There is no TimeStamp with the parameters !!!"); + + myGaussPointsPL->SetGaussPtsIDMapper(aGaussPtsIDMapper); + myGaussPointsPL->Init(); + myGaussPointsPL->Build(); + + theResult->MinMaxConnect(this); +} + + +//---------------------------------------------------------------------------- +void +VISU::GaussPoints_i +::DoHook() +{ + if(!myPipeLine) + myPipeLine = VISU_GaussPointsPL::New(); + + myGaussPointsPL = dynamic_cast(myPipeLine); + + TSuperClass::DoHook(); +} + + +//---------------------------------------------------------------------------- +VISU_PipeLine* +VISU::GaussPoints_i +::GetPipeLine() +{ + // We create a new PipeLine instance in order to provide + // different representations for different actors (basic and segmented) + VISU_GaussPointsPL* aPipeLine = VISU_GaussPointsPL::New(); + aPipeLine->SetGaussPtsIDMapper(myGaussPointsPL->GetGaussPtsIDMapper()); + aPipeLine->ShallowCopy(myPipeLine); + aPipeLine->Update(); + return aPipeLine; +} + + +//---------------------------------------------------------------------------- +bool +VISU::GaussPoints_i +::OnCreateActor(VISU_GaussPtsAct* theActor, + const Handle(SALOME_InteractiveObject)& theIO) +{ + try{ + TSuperClass::CreateActor(theActor,theIO); + theActor->GetPipeLine()->Delete(); + UpdateActor(theActor); + return true; + }catch(...){ + theActor->Delete(); + throw ; + } + return false; +} + +VISU_GaussPtsAct1* +VISU::GaussPoints_i +::OnCreateActor1(const Handle(SALOME_InteractiveObject)& theIO) +{ + VISU_GaussPtsAct1* anActor = VISU_GaussPtsAct1::New(); + if(OnCreateActor(anActor,theIO)) + return anActor; + return NULL; +} + +VISU_GaussPtsAct2* +VISU::GaussPoints_i +::OnCreateActor2(const Handle(SALOME_InteractiveObject)& theIO) +{ + VISU_GaussPtsAct2* anActor = VISU_GaussPtsAct2::New(); + if(OnCreateActor(anActor,theIO)) + return anActor; + return NULL; +} + +VISU_Actor* +VISU::GaussPoints_i +::CreateActor(const Handle(SALOME_InteractiveObject)& theIO) +{ + return OnCreateActor1(theIO); +} + +//---------------------------------------------------------------------------- +VISU_GaussPtsAct2* +VISU::GaussPoints_i +::CloneActor(VISU_GaussPtsAct1* theActor) +{ + if(MYDEBUG) MESSAGE("GaussPoints_i::CloneActor - this = "<Connect(anActor); + return anActor; + } + return NULL; +} + + +//---------------------------------------------------------------------------- +void +VISU::GaussPoints_i +::UpdateScalarBar(vtkScalarBarActor *theScalarBar, + vtkLookupTable* theLookupTable) +{ + theScalarBar->SetTitle(myTitle.c_str()); + theScalarBar->SetOrientation(myOrientation); + theScalarBar->SetNumberOfLabels(myNumberOfLabels); + + vtkLookupTable* aLookupTable = myScalarMapPL->GetBarTable(); + + theLookupTable->SetNumberOfColors(aLookupTable->GetNumberOfColors()); + theScalarBar->SetMaximumNumberOfColors(aLookupTable->GetNumberOfColors()); + + vtkTextProperty* aTitleProp = theScalarBar->GetTitleTextProperty(); + aTitleProp->SetFontFamily(myTitFontType); + aTitleProp->SetColor(myTitleColor); + (myIsBoldTitle)? aTitleProp->BoldOn() : aTitleProp->BoldOff(); + (myIsItalicTitle)? aTitleProp->ItalicOn() : aTitleProp->ItalicOff(); + (myIsShadowTitle)? aTitleProp->ShadowOn() : aTitleProp->ShadowOff(); + + vtkTextProperty* aLabelProp = theScalarBar->GetLabelTextProperty(); + aLabelProp->SetFontFamily(myLblFontType); + aLabelProp->SetColor(myLabelColor); + (myIsBoldLabel)? aLabelProp->BoldOn() : aLabelProp->BoldOff(); + (myIsItalicLabel)? aLabelProp->ItalicOn() : aLabelProp->ItalicOff(); + (myIsShadowLabel)? aLabelProp->ShadowOn() : aLabelProp->ShadowOff(); + + theScalarBar->Modified(); +} + + +//---------------------------------------------------------------------------- +void +VISU::GaussPoints_i +::UpdateActor(VISU_Actor* theActor) +{ + if(VISU_GaussPtsAct* anActor = dynamic_cast(theActor)){ + VISU_ScalarBarCtrl *aScalarBarCtrl = anActor->GetScalarBarCtrl(); + if(GetIsColored()){ + anActor->SetBarVisibility(true); + myPipeLine->GetMapper()->SetScalarVisibility(1); + + float aRange[2]; + myScalarMapPL->GetSourceRange(aRange); + aScalarBarCtrl->SetRangeLocal(aRange); + + TMinMax aTMinMax(-VTK_LARGE_FLOAT,VTK_LARGE_FLOAT); + bool anIsMinMaxDone = IsGlobalRangeDefined(); + if(anIsMinMaxDone) + aTMinMax = myField->GetMinMax(GetScalarMode()); + aScalarBarCtrl->SetGlobalRangeIsDefined(anIsMinMaxDone); + aScalarBarCtrl->SetRangeGlobal(aTMinMax.first, aTMinMax.second); + + VISU_ScalarBarCtrl::EMode aScalarBarMode = VISU_ScalarBarCtrl::eGlobal; + if(myIsActiveLocalScalarBar){ + if(myIsDispGlobalScalarBar){ + aScalarBarMode = VISU_ScalarBarCtrl::eLocal; + }else{ + aScalarBarMode = VISU_ScalarBarCtrl::eSimple; + } + } + + if(aScalarBarMode == VISU_ScalarBarCtrl::eGlobal){ + float aRangeGlobal[2]; + // + aRangeGlobal[0] = aTMinMax.first; + aRangeGlobal[1] = aTMinMax.second; + + GetGaussPointsPL()->GetMapper()->SetScalarRange(aRangeGlobal); + } + + aScalarBarCtrl->SetMode(aScalarBarMode); + + // Position + aScalarBarCtrl->SetWidth(myWidth); + aScalarBarCtrl->SetHeight(myHeight); + aScalarBarCtrl->SetPosition(myPosition); + + aScalarBarCtrl->SetSpacing(mySpacing); + + // Bicolor + bool anIsBicolor = GetGaussPointsPL()->GetBicolor(); + aScalarBarCtrl->SetBicolor(anIsBicolor); + + UpdateScalarBar(aScalarBarCtrl->GetLocalBar(), + aScalarBarCtrl->GetLocalTable()); + + UpdateScalarBar(aScalarBarCtrl->GetGlobalBar(), + aScalarBarCtrl->GetGlobalTable()); + + aScalarBarCtrl->Update(); + }else{ + anActor->SetBarVisibility(false); + + myPipeLine->GetMapper()->SetScalarVisibility(0); + + anActor->GetProperty()->SetColor(myColor.red() / 255.0, + myColor.green() / 255.0, + myColor.blue() / 255.0); + } + + if( GetGaussPointsPL()->GetPrimitiveType() != VISU_OpenGLPointSpriteMapper::GeomSphere ) + theActor->SetRepresentation( VTK_POINTS ); + else + theActor->SetRepresentation( VTK_SURFACE ); + } + TSuperClass::UpdateActor(theActor); +} + +//---------------------------------------------------------------------------- +void +VISU::GaussPoints_i +::UpdateFromActor(VISU_GaussPtsAct* theActor) +{ + if(MYDEBUG) MESSAGE("GaussPoints_i::UpdateFromActor - this = "<ChangeMagnification(theActor->GetChangeMagnification()); + UpdateActors(); +} + + +//---------------------------------------------------------------------------- +void +VISU::GaussPoints_i +::SetTextures( const QString& theMainTexture, + const QString& theAlphaTexture ) +{ + bool updateMainTexture = SetMainTexture( theMainTexture ); + bool updateAlphaTexture = SetAlphaTexture( theAlphaTexture ); + if( !updateMainTexture && !updateAlphaTexture ) + return; + + using namespace VISU; + TTextureValue aTextureValue = GetTexture(theMainTexture,theAlphaTexture); + myGaussPointsPL->SetImageData( aTextureValue.GetPointer() ); +} + + +//---------------------------------------------------------------------------- +void +VISU::GaussPoints_i +::SetIsActiveLocalScalarBar(const bool theFlag) +{ + myIsActiveLocalScalarBar = theFlag; +} + +bool +VISU::GaussPoints_i +::GetIsActiveLocalScalarBar() const +{ + return myIsActiveLocalScalarBar; +} + +void +VISU::GaussPoints_i +::SetIsDispGlobalScalarBar(const bool theFlag) +{ + myIsDispGlobalScalarBar=theFlag; +} + +bool +VISU::GaussPoints_i +::IsGlobalRangeDefined() const +{ + return myResult->IsMinMaxDone(); +} + +bool +VISU::GaussPoints_i +::GetIsDispGlobalScalarBar() const +{ + return myIsDispGlobalScalarBar; +} + +void +VISU::GaussPoints_i +::SetBiColor(bool theIsBiColor) +{ + GetGaussPointsPL()->SetBicolor(theIsBiColor); +} + +bool +VISU::GaussPoints_i +::GetBiColor() +{ + return GetGaussPointsPL()->GetBicolor(); +} + +void +VISU::GaussPoints_i +::SetSpacing(const float theSpacing) +{ + mySpacing = theSpacing; +} + +float +VISU::GaussPoints_i +::GetSpacing() const +{ + return mySpacing; +} + +//---------------------------------------------------------------------------- +void +VISU::GaussPoints_i +::UpdateMinMax() +{ + MinMaxCunsomer::UpdateMinMax(); + UpdateActors(); +} diff --git a/src/VISU_I/VISU_GaussPoints_i.hh b/src/VISU_I/VISU_GaussPoints_i.hh new file mode 100644 index 00000000..5a0fe102 --- /dev/null +++ b/src/VISU_I/VISU_GaussPoints_i.hh @@ -0,0 +1,343 @@ +// VISU OBJECT : interactive object for VISU entities implementation +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// File : VISU_PrsObject_i.hxx +// Author : Alexey PETROV +// Module : VISU + +#ifndef VISU_GaussPoints_i_HeaderFile +#define VISU_GaussPoints_i_HeaderFile + +#include "VISU_Result_i.hh" +#include "VISU_ColoredPrs3d_i.hh" +#include "VISU_GaussPtsActorFactory.h" + +class vtkLookupTable; +class vtkScalarBarActor; + +class VISU_GaussPointsPL; + +namespace VISU +{ + //! Class of the Gauss Points presentation. + class GaussPoints_i : public virtual POA_VISU::GaussPoints, + public virtual VISU::TGaussPtsActorFactory, + public virtual MinMaxCunsomer, + public virtual ColoredPrs3d_i + { + static int myNbPresent; + GaussPoints_i(); + GaussPoints_i(const GaussPoints_i&); + + public: + //---------------------------------------------------------------------------- + typedef ColoredPrs3d_i TSuperClass; + + explicit + GaussPoints_i(Result_i* theResult, + bool theAddToStudy); + explicit + GaussPoints_i(Result_i* theResult, + SALOMEDS::SObject_ptr theSObject); + + virtual + ~GaussPoints_i(); + + virtual + VISU::VISUType + GetType() + { + return VISU::TGAUSSPOINTS; + } + + typedef VISU::GaussPoints TInterface; + + //! Get the Gauss Points Pipeline. + VISU_GaussPointsPL* + GetGaussPointsPL(); + + int + GetFaceLimit() { return myFaceLimit; } + + void + SetFaceLimit( int theFaceLimit ) { myFaceLimit = theFaceLimit; } + + bool + GetIsDeformed(); + + void + SetIsDeformed( bool theIsDeformed ); + + float + GetScaleFactor(); + + void + SetScaleFactor( float theScaleFactor ); + + //! Get color for Geometry mode of the presentation. + QColor + GetColor() { return myColor; } + + //! Set color for Geometry mode of the presentation. + void + SetColor( const QColor& theColor ) { myColor = theColor; } + + //! Get flag indicating which mode of the presentation is active. + /*! When Results mode is active, returns true. Geometry - false. */ + bool + GetIsColored() { return myIsColored; } + + //! Get flag indicating which mode of the presentation is active. + void + SetIsColored( bool theIsColored ); + + //! Set path to the image using for Main Point Sprite texture. + bool + SetMainTexture( const QString& theMainTexture ); + + //! Get path to the image using for Main Point Sprite texture. + const QString& + GetMainTexture(); + + //! Set path to the image using for Alpha Point Sprite texture. + bool + SetAlphaTexture( const QString& theAlphaTexture ); + + //! Get path to the image using for Alpha Point Sprite texture. + const QString& + GetAlphaTexture(); + + //! Convert Main and AlphaMask images to VTI format and set them to pipeline. + void + SetTextures( const QString& theMainTexture, + const QString& theAlphaTexture ); + + //! Redirect the request to VISU_GaussPointsPL::SetAlphaThreshold. + void + SetAlphaThreshold(float theAlphaThreshold); + + //! Redirect the request to VISU_GaussPointsPL::GetAlphaThreshold. + float + GetAlphaThreshold(); + + //! Redirect the request to VISU_GaussPointsPL::SetResolution. + void + SetResolution(int theResolution); + + //! Redirect the request to VISU_GaussPointsPL::GetResolution. + int + GetResolution(); + + void + SetPrimitiveType(int thePrimitiveType); + + int + GetPrimitiveType(); + + //! Redirect the request to VISU_GaussPointsPL::GetMaximumSupportedSize. + float + GetMaximumSupportedSize(); + + //! Redirect the request to VISU_GaussPointsPL::SetClamp. + void + SetClamp(float theClamp); + + //! Redirect the request to VISU_GaussPointsPL::GetClamp. + float + GetClamp(); + + //! Redirect the request to VISU_GaussPointsPL::SetSize. + void + SetGeomSize(float theGeomSize); + + //! Redirect the request to VISU_GaussPointsPL::GetSize. + float + GetGeomSize(); + + //! Redirect the request to VISU_GaussPointsPL::SetMinSize. + void + SetMinSize(float theMinSize); + + //! Redirect the request to VISU_GaussPointsPL::GetMinSize. + float + GetMinSize(); + + //! Redirect the request to VISU_GaussPointsPL::SetMaxSize. + void + SetMaxSize(float theMaxSize); + + //! Redirect the request to VISU_GaussPointsPL::GetMaxSize. + float + GetMaxSize(); + + //! Redirect the request to VISU_GaussPointsPL::SetMagnification. + void + SetMagnification(float theMagnification); + + //! Redirect the request to VISU_GaussPointsPL::GetMagnification. + float + GetMagnification(); + + //! Redirect the request to VISU_GaussPointsPL::SetMagnificationIncrement. + void + SetMagnificationIncrement(float theIncrement); + + //! Redirect the request to VISU_GaussPointsPL::GetMagnificationIncrement. + float + GetMagnificationIncrement(); + + //! Set flag indicating which scalar bar is active. + void + SetIsActiveLocalScalarBar(const bool theFlag); + + //! Get flag indicating which scalar bar is active. + bool + GetIsActiveLocalScalarBar() const; + + //! Set flag indicating visibility of global scalar bar. + void + SetIsDispGlobalScalarBar(const bool theFlag); + + //! Get flag indicating visibility of global scalar bar. + bool + GetIsDispGlobalScalarBar() const; + + //! Redirect the request to VISU_GaussPointsPL::SetBicolor. + void + SetBiColor(bool theIsBiColor); + + //! Redirect the request to VISU_GaussPointsPL::GetBicolor. + bool + GetBiColor(); + + //! Set value of the distance between global and local scalar bars. + void + SetSpacing(const float theSpacing); + + //! Get value of the distance between global and local scalar bars. + float + GetSpacing() const; + + //! Let know is the global range is already calculated + bool + IsGlobalRangeDefined() const; + + //! To update the min / max automatically + virtual + void + UpdateMinMax(); + + protected: + virtual + void + DoSetInput(Result_i* theResult); + + virtual + void + DoHook(); + + virtual + VISU_PipeLine* + GetPipeLine(); + + bool + OnCreateActor(VISU_GaussPtsAct* theActor, + const Handle(SALOME_InteractiveObject)& theIO = NULL); + + VISU_GaussPtsAct1* + OnCreateActor1(const Handle(SALOME_InteractiveObject)& theIO = NULL); + + VISU_GaussPtsAct2* + OnCreateActor2(const Handle(SALOME_InteractiveObject)& theIO = NULL); + + void + UpdateScalarBar(vtkScalarBarActor *theScalarBar, + vtkLookupTable* theLookupTable); + + + VISU_GaussPointsPL *myGaussPointsPL; + + bool myIsColored; + bool myIsDispGlobalScalarBar; + bool myIsActiveLocalScalarBar; + QColor myColor; + float mySpacing; + int myFaceLimit; + + QString myMainTexture; + QString myAlphaTexture; + + public: + static + int + IsPossible(Result_i* theResult, + const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + int theIteration, + int isMemoryCheck = true); + virtual + Storable* + Create(const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + int theIteration); + + static const std::string myComment; + + virtual + const char* + GetComment() const; + + virtual + QString + GenerateName(); + + virtual + void + ToStream(std::ostringstream& theStr); + + virtual + Storable* + Restore(const Storable::TRestoringMap& theMap); + + //---------------------------------------------------------------------------- + virtual + VISU_Actor* + CreateActor(const Handle(SALOME_InteractiveObject)& theIO = NULL); + + virtual + VISU_GaussPtsAct2* + CloneActor(VISU_GaussPtsAct1* theActor); + + virtual + void + UpdateActor(VISU_Actor* theActor); + + virtual + void + UpdateFromActor(VISU_GaussPtsAct* theActor); + }; +} + +#endif + diff --git a/src/VISU_I/VISU_Gen_i.cc b/src/VISU_I/VISU_Gen_i.cc index 2a86c3a8..46094327 100644 --- a/src/VISU_I/VISU_Gen_i.cc +++ b/src/VISU_I/VISU_Gen_i.cc @@ -38,6 +38,7 @@ #include "VISU_CutLines_i.hh" #include "VISU_Vectors_i.hh" #include "VISU_StreamLines_i.hh" +#include "VISU_GaussPoints_i.hh" #include "VISU_Plot3D_i.hh" #include "VISU_Table_i.hh" #include "VISU_TimeAnimation.h" @@ -89,7 +90,8 @@ using namespace std; static QFileInfo aFileInfo; #ifdef _DEBUG_ -static int MYDEBUG = 1; +static int MYDEBUG = 0; +//#define _DEXCEPT_ #else static int MYDEBUG = 0; #endif @@ -107,7 +109,8 @@ extern "C" VISU::VISU_Gen_ptr GetImpl(CORBA::ORB_ptr theORB, return aVISU_Gen->_this(); } -namespace VISU{ +namespace VISU +{ static string VisuTmpDir; static CORBA::Boolean myIsMultiFile; @@ -186,6 +189,7 @@ namespace VISU{ Storable::Registry(Result_i::myComment.c_str(),&(Result_i::Restore)); Storable::Registry(Mesh_i::myComment.c_str(),&(Restore)); Storable::Registry(ScalarMap_i::myComment.c_str(),&(Restore)); + Storable::Registry(GaussPoints_i::myComment.c_str(),&(Restore)); Storable::Registry(DeformedShape_i::myComment.c_str(),&(Restore)); Storable::Registry(CutPlanes_i::myComment.c_str(),&(Restore)); Storable::Registry(CutLines_i::myComment.c_str(),&(Restore)); @@ -225,6 +229,28 @@ namespace VISU{ if(MYDEBUG) MESSAGE("VISU_Gen_i::VISU_Gen_i : there is no opened study in StudyManager !!!"); } + bool + CreatColoredPrs3d(ColoredPrs3d_i* theColoredPrs3d, + const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + CORBA::Double theIteration) + { +#ifndef _DEXCEPT_ + try{ +#endif + if(theColoredPrs3d->Create(theMeshName,theEntity,theFieldName,int(theIteration))) + return true; +#ifndef _DEXCEPT_ + }catch(std::exception& exc){ + INFOS("Follow exception was occured :\n"<activeStudy()) { if (SalomeApp_Study* aStudy = dynamic_cast(aSStudy)) { if (_PTR(Study) aCStudy = aStudy->studyDS()) { - MESSAGE("There is an application with active study : StudyId = " - << aCStudy->StudyId() << "; Name = '" << aCStudy->Name() << "'"); + if(MYDEBUG) MESSAGE("There is an application with active study : StudyId = " + << aCStudy->StudyId() << "; Name = '" << aCStudy->Name() << "'"); if (myStudyName == aCStudy->Name()) { isActive = true; break; @@ -448,12 +474,12 @@ namespace VISU{ { CORBA::String_var aName = theStudy->Name(); std::string aStudyName (aName.in()); - MESSAGE("StudyId = " << theStudy->StudyId() << "; Name = '" << aName.in() << "'"); + if(MYDEBUG) MESSAGE("StudyId = " << theStudy->StudyId() << "; Name = '" << aName.in() << "'"); myStudyDocument = SALOMEDS::Study::_duplicate(theStudy); ProcessVoidEvent(new TEvent(aStudyName)); } else { - MESSAGE("CORBA::is_nil(theStudy)"); + INFOS("CORBA::is_nil(theStudy)"); } } @@ -497,6 +523,23 @@ namespace VISU{ } } + Result_ptr VISU_Gen_i::CreateResult(const char* theFileName){ + if(myStudyDocument->GetProperties()->IsLocked()) + return Result::_nil(); + Mutex mt(myMutex); + aFileInfo.setFile(theFileName); + Result_i* pResult = new Result_i(myStudyDocument, + Result_i::eFile, + Result_i::eImportFile, + false); + if(pResult->Create(theFileName) != NULL) + return pResult->_this(); + else{ + pResult->_remove_ref(); + return VISU::Result::_nil(); + } + } + Result_ptr VISU_Gen_i::CopyAndImportFile(const char* theFileName){ if(myStudyDocument->GetProperties()->IsLocked()) return Result::_nil(); @@ -607,6 +650,15 @@ namespace VISU{ return Prs3dOnField(theResult,theMeshName,theEntity,theFieldName,theIteration,true)._retn(); } + GaussPoints_ptr VISU_Gen_i::GaussPointsOnField(Result_ptr theResult, + const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + CORBA::Double theIteration) + { + return Prs3dOnField(theResult,theMeshName,theEntity,theFieldName,theIteration,true)._retn(); + } + DeformedShape_ptr VISU_Gen_i::DeformedShapeOnField(Result_ptr theResult, const char* theMeshName, VISU::Entity theEntity, diff --git a/src/VISU_I/VISU_Gen_i.hh b/src/VISU_I/VISU_Gen_i.hh index 240b6bea..d1ab5424 100644 --- a/src/VISU_I/VISU_Gen_i.hh +++ b/src/VISU_I/VISU_Gen_i.hh @@ -15,8 +15,18 @@ #include "SALOME_Component_i.hxx" #include "SALOME_NamingService.hxx" -namespace VISU{ +namespace VISU +{ class Result_i; + class ColoredPrs3d_i; + + bool + CreatColoredPrs3d(ColoredPrs3d_i* theColoredPrs3d, + const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + CORBA::Double theIteration); + class VISU_Gen_i : public virtual POA_VISU::VISU_Gen, public virtual ::Engines_Component_i, public virtual Base_i @@ -31,56 +41,110 @@ namespace VISU{ QMutex* theMutex); virtual ~VISU_Gen_i(); - virtual char* GetID(); - virtual VISU::VISUType GetType() { return VISU::TVISUGEN;}; + virtual + char* + GetID(); + + virtual + VISU::VISUType + GetType() { return VISU::TVISUGEN;}; + + virtual + void + SetCurrentStudy(SALOMEDS::Study_ptr theStudy); - virtual void SetCurrentStudy(SALOMEDS::Study_ptr theStudy); - virtual SALOMEDS::Study_ptr GetCurrentStudy(); + virtual + SALOMEDS::Study_ptr + GetCurrentStudy(); - virtual ViewManager_ptr GetViewManager(); + virtual + ViewManager_ptr + GetViewManager(); - virtual SALOMEDS::SObject_ptr ImportTables(const char* theFileName); - virtual CORBA::Boolean ExportTableToFile(SALOMEDS::SObject_ptr theTable, const char* theFileName ); + virtual + SALOMEDS::SObject_ptr + ImportTables(const char* theFileName); + + virtual + CORBA::Boolean + ExportTableToFile(SALOMEDS::SObject_ptr theTable, + const char* theFileName ); //Create Result - virtual Result_ptr ImportFile(const char* theFileName); - virtual Result_ptr CopyAndImportFile(const char* theFileName); - virtual Result_ptr ImportMed(SALOMEDS::SObject_ptr theMedSObject); - virtual Result_ptr ImportMedField(SALOME_MED::FIELD_ptr theField); + virtual + Result_ptr + ImportFile(const char* theFileName); + + virtual + Result_ptr + CreateResult(const char* theFileName); + + virtual + Result_ptr + CopyAndImportFile(const char* theFileName); + + virtual + Result_ptr + ImportMed(SALOMEDS::SObject_ptr theMedSObject); + + virtual + Result_ptr + ImportMedField(SALOME_MED::FIELD_ptr theField); + //Create Presentation Of Submeshes - virtual Mesh_ptr MeshOnEntity(Result_ptr theResult, const char* theMeshName, VISU::Entity theEntity); - virtual Mesh_ptr FamilyMeshOnEntity(Result_ptr theResult, const char* theMeshName, - VISU::Entity theEntity, const char* theFamilyName); - virtual Mesh_ptr GroupMesh(Result_ptr theResult, const char* theMeshName, const char* theGroupName); + virtual + Mesh_ptr + MeshOnEntity(Result_ptr theResult, + const char* theMeshName, + VISU::Entity theEntity); + + virtual + Mesh_ptr + FamilyMeshOnEntity(Result_ptr theResult, + const char* theMeshName, + VISU::Entity theEntity, + const char* theFamilyName); + + virtual + Mesh_ptr + GroupMesh(Result_ptr theResult, + const char* theMeshName, + const char* theGroupName); //Create 3D collored Presentation Of Different Types template TPrs3d_i* - CreatePrs3d(Result_ptr theResult, const char* theMeshName, VISU::Entity theEntity, - const char* theFieldName, CORBA::Double theIteration, bool theAddToStudy = true) + CreatePrs3d(Result_ptr theResult, + const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + CORBA::Double theIteration, + bool theAddToStudy = true) { - TPrs3d_i* aPresent = NULL; if(myStudyDocument->GetProperties()->IsLocked()) - return aPresent; + return NULL; typedef typename TPrs3d_i::TInterface TPrs3d; typename TPrs3d::_var_type aPrs3d; Mutex mt(myMutex); - if(Result_i* pResult = dynamic_cast(GetServant(theResult).in())){ - if(TPrs3d_i::IsPossible(pResult,theMeshName,theEntity,theFieldName,int(theIteration))){ - aPresent = new TPrs3d_i(pResult,theAddToStudy); - if(aPresent->Create(theMeshName,theEntity,theFieldName,int(theIteration)) == NULL){ - aPresent->_remove_ref(); - aPresent = NULL; - } + if(Result_i* aResult = dynamic_cast(GetServant(theResult).in())){ + if(TPrs3d_i::IsPossible(aResult,theMeshName,theEntity,theFieldName,int(theIteration))){ + TPrs3d_i* aPresent = new TPrs3d_i(aResult,theAddToStudy); + if(CreatColoredPrs3d(aPresent,theMeshName,theEntity,theFieldName,theIteration)) + return aPresent; + aPresent->_remove_ref(); } } - return aPresent; + return NULL; } template typename TPrs3d_i::TInterface::_var_type - Prs3dOnField(Result_ptr theResult, const char* theMeshName, VISU::Entity theEntity, - const char* theFieldName, CORBA::Double theIteration, bool theAddToStudy = true) + Prs3dOnField(Result_ptr theResult, + const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + CORBA::Double theIteration, + bool theAddToStudy = true) { typedef typename TPrs3d_i::TInterface TPrs3d; typename TPrs3d::_var_type aPrs3d; @@ -89,38 +153,104 @@ namespace VISU{ return TPrs3d::_nil(); } - virtual ScalarMap_ptr ScalarMapOnField(Result_ptr theResult, - const char* theMeshName, VISU::Entity theEntity, - const char* theFieldName, CORBA::Double theIteration); - virtual DeformedShape_ptr DeformedShapeOnField(Result_ptr theResult, - const char* theMeshName, VISU::Entity theEntity, - const char* theFieldName, CORBA::Double theIteration); - virtual Vectors_ptr VectorsOnField(Result_ptr theResult, - const char* theMeshName, VISU::Entity theEntity, - const char* theFieldName, CORBA::Double theIteration); - virtual IsoSurfaces_ptr IsoSurfacesOnField(Result_ptr theResult, - const char* theMeshName, VISU::Entity theEntity, - const char* theFieldName, CORBA::Double theIteration); - virtual CutPlanes_ptr CutPlanesOnField(Result_ptr theResult, - const char* theMeshName, VISU::Entity theEntity, - const char* theFieldName, CORBA::Double theIteration); - virtual CutLines_ptr CutLinesOnField(Result_ptr theResult, - const char* theMeshName, VISU::Entity theEntity, - const char* theFieldName, CORBA::Double theIteration); - virtual StreamLines_ptr StreamLinesOnField(Result_ptr theResult, - const char* theMeshName, VISU::Entity theEntity, - const char* theFieldName, CORBA::Double theIteration); - virtual Plot3D_ptr Plot3DOnField(Result_ptr theResult, - const char* theMeshName, VISU::Entity theEntity, - const char* theFieldName, CORBA::Double theIteration); + virtual + ScalarMap_ptr + ScalarMapOnField(Result_ptr theResult, + const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + CORBA::Double theIteration); + + virtual + GaussPoints_ptr + GaussPointsOnField(Result_ptr theResult, + const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + CORBA::Double theIteration); + + virtual + DeformedShape_ptr + DeformedShapeOnField(Result_ptr theResult, + const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + CORBA::Double theIteration); + + virtual + Vectors_ptr + VectorsOnField(Result_ptr theResult, + const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + CORBA::Double theIteration); + + virtual + IsoSurfaces_ptr + IsoSurfacesOnField(Result_ptr theResult, + const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + CORBA::Double theIteration); + + virtual + CutPlanes_ptr + CutPlanesOnField(Result_ptr theResult, + const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + CORBA::Double theIteration); + + virtual + CutLines_ptr + CutLinesOnField(Result_ptr theResult, + const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + CORBA::Double theIteration); + + virtual + StreamLines_ptr + StreamLinesOnField(Result_ptr theResult, + const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + CORBA::Double theIteration); + + virtual + Plot3D_ptr + Plot3DOnField(Result_ptr theResult, + const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + CORBA::Double theIteration); + //Create Digital Presentation - virtual Table_ptr CreateTable(const char* theTableEntry); - virtual Curve_ptr CreateCurve(Table_ptr theTable, CORBA::Long theHRow, CORBA::Long theVRow); - virtual Container_ptr CreateContainer(); - virtual Animation_ptr CreateAnimation(View3D_ptr theView3d); + virtual + Table_ptr + CreateTable(const char* theTableEntry); - virtual void DeleteResult(Result_ptr theResult); - virtual void DeletePrs3d(Prs3d_ptr thePrs3d); + virtual + Curve_ptr + CreateCurve(Table_ptr theTable, + CORBA::Long theHRow, + CORBA::Long theVRow); + + virtual + Container_ptr + CreateContainer(); + + virtual + Animation_ptr + CreateAnimation(View3D_ptr theView3d); + + virtual + void + DeleteResult(Result_ptr theResult); + + virtual + void + DeletePrs3d(Prs3d_ptr thePrs3d); // inherited methods from Engines::Component virtual @@ -128,47 +258,83 @@ namespace VISU{ DumpPython(CORBA::Object_ptr theStudy, CORBA::Boolean theIsPublished, CORBA::Boolean& theIsValidScript); + // inherited methods from SALOMEDS::Driver - virtual SALOMEDS::TMPFile* Save(SALOMEDS::SComponent_ptr theComponent, - const char* theURL, - bool isMultiFile); - virtual SALOMEDS::TMPFile* SaveASCII(SALOMEDS::SComponent_ptr theComponent, - const char* theURL, - bool isMultiFile); - virtual bool Load(SALOMEDS::SComponent_ptr, - const SALOMEDS::TMPFile &, - const char* theURL, - bool isMultiFile); - virtual bool LoadASCII(SALOMEDS::SComponent_ptr, - const SALOMEDS::TMPFile &, - const char* theURL, - bool isMultiFile); - - virtual void Close(SALOMEDS::SComponent_ptr IORSComponent); - - virtual char* ComponentDataType(); - - virtual char* IORToLocalPersistentID(SALOMEDS::SObject_ptr theSObject, - const char* IORString, - CORBA::Boolean isMultiFile, - CORBA::Boolean isASCII); - virtual char* LocalPersistentIDToIOR(SALOMEDS::SObject_ptr theSObject, - const char* aLocalPersistentID, - CORBA::Boolean isMultiFile, - CORBA::Boolean isASCII); - - virtual bool CanPublishInStudy(CORBA::Object_ptr theIOR); - virtual SALOMEDS::SObject_ptr PublishInStudy(SALOMEDS::Study_ptr theStudy, - SALOMEDS::SObject_ptr theSObject, - CORBA::Object_ptr theObject, - const char* theName) throw (SALOME::SALOME_Exception); - - CORBA::Boolean CanCopy(SALOMEDS::SObject_ptr theObject); - SALOMEDS::TMPFile* CopyFrom(SALOMEDS::SObject_ptr theObject, CORBA::Long& theObjectID); - CORBA::Boolean CanPaste(const char* theComponentName, CORBA::Long theObjectID); - SALOMEDS::SObject_ptr PasteInto(const SALOMEDS::TMPFile& theStream, - CORBA::Long theObjectID, - SALOMEDS::SObject_ptr theObject); + virtual + SALOMEDS::TMPFile* + Save(SALOMEDS::SComponent_ptr theComponent, + const char* theURL, + bool isMultiFile); + + virtual + SALOMEDS::TMPFile* + SaveASCII(SALOMEDS::SComponent_ptr theComponent, + const char* theURL, + bool isMultiFile); + + virtual + bool + Load(SALOMEDS::SComponent_ptr, + const SALOMEDS::TMPFile &, + const char* theURL, + bool isMultiFile); + + virtual + bool + LoadASCII(SALOMEDS::SComponent_ptr, + const SALOMEDS::TMPFile &, + const char* theURL, + bool isMultiFile); + + virtual + void + Close(SALOMEDS::SComponent_ptr IORSComponent); + + virtual + char* + ComponentDataType(); + + virtual + char* + IORToLocalPersistentID(SALOMEDS::SObject_ptr theSObject, + const char* IORString, + CORBA::Boolean isMultiFile, + CORBA::Boolean isASCII); + + virtual + char* + LocalPersistentIDToIOR(SALOMEDS::SObject_ptr theSObject, + const char* aLocalPersistentID, + CORBA::Boolean isMultiFile, + CORBA::Boolean isASCII); + + virtual + bool + CanPublishInStudy(CORBA::Object_ptr theIOR); + + virtual + SALOMEDS::SObject_ptr + PublishInStudy(SALOMEDS::Study_ptr theStudy, + SALOMEDS::SObject_ptr theSObject, + CORBA::Object_ptr theObject, + const char* theName) throw (SALOME::SALOME_Exception); + + CORBA::Boolean + CanCopy(SALOMEDS::SObject_ptr theObject); + + SALOMEDS::TMPFile* + CopyFrom(SALOMEDS::SObject_ptr theObject, + CORBA::Long& theObjectID); + + CORBA::Boolean + CanPaste(const char* theComponentName, + CORBA::Long theObjectID); + + SALOMEDS::SObject_ptr + PasteInto(const SALOMEDS::TMPFile& theStream, + CORBA::Long theObjectID, + SALOMEDS::SObject_ptr theObject); }; } + #endif diff --git a/src/VISU_I/VISU_I.cxx b/src/VISU_I/VISU_I.cxx new file mode 100644 index 00000000..a3a39f28 --- /dev/null +++ b/src/VISU_I/VISU_I.cxx @@ -0,0 +1,54 @@ +// SALOME VTKViewer : build VTK viewer into Salome desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : +// Author : +// Module : +// $Header$ + +#include "VISUConfig.hh" +#include "VISU_Gen_i.hh" +#include "VISU_Result_i.hh" +#include "VISU_PrsObject_i.hh" +#include "VISU_Table_i.hh" +#include "VISU_Prs3d_i.hh" +#include "VISU_Mesh_i.hh" +#include "VISU_ScalarMap_i.hh" +#include "VISU_IsoSurfaces_i.hh" +#include "VISU_DeformedShape_i.hh" +#include "VISU_DeformedShape_i.hh" +#include "VISU_Plot3D_i.hh" +#include "VISU_CutPlanes_i.hh" +#include "VISU_CutLines_i.hh" +#include "VISU_Vectors_i.hh" +#include "VISU_StreamLines_i.hh" +#include "VISU_GaussPoints_i.hh" +#include "VISU_ViewManager_i.hh" +#include "VISU_View_i.hh" +#include "VISU_TimeAnimation.h" + +int +main(int argc, char** argv) +{ + return 0; +} diff --git a/src/VISU_I/VISU_IsoSurfaces_i.cc b/src/VISU_I/VISU_IsoSurfaces_i.cc index 853a5499..4198c8a6 100644 --- a/src/VISU_I/VISU_IsoSurfaces_i.cc +++ b/src/VISU_I/VISU_IsoSurfaces_i.cc @@ -56,10 +56,10 @@ IsoSurfaces_i(Result_i* theResult, bool theAddToStudy) : PrsObject_i(theResult->GetStudyDocument()), Prs3d_i(theResult,theAddToStudy), + ColoredPrs3d_i(theResult,theAddToStudy), ScalarMap_i(theResult,theAddToStudy), myIsoSurfacesPL(NULL) -{ -} +{} VISU::IsoSurfaces_i:: @@ -67,6 +67,7 @@ IsoSurfaces_i(Result_i* theResult, SALOMEDS::SObject_ptr theSObject) : PrsObject_i(theResult->GetStudyDocument()), Prs3d_i(theResult,theSObject), + ColoredPrs3d_i(theResult,theSObject), ScalarMap_i(theResult,theSObject), myIsoSurfacesPL(NULL) { @@ -82,13 +83,14 @@ VISU::Storable* VISU::IsoSurfaces_i::Create(const char* theMeshName, VISU::Entit VISU::Storable* VISU::IsoSurfaces_i::Restore(const Storable::TRestoringMap& theMap) { - DoHook(); + TSuperClass::Restore(theMap); + SetNbSurfaces(VISU::Storable::FindValue(theMap,"myNbSurface").toInt()); float aMin = VISU::Storable::FindValue(theMap,"myRange[0]").toDouble(); float aMax = VISU::Storable::FindValue(theMap,"myRange[1]").toDouble(); SetSubRange(aMin,aMax); - return ScalarMap_i::Restore(theMap); + return this; } void VISU::IsoSurfaces_i::ToStream(std::ostringstream& theStr){ @@ -134,6 +136,17 @@ void VISU::IsoSurfaces_i::DoHook(){ } +VISU_Actor* +VISU::IsoSurfaces_i +::CreateActor(const Handle(SALOME_InteractiveObject)& theIO) +{ + if(VISU_Actor* anActor = ScalarMap_i::CreateActor(theIO)){ + anActor->SetVTKMapping(true); + return anActor; + } + return NULL; +} + void VISU::IsoSurfaces_i::SetMapScale(double theMapScale){ myIsoSurfacesPL->SetMapScale(theMapScale); } diff --git a/src/VISU_I/VISU_IsoSurfaces_i.hh b/src/VISU_I/VISU_IsoSurfaces_i.hh index d51f36aa..94e09915 100644 --- a/src/VISU_I/VISU_IsoSurfaces_i.hh +++ b/src/VISU_I/VISU_IsoSurfaces_i.hh @@ -77,6 +77,10 @@ namespace VISU{ virtual Storable* Restore(const Storable::TRestoringMap& theMap); + virtual + VISU_Actor* + CreateActor(const Handle(SALOME_InteractiveObject)& theIO = NULL); + virtual void SetMapScale(double theMapScale = 1.0); }; } diff --git a/src/VISU_I/VISU_Mesh_i.cc b/src/VISU_I/VISU_Mesh_i.cc index 5c3cb317..701e27eb 100644 --- a/src/VISU_I/VISU_Mesh_i.cc +++ b/src/VISU_I/VISU_Mesh_i.cc @@ -29,8 +29,9 @@ #include "VISU_Result_i.hh" #include "VISU_ViewManager_i.hh" -#include "VISU_MeshPL.hxx" #include "VISU_MeshAct.h" +#include "VISU_MeshPL.hxx" +#include "VISU_Convertor.hxx" using namespace VISU; using namespace std; @@ -74,7 +75,7 @@ Mesh_i(Result_i* theResult, void VISU::Mesh_i::RemoveFromStudy() { - VISU::DeleteActors(this); + VISU::Prs3d_i::RemoveFromStudy(); VISU::RemoveFromStudy(mySObject); } @@ -92,7 +93,7 @@ int VISU::Mesh_i::IsPossible (Result_i* theResult, const char* theMeshName, try{ MESSAGE("Mesh_i::IsPossible - theMeshName = '"<GetInput()->GetMeshOnEntitySize(theMeshName,(VISU::TEntity)theEntity,theFamilyName); + theResult->GetInput()->GetMeshOnEntitySize(theMeshName,(VISU::TEntity)theEntity); bool aResult = VISU_PipeLine::CheckAvailableMemory(aSize); MESSAGE("Mesh_i::IsPossible - CheckAvailableMemory = "<= 0) + if(mySubMeshName == "") myType = VISU::TENTITY; else myType = VISU::TFAMILY; else myType = VISU::TGROUP; + if(MYDEBUG) MESSAGE("Mesh_i::Build - myType = "<GetInput()->GetMeshOnEntity(myMeshName,myEntity); - anOutput = myResult->GetInput()->GetMeshOnEntity(myMeshName,(VISU::TEntity)myEntity);//jfa IPAL9284 + anIDMapper = myResult->GetInput()->GetMeshOnEntity(myMeshName,(VISU::TEntity)myEntity);//jfa IPAL9284 aComment.sprintf("myComment=ENTITY;myType=%d;myMeshName=%s;myId=%d", VISU::TENTITY,myMeshName.c_str(),myEntity); break; case VISU::TFAMILY : - //jfa IPAL9284:anOutput = myResult->GetInput()->GetMeshOnEntity(myMeshName,myEntity,mySubMeshName); - anOutput = myResult->GetInput()->GetMeshOnEntity - (myMeshName,(VISU::TEntity)myEntity,mySubMeshName);//jfa IPAL9284 + anIDMapper = myResult->GetInput()->GetFamilyOnEntity(myMeshName,(VISU::TEntity)myEntity,mySubMeshName); aComment.sprintf("myComment=FAMILY;myType=%d;myMeshName=%s;myEntityId=%d;myName=%s", VISU::TFAMILY,myMeshName.c_str(),myEntity,mySubMeshName.c_str()); break; case VISU::TGROUP : - anOutput = myResult->GetInput()->GetMeshOnGroup(myMeshName,mySubMeshName); + anIDMapper = myResult->GetInput()->GetMeshOnGroup(myMeshName,mySubMeshName); aComment.sprintf("myComment=GROUP;myType=%d;myMeshName=%s;myName=%s", VISU::TGROUP,myMeshName.c_str(),mySubMeshName.c_str()); break; } - if(anOutput == NULL) throw std::runtime_error("Mesh_i::Build - anOutput == NULL !!!"); - myMeshPL->SetInput(anOutput); + if(!anIDMapper) + throw std::runtime_error("Mesh_i::Build - !anIDMapper !!!"); + + myMeshPL->SetIDMapper(anIDMapper); myMeshPL->Build(); + if(!theRestoring) { //Setting IOR on the label myMeshPL->Init(); string aResultEntry = myResult->GetEntry(); diff --git a/src/VISU_I/VISU_Plot3D_i.cc b/src/VISU_I/VISU_Plot3D_i.cc index 8f69fd9f..0cc631b2 100644 --- a/src/VISU_I/VISU_Plot3D_i.cc +++ b/src/VISU_I/VISU_Plot3D_i.cc @@ -48,21 +48,25 @@ QString VISU::Plot3D_i::GenerateName() { return VISU::GenerateName("Plot3D",myNb const string VISU::Plot3D_i::myComment = "PLOT3D"; const char* VISU::Plot3D_i::GetComment() const { return myComment.c_str(); } -VISU::Plot3D_i::Plot3D_i (Result_i* theResult, bool theAddToStudy) - : PrsObject_i(theResult->GetStudyDocument()), - Prs3d_i(theResult,theAddToStudy), - ScalarMap_i(theResult,theAddToStudy), - myPlot3DPL(NULL) -{ -} - -VISU::Plot3D_i::Plot3D_i (Result_i* theResult, SALOMEDS::SObject_ptr theSObject) - : PrsObject_i(theResult->GetStudyDocument()), - Prs3d_i(theResult,theSObject), - ScalarMap_i(theResult,theSObject), - myPlot3DPL(NULL) -{ -} +VISU::Plot3D_i +::Plot3D_i(Result_i* theResult, + bool theAddToStudy) : + PrsObject_i(theResult->GetStudyDocument()), + Prs3d_i(theResult,theAddToStudy), + ColoredPrs3d_i(theResult,theAddToStudy), + ScalarMap_i(theResult,theAddToStudy), + myPlot3DPL(NULL) +{} + +VISU::Plot3D_i +::Plot3D_i(Result_i* theResult, + SALOMEDS::SObject_ptr theSObject) : + PrsObject_i(theResult->GetStudyDocument()), + Prs3d_i(theResult,theSObject), + ColoredPrs3d_i(theResult,theSObject), + ScalarMap_i(theResult,theSObject), + myPlot3DPL(NULL) +{} VISU::Storable* VISU::Plot3D_i::Create (const char* theMeshName, VISU::Entity theEntity, const char* theFieldName, int theIteration) @@ -72,7 +76,8 @@ VISU::Storable* VISU::Plot3D_i::Create (const char* theMeshName, VISU::Entity th VISU::Storable* VISU::Plot3D_i::Restore (const Storable::TRestoringMap& theMap) { - DoHook(); + TSuperClass::Restore(theMap); + SetOrientation(VISU::Plot3D::Orientation(VISU::Storable::FindValue(theMap,"myBasePlane").toInt()), Storable::FindValue(theMap,"aRot[0]").toDouble(), Storable::FindValue(theMap,"aRot[1]").toDouble()); @@ -82,7 +87,7 @@ VISU::Storable* VISU::Plot3D_i::Restore (const Storable::TRestoringMap& theMap) SetContourPrs(VISU::Storable::FindValue(theMap,"myContourPrs").toInt()); SetNbOfContours(VISU::Storable::FindValue(theMap,"myNbOfContours").toInt()); - return ScalarMap_i::Restore(theMap); + return this; } void VISU::Plot3D_i::ToStream (std::ostringstream& theStr) @@ -179,6 +184,17 @@ void VISU::Plot3D_i::DoHook() ScalarMap_i::DoHook(); } +VISU_Actor* +VISU::Plot3D_i +::CreateActor(const Handle(SALOME_InteractiveObject)& theIO) +{ + if(VISU_Actor* anActor = ScalarMap_i::CreateActor(theIO)){ + anActor->SetVTKMapping(true); + return anActor; + } + return NULL; +} + void VISU::Plot3D_i::SetMapScale(double theMapScale) { myPlot3DPL->SetMapScale(theMapScale); diff --git a/src/VISU_I/VISU_Plot3D_i.hh b/src/VISU_I/VISU_Plot3D_i.hh index acd76440..a20df363 100644 --- a/src/VISU_I/VISU_Plot3D_i.hh +++ b/src/VISU_I/VISU_Plot3D_i.hh @@ -86,6 +86,10 @@ namespace VISU { virtual Storable* Restore (const Storable::TRestoringMap& theMap); + virtual + VISU_Actor* + CreateActor(const Handle(SALOME_InteractiveObject)& theIO = NULL); + static const std::string myComment; virtual const char* GetComment() const; virtual QString GenerateName(); diff --git a/src/VISU_I/VISU_Prs3d_i.cc b/src/VISU_I/VISU_Prs3d_i.cc index 7838834f..f0d97655 100644 --- a/src/VISU_I/VISU_Prs3d_i.cc +++ b/src/VISU_I/VISU_Prs3d_i.cc @@ -25,49 +25,63 @@ // Module : VISU #include "VISU_PipeLine.hxx" -#include "VISU_Result_i.hh" #include "VISU_Prs3d_i.hh" + +#include "VISU_Result_i.hh" #include "VISU_Actor.h" -#include -#include +#include +#include + + +#include using namespace VISU; using namespace std; #ifdef _DEBUG_ -static int MYDEBUG = 0; +static int MYDEBUG = 1; #else static int MYDEBUG = 0; #endif -VISU::Prs3d_i:: -Prs3d_i(Result_i* theResult, - SALOMEDS::SObject_ptr theSObject) : + +//---------------------------------------------------------------------------- +VISU::Prs3d_i +::Prs3d_i(Result_i* theResult, + SALOMEDS::SObject_ptr theSObject) : PrsObject_i(theResult->GetStudyDocument()), - myResult(theResult), mySObject(SALOMEDS::SObject::_duplicate(theSObject)), + myActorCollection(vtkActorCollection::New()), + myResult(theResult), myAddToStudy(true), myPipeLine(NULL) { + if(MYDEBUG) MESSAGE("Prs3d_i::Prs3d_i - this = "<Delete(); myResult->Register(); } -VISU::Prs3d_i:: -Prs3d_i(Result_i* theResult, - bool theAddToStudy) : +VISU::Prs3d_i +::Prs3d_i(Result_i* theResult, + bool theAddToStudy) : PrsObject_i(theResult->GetStudyDocument()), - myResult(theResult), + myActorCollection(vtkActorCollection::New()), mySObject(SALOMEDS::SObject::_nil()), myAddToStudy(theAddToStudy), + myResult(theResult), myPipeLine(NULL) { + if(MYDEBUG) MESSAGE("Prs3d_i::Prs3d_i - this = "<Delete(); myResult->Register(); } -void VISU::Prs3d_i::SameAs(const Prs3d_i* theOrigin) +void +VISU::Prs3d_i +::SameAs(const Prs3d_i* theOrigin) { if (Prs3d_i* aOrigin = const_cast(theOrigin)) { myPipeLine->SameAs(aOrigin->GetPL()); @@ -75,60 +89,20 @@ void VISU::Prs3d_i::SameAs(const Prs3d_i* theOrigin) } } -VISU::Prs3d_i::~Prs3d_i() { - if(MYDEBUG) MESSAGE("~Prs3d_i() - this = "<setIO(anIO); - } - // } - theActor->SetPipeLine(GetPipeLine()); - theActor->SetPrs3d(this); - theActor->SetPosition(myOffset); - }catch(std::bad_alloc& ex){ - throw std::runtime_error("CreateActor >> No enough memory"); - throw ex; - } catch(std::exception& ex){ - throw ex; - }catch(...) { - throw std::runtime_error("CreateActor >> unexpected exception was caught!!!"); - } -} - -void VISU::Prs3d_i::UpdateActor(VISU_Actor* theActor) { - if(MYDEBUG) MESSAGE("Prs3d_i::UpdateActor() - this = "<GetMapper(); - vtkDataSet *aDataSet = aMapper->GetInput(); - if (!aDataSet) - throw std::runtime_error("There is no input data !!!"); - aDataSet->Update(); - static float eps = VTK_LARGE_FLOAT * 0.1 ; - if (!aDataSet->GetNumberOfCells()) - throw std::runtime_error("There is no visible elements"); - if (aDataSet->GetLength() > eps) - throw std::runtime_error("Diagonal of the actor is too large !!!"); - // fix for bug 9808 END - - //theActor->GetMapper()->ShallowCopy(myPipeLine->GetMapper()); - theActor->GetMapper()->ShallowCopy(aMapper); - theActor->SetPosition(myOffset); - theActor->Modified(); -} -VISU::Storable* VISU::Prs3d_i::Restore(const Storable::TRestoringMap& theMap) +//---------------------------------------------------------------------------- +VISU::Storable* +VISU::Prs3d_i +::Restore(const Storable::TRestoringMap& theMap) { myName = VISU::Storable::FindValue(theMap,"myName").latin1(); myOffset[0] = VISU::Storable::FindValue(theMap,"myOffset[0]").toFloat(); @@ -137,15 +111,51 @@ VISU::Storable* VISU::Prs3d_i::Restore(const Storable::TRestoringMap& theMap) return this; } -void VISU::Prs3d_i::ToStream(std::ostringstream& theStr){ +void +VISU::Prs3d_i +::ToStream(std::ostringstream& theStr) +{ Storable::DataToStream( theStr, "myName", myName.c_str() ); Storable::DataToStream( theStr, "myOffset[0]", myOffset[0] ); Storable::DataToStream( theStr, "myOffset[1]", myOffset[1] ); Storable::DataToStream( theStr, "myOffset[2]", myOffset[2] ); } -void VISU::Prs3d_i::Update() { - if(MYDEBUG) MESSAGE("Prs3d_i::Update() - this = "<GetStudyDocument(); + CORBA::String_var anIOR = GetID(); + mySObject = aStudy->FindObjectIOR(anIOR); + } + return mySObject; +} + +Result_i* +VISU::Prs3d_i +::GetResult() const +{ + return myResult; +} + +const std::string& +VISU::Prs3d_i +::GetMeshName() const +{ + return myMeshName; +} + + +//---------------------------------------------------------------------------- +void +VISU::Prs3d_i +::Update() +{ + if(MYDEBUG) MESSAGE("Prs3d_i::Update - this = "<Update(); }catch(...){ @@ -153,84 +163,199 @@ void VISU::Prs3d_i::Update() { } } -VISU_PipeLine* VISU::Prs3d_i::GetPipeLine(){ +void +VISU::Prs3d_i +::RemoveFromStudy() +{ + myRemoveActorsFromRendererSignal(); +} + + +//---------------------------------------------------------------------------- +VISU_PipeLine* +VISU::Prs3d_i +::GetPipeLine() +{ return GetPL(); } -VISU_PipeLine* VISU::Prs3d_i::GetPL(){ +VISU_PipeLine* +VISU::Prs3d_i +::GetPL() +{ return myPipeLine; } -vtkUnstructuredGrid* VISU::Prs3d_i::GetInput(){ +vtkUnstructuredGrid* +VISU::Prs3d_i:: +GetInput() +{ return myPipeLine->GetInput(); } -SALOMEDS::SObject_var VISU::Prs3d_i::GetSObject(){ - if (CORBA::is_nil(mySObject.in())) { - const SALOMEDS::Study_var& aStudy = myResult->GetStudyDocument(); - CORBA::String_var anIOR = GetID(); - mySObject = aStudy->FindObjectIOR(anIOR); +//---------------------------------------------------------------------------- +void +VISU::Prs3d_i +::CreateActor(VISU_Actor* theActor, const Handle(SALOME_InteractiveObject)& theIO) +{ + try{ + Handle(SALOME_InteractiveObject) anIO = theIO; + if(anIO.IsNull() && (!mySObject->_is_nil())){ + anIO = new SALOME_InteractiveObject(mySObject->GetID(),"VISU",GetName()); + theActor->setIO(anIO); + } + + Update(); + theActor->SetPrs3d(this); + theActor->SetShrinkFactor(); + theActor->SetPosition(myOffset); + theActor->SetPipeLine(GetPipeLine()); + + theActor->SetFactory(this); + myUpdateActorsSignal.connect(boost::bind(&VISU_Actor::UpdateFromFactory,theActor)); + myRemoveActorsFromRendererSignal.connect(boost::bind(&VISU_Actor::RemoveFromRender,theActor)); + + myActorCollection->AddItem(theActor); + theActor->Delete(); + + }catch(std::bad_alloc& ex){ + throw std::runtime_error("CreateActor >> No enough memory"); + throw ex; + } catch(std::exception& ex){ + throw ex; + }catch(...) { + throw std::runtime_error("CreateActor >> unexpected exception was caught!!!"); } - return mySObject; } -void VISU::Prs3d_i::GetBounds(float aBounds[6]){ - myPipeLine->GetMapper()->GetBounds(aBounds); +void +VISU::Prs3d_i +::RemoveActor(VISU_Actor* theActor) +{ + if(MYDEBUG) MESSAGE("Prs3d_i::RemoveActor - this = "< +#include +#include class VISU_PipeLine; class VISU_Actor; class vtkPlane; +class vtkActorCollection; class vtkUnstructuredGrid; -namespace VISU{ +namespace VISU +{ class Result_i; + //---------------------------------------------------------------------------- + //! Base class for all VTK 3D presentations. + /*! + It is a root class for a middle level of VISU functionality. + Almost all functionality of the the class implemented through redirection + external requestes to its VISU_PipeLine. + It define an interface and implement the following topics: + - provide persistent mechanism; + - implement basic actor management (CreateActor, UpdateActor, UpdateActors, RemoveActor and RemoveActors); + - implement common 3D functionality like "clipping planes" and offset. + */ class Prs3d_i : public virtual POA_VISU::Prs3d, public virtual SALOME::GenericObj_i, + public virtual TActorFactory, public virtual PrsObject_i { @@ -53,70 +71,173 @@ namespace VISU{ Prs3d_i(const Prs3d_i&); public: + //---------------------------------------------------------------------------- + //! A constructor to create a fresh instance of the class explicit Prs3d_i(Result_i* theResult, bool theAddToStudy); + + //! A constructor to restore an instance of the class explicit Prs3d_i(Result_i* theResult, SALOMEDS::SObject_ptr theSObject); - virtual void SameAs(const Prs3d_i* theOrigin); - virtual ~Prs3d_i(); - protected: - bool myAddToStudy; - float myOffset[3]; - Result_i *myResult; - VISU_PipeLine *myPipeLine; - SALOMEDS::SObject_var mySObject; - std::string myMeshName; + //! To create a deep copy from another instance of the class + virtual + void + SameAs(const Prs3d_i* theOrigin); + + virtual + ~Prs3d_i(); + + //---------------------------------------------------------------------------- + //! To generate an unique type name for the class (used into persistent functionality) + virtual + const char* + GetComment() const = 0; + + //! To generate an unique name for the instance of the class + virtual + QString + GenerateName() = 0; + + //! To restore paramters of the instance from Storable::TRestoringMap + virtual + Storable* + Restore(const Storable::TRestoringMap& theMap); + + //! To save paramters of the instance to std::ostringstream + virtual + void + ToStream(std::ostringstream& theStr); + + //---------------------------------------------------------------------------- + //! Get corresponding Result_i + Result_i* + GetResult() const; + + //! Get corresponding SALOMEDS::SObject + virtual + SALOMEDS::SObject_var + GetSObject(); + + const std::string& + GetMeshName() const; + + //---------------------------------------------------------------------------- + //! To update is internal state + virtual + void + Update(); + + //! To remove the instance from study + virtual + void + RemoveFromStudy(); + + //---------------------------------------------------------------------------- + //! Get corresponding VISU_PipeLine + VISU_PipeLine* + GetPL(); + + //! Get input of the VISU_PipeLine + vtkUnstructuredGrid* + GetInput(); + + //---------------------------------------------------------------------------- + //! To define a way to create VTK representation of the instance + virtual + VISU_Actor* + CreateActor(const Handle(SALOME_InteractiveObject)& theIO = NULL) = 0; + + //! To unregister the pointed actor + virtual + void + RemoveActor(VISU_Actor* theActor); + + //! To unregister all actors of the instance + virtual + void + RemoveActors(); + + //! To update the pointed actor + virtual + void + UpdateActor(VISU_Actor* theActor); + + //! To update all actors of the instance + virtual + void + UpdateActors(); + + //---------------------------------------------------------------------------- + // Clipping planes + void + RemoveAllClippingPlanes(); - void CreateActor(VISU_Actor* theActor, const Handle(SALOME_InteractiveObject)& theIO = NULL); - virtual VISU_PipeLine* GetPipeLine(); + bool + AddClippingPlane(vtkPlane* thePlane); - public: - virtual void Update() ; - VISU_PipeLine* GetPL(); + vtkIdType + GetNumberOfClippingPlanes() const; - vtkUnstructuredGrid* GetInput(); + vtkPlane* + GetClippingPlane(vtkIdType theID) const; - void GetBounds(float aBounds[6]); + void + SetPlaneParam(float theDir[3], float theDist, vtkPlane* thePlane); - void SetOffset(const float* theOffsets); - virtual void SetOffset(float theDx, float theDy, float theDz); + //---------------------------------------------------------------------------- + void + GetBounds(float aBounds[6]); - void GetOffset(float* theOffsets); - virtual void GetOffset(float& theDx, float& theDy, float& theDz); + void + SetOffset(const float* theOffsets); - virtual const char* GetComment() const = 0; - virtual QString GenerateName() = 0; + virtual + void + SetOffset(float theDx, float theDy, float theDz); - virtual Storable* Restore(const Storable::TRestoringMap& theMap); + void + GetOffset(float* theOffsets); - virtual void ToStream(std::ostringstream& theStr); + virtual + void + GetOffset(float& theDx, float& theDy, float& theDz); - virtual VISU_Actor* CreateActor(const Handle(SALOME_InteractiveObject)& theIO = NULL) = 0; + //---------------------------------------------------------------------------- + protected: + void + CreateActor(VISU_Actor* theActor, + const Handle(SALOME_InteractiveObject)& theIO = NULL); - virtual void UpdateActor(VISU_Actor* theActor) ; + virtual + VISU_PipeLine* + GetPipeLine(); - Result_i* GetResult() const { return myResult;} - virtual SALOMEDS::SObject_var GetSObject(); - const std::string& GetMeshName() const { return myMeshName; } + bool myAddToStudy; + float myOffset[3]; + Result_i *myResult; + VISU_PipeLine *myPipeLine; + SALOMEDS::SObject_var mySObject; + std::string myMeshName; - // Clipping planes - void RemoveAllClippingPlanes(); - vtkIdType GetNumberOfClippingPlanes() const; - bool AddClippingPlane(vtkPlane* thePlane); - vtkPlane* GetClippingPlane(vtkIdType theID) const; + boost::signal0 myUpdateActorsSignal; + boost::signal0 myRemoveActorsFromRendererSignal; + vtkSmartPointer myActorCollection; - void SetPlaneParam(float theDir[3], float theDist, vtkPlane* thePlane); }; - Result_i* GetResult(SALOMEDS::SObject_ptr theSObject); + //---------------------------------------------------------------------------- + Result_i* + GetResult(SALOMEDS::SObject_ptr theSObject); + //---------------------------------------------------------------------------- template - Storable* Restore(SALOMEDS::SObject_ptr theSObject, - const std::string& thePrefix, - const Storable::TRestoringMap& theMap) + Storable* + Restore(SALOMEDS::SObject_ptr theSObject, + const std::string& thePrefix, + const Storable::TRestoringMap& theMap) { VISU::Result_i* pResult = GetResult(theSObject); if(pResult != NULL){ @@ -125,6 +246,7 @@ namespace VISU{ } return NULL; } + //---------------------------------------------------------------------------- } #endif diff --git a/src/VISU_I/VISU_Result_i.cc b/src/VISU_I/VISU_Result_i.cc index 167c412b..f16ae64c 100644 --- a/src/VISU_I/VISU_Result_i.cc +++ b/src/VISU_I/VISU_Result_i.cc @@ -28,6 +28,7 @@ #include "VISU_Convertor_impl.hxx" #include "VISU_CorbaMedConvertor.hxx" +#include "VISU_ConvertorUtils.hxx" #include "VISU_PipeLine.hxx" #include "SUIT_ResourceMgr.h" @@ -35,9 +36,22 @@ #include "SALOMEDS_Tool.hxx" #include "HDFascii.hxx" +#include "SUIT_Session.h" +#include "SALOME_Event.hxx" +#include "SalomeApp_Study.h" +#include "SalomeApp_Application.h" + +#include +#include + +#include +#include + // QT Includes #include #include +#include +#include // VTK Includes #include @@ -51,101 +65,771 @@ using namespace std; #ifdef _DEBUG_ static int MYDEBUG = 0; +static int MYTIMEDEBUG = 0; #else static int MYDEBUG = 0; +static int MYTIMEDEBUG = 0; #endif -VISU::Result_var VISU::FindResult (SALOMEDS::SObject_ptr theSObject) + +namespace VISU { - SALOMEDS::SComponent_var aSComponent = theSObject->GetFatherComponent(); - SALOMEDS::SObject_var aFather = theSObject->GetFather(); - CORBA::String_var aComponentID (aSComponent->GetID()); - CORBA::String_var aFatherID (aFather->GetID()); - VISU::Result_var aResult; - while (strcmp(aComponentID, aFatherID) != 0) { - CORBA::Object_var anObject = VISU::SObjectToObject(aFather); - if (!CORBA::is_nil(anObject)) { - aResult = VISU::Result::_narrow(anObject); - if (!aResult->_is_nil()) return aResult; - } - aFather = aFather->GetFather(); - aFatherID = aFather->GetID(); + //--------------------------------------------------------------- + Result_var + FindResult (SALOMEDS::SObject_ptr theSObject) + { + SALOMEDS::SComponent_var aSComponent = theSObject->GetFatherComponent(); + SALOMEDS::SObject_var aFather = theSObject->GetFather(); + CORBA::String_var aComponentID (aSComponent->GetID()); + CORBA::String_var aFatherID (aFather->GetID()); + Result_var aResult; + while (strcmp(aComponentID, aFatherID) != 0) { + CORBA::Object_var anObject = SObjectToObject(aFather); + if (!CORBA::is_nil(anObject)) { + aResult = Result::_narrow(anObject); + if (!aResult->_is_nil()) return aResult; + } + aFather = aFather->GetFather(); + aFatherID = aFather->GetID(); + } + return aResult; } - return aResult; -} -QString GenerateName (const char* theName) -{ - typedef map TNameMap; - static TNameMap aMap; - TNameMap::const_iterator i = aMap.find(theName); - QString tmp; - if (i == aMap.end()) { - aMap[theName] = 0; - tmp = theName; - } else { - tmp = VISU::GenerateName(theName,++aMap[theName]); + + //--------------------------------------------------------------- + typedef boost::recursive_mutex TMutex; + typedef TMutex::scoped_lock TLock; + + static TMutex myMutex; + + //--------------------------------------------------------------- + struct TGetStudy: public SALOME_Event + { + typedef _PTR(Study) TResult; + TResult myResult; + int myStudyId; + + TGetStudy(const int theStudyId): + myStudyId(theStudyId) + {} + + virtual + void + Execute() + { + SUIT_Session* aSession = SUIT_Session::session(); + QPtrList anApplications = aSession->applications(); + QPtrListIterator anIter (anApplications); + while (SUIT_Application* aSApp = anIter.current()) { + if(SalomeApp_Application* anApp = dynamic_cast(aSApp)){ + if(SalomeApp_Study* aStudy = dynamic_cast(anApp->activeStudy())) { + if(_PTR(Study) aStudyDS = aStudy->studyDS()){ + if(aStudyDS->StudyId() == myStudyId){ + myResult = aStudy->studyDS(); + break; + } + } + } + } + ++anIter; + } + } + }; + + + //--------------------------------------------------------------- + QString + GenerateName (const char* theName) + { + TLock aLock(myMutex); + + typedef map TNameMap; + static TNameMap aMap; + + TNameMap::const_iterator i = aMap.find(theName); + QString tmp; + if (i == aMap.end()) { + aMap[theName] = 0; + tmp = theName; + } else { + tmp = GenerateName(theName,++aMap[theName]); + } + if(MYDEBUG) MESSAGE("GenerateName - "<GetFatherComponent(); + CORBA::String_var aDataType = aCompRefSObj->ComponentDataType(); + return aDataType.in(); + } + + + //--------------------------------------------------------------- + void + CreateReference (SALOMEDS::Study_ptr theStudyDocument, + const string& theFatherEntry, + const string& theRefEntry) + { + SALOMEDS::StudyBuilder_var aStudyBuilder = theStudyDocument->NewBuilder(); + SALOMEDS::SObject_var aFather = theStudyDocument->FindObjectID(theFatherEntry.c_str()); + SALOMEDS::SObject_var newObj = aStudyBuilder->NewObject(aFather); + SALOMEDS::SObject_var aRefSObj = theStudyDocument->FindObjectID(theRefEntry.c_str()); + aStudyBuilder->Addreference(newObj,aRefSObj); + } + + + //--------------------------------------------------------------- + void + CreateReference (_PTR(Study) theStudyDocument, + const string& theFatherEntry, + const string& theRefEntry) + { + TLock aLock(myMutex); + + _PTR(StudyBuilder) aStudyBuilder = theStudyDocument->NewBuilder(); + _PTR(SObject) aFather = theStudyDocument->FindObjectID(theFatherEntry); + _PTR(SObject) aNewObj = aStudyBuilder->NewObject(aFather); + _PTR(SObject) aRefSObj = theStudyDocument->FindObjectID(theRefEntry); + aStudyBuilder->Addreference(aNewObj,aRefSObj); + } + + string + CreateAttributes(_PTR(Study) theStudyDocument, + const string& theFatherEntry, + const string& theIOR, + const string& theName, + const string& thePersistentRef, + const string& theComment, + CORBA::Boolean theCreateNew) + { + TLock aLock(myMutex); + + _PTR(StudyBuilder) aStudyBuilder = theStudyDocument->NewBuilder(); + _PTR(SObject) aFather = theStudyDocument->FindObjectID(theFatherEntry); + + _PTR(SObject) aNewObj; + if(theCreateNew) + aNewObj = aStudyBuilder->NewObject(aFather); + else + aNewObj = aFather; + + _PTR(GenericAttribute) anAttr; + if (theIOR != "") { + anAttr = aStudyBuilder->FindOrCreateAttribute(aNewObj, "AttributeIOR"); + _PTR(AttributeIOR) anIOR (anAttr); + anIOR->SetValue(theIOR); + } + if (theName != "") { + anAttr = aStudyBuilder->FindOrCreateAttribute(aNewObj, "AttributeName"); + _PTR(AttributeName) aName (anAttr); + aName->SetValue(theName); + } + if (thePersistentRef != "") { + anAttr = aStudyBuilder->FindOrCreateAttribute(aNewObj, "AttributePersistentRef"); + _PTR(AttributePersistentRef) aPRef (anAttr); + aPRef->SetValue(thePersistentRef); + } + if (theComment != "") { + anAttr = aStudyBuilder->FindOrCreateAttribute(aNewObj, "AttributeComment"); + _PTR(AttributeComment) aCmnt (anAttr); + aCmnt->SetValue(theComment); + } + return aNewObj->GetID(); + } + + //--------------------------------------------------------------- + struct TResultManager + { + Result_i* myResult; + + TResultManager(Result_i* theResult): + myResult(theResult) + { + myResult->Register(); + } + + ~TResultManager() + { + myResult->Destroy(); + } + }; + + + //--------------------------------------------------------------- + struct TTransactionManager + { + _PTR(StudyBuilder) myStudyBuilder; + + TTransactionManager(_PTR(Study) theStudyDocument): + myStudyBuilder(theStudyDocument->NewBuilder()) + { + TLock aLock(myMutex); + myStudyBuilder->NewCommand(); + } + + ~TTransactionManager() + { + TLock aLock(myMutex); + myStudyBuilder->CommitCommand(); + } + }; + + + //--------------------------------------------------------------- + struct TUpdateObjBrowser: public SALOME_Event + { + int myStudyId; + CORBA::Boolean* myIsDone; + TUpdateObjBrowser(const int theStudyId, + CORBA::Boolean* theIsDone): + myStudyId(theStudyId), + myIsDone(theIsDone) + {} + + virtual + void + Execute() + { + TLock aLock(myMutex); + SUIT_Session* aSession = SUIT_Session::session(); + QPtrList anApplications = aSession->applications(); + QPtrListIterator anIter (anApplications); + while (SUIT_Application* aSApp = anIter.current()) { + if(SalomeApp_Application* anApp = dynamic_cast(aSApp)){ + if (SalomeApp_Study* aStudy = dynamic_cast(anApp->activeStudy())) { + if (_PTR(Study) aCStudy = aStudy->studyDS()) { + if (myStudyId == aCStudy->StudyId()) { + TTimerLog aTimerLog(MYTIMEDEBUG,"Result_i::updateObjectBrowser"); + anApp->updateObjectBrowser(); + *myIsDone = true; + break; + } + } + } + } + ++anIter; + } + } + }; + + + //--------------------------------------------------------------- + void + BuildEntities(Result_i* theResult, + VISU_Convertor* theInput, + CORBA::Boolean* theIsDone, + std::string theResultEntry, + _PTR(Study) theStudy) + { + if(*theIsDone) + return; + + TTimerLog aTimerLog(MYTIMEDEBUG,"Result_i::BuildEntities"); + TResultManager aResultManager(theResult); + TTransactionManager aTransactionManager(theStudy); + + { + TTimerLog aTimerLog(MYTIMEDEBUG,"theInput->BuildEntities"); + theInput->BuildEntities(); + } + + QString aComment; + const TMeshMap& aMeshMap = theInput->GetMeshMap(); + TMeshMap::const_iterator aMeshMapIter = aMeshMap.begin(); + for(; aMeshMapIter != aMeshMap.end(); aMeshMapIter++){ + const string& aMeshName = aMeshMapIter->first; + const PMesh& aMesh = aMeshMapIter->second; + const TMeshOnEntityMap& aMeshOnEntityMap = aMesh->myMeshOnEntityMap; + if(aMeshOnEntityMap.empty()) + continue; + + aComment.sprintf("myComment=MESH;myName=%s;myDim=%d", + aMeshName.c_str(), + aMesh->myDim); + aMesh->myEntry = + CreateAttributes(theStudy, + theResultEntry, + "", + aMeshName, + "", + aComment.latin1(), + true); + + aComment.sprintf("myComment=FAMILIES;myMeshName=%s", + aMeshName.c_str()); + string aSubMeshesEntry = + CreateAttributes(theStudy, + aMesh->myEntry, + "", + "Families", + "", + aComment.latin1(), + true); + //Import entities + TMeshOnEntityMap::const_iterator aMeshOnEntityMapIter = aMeshOnEntityMap.begin(); + for(; aMeshOnEntityMapIter != aMeshOnEntityMap.end(); aMeshOnEntityMapIter++){ + const TEntity& anEntity = aMeshOnEntityMapIter->first; + const PMeshOnEntity& aMeshOnEntity = aMeshOnEntityMapIter->second; + + string anEntityName; + switch(anEntity){ + case NODE_ENTITY: + anEntityName = "onNodes"; + break; + case EDGE_ENTITY: + anEntityName = "onEdges"; + break; + case FACE_ENTITY: + anEntityName = "onFaces"; + break; + case CELL_ENTITY: + anEntityName = "onCells"; + break; + default: + continue; + } + + aComment.sprintf("myComment=ENTITY;myType=%d;myMeshName=%s;myId=%d", + VISU::TENTITY, + aMeshName.c_str(), + anEntity); + + aMeshOnEntity->myEntry = + CreateAttributes(theStudy, + aSubMeshesEntry, + "", + anEntityName.c_str(), + "", + aComment.latin1(), + true); + } + } + + ProcessVoidEvent(new TUpdateObjBrowser(theStudy->StudyId(),theIsDone)); + } + + //--------------------------------------------------------------- + void + BuildGroups(Result_i* theResult, + VISU_Convertor* theInput, + CORBA::Boolean* theIsDone, + CORBA::Boolean theIsBuild, + _PTR(Study) theStudy) + { + if(!theIsBuild || *theIsDone) + return; + + TTimerLog aTimerLog(MYTIMEDEBUG,"Result_i::BuildGroups"); + TResultManager aResultManager(theResult); + TTransactionManager aTransactionManager(theStudy); + + { + TTimerLog aTimerLog(MYTIMEDEBUG,"theInput->BuildGroups"); + theInput->BuildGroups(); + } + + QString aComment; + const TMeshMap& aMeshMap = theInput->GetMeshMap(); + TMeshMap::const_iterator aMeshMapIter = aMeshMap.begin(); + for(; aMeshMapIter != aMeshMap.end(); aMeshMapIter++){ + const string& aMeshName = aMeshMapIter->first; + const PMesh& aMesh = aMeshMapIter->second; + + const TMeshOnEntityMap& aMeshOnEntityMap = aMesh->myMeshOnEntityMap; + if(aMeshOnEntityMap.empty()) + continue; + + TMeshOnEntityMap::const_iterator aMeshOnEntityMapIter = aMeshOnEntityMap.begin(); + for(; aMeshOnEntityMapIter != aMeshOnEntityMap.end(); aMeshOnEntityMapIter++){ + const TEntity& anEntity = aMeshOnEntityMapIter->first; + const PMeshOnEntity& aMeshOnEntity = aMeshOnEntityMapIter->second; + + const TFamilyMap& aFamilyMap = aMeshOnEntity->myFamilyMap; + TFamilyMap::const_iterator aFamilyMapIter = aFamilyMap.begin(); + for(; aFamilyMapIter != aFamilyMap.end(); aFamilyMapIter++){ + const string& aFamilyName = aFamilyMapIter->first; + const PFamily& aFamily = aFamilyMapIter->second; + aComment.sprintf("myComment=FAMILY;myType=%d;myMeshName=%s;myEntityId=%d;myName=%s", + TFAMILY, + aMeshName.c_str(), + anEntity, + aFamilyName.c_str()); + aFamily->myEntry = + CreateAttributes(theStudy, + aMeshOnEntity->myEntry, + "", + aFamilyName, + "", + aComment.latin1(), + true); + } + } + //Importing groups + const TGroupMap& aGroupMap = aMesh->myGroupMap; + if(!aGroupMap.empty()){ + aComment.sprintf("myComment=GROUPS;myMeshName=%s", + aMeshName.c_str()); + string aGroupsEntry = + CreateAttributes(theStudy, + aMesh->myEntry, + "", + "Groups", + "", + aComment.latin1(), + true); + TGroupMap::const_iterator aGroupMapIter = aGroupMap.begin(); + for(; aGroupMapIter != aGroupMap.end(); aGroupMapIter++){ + const string& aGroupName = aGroupMapIter->first; + const PGroup& aGroup = aGroupMapIter->second; + aComment.sprintf("myComment=GROUP;myType=%d;myMeshName=%s;myName=%s", + TGROUP,aMeshName.c_str(),aGroupName.c_str()); + aGroup->myEntry = + CreateAttributes(theStudy, + aGroupsEntry, + "", + aGroupName, + "", + aComment.latin1(), + true); + const TFamilySet& aFamilySet = aGroup->myFamilySet; + TFamilySet::const_iterator aFamilyIter = aFamilySet.begin(); + for(; aFamilyIter != aFamilySet.end(); aFamilyIter++){ + const PFamily& aFamily = *aFamilyIter; + CreateReference(theStudy, + aGroup->myEntry, + aFamily->myEntry); + } + } + } + } + + ProcessVoidEvent(new TUpdateObjBrowser(theStudy->StudyId(),theIsDone)); + } + + + //--------------------------------------------------------------- + void + BuildFields(Result_i* theResult, + VISU_Convertor* theInput, + CORBA::Boolean* theIsDone, + CORBA::Boolean theIsBuild, + _PTR(Study) theStudy) + { + if(!theIsBuild || *theIsDone) + return; + + TTimerLog aTimerLog(MYTIMEDEBUG,"Result_i::BuildFields"); + TResultManager aResultManager(theResult); + TTransactionManager aTransactionManager(theStudy); + + { + TTimerLog aTimerLog(MYTIMEDEBUG,"theInput->BuildFields"); + theInput->BuildFields(); + } + + QString aComment; + const TMeshMap& aMeshMap = theInput->GetMeshMap(); + TMeshMap::const_iterator aMeshMapIter = aMeshMap.begin(); + for(; aMeshMapIter != aMeshMap.end(); aMeshMapIter++){ + const string& aMeshName = aMeshMapIter->first; + const PMesh& aMesh = aMeshMapIter->second; + + const TMeshOnEntityMap& aMeshOnEntityMap = aMesh->myMeshOnEntityMap; + if(aMeshOnEntityMap.empty()) + continue; + + //Import fields + string aFieldsEntry; + bool anIsFieldsEntryCreated = false; + + TMeshOnEntityMap::const_iterator aMeshOnEntityMapIter = aMeshOnEntityMap.begin(); + for(; aMeshOnEntityMapIter != aMeshOnEntityMap.end(); aMeshOnEntityMapIter++){ + const TEntity& anEntity = aMeshOnEntityMapIter->first; + const PMeshOnEntity& aMeshOnEntity = aMeshOnEntityMapIter->second; + const TFieldMap& aFieldMap = aMeshOnEntity->myFieldMap; + TFieldMap::const_iterator aFieldMapIter = aFieldMap.begin(); + for(; aFieldMapIter != aFieldMap.end(); aFieldMapIter++){ + if(!anIsFieldsEntryCreated){ + aComment.sprintf("myComment=FIELDS;myMeshName=%s", + aMeshName.c_str()); + aFieldsEntry = + CreateAttributes(theStudy, + aMesh->myEntry, + "", + "Fields", + "", + aComment.latin1(), + true); + anIsFieldsEntryCreated = true; + } + const string& aFieldName = aFieldMapIter->first; + const PField& aField = aFieldMapIter->second; + const TValField& aValField = aField->myValField; + QString aFieldNameWithUnit = GenerateFieldName(aFieldName,aField->myUnitNames[0]); + aComment.sprintf("myComment=FIELD;myType=%d;myMeshName=%s;myEntityId=%d;myName=%s;myNbTimeStamps=%d;myNumComponent=%d", + TFIELD, + aMeshName.c_str(), + anEntity, + aFieldName.c_str(), + aValField.size(), + aField->myNbComp); + aField->myEntry = + CreateAttributes(theStudy, + aFieldsEntry, + "", + aFieldNameWithUnit.latin1(), + "", + aComment.latin1(), + true); + CreateReference(theStudy, + aField->myEntry, + aMeshOnEntity->myEntry); + TValField::const_iterator aValFieldIter = aValField.begin(); + for(; aValFieldIter != aValField.end(); aValFieldIter++){ + int aTimeStamp = aValFieldIter->first; + const PValForTime& aValForTime = aValFieldIter->second; + aComment.sprintf("myComment=TIMESTAMP;myType=%d;myMeshName=%s;myEntityId=%d;myFieldName=%s;myTimeStampId=%d;myNumComponent=%d", + TTIMESTAMP, + aMeshName.c_str(), + anEntity, + aFieldName.c_str(), + aTimeStamp, + aField->myNbComp); + string aTimeStampId = VISU_Convertor::GenerateName(aValForTime->myTime); + aValForTime->myEntry = + CreateAttributes(theStudy, + aField->myEntry, + "", + aTimeStampId, + "", + aComment.latin1(), + true); + } + } + } + } + + ProcessVoidEvent(new TUpdateObjBrowser(theStudy->StudyId(),theIsDone)); + } + + + //--------------------------------------------------------------- + void + BuildMinMax(Result_i* theResult, + VISU_Convertor* theInput, + CORBA::Boolean* theIsDone, + CORBA::Boolean theIsBuild, + Result_i::TUpdateMinMaxSignal* theUpdateMinMaxSignal) + { + if(!theIsBuild || *theIsDone) + return; + + TTimerLog aTimerLog(MYTIMEDEBUG,"Result_i::BuildMinMax"); + TResultManager aResultManager(theResult); + + theInput->BuildMinMax(); + + *theIsDone = true; + + (*theUpdateMinMaxSignal)(); + } + + + //--------------------------------------------------------------- + void + BuildFieldDataTree(Result_i* theResult, + VISU_Convertor* theInput, + CORBA::Boolean* theIsFieldsDone, + CORBA::Boolean theIsBuildFields, + CORBA::Boolean* theIsMinMaxDone, + CORBA::Boolean theIsBuildMinMax, + Result_i::TUpdateMinMaxSignal* theUpdateMinMaxSignal, + _PTR(Study) theStudy) + { + BuildFields(theResult, + theInput, + theIsFieldsDone, + theIsBuildFields, + theStudy); + + BuildMinMax(theResult, + theInput, + theIsMinMaxDone, + theIsBuildMinMax, + theUpdateMinMaxSignal); + } + + + //--------------------------------------------------------------- + struct TBuildArgs + { + Result_i* myResult; + VISU_Convertor* myInput; + CORBA::Boolean* myIsEntitiesDone; + std::string myResultEntry; + CORBA::Boolean* myIsFieldsDone; + CORBA::Boolean myIsBuildFields; + CORBA::Boolean* myIsMinMaxDone; + CORBA::Boolean myIsBuildMinMax; + Result_i::TUpdateMinMaxSignal* myUpdateMinMaxSignal; + CORBA::Boolean* myIsGroupsDone; + CORBA::Boolean myIsBuildGroups; + _PTR(Study) myStudy; + + TBuildArgs(Result_i* theResult, + VISU_Convertor* theInput, + CORBA::Boolean* theIsEntitiesDone, + std::string theResultEntry, + CORBA::Boolean* theIsFieldsDone, + CORBA::Boolean theIsBuildFields, + CORBA::Boolean* theIsMinMaxDone, + CORBA::Boolean theIsBuildMinMax, + Result_i::TUpdateMinMaxSignal* theUpdateMinMaxSignal, + CORBA::Boolean* theIsGroupsDone, + CORBA::Boolean theIsBuildGroups, + _PTR(Study) theStudy): + myResult(theResult), + myInput(theInput), + myIsEntitiesDone(theIsEntitiesDone), + myResultEntry(theResultEntry), + myIsFieldsDone(theIsFieldsDone), + myIsBuildFields(theIsBuildFields), + myIsMinMaxDone(theIsMinMaxDone), + myIsBuildMinMax(theIsBuildMinMax), + myUpdateMinMaxSignal(theUpdateMinMaxSignal), + myIsGroupsDone(theIsGroupsDone), + myIsBuildGroups(theIsBuildGroups), + myStudy(theStudy) + {} + + }; + + //--------------------------------------------------------------- + void + BuildDataTree(TBuildArgs theBuildArgs) + { + BuildEntities(theBuildArgs.myResult, + theBuildArgs.myInput, + theBuildArgs.myIsEntitiesDone, + theBuildArgs.myResultEntry, + theBuildArgs.myStudy); + { + boost::thread aThread(boost::bind(&BuildGroups, + theBuildArgs.myResult, + theBuildArgs.myInput, + theBuildArgs.myIsGroupsDone, + theBuildArgs.myIsBuildGroups, + theBuildArgs.myStudy)); + } + { + boost::thread aThread(boost::bind(&BuildFieldDataTree, + theBuildArgs.myResult, + theBuildArgs.myInput, + theBuildArgs.myIsFieldsDone, + theBuildArgs.myIsBuildFields, + theBuildArgs.myIsMinMaxDone, + theBuildArgs.myIsBuildMinMax, + theBuildArgs.myUpdateMinMaxSignal, + theBuildArgs.myStudy)); + } + } + } -void CreateReference (SALOMEDS::Study_ptr theStudyDocument, - const string& theFatherEntry, const string& theRefEntry) + +//--------------------------------------------------------------- +VISU::MinMaxCunsomer +::MinMaxCunsomer(): + myMinMaxIsInitilized(false) +{} + +bool +VISU::MinMaxCunsomer +::IsMinMaxInitilized() { - SALOMEDS::StudyBuilder_var aStudyBuilder = theStudyDocument->NewBuilder(); - SALOMEDS::SObject_var aFather = theStudyDocument->FindObjectID(theFatherEntry.c_str()); - SALOMEDS::SObject_var newObj = aStudyBuilder->NewObject(aFather); - SALOMEDS::SObject_var aRefSObj = theStudyDocument->FindObjectID(theRefEntry.c_str()); - aStudyBuilder->Addreference(newObj,aRefSObj); + return myMinMaxIsInitilized; } -string GetComponentDataType (SALOMEDS::SObject_ptr theSObject) +void +VISU::MinMaxCunsomer +::UpdateMinMax() { - SALOMEDS::SComponent_var aCompRefSObj = theSObject->GetFatherComponent(); - CORBA::String_var aDataType = aCompRefSObj->ComponentDataType(); - return aDataType.in(); + myMinMaxIsInitilized = true; } -//============================================================================== +//--------------------------------------------------------------- const string VISU::Result_i::myComment = "RESULT"; const char* VISU::Result_i::GetComment() const { return myComment.c_str();} -VISU::Result_i::Result_i (SALOMEDS::Study_ptr theStudy, - const ESourceId& theSourceId, - const ECreationId& theCreationId): +//--------------------------------------------------------------- +VISU::Result_i +::Result_i (SALOMEDS::Study_ptr theStudy, + const ESourceId& theSourceId, + const ECreationId& theCreationId, + CORBA::Boolean theIsBuildImmediately): myStudyDocument(SALOMEDS::Study::_duplicate(theStudy)), myCreationId(theCreationId), mySourceId(theSourceId), + myIsBuildImmediately(theIsBuildImmediately), myInput(NULL), - myIsDone(0) + myIsEntitiesDone(false), + myIsFieldsDone(false), + myIsGroupsDone(false), + myIsMinMaxDone(false), + myIsBuildFields(true), + myIsBuildGroups(true), + myIsBuildMinMax(true), + myIsAllDone(false) { + myStudy = ProcessEvent(new TGetStudy(myStudyDocument->StudyId())); } -void VISU::Result_i::RemoveFromStudy() +//--------------------------------------------------------------- +void +VISU::Result_i +::RemoveFromStudy() { // Remove the result with all presentations and other possible sub-objects VISU::RemoveFromStudy(mySObject,false); + Destroy(); } +//--------------------------------------------------------------- +void +VISU::Result_i +::MinMaxConnect(VISU::MinMaxCunsomer* theMinMaxCunsomer) +{ + myUpdateMinMaxSignal.connect(boost::bind(&MinMaxCunsomer::UpdateMinMax,theMinMaxCunsomer)); +} + + +//--------------------------------------------------------------- int -VISU::Result_i:: -IsPossible() +VISU::Result_i +::IsPossible() { try{ float aSize = myInput->GetSize(); @@ -161,13 +845,16 @@ IsPossible() } +//--------------------------------------------------------------- CORBA::Boolean -VISU::Result_i:: -BuildAll() +VISU::Result_i +::BuildAll() { - if(MYDEBUG) MESSAGE("Result_i::Build - myIsDone = "<NewBuilder(); - aStudyBuilder->NewCommand(); // There is a transaction - - try { - const TMeshMap& aMeshMap = myInput->GetMeshMap(); - if (aMeshMap.empty()) - throw std::runtime_error("Build - There is no any mesh information in the file !!!"); - - mySComponent = FindOrCreateVisuComponent(myStudyDocument); - CORBA::String_var aSComponentEntry = mySComponent->GetID(), anIOR(GetID()); - string aRefFatherEntry = GetRefFatherEntry(); - - QString aComment; - aComment.sprintf("myComment=%s;myType=%d;myFileName=%s;myInitFileName=%s", - GetComment(), VISU::TRESULT, myFileInfo.filePath().latin1(), - myInitFileName.c_str()); // Restoring of Python dump - string aResultEntry = - CreateAttributes(myStudyDocument, aSComponentEntry, aRefFatherEntry.c_str(), - anIOR, myName.c_str(), "", aComment.latin1(), true); + if(Build(SALOMEDS::SObject::_nil(),theIsAtOnce)){ + if(theIsBuildAll) + return BuildAll(); + return true; + } - mySObject = myStudyDocument->FindObjectID(aResultEntry.c_str()); - if (mySObject->_is_nil()) - throw std::runtime_error("Build - There is no SObject for the Result !!!"); + return false; +} - if (!CORBA::is_nil(theSObject)) { - CORBA::String_var aString = theSObject->GetID(); - CreateReference(myStudyDocument, aResultEntry, aString.in()); - } - TMeshMap::const_iterator aMeshMapIter = aMeshMap.begin(); - for (; aMeshMapIter != aMeshMap.end(); aMeshMapIter++) { - const string& aMeshName = aMeshMapIter->first; - const VISU::PMesh aMesh = aMeshMapIter->second; - aComment.sprintf("myComment=MESH;myName=%s;myDim=%d", - aMeshName.c_str(), aMesh->myDim); - string aMeshEntry = - CreateAttributes(myStudyDocument, aResultEntry.c_str(), aRefFatherEntry.c_str(), - "", aMeshName.c_str(), "", aComment.latin1(), true); +//--------------------------------------------------------------- +VISU::Storable* +VISU::Result_i +::Build(SALOMEDS::SObject_ptr theSObject, + CORBA::Boolean theIsAtOnce) +{ + if(IsDone()) + return this; - const VISU::TMeshOnEntityMap& aMeshOnEntityMap = aMesh->myMeshOnEntityMap; - if (aMeshOnEntityMap.empty()) continue; - - aComment.sprintf("myComment=FAMILIES;myMeshName=%s", aMeshName.c_str()); - string aSubMeshesEntry = - CreateAttributes(myStudyDocument, aMeshEntry.c_str(), aRefFatherEntry.c_str(), - "", "Families", "", aComment.latin1(), true); - - //Import entities and according families - typedef std::map TComment2EntryMap; - typedef std::map TEntity2EntryMap; - TComment2EntryMap aComment2EntryMap; - TEntity2EntryMap aEntity2EntryMap; - - VISU::TMeshOnEntityMap::const_iterator aMeshOnEntityMapIter = aMeshOnEntityMap.begin(); - for (; aMeshOnEntityMapIter != aMeshOnEntityMap.end(); aMeshOnEntityMapIter++) { - const VISU::TEntity& anEntity = aMeshOnEntityMapIter->first; - aComment.sprintf("myComment=ENTITY;myType=%d;myMeshName=%s;myId=%d", - VISU::TENTITY, aMeshName.c_str(), anEntity); - string anEntityName; - switch (anEntity) { - case VISU::NODE_ENTITY : anEntityName = "onNodes"; break; - case VISU::EDGE_ENTITY : anEntityName = "onEdges"; break; - case VISU::FACE_ENTITY : anEntityName = "onFaces"; break; - case VISU::CELL_ENTITY : anEntityName = "onCells"; break; - default: - throw std::runtime_error("Build >> Value of entity is incorrect!"); - } - aEntity2EntryMap[anEntity] = CreateAttributes - (myStudyDocument, aSubMeshesEntry.c_str(), aRefFatherEntry.c_str(), - "", anEntityName.c_str(), "", aComment.latin1(), true); + mySComponent = FindOrCreateVisuComponent(myStudyDocument); + CORBA::String_var aSComponentEntry = mySComponent->GetID(); + CORBA::String_var anIOR(GetID()); + QString aComment; + aComment.sprintf("myComment=%s;myType=%d;myFileName=%s;myInitFileName=%s", + GetComment(), + VISU::TRESULT, + myFileInfo.filePath().latin1(), + myInitFileName.c_str()); // Restoring of Python dump + string aResultEntry = + CreateAttributes(myStudy, + aSComponentEntry.in(), + anIOR.in(), + myName, + "", + aComment.latin1(), + true); + mySObject = myStudyDocument->FindObjectID(aResultEntry.c_str()); + if(!CORBA::is_nil(theSObject)){ + CORBA::String_var aString = theSObject->GetID(); + CreateReference(myStudyDocument,aResultEntry,aString.in()); + } - const VISU::PMeshOnEntity aMeshOnEntity = aMeshOnEntityMapIter->second; - const VISU::TFamilyMap& aFamilyMap = aMeshOnEntity->myFamilyMap; - VISU::TFamilyMap::const_iterator aFamilyMapIter = aFamilyMap.begin(); - for (; aFamilyMapIter != aFamilyMap.end(); aFamilyMapIter++) { - const string& aFamilyName = aFamilyMapIter->first; - aComment.sprintf("myComment=FAMILY;myType=%d;myMeshName=%s;myEntityId=%d;myName=%s", - VISU::TFAMILY, aMeshName.c_str(), anEntity, aFamilyName.c_str()); - aComment2EntryMap[aComment.latin1()] = - CreateAttributes(myStudyDocument, aEntity2EntryMap[anEntity].c_str(), aRefFatherEntry.c_str(), - "", aFamilyName.c_str(), "", aComment.latin1(), true); - } - } + if(theIsAtOnce){ + BuildEntities(this, + myInput, + &myIsEntitiesDone, + aResultEntry, + myStudy); + + BuildGroups(this, + myInput, + &myIsGroupsDone, + myIsBuildGroups, + myStudy); + + BuildFields(this, + myInput, + &myIsFieldsDone, + myIsBuildFields, + myStudy); + + BuildMinMax(this, + myInput, + &myIsMinMaxDone, + myIsBuildMinMax, + &myUpdateMinMaxSignal); + + }else{ + TBuildArgs aBuildArgs(this, + myInput, + &myIsEntitiesDone, + aResultEntry, + &myIsFieldsDone, + myIsBuildFields, + &myIsMinMaxDone, + myIsBuildMinMax, + &myUpdateMinMaxSignal, + &myIsGroupsDone, + myIsBuildGroups, + myStudy); + boost::thread aThread(boost::bind(&BuildDataTree, + aBuildArgs)); + } - //Importing groups - const VISU::TGroupMap& aGroupMap = aMesh->myGroupMap; - if (aGroupMap.size() > 0) { - aComment.sprintf("myComment=GROUPS;myMeshName=%s", aMeshName.c_str()); - string aGroupsEntry = - CreateAttributes(myStudyDocument, aMeshEntry.c_str(), aRefFatherEntry.c_str(), - "", "Groups", "", aComment.latin1(), true); + return this; +} - VISU::TGroupMap::const_iterator aGroupMapIter = aGroupMap.begin(); - for (; aGroupMapIter != aGroupMap.end(); aGroupMapIter++) { - const string& aGroupName = aGroupMapIter->first; - aComment.sprintf("myComment=GROUP;myType=%d;myMeshName=%s;myName=%s", - VISU::TGROUP, aMeshName.c_str(), aGroupName.c_str()); - string aGroupEntry = - CreateAttributes(myStudyDocument, aGroupsEntry.c_str(), aRefFatherEntry.c_str(), - "", aGroupName.c_str(), "", aComment.latin1(), true); - - const VISU::PGroup aGroup = aGroupMapIter->second; - const VISU::TFamilyAndEntitySet& aFamilyAndEntitySet = aGroup->myFamilyAndEntitySet; - VISU::TFamilyAndEntitySet::const_iterator aFamilyAndEntitySetIter = aFamilyAndEntitySet.begin(); - for (; aFamilyAndEntitySetIter != aFamilyAndEntitySet.end(); aFamilyAndEntitySetIter++) { - const VISU::TFamilyAndEntity& aFamilyAndEntity = *aFamilyAndEntitySetIter; - const string& aFamilyName = aFamilyAndEntity.first; - const VISU::TEntity& anEntity = aFamilyAndEntity.second; - aComment.sprintf("myComment=FAMILY;myType=%d;myMeshName=%s;myEntityId=%d;myName=%s", - VISU::TFAMILY, aMeshName.c_str(), anEntity, aFamilyName.c_str()); - if (aComment2EntryMap.count(aComment.latin1()) > 0) - CreateReference(myStudyDocument, aGroupEntry, aComment2EntryMap[aComment.latin1()]); - } - } - } - //Import fields - string aFieldsEntry; - bool isFieldEntryCreated = 0; - aMeshOnEntityMapIter = aMeshOnEntityMap.begin(); - for (; aMeshOnEntityMapIter != aMeshOnEntityMap.end(); aMeshOnEntityMapIter++) { - const VISU::TEntity& anEntity = aMeshOnEntityMapIter->first; - const VISU::PMeshOnEntity aMeshOnEntity = aMeshOnEntityMapIter->second; - const VISU::TFieldMap& aFieldMap = aMeshOnEntity->myFieldMap; - VISU::TFieldMap::const_iterator aFieldMapIter = aFieldMap.begin(); - for (; aFieldMapIter != aFieldMap.end(); aFieldMapIter++) { - if (!isFieldEntryCreated) { - aComment.sprintf("myComment=FIELDS;myMeshName=%s", aMeshName.c_str()); - aFieldsEntry = - CreateAttributes(myStudyDocument, aMeshEntry.c_str(), aRefFatherEntry.c_str(), - "", "Fields", "", aComment.latin1(), true); - isFieldEntryCreated = true; - } - const string& aFieldName = aFieldMapIter->first; - const VISU::PField aField = aFieldMapIter->second; - const VISU::TValField& aValField = aField->myValField; - QString aFieldNameWithUnit = ::GenerateFieldName(aFieldName,aField->myUnitNames[0]); - aComment.sprintf("myComment=FIELD;myType=%d;myMeshName=%s;myEntityId=%d;myName=%s;" - "myNbTimeStamps=%d;myNumComponent=%d", - VISU::TFIELD, aMeshName.c_str(), anEntity, aFieldName.c_str(), - aValField.size(), aField->myNbComp); - string aFieldEntry = - CreateAttributes(myStudyDocument, aFieldsEntry.c_str(), aRefFatherEntry.c_str(), - "", aFieldNameWithUnit.latin1(), "", aComment.latin1(), true); - CreateReference(myStudyDocument, aFieldEntry, aEntity2EntryMap[anEntity]); - - VISU::TValField::const_iterator aValFieldIter = aValField.begin(); - for (; aValFieldIter != aValField.end(); aValFieldIter++) { - int aTimeStamp = aValFieldIter->first; - const VISU::PValForTime aValForTime = aValFieldIter->second; - aComment.sprintf("myComment=TIMESTAMP;myType=%d;myMeshName=%s;myEntityId=%d;" - "myFieldName=%s;myTimeStampId=%d;myNumComponent=%d", - VISU::TTIMESTAMP, aMeshName.c_str(), anEntity, - aFieldName.c_str(), aTimeStamp, aField->myNbComp); - string aTimeStampId = VISU_Convertor::GenerateName(aValForTime->myTime); - CreateAttributes(myStudyDocument, aFieldEntry.c_str(), aRefFatherEntry.c_str(), - "", aTimeStampId.c_str(), "", aComment.latin1(), true); - } - } - } - } - bool isBuildAll = VISU::GetResourceMgr()->booleanValue("VISU", "full_med_loading", false); - if (isBuildAll) BuildAll(); - } catch(std::exception& exc) { +//--------------------------------------------------------------- +VISU::Storable* +VISU::Result_i +::BuildAll(SALOMEDS::SObject_ptr theSObject) +{ + if(MYDEBUG) MESSAGE("Result_i::Build"); + try{ + Build(theSObject); + BuildAll(); + }catch(std::exception& exc){ INFOS("Follow exception was occured :\n"<CommitCommand(); + return this; } +//--------------------------------------------------------------- VISU::Storable* VISU::Result_i:: Create(const char* theFileName) @@ -446,9 +1071,11 @@ Create(const char* theFileName) myFileInfo.setFile(QString(aTmpDir.c_str()) + myFileInfo.fileName()); } myInput = CreateConvertor(myFileInfo.absFilePath().latin1()); - if(!myInput) - throw std::runtime_error("Create - Cannot create a Convertor for this file!!!"); - return Build(); + if(myInput){ + if(myIsBuildImmediately) + Build(SALOMEDS::SObject::_nil()); + return this; + } }catch(std::exception& exc){ INFOS("Follow exception was occured :\n"<Build(); + string aCompDataType = GetComponentDataType(theMedSObject); myFileInfo.setFile(aCompDataType.c_str()); myInitFileName = aCompDataType; myName = ::GenerateName("aResult").latin1(); - VISU::Storable* aStorable = Build(theMedSObject); - return aStorable; + return Build(theMedSObject); }catch(std::exception& exc){ INFOS("Follow exception was occured :\n"<Build(); + string aCompDataType = "MED"; myFileInfo.setFile(aCompDataType.c_str()); myInitFileName = aCompDataType; @@ -503,8 +1136,7 @@ Create(SALOME_MED::FIELD_ptr theField) CORBA::String_var anIOR = myStudyDocument->ConvertObjectToIOR(theField); SALOMEDS::SObject_var aFieldSObject = myStudyDocument->FindObjectIOR(anIOR); - VISU::Storable* aStorable = Build(aFieldSObject); - return aStorable; + return Build(aFieldSObject); }catch(std::exception& exc){ INFOS("Follow exception was occured :\n"<NewBuilder(); SALOMEDS::Driver_var aDriver = SALOMEDS::Driver::_narrow(aEngComp); aStudyBuilder->LoadWith(aCompRefSObj, aDriver); - if (strcmp(aDataType, "MED") == 0) { + if (strcmp(aDataType, "MED") == 0){ // create field or MED converter CORBA::Object_var aMedObject = VISU::SObjectToObject(aTargetRefSObj); SALOME_MED::FIELD_var aField = SALOME_MED::FIELD::_narrow(aMedObject); @@ -551,8 +1184,8 @@ Restore(SALOMEDS::SObject_ptr theSObject, myInput = CreateMEDFieldConvertor(aField); else myInput = CreateMEDConvertor(aTargetRefSObj); - } - else + myInput->Build(); + }else throw std::runtime_error("GetInput - There is no convertor for the aDataType !!!"); } else { myFileInfo.setFile(thePrefix.c_str()); @@ -607,6 +1240,7 @@ Restore(SALOMEDS::SObject_ptr theSObject, } if(MYDEBUG) MESSAGE("VISU::Result_i::Restore - mySourceId = " << mySourceId); myInput = CreateConvertor(myFileInfo.filePath().latin1()); + myInput->Build(); QString aComment; aComment.sprintf("myComment=%s;myType=%d;myFileName=%s;myInitFileName=%s", GetComment(), VISU::TRESULT, myFileInfo.filePath().latin1(), @@ -629,21 +1263,91 @@ Restore(SALOMEDS::SObject_ptr theSObject, return NULL; } -VISU::Result_i::TInput* VISU::Result_i::GetInput() { +//--------------------------------------------------------------- +VISU::Result_i::TInput* +VISU::Result_i +::GetInput() +{ return myInput; } -void VISU::Result_i::ToStream(std::ostringstream& theStr){ +//--------------------------------------------------------------- +CORBA::Boolean +VISU::Result_i +::IsDone() +{ + return + myIsEntitiesDone && + (myIsBuildFields? myIsFieldsDone: true) && + (myIsBuildMinMax? myIsMinMaxDone: true) && + (myIsBuildGroups? myIsGroupsDone: true); +} + +CORBA::Boolean +VISU::Result_i +::IsEntitiesDone() +{ + return myIsEntitiesDone; +} + +void +VISU::Result_i +::SetBuildFields(CORBA::Boolean theIsBuildFields, + CORBA::Boolean theIsCalculateMinMax) +{ + myIsBuildFields = theIsBuildFields; + if(theIsBuildFields) + myIsBuildMinMax = theIsCalculateMinMax; + else + myIsBuildMinMax = false; +} + +void +VISU::Result_i +::SetBuildGroups(CORBA::Boolean theIsBuildGroups) +{ + myIsBuildGroups = theIsBuildGroups; +} + +CORBA::Boolean +VISU::Result_i +::IsFieldsDone() +{ + return myIsFieldsDone; +} + +CORBA::Boolean +VISU::Result_i +::IsGroupsDone() +{ + return myIsGroupsDone; +} + +CORBA::Boolean +VISU::Result_i +::IsMinMaxDone() +{ + return myIsMinMaxDone; +} + +//--------------------------------------------------------------- +void +VISU::Result_i +::ToStream(std::ostringstream& theStr) +{ if(MYDEBUG) MESSAGE(GetComment()); Storable::DataToStream(theStr,"myName",myName.c_str()); Storable::DataToStream(theStr,"myInitFileName",myInitFileName.c_str()); Storable::DataToStream(theStr,"myCreationId",myCreationId); } + +//--------------------------------------------------------------- VISU::Storable* -VISU::Result_i::Restore(SALOMEDS::SObject_ptr theSObject, - const string& thePrefix, - const Storable::TRestoringMap& theMap) +VISU::Result_i +::Restore(SALOMEDS::SObject_ptr theSObject, + const string& thePrefix, + const Storable::TRestoringMap& theMap) { SALOMEDS::Study_var aStudy = theSObject->GetStudy(); @@ -659,25 +1363,55 @@ VISU::Result_i::Restore(SALOMEDS::SObject_ptr theSObject, return pResult->Restore(theSObject,theMap,thePrefix); } -string VISU::Result_i::GetRefFatherEntry() { - //return QAD_Application::getDesktop()->getActiveStudy()->getActiveStudyFrame()->entry(); + +//--------------------------------------------------------------- +string +VISU::Result_i +::GetRefFatherEntry() +{ return ""; } -string VISU::Result_i::GetEntry(){ +string +VISU::Result_i +::GetEntry() +{ CORBA::String_var anEntry = mySObject->GetID(); return string(anEntry); } -const SALOMEDS::SObject_var& VISU::Result_i::GetSObject() const { return mySObject;} -const SALOMEDS::Study_var& VISU::Result_i::GetStudyDocument() const { return myStudyDocument;} -const SALOMEDS::SComponent_var& VISU::Result_i::GetSComponent() const { return mySComponent;} -std::string VISU::Result_i::GetEntry(const std::string& theComment) +const SALOMEDS::SObject_var& +VISU::Result_i +::GetSObject() const +{ + return mySObject; +} + +const SALOMEDS::Study_var& +VISU::Result_i +::GetStudyDocument() const +{ + return myStudyDocument; +} + +const SALOMEDS::SComponent_var& +VISU::Result_i +::GetSComponent() const +{ + return mySComponent; +} + +std::string +VISU::Result_i +::GetEntry(const std::string& theComment) { return FindEntryWithComment(myStudyDocument,GetEntry().c_str(),theComment.c_str()); } -VISU::Result_i::~Result_i() + +//--------------------------------------------------------------- +VISU::Result_i +::~Result_i() { MESSAGE("Result_i::~Result_i() - this = "<* Result_i::GetAxisInfo(const string& theMeshName, MESSAGE("No mesh named " << theMeshName ); return components; } - VISU_Convertor::TOutput* vtkMesh = myInput->GetMeshOnEntity (theMeshName, - CELL_ENTITY); - if ( !vtkMesh || vtkMesh->GetNumberOfCells() == 0 ) { + + VISU::PIDMapper anIDMapper = myInput->GetMeshOnEntity(theMeshName, + CELL_ENTITY); + VISU::TVTKOutput* aMesh = anIDMapper->GetVTKOutput(); + + if ( !aMesh || aMesh->GetNumberOfCells() == 0 ) { MESSAGE( "No cells in the mesh: " << theMeshName ); return components; } @@ -734,9 +1471,9 @@ const vector< float >* Result_i::GetAxisInfo(const string& theMeshName, gp_Vec axDirs[ nbAxes ]; float minSize[3] = { FLT_MAX, FLT_MAX, FLT_MAX }; bool axesComputed = false; - for ( vtkIdType iCell = 0; iCell < vtkMesh->GetNumberOfCells(); ++iCell ) + for ( vtkIdType iCell = 0; iCell < aMesh->GetNumberOfCells(); ++iCell ) { - vtkCell* cell = vtkMesh->GetCell( iCell ); + vtkCell* cell = aMesh->GetCell( iCell ); int nbPnt = cell->GetNumberOfPoints(); if ( nbPnt != 8 ) continue; @@ -784,8 +1521,8 @@ const vector< float >* Result_i::GetAxisInfo(const string& theMeshName, // on axis direction; define bnd box set< float > comps[ 3 ]; Bnd_Box box; - vtkPoints * points = vtkMesh->GetPoints(); - vtkIdType iP, nbP = vtkMesh->GetNumberOfPoints(); + vtkPoints * points = aMesh->GetPoints(); + vtkIdType iP, nbP = aMesh->GetNumberOfPoints(); for ( iP = 0; iP < nbP; ++iP ) { float* coo = points->GetPoint( iP ); diff --git a/src/VISU_I/VISU_Result_i.hh b/src/VISU_I/VISU_Result_i.hh index beb1e558..ee903de6 100644 --- a/src/VISU_I/VISU_Result_i.hh +++ b/src/VISU_I/VISU_Result_i.hh @@ -30,13 +30,35 @@ #include "VISUConfig.hh" #include "SALOME_GenericObj_i.hh" -#include +#include +#include +#include #include class VISU_Convertor; -namespace VISU{ +namespace VISU +{ + //---------------------------------------------------------------------------- + class MinMaxCunsomer: public virtual boost::bsignals::trackable + { + protected: + bool myMinMaxIsInitilized; + MinMaxCunsomer(); + + public: + virtual + bool + IsMinMaxInitilized(); + + virtual + void + UpdateMinMax(); + }; + + + //---------------------------------------------------------------------------- class Result_i : public virtual POA_VISU::Result, public virtual RemovableObject_i, public virtual SALOME::GenericObj_i @@ -50,7 +72,8 @@ namespace VISU{ Result_i(SALOMEDS::Study_ptr theStudy, const ESourceId& theSourceId, - const ECreationId& theCreationId); + const ECreationId& theCreationId, + CORBA::Boolean theIsBuildImmediately = true); virtual ~Result_i(); virtual void RemoveFromStudy(); @@ -58,6 +81,27 @@ namespace VISU{ virtual VISU::VISUType GetType() { return VISU::TRESULT;} virtual CORBA::Boolean BuildAll(); + virtual CORBA::Boolean Build(CORBA::Boolean theIsBuildAll, + CORBA::Boolean theIsAtOnce); + virtual CORBA::Boolean IsDone(); + + virtual CORBA::Boolean IsEntitiesDone(); + + virtual void SetBuildFields(CORBA::Boolean theIsBuildFields, + CORBA::Boolean theIsCalculateMinMax); + virtual CORBA::Boolean IsFieldsDone(); + + virtual void SetBuildGroups(CORBA::Boolean theIsBuildGroups); + virtual CORBA::Boolean IsGroupsDone(); + + virtual CORBA::Boolean IsMinMaxDone(); + + virtual + void + MinMaxConnect(MinMaxCunsomer* theMinMaxCunsomer); + + typedef boost::signal0 TUpdateMinMaxSignal; + typedef VISU_Convertor TInput; private: @@ -65,12 +109,29 @@ namespace VISU{ ECreationId myCreationId; TInput *myInput; - CORBA::Boolean myIsDone; std::string myName, myInitFileName; QFileInfo myFileInfo; protected: - virtual Storable* Build(SALOMEDS::SObject_ptr theSObject = SALOMEDS::SObject::_nil()) ; + virtual Storable* Build(SALOMEDS::SObject_ptr theSObject, + CORBA::Boolean theIsAtOnce = true) ; + virtual Storable* BuildAll(SALOMEDS::SObject_ptr theSObject) ; + + _PTR(Study) myStudy; + CORBA::Boolean myIsBuildImmediately; + + CORBA::Boolean myIsEntitiesDone; + CORBA::Boolean myIsFieldsDone; + CORBA::Boolean myIsGroupsDone; + CORBA::Boolean myIsMinMaxDone; + + CORBA::Boolean myIsBuildFields; + CORBA::Boolean myIsBuildGroups; + + CORBA::Boolean myIsBuildMinMax; + TUpdateMinMaxSignal myUpdateMinMaxSignal; + + CORBA::Boolean myIsAllDone; public: virtual int IsPossible(); diff --git a/src/VISU_I/VISU_ScalarMap_i.cc b/src/VISU_I/VISU_ScalarMap_i.cc index ee0d28ed..19bdd8da 100644 --- a/src/VISU_I/VISU_ScalarMap_i.cc +++ b/src/VISU_I/VISU_ScalarMap_i.cc @@ -29,8 +29,9 @@ #include "VISU_Result_i.hh" #include "VISU_ViewManager_i.hh" -#include "VISU_ScalarMapPL.hxx" #include "VISU_ScalarMapAct.h" +#include "VISU_ScalarMapPL.hxx" +#include "VISU_Convertor.hxx" #include "SUIT_ResourceMgr.h" @@ -48,8 +49,14 @@ static int MYDEBUG = 0; static int INCMEMORY = 4; -int VISU::ScalarMap_i::IsPossible(Result_i* theResult, const char* theMeshName, VISU::Entity theEntity, - const char* theFieldName, int theIteration, int isMemoryCheck) + +//============================================================================ +int +VISU::ScalarMap_i +::IsPossible(Result_i* theResult, + const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, int theIteration, int isMemoryCheck) { try{ float aSize = INCMEMORY* @@ -68,166 +75,95 @@ int VISU::ScalarMap_i::IsPossible(Result_i* theResult, const char* theMeshName, return 0; } -int VISU::ScalarMap_i::myNbPresent = 0; -QString VISU::ScalarMap_i::GenerateName() { return VISU::GenerateName("ScalarMap",myNbPresent++);} +//---------------------------------------------------------------------------- +int +VISU::ScalarMap_i +::myNbPresent = 0; + +QString +VISU::ScalarMap_i +::GenerateName() +{ + return VISU::GenerateName("ScalarMap",myNbPresent++); +} + +const string +VISU::ScalarMap_i +::myComment = "SCALARMAP"; + +const char* +VISU::ScalarMap_i +::GetComment() const { + return myComment.c_str(); +} + -const string VISU::ScalarMap_i::myComment = "SCALARMAP"; -const char* VISU::ScalarMap_i::GetComment() const { return myComment.c_str();} +//---------------------------------------------------------------------------- VISU::ScalarMap_i:: ScalarMap_i(Result_i* theResult, bool theAddToStudy) : PrsObject_i(theResult->GetStudyDocument()), Prs3d_i(theResult,theAddToStudy), - myScalarMapPL(NULL) -{ -} - + ColoredPrs3d_i(theResult,theAddToStudy) +{} VISU::ScalarMap_i:: ScalarMap_i(Result_i* theResult, SALOMEDS::SObject_ptr theSObject) : PrsObject_i(theResult->GetStudyDocument()), Prs3d_i(theResult,theSObject), - myScalarMapPL(NULL) -{ -} + ColoredPrs3d_i(theResult,theSObject) +{} +VISU::ScalarMap_i +::~ScalarMap_i() +{} -void VISU::ScalarMap_i::RemoveFromStudy() -{ - VISU::DeleteActors(this); - VISU::RemoveFromStudy(mySObject,false); -} - -void VISU::ScalarMap_i::SameAs(const Prs3d_i* theOrigin) +//---------------------------------------------------------------------------- +void +VISU::ScalarMap_i +::SameAs(const Prs3d_i* theOrigin) { - DoHook(); - VISU::Prs3d_i::SameAs(theOrigin); - - const ScalarMap_i* aConstScalarMap = dynamic_cast(theOrigin); - if (!aConstScalarMap) return; - - ScalarMap_i* aScalarMap = const_cast(aConstScalarMap); - myField = aScalarMap->GetField(); - myMeshName = myField->myMeshName; - myEntity = myField->myEntity; - myIteration = aScalarMap->GetIteration(); - myFieldName = aScalarMap->GetFieldName(); - - SetScalarMode(aScalarMap->GetScalarMode()); - - SetRange(aScalarMap->GetMin(), aScalarMap->GetMax()); - myIsFixedRange = aScalarMap->IsRangeFixed(); - - SetScaling(aScalarMap->GetScaling()); - - SetBarOrientation(aScalarMap->GetBarOrientation()); - SetPosition(aScalarMap->GetPosX(), aScalarMap->GetPosY()); - SetSize(aScalarMap->GetWidth(), aScalarMap->GetHeight()); - SetNbColors(aScalarMap->GetNbColors()); - SetLabels(aScalarMap->GetLabels()); - SetTitle(aScalarMap->GetTitle()); - - SetBoldTitle(aScalarMap->IsBoldTitle()); - SetItalicTitle(aScalarMap->IsItalicTitle()); - SetShadowTitle(aScalarMap->IsShadowTitle()); - SetTitFontType(aScalarMap->GetTitFontType()); - float r,g,b; - aScalarMap->GetTitleColor(&r,&g,&b); - SetTitleColor(r,g,b); - - SetBoldLabel(aScalarMap->IsBoldLabel()); - SetItalicLabel(aScalarMap->IsItalicLabel()); - SetShadowLabel(aScalarMap->IsShadowLabel()); - SetLblFontType(aScalarMap->GetLblFontType()); - aScalarMap->GetLabelColor(&r,&g,&b); - SetLabelColor(r,g,b); - - Build(-1); - Update(); -} + TSuperClass::SameAs(theOrigin); -void VISU::ScalarMap_i::SameAsParams (const ScalarMap_i* theOrigin) -{ - int time = GetIteration(); - SameAs(theOrigin); - myIteration = time; + if(const ScalarMap_i* aPrs3d = dynamic_cast(theOrigin)){ + ScalarMap_i* anOrigin = const_cast(aPrs3d); + + SetRange(anOrigin->GetMin(), anOrigin->GetMax()); + myIsFixedRange = anOrigin->IsRangeFixed(); - //??Build(true); - Build(-1); - Update(); + SetScaling(anOrigin->GetScaling()); + + Update(); + } } +//---------------------------------------------------------------------------- /** * Creates Scalar Map and initialises it from resources */ -VISU::Storable* VISU::ScalarMap_i::Create(const char* theMeshName, VISU::Entity theEntity, - const char* theFieldName, int theIteration) +VISU::Storable* +VISU::ScalarMap_i +::Create(const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + int theIteration) { - DoHook(); + TSuperClass::Create(theMeshName,theEntity,theFieldName,theIteration); SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr(); - int aScalarMode = aResourceMgr->integerValue("VISU", "scalar_bar_mode", 0); - SetScalarMode(aScalarMode); - - // Orientation - int orient = aResourceMgr->integerValue("VISU", "scalar_bar_orientation", 0); - if (orient == 1) - myOrientation = VISU::ScalarMap::HORIZONTAL; - else - myOrientation = VISU::ScalarMap::VERTICAL; - - // Scalar Bar origin - QString propertyName = QString( "scalar_bar_%1_" ).arg( orient == 0 ? "vertical" : "horizontal" ); - - float aXorigin = (myOrientation == VISU::ScalarMap::VERTICAL) ? 0.01 : 0.2; - aXorigin = aResourceMgr->doubleValue("VISU", propertyName + "x", aXorigin); - myPosition[0] = aXorigin; - - float aYorigin = (myOrientation == VISU::ScalarMap::VERTICAL) ? 0.1 : 0.012; - aYorigin = aResourceMgr->doubleValue("VISU", propertyName + "y", aYorigin); - myPosition[1] = aYorigin; - - // Scalar Bar size - myWidth = (myOrientation == VISU::ScalarMap::VERTICAL)? 0.1 : 0.6; - myWidth = aResourceMgr->doubleValue("VISU", propertyName + "width", myWidth); - - myHeight = (myOrientation == VISU::ScalarMap::VERTICAL)? 0.8:0.12; - myHeight = aResourceMgr->doubleValue("VISU", propertyName + "height", myHeight); + // Scalar Range + int aRangeType = aResourceMgr->integerValue("VISU" , "scalar_range_type", 0); + myIsFixedRange = (aRangeType == 1) ? true : false; - // scalar bar default position - bool anIsArrangeBar = aResourceMgr->booleanValue("VISU", "scalar_bars_default_position", 0); - int aPlace = 1; - if (anIsArrangeBar){ - aPlace = aResourceMgr->integerValue("VISU", "scalar_bar_position_num",0); + if(myIsFixedRange){ + float aMin = aResourceMgr->doubleValue("VISU", "scalar_range_min", 0); + float aMax = aResourceMgr->doubleValue("VISU", "scalar_range_max", 0); + SetRange(aMin,aMax); } - if(myOrientation == VISU::ScalarMap::HORIZONTAL){ - myPosition[1] += myHeight*(aPlace-1); - } else { - myPosition[0] += myWidth*(aPlace-1); - } - - - // Nb of Colors - int aNumberOfColors = aResourceMgr->integerValue( "VISU", "scalar_bar_num_colors", 64 ); - SetNbColors(aNumberOfColors); - - // Nb of Labels - myNumberOfLabels = aResourceMgr->integerValue( "VISU", "scalar_bar_num_labels", 5 ); - - // Scalar Range - int rangeType = aResourceMgr->integerValue("VISU" , "scalar_range_type", 0); - myIsFixedRange = (rangeType == 1) ? true : false; - - if (myIsFixedRange) - { - float aMin = aResourceMgr->doubleValue("VISU", "scalar_range_min", 0); - float aMax = aResourceMgr->doubleValue("VISU", "scalar_range_max", 0); - SetRange(aMin,aMax); - } bool isLog = aResourceMgr->booleanValue("VISU", "scalar_bar_logarithmic", false); @@ -236,280 +172,143 @@ VISU::Storable* VISU::ScalarMap_i::Create(const char* theMeshName, VISU::Entity else SetScaling(VISU::LINEAR); - // Fonts properties definition - myIsBoldTitle = myIsItalicTitle = myIsShadowTitle = true; - myTitFontType = VTK_ARIAL; - - if ( aResourceMgr->hasValue( "VISU", "scalar_bar_title_font" ) ) - { - QFont f = aResourceMgr->fontValue( "VISU", "scalar_bar_title_font" ); - - if ( f.family() == "Arial" ) - myTitFontType = VTK_ARIAL; - else if ( f.family() == "Courier" ) - myTitFontType = VTK_COURIER; - else if ( f.family() == "Times" ) - myTitFontType = VTK_TIMES; - - myIsBoldTitle = f.bold(); - myIsItalicTitle = f.italic(); - myIsShadowTitle = f.underline(); - } - - QColor aTextColor = aResourceMgr->colorValue( "VISU", "scalar_bar_title_color", QColor( 255, 255, 255 ) ); - - myTitleColor[0] = aTextColor.red() / 255; - myTitleColor[1] = aTextColor.green() / 255; - myTitleColor[2] = aTextColor.blue() / 255; - - /// - - myIsBoldLabel = myIsItalicLabel = myIsShadowLabel = true; - myLblFontType = VTK_ARIAL; - - if ( aResourceMgr->hasValue( "VISU", "scalar_bar_label_font" ) ) - { - QFont f = aResourceMgr->fontValue( "VISU", "scalar_bar_label_font" ); - - if ( f.family() == "Arial" ) - myLblFontType = VTK_ARIAL; - else if ( f.family() == "Courier" ) - myLblFontType = VTK_COURIER; - else if ( f.family() == "Times" ) - myLblFontType = VTK_TIMES; - - myIsBoldLabel = f.bold(); - myIsItalicLabel = f.italic(); - myIsShadowLabel = f.underline(); - } - - QColor aLabelColor = aResourceMgr->colorValue( "VISU", "scalar_bar_label_color", QColor( 255, 255, 255 ) ); - - myLabelColor[0] = aLabelColor.red() / 255; - myLabelColor[1] = aLabelColor.green() / 255; - myLabelColor[2] = aLabelColor.blue() / 255; - - - myMeshName = theMeshName; - myEntity = (VISU::TEntity)theEntity; - myFieldName =theFieldName; - myIteration = theIteration; - - return Build(false); + return this; } - -VISU::Storable* VISU::ScalarMap_i::Restore(const Storable::TRestoringMap& theMap) +VISU::Storable* +VISU::ScalarMap_i +::Restore(const Storable::TRestoringMap& theMap) { - DoHook(); - myMeshName = VISU::Storable::FindValue(theMap,"myMeshName").latin1(); - myEntity = (VISU::TEntity)VISU::Storable::FindValue(theMap,"myEntity").toInt(); - myFieldName = VISU::Storable::FindValue(theMap,"myFieldName").latin1(); - myIteration = VISU::Storable::FindValue(theMap,"myIteration").toInt(); + TSuperClass::Restore(theMap); - SetScalarMode(VISU::Storable::FindValue(theMap,"myScalarMode").toInt()); SetScaling(VISU::Scaling(VISU::Storable::FindValue(theMap,"myScaling").toInt())); + float aMin = VISU::Storable::FindValue(theMap,"myScalarRange[0]").toDouble(); float aMax = VISU::Storable::FindValue(theMap,"myScalarRange[1]").toDouble(); SetRange(aMin,aMax); + myIsFixedRange = VISU::Storable::FindValue(theMap,"myIsFixedRange").toInt(); - myTitle = VISU::Storable::FindValue(theMap,"myTitle").latin1(); - myOrientation = (VISU::ScalarMap::Orientation)VISU::Storable::FindValue(theMap,"myOrientation").toInt(); - SetNbColors(VISU::Storable::FindValue(theMap,"myNumberOfColors").toInt()); - myNumberOfLabels = VISU::Storable::FindValue(theMap,"myNumberOfLabels").toInt(); - myPosition[0] = VISU::Storable::FindValue(theMap,"myPosition[0]").toDouble(); - myPosition[1] = VISU::Storable::FindValue(theMap,"myPosition[1]").toDouble(); - myWidth = VISU::Storable::FindValue(theMap,"myWidth").toDouble(); - myHeight = VISU::Storable::FindValue(theMap,"myHeight").toDouble(); - - myTitFontType = VISU::Storable::FindValue(theMap,"myTitFontType").toInt(); - myIsBoldTitle = VISU::Storable::FindValue(theMap,"myIsBoldTitle").toInt(); - myIsItalicTitle = VISU::Storable::FindValue(theMap,"myIsItalicTitle").toInt(); - myIsShadowTitle = VISU::Storable::FindValue(theMap,"myIsShadowTitle").toInt(); - myTitleColor[0] = VISU::Storable::FindValue(theMap,"myTitleColor[0]").toFloat(); - myTitleColor[1] = VISU::Storable::FindValue(theMap,"myTitleColor[1]").toFloat(); - myTitleColor[2] = VISU::Storable::FindValue(theMap,"myTitleColor[2]").toFloat(); - - myLblFontType = VISU::Storable::FindValue(theMap,"myLblFontType").toInt(); - myIsBoldLabel = VISU::Storable::FindValue(theMap,"myIsBoldLabel").toInt(); - myIsItalicLabel = VISU::Storable::FindValue(theMap,"myIsItalicLabel").toInt(); - myIsShadowLabel = VISU::Storable::FindValue(theMap,"myIsShadowLabel").toInt(); - myLabelColor[0] = VISU::Storable::FindValue(theMap,"myLabelColor[0]").toFloat(); - myLabelColor[1] = VISU::Storable::FindValue(theMap,"myLabelColor[1]").toFloat(); - myLabelColor[2] = VISU::Storable::FindValue(theMap,"myLabelColor[2]").toFloat(); - - Prs3d_i::Restore(theMap); - myAddToStudy = false; //SRN Added 21/06/2003 SAL2983: to avoid addition of the new ScalarMap to study. - return Build(true); + return this; } +void +VISU::ScalarMap_i +::ToStream(std::ostringstream& theStr) +{ + TSuperClass::ToStream(theStr); -void VISU::ScalarMap_i::ToStream(std::ostringstream& theStr){ - Prs3d_i::ToStream(theStr); - - Storable::DataToStream( theStr, "myMeshName", myMeshName.c_str() ); - Storable::DataToStream( theStr, "myEntity", myEntity ); - Storable::DataToStream( theStr, "myFieldName", myFieldName.c_str() ); - Storable::DataToStream( theStr, "myIteration", myIteration ); - - Storable::DataToStream( theStr, "myScalarMode", int(GetScalarMode()) ); Storable::DataToStream( theStr, "myScalarRange[0]", GetMin() ); Storable::DataToStream( theStr, "myScalarRange[1]", GetMax() ); Storable::DataToStream( theStr, "myIsFixedRange", myIsFixedRange ); Storable::DataToStream( theStr, "myScaling", GetScaling() ); - - Storable::DataToStream( theStr, "myTitle", myTitle.c_str() ); - Storable::DataToStream( theStr, "myOrientation", myOrientation ); - Storable::DataToStream( theStr, "myNumberOfColors", int(GetNbColors()) ); - Storable::DataToStream( theStr, "myNumberOfLabels", myNumberOfLabels ); - Storable::DataToStream( theStr, "myPosition[0]", myPosition[0] ); - Storable::DataToStream( theStr, "myPosition[1]", myPosition[1] ); - Storable::DataToStream( theStr, "myWidth", myWidth ); - Storable::DataToStream( theStr, "myHeight", myHeight ); - - Storable::DataToStream( theStr, "myTitFontType", myTitFontType ); - Storable::DataToStream( theStr, "myIsBoldTitle", myIsBoldTitle ); - Storable::DataToStream( theStr, "myIsItalicTitle", myIsItalicTitle ); - Storable::DataToStream( theStr, "myIsShadowTitle", myIsShadowTitle ); - Storable::DataToStream( theStr, "myTitleColor[0]", myTitleColor[0] ); - Storable::DataToStream( theStr, "myTitleColor[1]", myTitleColor[1] ); - Storable::DataToStream( theStr, "myTitleColor[2]", myTitleColor[2] ); - - Storable::DataToStream( theStr, "myLblFontType", myLblFontType ); - Storable::DataToStream( theStr, "myIsBoldLabel", myIsBoldLabel ); - Storable::DataToStream( theStr, "myIsItalicLabel", myIsItalicLabel ); - Storable::DataToStream( theStr, "myIsShadowLabel", myIsShadowLabel ); - Storable::DataToStream( theStr, "myLabelColor[0]", myLabelColor[0] ); - Storable::DataToStream( theStr, "myLabelColor[1]", myLabelColor[1] ); - Storable::DataToStream( theStr, "myLabelColor[2]", myLabelColor[2] ); } -CORBA::Long VISU::ScalarMap_i::GetScalarMode(){ - return myScalarMapPL->GetScalarMode(); -} -void VISU::ScalarMap_i::SetScalarMode(CORBA::Long theScalarMode) { - myScalarMapPL->SetScalarMode(theScalarMode); +//---------------------------------------------------------------------------- +void +VISU::ScalarMap_i +::SetBarOrientation(VISU::ScalarMap::Orientation theOrientation) +{ + TSuperClass::SetBarOrientation(theOrientation); } +VISU::ScalarMap::Orientation +VISU::ScalarMap_i +::GetBarOrientation() +{ + return TSuperClass::GetBarOrientation(); +} -VISU::Scaling VISU::ScalarMap_i::GetScaling(){ +VISU::Scaling +VISU::ScalarMap_i +::GetScaling() +{ return VISU::Scaling(myScalarMapPL->GetScaling()); } -void VISU::ScalarMap_i::SetScaling(VISU::Scaling theScaling){ + +void +VISU::ScalarMap_i +::SetScaling(VISU::Scaling theScaling) +{ myScalarMapPL->SetScaling(theScaling); } - -void VISU::ScalarMap_i::SetRange(CORBA::Double theMin, CORBA::Double theMax){ - if(theMin > theMax) return; +void +VISU::ScalarMap_i +::SetRange(CORBA::Double theMin, CORBA::Double theMax) +{ + if(theMin > theMax) + return; float aScalarRange[2] = {theMin, theMax}; myScalarMapPL->SetScalarRange(aScalarRange); myIsFixedRange = true; } -CORBA::Double VISU::ScalarMap_i::GetMin(){ - return myScalarMapPL->GetScalarRange()[0]; -} - -CORBA::Double VISU::ScalarMap_i::GetMax(){ - return myScalarMapPL->GetScalarRange()[1]; -} - -void VISU::ScalarMap_i::SetNbColors(CORBA::Long theNbColors){ - myScalarMapPL->SetNbColors(theNbColors); -} - -CORBA::Long VISU::ScalarMap_i::GetNbColors(){ - return myScalarMapPL->GetNbColors(); -} +//---------------------------------------------------------------------------- +void +VISU::ScalarMap_i +::DoSetInput(Result_i* theResult) +{ + VISU::Result_i::TInput* anInput = theResult->GetInput(); + if(!anInput) + throw std::runtime_error("Mesh_i::Build - theResult->GetInput() == NULL !!!"); + myField = anInput->GetField(myMeshName,myEntity,myFieldName); + if(!myField) + throw std::runtime_error("There is no Field with the parameters !!!"); -VISU::ScalarMap_i::~ScalarMap_i(){} + VISU::PIDMapper anIDMapper = + anInput->GetTimeStampOnMesh(myMeshName,myEntity,myFieldName,myIteration); + if(!anIDMapper) + throw std::runtime_error("There is no TimeStamp with the parameters !!!"); -VISU::Storable* VISU::ScalarMap_i::Build(int theRestoring){ - if(MYDEBUG) - MESSAGE("ScalarMap_i::Build - "<Init(); - if(!myIsFixedRange) myScalarMapPL->SetSourceRange(); - const VISU::TValField& aValField = myField->myValField; - const VISU::PValForTime aValForTime = aValField.find(myIteration)->second; - aComment.sprintf("%s %s",myFieldName.c_str(),VISU_Convertor::GenerateName(aValForTime->myTime).c_str()); - if (theRestoring == 0) myTitle = aComment.simplifyWhiteSpace().latin1(); - } - if(myAddToStudy){ - myName = GenerateName().latin1(); - aComment.sprintf("myComment=TIMESTAMP;myType=%d;myMeshName=%s;myEntityId=%d;myFieldName=%s;myTimeStampId=%d;myNumComponent=%d", - VISU::TTIMESTAMP,myMeshName.c_str(),myEntity,myFieldName.c_str(),myIteration,myField->myNbComp); - string aResultEntry = myResult->GetEntry(); - string aRefFatherEntry = myResult->GetRefFatherEntry(); - string anEntry = myResult->GetEntry(aComment.latin1()); - if(anEntry == "") throw std::runtime_error("There is no Entry for binding the presentation !!!"); - aComment.sprintf("myComment=%s;myMeshName=%s;myEntityId=%d;myFieldName=%s;myTimeStampId=%d;myNumComponent=%d", - GetComment(),myMeshName.c_str(),myEntity,myFieldName.c_str(),myIteration,myField->myNbComp); - CORBA::String_var anIOR = GetID(); - CreateAttributes(myStudy,anEntry.c_str(),aRefFatherEntry.c_str(),anIOR,myName.c_str(),"",aComment.latin1(),true); - mySObject = myStudy->FindObjectIOR(anIOR); - } - }catch(std::exception& exc){ - INFOS("Follow exception was occured :\n"<CommitCommand(); - return this; + myScalarMapPL->SetIDMapper(anIDMapper); + myScalarMapPL->Init(); + myScalarMapPL->Build(); } - -void VISU::ScalarMap_i::DoSetInput(Result_i* theResult){ - if(theResult->GetInput() == NULL) - throw std::runtime_error("Mesh_i::Build - theResult->GetInput() == NULL !!!"); - myField = theResult->GetInput()->GetField(myMeshName,myEntity,myFieldName); - if(myField == NULL) - throw std::runtime_error("There is no Field with the parameters !!!"); - VISU_Convertor::TOutput *anOutput = - theResult->GetInput()->GetTimeStampOnMesh(myMeshName,myEntity,myFieldName,myIteration); - if(anOutput == NULL) - throw std::runtime_error("There is no TimeStamp with the parameters !!!"); - myScalarMapPL->SetInput(anOutput); - myScalarMapPL->Build(); +void +VISU::ScalarMap_i +::Update() +{ + TSuperClass::Update(); } -void VISU::ScalarMap_i::DoHook(){ - if(MYDEBUG) MESSAGE("ScalarMap_i::DoHook() - "<GetMapper()->SetScalarVisibility(1); - } - myScalarMapPL = dynamic_cast(myPipeLine); +//---------------------------------------------------------------------------- +void +VISU::ScalarMap_i +::SetMapScale(double theMapScale) +{ + myScalarMapPL->SetMapScale(theMapScale); } -void VISU::ScalarMap_i::Update() { - VISU::Prs3d_i::Update(); +bool +VISU::ScalarMap_i +::IsRangeFixed() +{ + return myIsFixedRange; } -void VISU::ScalarMap_i::SetMapScale(double theMapScale){ - myScalarMapPL->SetMapScale(theMapScale); +void +VISU::ScalarMap_i +::SetSourceRange() +{ + myScalarMapPL->SetSourceRange(); + myIsFixedRange = false; } -VISU_Actor* VISU::ScalarMap_i::CreateActor(const Handle(SALOME_InteractiveObject)& theIO) +//---------------------------------------------------------------------------- +VISU_Actor* +VISU::ScalarMap_i +::CreateActor(const Handle(SALOME_InteractiveObject)& theIO) { VISU_ScalarMapAct* anActor = VISU_ScalarMapAct::New(); try{ - VISU::Prs3d_i::CreateActor(anActor,theIO); + TSuperClass::CreateActor(anActor,theIO); anActor->SetBarVisibility(true); anActor->SetRepresentation(2); SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr(); @@ -523,9 +322,11 @@ VISU_Actor* VISU::ScalarMap_i::CreateActor(const Handle(SALOME_InteractiveObject return anActor; } -void VISU::ScalarMap_i::UpdateActor(VISU_Actor* theActor) { +void +VISU::ScalarMap_i +::UpdateActor(VISU_Actor* theActor) +{ if(VISU_ScalarMapAct* anActor = dynamic_cast(theActor)){ - VISU::Prs3d_i::UpdateActor(theActor); VISU_ScalarBarActor *aScalarBar = anActor->GetScalarBar(); aScalarBar->SetLookupTable(myScalarMapPL->GetBarTable()); aScalarBar->SetTitle(myTitle.c_str()); @@ -552,10 +353,5 @@ void VISU::ScalarMap_i::UpdateActor(VISU_Actor* theActor) { aScalarBar->Modified(); } -} - - -void VISU::ScalarMap_i::SetSourceRange(){ - myScalarMapPL->SetSourceRange(); - myIsFixedRange = false; + TSuperClass::UpdateActor(theActor); } diff --git a/src/VISU_I/VISU_ScalarMap_i.hh b/src/VISU_I/VISU_ScalarMap_i.hh index a1b3f0a5..8506e463 100644 --- a/src/VISU_I/VISU_ScalarMap_i.hh +++ b/src/VISU_I/VISU_ScalarMap_i.hh @@ -27,178 +27,134 @@ #ifndef VISU_ScalarMap_i_HeaderFile #define VISU_ScalarMap_i_HeaderFile -#include "VISU_Prs3d_i.hh" +#include "VISU_ColoredPrs3d_i.hh" -class VISU_ScalarMapPL; -namespace VISU{ +namespace VISU +{ + //============================================================================ class ScalarMap_i : public virtual POA_VISU::ScalarMap, - public virtual Prs3d_i + public virtual ColoredPrs3d_i { static int myNbPresent; ScalarMap_i(); ScalarMap_i(const ScalarMap_i&); public: + //---------------------------------------------------------------------------- + typedef ColoredPrs3d_i TSuperClass; + explicit ScalarMap_i(Result_i* theResult, bool theAddToStudy); explicit ScalarMap_i(Result_i* theResult, SALOMEDS::SObject_ptr theSObject); - virtual void SameAs(const Prs3d_i* theOrigin); - virtual ~ScalarMap_i(); - virtual void RemoveFromStudy(); - - virtual VISU::VISUType GetType() { return VISU::TSCALARMAP;}; - - virtual CORBA::Long GetScalarMode(); - virtual void SetScalarMode(CORBA::Long theScalarMode); - - virtual VISU::Scaling GetScaling(); - virtual void SetScaling(VISU::Scaling theScaling); - - virtual void SetRange(CORBA::Double theMin, CORBA::Double theMax); - virtual CORBA::Double GetMin(); - virtual CORBA::Double GetMax(); - - virtual void SetNbColors(CORBA::Long theNbColors); - virtual CORBA::Long GetNbColors(); - - virtual void SetBarOrientation(VISU::ScalarMap::Orientation theOrientation){ - myOrientation = theOrientation; + virtual + ~ScalarMap_i(); + + virtual + VISU::VISUType + GetType() + { + return VISU::TSCALARMAP; } - virtual VISU::ScalarMap::Orientation GetBarOrientation() { return myOrientation;} - - virtual void SetPosition(CORBA::Double X, CORBA::Double Y) { myPosition[0] = X; myPosition[1] = Y;} - virtual CORBA::Double GetPosX() { return myPosition[0];} - virtual CORBA::Double GetPosY() { return myPosition[1];} - - virtual void SetSize(CORBA::Double theWidth, CORBA::Double theHeight) { - myWidth = theWidth; myHeight = theHeight; - } - virtual CORBA::Double GetWidth() { return myWidth;} - virtual CORBA::Double GetHeight() { return myHeight;} - - virtual void SetLabels(CORBA::Long theNbLabels) { myNumberOfLabels = theNbLabels;} - virtual CORBA::Long GetLabels() { return myNumberOfLabels;} - virtual void SetTitle(const char* theName) { myTitle = theName;} - virtual char* GetTitle() { return CORBA::string_dup(myTitle.c_str());} + virtual + VISU::Scaling + GetScaling(); - virtual bool IsBoldTitle() { return myIsBoldTitle;} - virtual void SetBoldTitle(bool isBold) { myIsBoldTitle = isBold;} + virtual + void + SetScaling(VISU::Scaling theScaling); - virtual bool IsItalicTitle() { return myIsItalicTitle;} - virtual void SetItalicTitle(bool isItalic) { myIsItalicTitle = isItalic;} + virtual + void + SetRange(CORBA::Double theMin, CORBA::Double theMax); - virtual bool IsShadowTitle() { return myIsShadowTitle;} - virtual void SetShadowTitle(bool isShadow) { myIsShadowTitle = isShadow;} + // To provide backward compatibility + virtual + void + SetBarOrientation(VISU::ScalarMap::Orientation theOrientation); - virtual int GetTitFontType() { return myTitFontType;} - virtual void SetTitFontType(int theType) { myTitFontType = theType;} - - virtual void GetTitleColor(float* theR, float* theG, float* theB) - {*theR = myTitleColor[0]; *theG = myTitleColor[1]; *theB = myTitleColor[2];} - virtual void SetTitleColor(float theR, float theG, float theB) - {myTitleColor[0] = theR; myTitleColor[1] = theG; myTitleColor[2] = theB; } - - ///// - virtual bool IsBoldLabel() { return myIsBoldLabel;} - virtual void SetBoldLabel(bool isBold) { myIsBoldLabel = isBold;} - - virtual bool IsItalicLabel() { return myIsItalicLabel;} - virtual void SetItalicLabel(bool isItalic) { myIsItalicLabel = isItalic;} - - virtual bool IsShadowLabel() { return myIsShadowLabel;} - virtual void SetShadowLabel(bool isShadow) {myIsShadowLabel = isShadow;} - - virtual int GetLblFontType() { return myLblFontType;} - virtual void SetLblFontType(int theType) { myLblFontType = theType;} - - virtual void GetLabelColor(float* theR, float* theG, float* theB) - {*theR = myLabelColor[0]; *theG = myLabelColor[1]; *theB = myLabelColor[2];} - virtual void SetLabelColor(float theR, float theG, float theB) - {myLabelColor[0] = theR; myLabelColor[1] = theG; myLabelColor[2] = theB; } + virtual + VISU::ScalarMap::Orientation + GetBarOrientation(); typedef VISU::ScalarMap TInterface; - VISU_ScalarMapPL* GetScalarMapPL(){ return myScalarMapPL;} - - /*! - * \brief Works like SameAs() method, but keep myIteration value unchanged. - * - * Is used in VISU_TimeAnimation class implementation. - */ - void SameAsParams (const ScalarMap_i* theOrigin); protected: - Storable* Build(int theRestoring); - virtual void DoSetInput(Result_i* theResult); - virtual void DoHook(); - - VISU_ScalarMapPL* myScalarMapPL; - PField myField; - - // std::string myMeshName; move it to Prs3d_i - TEntity myEntity; - std::string myFieldName; - int myIteration; - - bool myIsFixedRange; - - std::string myTitle; - int myNumberOfLabels; - float myPosition[2], myWidth, myHeight; - VISU::ScalarMap::Orientation myOrientation; - - //Font management - bool myIsBoldTitle; - bool myIsItalicTitle; - bool myIsShadowTitle; - int myTitFontType; - float myTitleColor[3]; - - bool myIsBoldLabel; - bool myIsItalicLabel; - bool myIsShadowLabel; - int myLblFontType; - float myLabelColor[3]; + virtual + void + DoSetInput(Result_i* theResult); public: - static int IsPossible(Result_i* theResult, const char* theMeshName, VISU::Entity theEntity, - const char* theFieldName, int theIteration, int isMemoryCheck = true); - virtual Storable* Create(const char* theMeshName, VISU::Entity theEntity, - const char* theFieldName, int theIteration); + static + int + IsPossible(Result_i* theResult, + const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + int theIteration, + int isMemoryCheck = true); + virtual + Storable* + Create(const char* theMeshName, + VISU::Entity theEntity, + const char* theFieldName, + int theIteration); + + virtual + void + ToStream(std::ostringstream& theStr); - const std::string& GetMeshName() const { return myMeshName;} - VISU::Entity GetEntity() const { return VISU::Entity(myEntity);} - const string& GetFieldName() const { return myFieldName;} - //int GetIteration() const { return myIteration;} + static const std::string myComment; - virtual void ToStream(std::ostringstream& theStr); + virtual + const char* + GetComment() const; - static const std::string myComment; - virtual const char* GetComment() const; - virtual QString GenerateName(); + virtual + QString + GenerateName(); + + virtual + Storable* + Restore(const Storable::TRestoringMap& theMap); - virtual Storable* Restore(const Storable::TRestoringMap& theMap); + static + Storable* + Restore(SALOMEDS::SObject_ptr theSObject, + const std::string& thePrefix, + const Storable::TRestoringMap& theMap); - static Storable* Restore(SALOMEDS::SObject_ptr theSObject, - const std::string& thePrefix, const Storable::TRestoringMap& theMap); + virtual + void + Update() ; - virtual void Update() ; - virtual void SetMapScale(double theMapScale = 1.0); + virtual + void + SetMapScale(double theMapScale = 1.0); - const VISU::PField GetField() const { return myField;} + virtual + bool + IsRangeFixed(); - virtual bool IsRangeFixed() { return myIsFixedRange; } - virtual void SetSourceRange(); + virtual + void + SetSourceRange(); - virtual int GetIteration() { return myIteration; } + virtual + void + SameAs(const Prs3d_i* theOrigin); - virtual VISU_Actor* CreateActor(const Handle(SALOME_InteractiveObject)& theIO = NULL); + virtual + VISU_Actor* + CreateActor(const Handle(SALOME_InteractiveObject)& theIO = NULL); - virtual void UpdateActor(VISU_Actor* theActor) ; + virtual + void + UpdateActor(VISU_Actor* theActor); }; } diff --git a/src/VISU_I/VISU_StreamLines_i.cc b/src/VISU_I/VISU_StreamLines_i.cc index 418d20cb..fbeeb75f 100644 --- a/src/VISU_I/VISU_StreamLines_i.cc +++ b/src/VISU_I/VISU_StreamLines_i.cc @@ -24,10 +24,12 @@ // Author : Alexey PETROV // Module : VISU -#include "VISU_StreamLinesPL.hxx" -#include "VISU_Result_i.hh" #include "VISU_StreamLines_i.hh" +#include "VISU_Result_i.hh" + #include "VISU_Actor.h" +#include "VISU_StreamLinesPL.hxx" +#include "VISU_Convertor.hxx" #include #include @@ -46,10 +48,13 @@ int VISU::StreamLines_i::IsPossible(Result_i* theResult, const char* theMeshName const char* theFieldName, int theIteration, int isMemoryCheck) { try{ - if(!VISU::ScalarMap_i::IsPossible(theResult,theMeshName,theEntity,theFieldName,theIteration,false)) return 0; - VISU_Convertor::TOutput *anOutput = + if(!VISU::ScalarMap_i::IsPossible(theResult,theMeshName,theEntity,theFieldName,theIteration,false)) + return 0; + + VISU::PIDMapper anIDMapper = theResult->GetInput()->GetTimeStampOnMesh(theMeshName,VISU::TEntity(theEntity),theFieldName,theIteration); - bool aResult = VISU_StreamLinesPL::IsPossible(anOutput); + VISU::TVTKOutput* aDataSet = anIDMapper->GetVTKOutput(); + bool aResult = VISU_StreamLinesPL::IsPossible(aDataSet); MESSAGE("StreamLines_i::IsPossible - aResult = "<GetStudyDocument()), Prs3d_i(theResult,theAddToStudy), + ColoredPrs3d_i(theResult,theAddToStudy), ScalarMap_i(theResult,theAddToStudy), DeformedShape_i(theResult,theAddToStudy), myStreamLinesPL(NULL), @@ -87,6 +93,7 @@ StreamLines_i(Result_i* theResult, SALOMEDS::SObject_ptr theSObject) : PrsObject_i(theResult->GetStudyDocument()), Prs3d_i(theResult,theSObject), + ColoredPrs3d_i(theResult,theSObject), ScalarMap_i(theResult,theSObject), DeformedShape_i(theResult,theSObject), myStreamLinesPL(NULL), @@ -97,11 +104,11 @@ StreamLines_i(Result_i* theResult, void VISU::StreamLines_i::SameAs(const Prs3d_i* theOrigin) { - VISU::DeformedShape_i::SameAs(theOrigin); + TSuperClass::SameAs(theOrigin); - if (const StreamLines_i* aConstStreamLines = dynamic_cast(theOrigin)) { - StreamLines_i* aStreamLines = const_cast(aConstStreamLines); - SetSource(aStreamLines->GetSource()); + if(const StreamLines_i* aPrs3d = dynamic_cast(theOrigin)) { + StreamLines_i* anOrigin = const_cast(aPrs3d); + SetSource(anOrigin->GetSource()); } } @@ -115,8 +122,7 @@ VISU::Storable* VISU::StreamLines_i::Create(const char* theMeshName, VISU::Entit VISU::Storable* VISU::StreamLines_i::Restore(const Storable::TRestoringMap& theMap) { - DoHook(); - VISU::Storable* aStorable = DeformedShape_i::Restore(theMap); + TSuperClass::Restore(theMap); double anIntegrationStep = VISU::Storable::FindValue(theMap,"myIntegrationStep").toDouble(); double aPropagationTime = VISU::Storable::FindValue(theMap,"myPropagationTime").toDouble(); @@ -131,7 +137,7 @@ VISU::Storable* VISU::StreamLines_i::Restore(const Storable::TRestoringMap& theM VISU::StreamLines::Direction(aDirection)); mySourceEntry = VISU::Storable::FindValue(theMap,"mySourceEntry").latin1(); - return aStorable; + return this; } @@ -259,9 +265,15 @@ void VISU::StreamLines_i::Update() { } -VISU_Actor* VISU::StreamLines_i::CreateActor(const Handle(SALOME_InteractiveObject)& theIO) +VISU_Actor* +VISU::StreamLines_i +::CreateActor(const Handle(SALOME_InteractiveObject)& theIO) { - return VISU::DeformedShape_i::CreateActor(theIO); + if(VISU_Actor* anActor = VISU::DeformedShape_i::CreateActor(theIO)){ + anActor->SetVTKMapping(true); + return anActor; + } + return NULL; } diff --git a/src/VISU_I/VISU_StreamLines_i.hh b/src/VISU_I/VISU_StreamLines_i.hh index a5a1a253..2c5c4fef 100644 --- a/src/VISU_I/VISU_StreamLines_i.hh +++ b/src/VISU_I/VISU_StreamLines_i.hh @@ -93,7 +93,9 @@ namespace VISU{ virtual void Update(); - virtual VISU_Actor* CreateActor(const Handle(SALOME_InteractiveObject)& theIO = NULL); + virtual + VISU_Actor* + CreateActor(const Handle(SALOME_InteractiveObject)& theIO = NULL); virtual void UpdateActor(VISU_Actor* theActor); diff --git a/src/VISU_I/VISU_TimeAnimation.cxx b/src/VISU_I/VISU_TimeAnimation.cxx index c16e1f87..ff511dba 100644 --- a/src/VISU_I/VISU_TimeAnimation.cxx +++ b/src/VISU_I/VISU_TimeAnimation.cxx @@ -21,6 +21,7 @@ #include "VISU_CutLines_i.hh" #include "VISU_Vectors_i.hh" #include "VISU_StreamLines_i.hh" +#include "VISU_GaussPoints_i.hh" #include "VISU_ViewManager_i.hh" #include "VISU_View_i.hh" @@ -48,7 +49,7 @@ using namespace std; -//************************************************************************ +//------------------------------------------------------------------------ VISU_TimeAnimation::VISU_TimeAnimation (_PTR(Study) theStudy, VISU::View3D_ptr theView3D) { @@ -77,16 +78,21 @@ VISU_TimeAnimation::VISU_TimeAnimation (_PTR(Study) theStudy, } -//************************************************************************ +//------------------------------------------------------------------------ VISU_TimeAnimation::~VISU_TimeAnimation() { + if (!myView) { + MESSAGE("Viewer is not defined for animation"); + return; + } + for (int i = 0; i < getNbFields(); i++) { clearData(myFieldsLst[i]); } } -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::addField (_PTR(SObject) theField) { FieldData aNewData; @@ -109,7 +115,7 @@ void VISU_TimeAnimation::addField (_PTR(SObject) theField) } } -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::addField (SALOMEDS::SObject_ptr theField) { SALOMEDS::SObject_var theFieldDup = SALOMEDS::SObject::_duplicate(theField); @@ -118,18 +124,18 @@ void VISU_TimeAnimation::addField (SALOMEDS::SObject_ptr theField) } -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::clearData(FieldData& theData) { - if( !myView ) + if (!myView) { + MESSAGE("Viewer is not defined for animation"); return; - + } theData.myTiming.clear(); vtkRenderer* aRen = myView->getRenderer(); if (!theData.myActors.empty()) { for (int i = 0, iEnd = theData.myActors.size(); i < iEnd; i++) { if (theData.myActors[i] != 0) { theData.myActors[i]->RemoveFromRender(aRen); - theData.myActors[i]->Delete(); } } theData.myActors.clear(); @@ -146,146 +152,122 @@ void VISU_TimeAnimation::clearData(FieldData& theData) { } -//************************************************************************ +namespace +{ + //------------------------------------------------------------------------ + template + void + GeneratePresentations(_PTR(Study) theStudy, + FieldData& theData, + VISU::Result_i* theResult, + bool theIsRangeDefined, + CORBA::Double theMinVal, + CORBA::Double theMaxVal) + { + double aMin = VTK_LARGE_FLOAT, aMax = -VTK_LARGE_FLOAT; + _PTR(ChildIterator) anIter = theStudy->NewChildIterator(theData.myField); + anIter->Next(); // First is reference on support + + long aFrameId = 0; + for(; anIter->More(); anIter->Next()){ + if (aFrameId == theData.myNbTimes) { + MESSAGE("There are extra timestamps in field"); + return; + } + _PTR(SObject) aTimeStamp = anIter->Value(); + if(!aTimeStamp) + continue; + + theData.myTiming[aFrameId] = VISU_TimeAnimation::getTimeValue(aTimeStamp); + if (theIsRangeDefined) { + if (theData.myTiming[aFrameId] < theMinVal) + continue; + if (theData.myTiming[aFrameId] > theMaxVal) + break; + } + + VISU::Storable::TRestoringMap aTimeMap = VISU_TimeAnimation::getMapOfValue(aTimeStamp); + QString aMeshName = VISU::Storable::FindValue(aTimeMap,"myMeshName"); + VISU::Entity anEntity = (VISU::Entity) VISU::Storable::FindValue(aTimeMap,"myEntityId").toInt(); + QString aFieldName = VISU::Storable::FindValue(aTimeMap,"myFieldName"); + int aTimeStampId = VISU::Storable::FindValue(aTimeMap,"myTimeStampId").toInt(); + + TPrs3d* aPresent = new TPrs3d(theResult, false); + aPresent->Create(aMeshName.latin1(), anEntity, + aFieldName.latin1(), aTimeStampId); + theData.myPrs[aFrameId++] = aPresent; + + aMin = std::min(aPresent->GetMin(),aMin); + aMax = std::min(aPresent->GetMax(),aMax); + } + theData.myNbFrames = aFrameId; + + if (theData.myPrsType != VISU::TGAUSSPOINTS){ + int aRangeType = VISU::GetResourceMgr()->integerValue("VISU" , "scalar_range_type", 0); + if( aRangeType != 1 ){ + for(long aFrameId = 0; aFrameId < theData.myNbFrames; aFrameId++) { + if (VISU::ScalarMap_i* aPrs = dynamic_cast(theData.myPrs[aFrameId])){ + aPrs->SetRange(aMin, aMax); + aPrs->SetOffset(theData.myOffset); + } + } + } + if (theData.myPrsType == VISU::TISOSURFACE) + for (long aFrameId = 0; aFrameId < theData.myNbFrames; aFrameId++) + if (VISU::IsoSurfaces_i* aPrs = dynamic_cast(theData.myPrs[aFrameId])) + aPrs->SetSubRange(aMin, aMax); + } + } +} + void VISU_TimeAnimation::generatePresentations(CORBA::Long theFieldNum) { FieldData& aData = myFieldsLst[theFieldNum]; // Delete previous presentations clearData(aData); - VISU::Result_i* pResult = createPresent(aData.myField); + VISU::Result_i* aResult = createPresent(aData.myField); VISU::Storable::TRestoringMap aMap = getMapOfValue(aData.myField); aData.myNbFrames = aData.myNbTimes; - //VISU::Storable::FindValue(aMap,"myNbTimeStamps").toLong(); + //VISU::Storable::FindValue(aMap,"myNbTimeStamps").toLong(); aData.myPrs.resize(aData.myNbTimes,NULL); aData.myTiming.resize(aData.myNbTimes); - _PTR(ChildIterator) anIter = myStudy->NewChildIterator(aData.myField); - _PTR(SObject) aTimeStamp; - anIter->Next(); // First is reference on support - long i = 0; - double aMin = VTK_LARGE_FLOAT, aMax = -VTK_LARGE_FLOAT; - for (; anIter->More(); anIter->Next()) { - if (i == aData.myNbTimes) { - MESSAGE("There are extra timestamps in field"); - return; - } - aTimeStamp = anIter->Value(); - if (!aTimeStamp) continue; - - aData.myTiming[i] = getTimeValue(aTimeStamp); - if (isRangeDefined()) { - if (aData.myTiming[i] < myMinVal) continue; - if (aData.myTiming[i] > myMaxVal) break; - } - - VISU::Storable::TRestoringMap aTimeMap = getMapOfValue(aTimeStamp); - QString aMeshName = VISU::Storable::FindValue(aTimeMap,"myMeshName"); - VISU::Entity anEntity = (VISU::Entity) VISU::Storable::FindValue(aTimeMap,"myEntityId").toInt(); - QString aFieldName = VISU::Storable::FindValue(aTimeMap,"myFieldName"); - int aTimeStampId = VISU::Storable::FindValue(aTimeMap,"myTimeStampId").toInt(); - - switch (aData.myPrsType) { - case VISU::TSCALARMAP: // ScalarMap - { - VISU::ScalarMap_i* aPresent = new VISU::ScalarMap_i(pResult, false); - aPresent->Create(aMeshName.latin1(), anEntity, - aFieldName.latin1(), aTimeStampId); - //VISU::ScalarMap_var aTmp = aPresent->_this(); - //aPresent->_remove_ref(); - aData.myPrs[i] = aPresent; - } - break; - - case VISU::TISOSURFACE: // Iso Surfaces - { - VISU::IsoSurfaces_i* aPresent = new VISU::IsoSurfaces_i(pResult, false); - aPresent->Create(aMeshName.latin1(), anEntity, - aFieldName.latin1(), aTimeStampId); - //VISU::IsoSurfaces_var aTmp = aPresent->_this(); - //aPresent->_remove_ref(); - aData.myPrs[i] = aPresent; - } - break; - - case VISU::TCUTPLANES: // Cut Planes - { - VISU::CutPlanes_i* aPresent = new VISU::CutPlanes_i(pResult, false); - aPresent->Create(aMeshName.latin1(), anEntity, - aFieldName.latin1(), aTimeStampId); - //VISU::CutPlanes_var aTmp = aPresent->_this(); - //aPresent->_remove_ref(); - aData.myPrs[i] = aPresent; - } - break; - - case VISU::TPLOT3D: // Plot3d - { - VISU::Plot3D_i* aPresent = new VISU::Plot3D_i (pResult, false); - aPresent->Create(aMeshName.latin1(), anEntity, - aFieldName.latin1(), aTimeStampId); - aData.myPrs[i] = aPresent; - } - break; - - case VISU::TDEFORMEDSHAPE: // Deformed Shape - { - VISU::DeformedShape_i* aPresent = new VISU::DeformedShape_i(pResult, false); - aPresent->Create(aMeshName.latin1(), anEntity, - aFieldName.latin1(), aTimeStampId); - //VISU::DeformedShape_var aTmp = aPresent->_this(); - //aPresent->_remove_ref(); - aData.myPrs[i] = aPresent; - } - break; - - case VISU::TVECTORS: // Vectors - { - VISU::Vectors_i* aPresent = new VISU::Vectors_i(pResult, false); - aPresent->Create(aMeshName.latin1(), anEntity, - aFieldName.latin1(), aTimeStampId); - //VISU::Vectors_var aTmp = aPresent->_this(); - //aPresent->_remove_ref(); - aData.myPrs[i] = aPresent; - } - break; - - case VISU::TSTREAMLINES: // Stream Lines - { - VISU::StreamLines_i* aPresent = new VISU::StreamLines_i(pResult, false); - aPresent->Create(aMeshName.latin1(), anEntity, - aFieldName.latin1(), aTimeStampId); - //VISU::StreamLines_var aTmp = aPresent->_this(); - //aPresent->_remove_ref(); - aData.myPrs[i] = aPresent; - } - break; - default: - MESSAGE("Not implemented for this presentation type: " << aData.myPrsType); - return; - } - if (aData.myPrs[i]->GetMin() < aMin) aMin = aData.myPrs[i]->GetMin(); - if (aData.myPrs[i]->GetMax() > aMax) aMax = aData.myPrs[i]->GetMax(); - i++; - } - aData.myNbFrames = i; - - int rangeType = VISU::GetResourceMgr()->integerValue("VISU" , "scalar_range_type", 0); - if ( rangeType != 1 ) { - for (i = 0; i < aData.myNbFrames; i++) { - aData.myPrs[i]->SetRange(aMin, aMax); - aData.myPrs[i]->SetOffset(aData.myOffset); - } - if (aData.myPrsType == VISU::TISOSURFACE) - for (i = 0; i < aData.myNbFrames; i++) - if (VISU::IsoSurfaces_i* aPrs = dynamic_cast(aData.myPrs[i])) - aPrs->SetSubRange(aMin, aMax); + using namespace VISU; + switch (aData.myPrsType) { + case VISU::TSCALARMAP: // ScalarMap + GeneratePresentations(myStudy,aData,aResult,isRangeDefined(),myMinVal,myMaxVal); + break; + case VISU::TISOSURFACE: // Iso Surfaces + GeneratePresentations(myStudy,aData,aResult,isRangeDefined(),myMinVal,myMaxVal); + break; + case VISU::TCUTPLANES: // Cut Planes + GeneratePresentations(myStudy,aData,aResult,isRangeDefined(),myMinVal,myMaxVal); + break; + case VISU::TPLOT3D: // Plot3d + GeneratePresentations(myStudy,aData,aResult,isRangeDefined(),myMinVal,myMaxVal); + break; + case VISU::TDEFORMEDSHAPE: // Deformed Shape + GeneratePresentations(myStudy,aData,aResult,isRangeDefined(),myMinVal,myMaxVal); + break; + case VISU::TVECTORS: // Vectors + GeneratePresentations(myStudy,aData,aResult,isRangeDefined(),myMinVal,myMaxVal); + break; + case VISU::TSTREAMLINES: // Stream Lines + GeneratePresentations(myStudy,aData,aResult,isRangeDefined(),myMinVal,myMaxVal); + break; + case VISU::TGAUSSPOINTS: // Gauss Points + GeneratePresentations(myStudy,aData,aResult,isRangeDefined(),myMinVal,myMaxVal); + break; + default: + MESSAGE("Not implemented for this presentation type: " << aData.myPrsType); + return; } } -//************************************************************************ +//------------------------------------------------------------------------ CORBA::Boolean VISU_TimeAnimation::generateFrames() { if (!myView) { MESSAGE("Viewer is not defined for animation"); @@ -324,7 +306,7 @@ CORBA::Boolean VISU_TimeAnimation::generateFrames() { return aNoError; } -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::clearView() { if (!myView) { MESSAGE("Viewer is not defined for animation"); @@ -337,7 +319,6 @@ void VISU_TimeAnimation::clearView() { for (int i = 0, iEnd = aData.myActors.size(); i < iEnd; i++) { if (aData.myActors[i] != 0) { aData.myActors[i]->RemoveFromRender(aRen); - aData.myActors[i]->Delete(); } } aData.myActors.clear(); @@ -346,12 +327,12 @@ void VISU_TimeAnimation::clearView() { VISU::RepaintView(myView); } -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::stopAnimation() { myIsActive = false; } -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::startAnimation() { if (!myIsActive) { myIsActive = true; @@ -359,11 +340,12 @@ void VISU_TimeAnimation::startAnimation() { } } -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::nextFrame() { - if( !myView ) + if (!myView) { + MESSAGE("Viewer is not defined for animation"); return; - + } stopAnimation(); if (myFrame < (myFieldsLst[0].myNbFrames-1)) { int i; @@ -381,10 +363,12 @@ void VISU_TimeAnimation::nextFrame() { } } -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::prevFrame() { - if( !myView ) + if (!myView) { + MESSAGE("Viewer is not defined for animation"); return; + } stopAnimation(); if (myFrame > 0) { int i; @@ -402,11 +386,12 @@ void VISU_TimeAnimation::prevFrame() { } } -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::firstFrame() { - if( !myView ) + if (!myView) { + MESSAGE("Viewer is not defined for animation"); return; - + } stopAnimation(); int i; for (i = 0; i < getNbFields(); i++) @@ -424,11 +409,12 @@ void VISU_TimeAnimation::firstFrame() { } } -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::lastFrame() { - if( !myView ) + if (!myView) { + MESSAGE("Viewer is not defined for animation"); return; - + } stopAnimation(); int i; for (i = 0; i < getNbFields(); i++) @@ -445,10 +431,14 @@ void VISU_TimeAnimation::lastFrame() { } -//************************************************************************ +//------------------------------------------------------------------------ // For Batchmode using void VISU_TimeAnimation::gotoFrame(CORBA::Long theFrame) { - if ((theFrame < 0) || (theFrame > (getNbFrames()-1)) || !myView ) + if (!myView) { + MESSAGE("Viewer is not defined for animation"); + return; + } + if ((theFrame < 0) || (theFrame > (getNbFrames()-1))) return; stopAnimation(); qApp->lock(); @@ -471,23 +461,23 @@ void VISU_TimeAnimation::gotoFrame(CORBA::Long theFrame) { } -//************************************************************************ -VISU::ScalarMap_ptr VISU_TimeAnimation::getPresentation(CORBA::Long theField, CORBA::Long theFrame) { +//------------------------------------------------------------------------ +VISU::ColoredPrs3d_ptr VISU_TimeAnimation::getPresentation(CORBA::Long theField, CORBA::Long theFrame) { if ((theField > getNbFields()) || (theField < 0)) - return VISU::ScalarMap::_nil(); + return VISU::ColoredPrs3d::_nil(); if ((theFrame < 0) || (theFrame > (myFieldsLst[theField].myNbFrames - 1))) - return VISU::ScalarMap::_nil(); + return VISU::ColoredPrs3d::_nil(); return myFieldsLst[theField].myPrs[theFrame]->_this(); } -//************************************************************************ +//------------------------------------------------------------------------ CORBA::Long VISU_TimeAnimation::getNbFrames() { return (getNbFields() > 0)? myFieldsLst[0].myNbFrames : 0; } -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::run() { if (!myView) { @@ -543,6 +533,11 @@ void VISU_TimeAnimation::run() qApp->lock(); if (isDumping) { + // We must unlock mutex for some time before grabbing to allow view updating + qApp->unlock(); + msleep(100); + qApp->lock(); + QPixmap px = QPixmap::grabWindow(myView->winId()); QString aFile(myDumpPath); QString aName = QString("%1").arg(myFieldsLst[0].myTiming[myFrame]); @@ -572,7 +567,7 @@ void VISU_TimeAnimation::run() QThread::exit(); } -//************************************************************************ +//------------------------------------------------------------------------ VISU::Result_i* VISU_TimeAnimation::createPresent (_PTR(SObject) theField) { _PTR(SObject) aSObj = theField->GetFather(); @@ -583,7 +578,7 @@ VISU::Result_i* VISU_TimeAnimation::createPresent (_PTR(SObject) theField) return dynamic_cast(VISU::GetServant(anObject).in()); } -//************************************************************************ +//------------------------------------------------------------------------ VISU::Storable::TRestoringMap VISU_TimeAnimation::getMapOfValue (_PTR(SObject) theSObject) { VISU::Storable::TRestoringMap aMap; @@ -599,7 +594,7 @@ VISU::Storable::TRestoringMap VISU_TimeAnimation::getMapOfValue (_PTR(SObject) t return aMap; } -//************************************************************************ +//------------------------------------------------------------------------ double VISU_TimeAnimation::getTimeValue (_PTR(SObject) theTimeStamp) { _PTR(GenericAttribute) anAttr; @@ -615,7 +610,7 @@ double VISU_TimeAnimation::getTimeValue (_PTR(SObject) theTimeStamp) return -1.0; } -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::setSpeed(CORBA::Long theSpeed) { mySpeed = (theSpeed<1)? 1 : theSpeed; @@ -641,7 +636,7 @@ QString VISU_TimeAnimation::GenerateName() return VISU::GenerateName("Animation", myNBAnimations++); } -//************************************************************************ +//------------------------------------------------------------------------ std::string GetPresentationComment (VISU::VISUType thePrsType) { std::string aPrsCmt; @@ -667,6 +662,9 @@ std::string GetPresentationComment (VISU::VISUType thePrsType) case VISU::TSTREAMLINES: aPrsCmt = VISU::StreamLines_i::myComment; break; + case VISU::TGAUSSPOINTS: + aPrsCmt = VISU::GaussPoints_i::myComment; + break; default: aPrsCmt = "Unknown presentation"; break; @@ -674,7 +672,7 @@ std::string GetPresentationComment (VISU::VISUType thePrsType) return aPrsCmt; } -//************************************************************************ +//------------------------------------------------------------------------ SALOMEDS::SObject_ptr VISU_TimeAnimation::publishInStudy() { if (myStudy->GetProperties()->IsLocked()) @@ -714,7 +712,7 @@ SALOMEDS::SObject_ptr VISU_TimeAnimation::publishInStudy() return VISU::GetSObject(aAnimSObject); } -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::saveAnimation() { if (myStudy->GetProperties()->IsLocked()) return; @@ -775,7 +773,7 @@ void VISU_TimeAnimation::saveAnimation() aStudyBuilder->CommitCommand(); } -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::restoreFromStudy(SALOMEDS::SObject_ptr theField) { _PTR(SObject) aAnimSObject = VISU::GetClientSObject(theField, myStudy); @@ -831,6 +829,8 @@ void VISU_TimeAnimation::restoreFromStudy(_PTR(SObject) theField) aData.myPrsType = VISU::TVECTORS; else if (strName == VISU::StreamLines_i::myComment.c_str()) aData.myPrsType = VISU::TSTREAMLINES; + else if (strName == VISU::GaussPoints_i::myComment.c_str()) + aData.myPrsType = VISU::TGAUSSPOINTS; else continue; generatePresentations(getNbFields()-1); @@ -997,7 +997,7 @@ CORBA::Long VISU_TimeAnimation_i::getCurrentFrame() return myAnim->getCurrentFrame(); } -VISU::ScalarMap_ptr VISU_TimeAnimation_i::getPresentation +VISU::ColoredPrs3d_ptr VISU_TimeAnimation_i::getPresentation (CORBA::Long theField, CORBA::Long theFrame) { return myAnim->getPresentation(theField,theFrame); diff --git a/src/VISU_I/VISU_TimeAnimation.h b/src/VISU_I/VISU_TimeAnimation.h index f6496cc5..315415c8 100644 --- a/src/VISU_I/VISU_TimeAnimation.h +++ b/src/VISU_I/VISU_TimeAnimation.h @@ -22,7 +22,7 @@ class VISU_Actor; namespace VISU{ class Result_i; - class ScalarMap_i; + class ColoredPrs3d_i; } struct FieldData @@ -31,7 +31,7 @@ struct FieldData _PTR(SObject) myField; // field label long myNbTimes; // number of Timestamps long myNbFrames; // number of created Frames - std::vector myPrs; // Presentations + std::vector myPrs; // Presentations std::vector myActors; // Actors std::vector myTiming; // time values float myOffset[3]; @@ -80,7 +80,7 @@ class VISU_TimeAnimation: public QObject, public QThread CORBA::Boolean isRunning() { return myIsActive; } CORBA::Long getCurrentFrame() { return myFrame; } - VISU::ScalarMap_ptr getPresentation(CORBA::Long theField, CORBA::Long theFrame); + VISU::ColoredPrs3d_ptr getPresentation(CORBA::Long theField, CORBA::Long theFrame); void setPresentationType(CORBA::Long theFieldNum, VISU::VISUType theType) { myFieldsLst[theFieldNum].myPrsType = theType; } @@ -188,7 +188,7 @@ public: virtual CORBA::Boolean isRunning(); virtual CORBA::Long getCurrentFrame(); - virtual VISU::ScalarMap_ptr getPresentation(CORBA::Long theField, CORBA::Long theFrame); + virtual VISU::ColoredPrs3d_ptr getPresentation(CORBA::Long theField, CORBA::Long theFrame); virtual void setPresentationType(CORBA::Long theFieldNum, VISU::VISUType theType); virtual VISU::VISUType getPresentationType(CORBA::Long theFieldNum); diff --git a/src/VISU_I/VISU_Vectors_i.cc b/src/VISU_I/VISU_Vectors_i.cc index 3fb10780..0a93d9fa 100644 --- a/src/VISU_I/VISU_Vectors_i.cc +++ b/src/VISU_I/VISU_Vectors_i.cc @@ -24,10 +24,12 @@ // Author : Alexey PETROV // Module : VISU -#include "VISU_VectorsPL.hxx" -#include "VISU_Result_i.hh" #include "VISU_Vectors_i.hh" +#include "VISU_Result_i.hh" + #include "VISU_VectorsAct.h" +#include "VISU_VectorsPL.hxx" +#include "VISU_Convertor.hxx" using namespace VISU; using namespace std; @@ -74,6 +76,7 @@ Vectors_i(Result_i* theResult, bool theAddToStudy) : PrsObject_i(theResult->GetStudyDocument()), Prs3d_i(theResult,theAddToStudy), + ColoredPrs3d_i(theResult,theAddToStudy), ScalarMap_i(theResult,theAddToStudy), DeformedShape_i(theResult,theAddToStudy), myVectorsPL(NULL) @@ -86,6 +89,7 @@ Vectors_i(Result_i* theResult, SALOMEDS::SObject_ptr theSObject) : PrsObject_i(theResult->GetStudyDocument()), Prs3d_i(theResult,theSObject), + ColoredPrs3d_i(theResult,theSObject), ScalarMap_i(theResult,theSObject), DeformedShape_i(theResult,theSObject), myVectorsPL(NULL) @@ -95,11 +99,11 @@ Vectors_i(Result_i* theResult, void VISU::Vectors_i::SameAs(const VISU::Prs3d_i* theOrigin) { - VISU::DeformedShape_i::SameAs(theOrigin); + TSuperClass::SameAs(theOrigin); - if (const VISU::Vectors_i* aConstVec = dynamic_cast(theOrigin)) { - VISU::Vectors_i* aVectors = const_cast(aConstVec); - SetLineWidth(aVectors->GetLineWidth()); + if(const Vectors_i* aPrs3d = dynamic_cast(theOrigin)){ + Vectors_i* anOrigin = const_cast(aPrs3d); + SetLineWidth(anOrigin->GetLineWidth()); } } @@ -114,12 +118,13 @@ VISU::Storable* VISU::Vectors_i::Create(const char* theMeshName, VISU::Entity th VISU::Storable* VISU::Vectors_i::Restore(const Storable::TRestoringMap& theMap) { - DoHook(); + TSuperClass::Restore(theMap); + SetGlyphType(VISU::Vectors::GlyphType(VISU::Storable::FindValue(theMap,"myTypeGlyph").toInt())); SetGlyphPos(VISU::Vectors::GlyphPos(VISU::Storable::FindValue(theMap,"myPosGlyph").toInt())); SetLineWidth(VISU::Storable::FindValue(theMap,"myLineWidth").toDouble()); - return DeformedShape_i::Restore(theMap); + return this; } @@ -171,6 +176,7 @@ void VISU::Vectors_i::DoHook(){ VISU_PipeLine* VISU::Vectors_i::GetPipeLine(){ VISU_PipeLine* aPipeLine = VISU_VectorsPL::New(); + aPipeLine->SetIDMapper(myPipeLine->GetIDMapper()); aPipeLine->ShallowCopy(myPipeLine); aPipeLine->Update(); return aPipeLine; @@ -182,6 +188,7 @@ VISU_Actor* VISU::Vectors_i::CreateActor(const Handle(SALOME_InteractiveObject)& VISU_VectorsAct* anActor = VISU_VectorsAct::New(); try{ VISU::Prs3d_i::CreateActor(anActor,theIO); + anActor->SetVTKMapping(true); anActor->SetBarVisibility(true); anActor->GetProperty()->SetColor(myColor.R,myColor.G,myColor.B); anActor->GetProperty()->SetLineWidth(GetLineWidth()); diff --git a/src/VISU_I/VISU_Vectors_i.hh b/src/VISU_I/VISU_Vectors_i.hh index 7c167ae0..d74c25ed 100644 --- a/src/VISU_I/VISU_Vectors_i.hh +++ b/src/VISU_I/VISU_Vectors_i.hh @@ -83,7 +83,9 @@ namespace VISU{ virtual const char* GetComment() const; virtual QString GenerateName(); - virtual VISU_Actor* CreateActor(const Handle(SALOME_InteractiveObject)& theIO = NULL); + virtual + VISU_Actor* + CreateActor(const Handle(SALOME_InteractiveObject)& theIO = NULL); virtual void UpdateActor(VISU_Actor* theActor) ; }; diff --git a/src/VISU_I/VISU_ViewManager_i.cc b/src/VISU_I/VISU_ViewManager_i.cc index 670656c1..c86ac5d8 100644 --- a/src/VISU_I/VISU_ViewManager_i.cc +++ b/src/VISU_I/VISU_ViewManager_i.cc @@ -36,7 +36,6 @@ #include "SUIT_ViewWindow.h" #include "SUIT_ViewManager.h" -#include "SVTK_RenderWindow.h" #include "SVTK_ViewWindow.h" #include "SVTK_ViewModel.h" #include "SPlot2d_Curve.h" @@ -128,11 +127,11 @@ namespace VISU { struct TCurrentViewEvent: public SALOME_Event { - const SalomeApp_Application* myApplication; + SalomeApp_Application* myApplication; typedef VISU::View_ptr TResult; TResult myResult; - TCurrentViewEvent(const SalomeApp_Application* theApplication): + TCurrentViewEvent(SalomeApp_Application* theApplication): myApplication(theApplication), myResult(VISU::View::_nil()) {} @@ -141,16 +140,9 @@ namespace VISU { void Execute() { - //if (SUIT_ViewManager *aViewManager = myApplication->activeViewManager()) { - // if (aViewManager->getType() == "VTKViewer") { - // if (SUIT_ViewWindow *aViewWindow = aViewManager->getActiveView()) { - VISU::View3D_i* pView = - new View3D_i ((SalomeApp_Application*)myApplication); - if (pView->Create(0)) - myResult = pView->_this(); - // } - // } - //} + VISU::View3D_i* aView = new View3D_i (myApplication); + if (aView->Create(0)) + myResult = aView->_this(); } }; @@ -284,7 +276,7 @@ namespace VISU { { SVTK_ViewWindow* vf = GetViewWindow(theViewWindow); vf->getRenderer()->ResetCameraClippingRange(); - vf->getRenderWindow()->getRenderWindow()->Render(); + vf->getRenderWindow()->Render(); } VISU_Actor* UpdateViewer (SUIT_ViewWindow* theStudyFrame, int theDisplaing, Prs3d_i* thePrs) @@ -300,7 +292,7 @@ namespace VISU { if(anActor->IsA("VISU_Actor")){ anVISUActor = VISU_Actor::SafeDownCast(anActor); if (thePrs == anVISUActor->GetPrs3d()) { - aResActor = anVISUActor->GetParent(); + aResActor = anVISUActor; if(theDisplaing < eErase) aResActor->VisibilityOn(); else @@ -461,7 +453,7 @@ namespace VISU { while (vtkActor *anActor = anActColl->GetNextActor()) if (VISU_Actor* anVISUActor = dynamic_cast(anActor)) if (thePrs3d == anVISUActor->GetPrs3d()) - return anVISUActor->GetParent(); + return anVISUActor; return NULL; } @@ -693,13 +685,12 @@ namespace VISU { for (; !anActor && aVTKActor; aVTKActor = anActColl->GetNextActor()) { if (VISU_Actor* anVISUActor = dynamic_cast(aVTKActor)) { if (thePrs == anVISUActor->GetPrs3d()) { - anActor = anVISUActor->GetParent(); + anActor = anVISUActor; } } } if (anActor) { vw->RemoveActor(anActor); - anActor->Delete(); } } } diff --git a/src/VISU_I/VISU_View_i.cc b/src/VISU_I/VISU_View_i.cc index 5e25633f..43224cd7 100644 --- a/src/VISU_I/VISU_View_i.cc +++ b/src/VISU_I/VISU_View_i.cc @@ -46,7 +46,6 @@ #include "SVTK_ViewWindow.h" #include "SVTK_ViewModel.h" -#include "SVTK_RenderWindow.h" #include "SPlot2d_ViewModel.h" #include "Plot2d_ViewFrame.h" @@ -1335,7 +1334,7 @@ namespace VISU { const int mode, const double xMin, const double xMax, const double yMin, const double yMax): - myView(theView), + myView(theView), myMode(mode), myXMin(xMin),myXMax(xMax), myYMin(yMin),myYMax(yMax) @@ -1352,7 +1351,7 @@ namespace VISU { const double myYMax; Plot2d_ViewFrame* myView; }; - + void XYPlot_i::FitXRange(const CORBA::Double xMin,const CORBA::Double xMax) { const CORBA::Long mode = 1; @@ -1375,7 +1374,7 @@ namespace VISU { const CORBA::Long mode = 0; ProcessVoidEvent(new TFitRangeEvent(myView,mode,xMin,xMax,yMin,yMax)); } - + void XYPlot_i::GetFitRanges(double& xMin, double& xMax, double& yMin, double& yMax) { double y2Min,y2Max; @@ -1485,14 +1484,17 @@ namespace VISU { struct TCreateView3dEvent: public SALOME_Event { + SalomeApp_Application *myApplication; View3D_i * myView3D; int myNew; typedef SUIT_ViewWindow* TResult; TResult myResult; - TCreateView3dEvent (View3D_i * theView3D, + TCreateView3dEvent (SalomeApp_Application *theApplication, + View3D_i * theView3D, const int theNew): + myApplication(theApplication), myView3D(theView3D), myNew(theNew), myResult(NULL) @@ -1502,35 +1504,41 @@ namespace VISU { void Execute() { - if (!myView3D->myApplication) + if (!myApplication) return; - SUIT_ViewManager * aViewMgr = - myView3D->myApplication->getViewManager(SVTK_Viewer::Type(), false); - - if (aViewMgr) { - if (myNew) { - myResult = aViewMgr->createViewWindow(); - } else { - myResult = aViewMgr->getActiveView(); + if(myNew){ + if(SUIT_ViewManager* aViewManager = myApplication->getViewManager(SVTK_Viewer::Type(),false)){ + myResult = aViewManager->createViewWindow(); + myView3D->myViewManager = aViewManager; + }else{ + if(SUIT_ViewManager* aViewManager = myApplication->getViewManager(SVTK_Viewer::Type(),true)){ + myResult = aViewManager->getActiveView(); + myView3D->myViewManager = aViewManager; + } } - } else { - if (myNew) { - aViewMgr = myView3D->myApplication->getViewManager(SVTK_Viewer::Type(), true); - myResult = aViewMgr->getActiveView(); - } else { - return; // there are no current 3D view + }else{ + if(SUIT_ViewManager* aViewManager = myApplication->activeViewManager()){ + if(SUIT_ViewWindow* aView = aViewManager->getActiveView()){ + if(SVTK_ViewWindow* aViewWindow = dynamic_cast(aView)){ + myView3D->myViewManager = aViewManager; + myResult = aViewManager->getActiveView(); + } + } + }else{ + if(SUIT_ViewManager* aViewManager = myApplication->getViewManager(SVTK_Viewer::Type(),false)){ + myView3D->myViewManager = aViewManager; + myResult = aViewManager->getActiveView(); + } } } - - myView3D->myViewManager = aViewMgr; } }; Storable* View3D_i::Create (int theNew) { if (MYDEBUG) MESSAGE("View3D_i::Create"); - SUIT_ViewWindow* aVW = ProcessEvent(new TCreateView3dEvent(this, theNew)); + SUIT_ViewWindow* aVW = ProcessEvent(new TCreateView3dEvent(myApplication, this, theNew)); if (aVW) { SetViewWindow(aVW); return this; @@ -1731,8 +1739,9 @@ namespace VISU { SetViewUp(theViewWindow,aViewUp); SetFocalPoint(theViewWindow,aFocalPnt); SetParallelScale(theViewWindow,aParallelScale); - SVTK_ViewWindow* aViewWindow = VISU::GetViewWindow(theViewWindow); - aViewWindow->SetScale(aScaleFactor); + ScaleView(theViewWindow,VISU::View3D::XAxis,aScaleFactor[0]); + ScaleView(theViewWindow,VISU::View3D::YAxis,aScaleFactor[1]); + ScaleView(theViewWindow,VISU::View3D::ZAxis,aScaleFactor[2]); } diff --git a/src/VISU_SWIG/Makefile.in b/src/VISU_SWIG/Makefile.in index 30d837a1..93d34b31 100644 --- a/src/VISU_SWIG/Makefile.in +++ b/src/VISU_SWIG/Makefile.in @@ -51,7 +51,10 @@ EXPORT_SHAREDPYSCRIPTS = VISU_shared_modules.py LIB_CLIENT_IDL = CPPFLAGS += -ftemplate-depth-32 $(PYTHON_INCLUDES) $(HDF5_INCLUDES) $(QT_INCLUDES) \ - $(VTK_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome $(BOOST_CPPFLAGS) + $(VTK_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome \ + -I${MED_ROOT_DIR}/include/salome \ + $(BOOST_CPPFLAGS) + LDFLAGS += $(PYTHON_LIBS) -lVisuConvertor -lVisuPipeLine @CONCLUDE@ diff --git a/src/VISU_SWIG/VISU_Gen_s.cc b/src/VISU_SWIG/VISU_Gen_s.cc index 1a499def..ddad586a 100644 --- a/src/VISU_SWIG/VISU_Gen_s.cc +++ b/src/VISU_SWIG/VISU_Gen_s.cc @@ -48,8 +48,9 @@ ScalarMap::ScalarMap(Convertor* theConvertor, const char* theMeshName, int theEn : myScalarMap(NULL) { if(VISU_Convertor* aConvertor = theConvertor->GetImpl()){ - vtkUnstructuredGrid* aDataSet = + VISU::PIDMapper anIDMapper = aConvertor->GetTimeStampOnMesh(theMeshName,VISU::TEntity(theEntity),theFieldName,theIteration); + VISU::TVTKOutput* aDataSet = anIDMapper->GetVTKOutput(); if(aDataSet){ myScalarMap = VISU_ScalarMapPL::New(); myScalarMap->SetInput(aDataSet); diff --git a/src/VVTK/Makefile.in b/src/VVTK/Makefile.in new file mode 100755 index 00000000..66b48653 --- /dev/null +++ b/src/VVTK/Makefile.in @@ -0,0 +1,80 @@ +# File : Makefile.in +# Author : Alexander Solovyov(OCN) +# Module : VVTK +# $Header: + +top_srcdir=@top_srcdir@ +top_builddir=../.. +srcdir=@srcdir@ +VPATH=.:@srcdir@ + + +@COMMENCE@ + +# header files +EXPORT_HEADERS = \ + VVTK.h \ + VVTK_ViewManager.h \ + VVTK_ViewModel.h \ + VVTK_InteractorStyle.h \ + VVTK_PickingDlg.h \ + VVTK_SegmentationCursorDlg.h \ + VVTK_PrimitiveBox.h \ + VVTK_SizeBox.h \ + VVTK_ViewWindow.h \ + VVTK_MainWindow.h \ + VVTK_ImageWriter.h \ + VVTK_ImageWriterMgr.h \ + VVTK_RecorderDlg.h \ + VVTK_Recorder.h + +# Libraries targets +LIB = libVVTK.la + +LIB_SRC = \ + VVTK_ViewManager.cxx \ + VVTK_ViewModel.cxx \ + VVTK_InteractorStyle.cxx \ + VVTK_PickingDlg.cxx \ + VVTK_SegmentationCursorDlg.cxx \ + VVTK_PrimitiveBox.cxx \ + VVTK_SizeBox.cxx \ + VVTK_ViewWindow.cxx \ + VVTK_Renderer.cxx \ + VVTK_MainWindow.cxx \ + VVTK_ImageWriter.cxx \ + VVTK_ImageWriterMgr.cxx \ + VVTK_RecorderDlg.cxx \ + VVTK_Recorder.cxx + +LIB_MOC = \ + VVTK_ViewWindow.h \ + VVTK_ViewModel.h \ + VVTK_ViewManager.h \ + VVTK_PickingDlg.h \ + VVTK_SegmentationCursorDlg.h \ + VVTK_RecorderDlg.h \ + VVTK_PrimitiveBox.h \ + VVTK_SizeBox.h \ + VVTK_MainWindow.h + +CPPFLAGS += \ + $(QT_INCLUDES) \ + $(OCC_INCLUDES) \ + $(VTK_INCLUDES) \ + $(BOOST_CPPFLAGS) \ + -I$(KERNEL_ROOT_DIR)/include/salome \ + -I$(GUI_ROOT_DIR)/include/salome \ + -I${MED_ROOT_DIR}/include/salome + +LDFLAGS += \ + $(QT_MT_LIBS) \ + $(OCC_LIBS) \ + $(VTK_LIBS) \ + -L$(KERNEL_ROOT_DIR)/lib/salome \ + -L$(GUI_ROOT_DIR)/lib/salome + +LIBS+= -lsuit -lCAM -lSalomeObject -lSVTK -lOpUtil + + +@CONCLUDE@ diff --git a/src/VVTK/VVTK.h b/src/VVTK/VVTK.h new file mode 100755 index 00000000..d6dd0648 --- /dev/null +++ b/src/VVTK/VVTK.h @@ -0,0 +1,13 @@ +#ifdef WNT +#ifdef SVTK_EXPORTS +#define VVTK_EXPORT __declspec(dllexport) +#else +#define VVTK_EXPORT __declspec(dllimport) +#endif +#else +#define VVTK_EXPORT +#endif + +#if defined WNT +#pragma warning ( disable: 4251 ) +#endif diff --git a/src/VVTK/VVTK_ImageWriter.cxx b/src/VVTK/VVTK_ImageWriter.cxx new file mode 100755 index 00000000..9d047598 --- /dev/null +++ b/src/VVTK/VVTK_ImageWriter.cxx @@ -0,0 +1,112 @@ +// SALOME VTKViewer : build VTK viewer into Salome desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : +// Author : +// Module : +// $Header$ + +#include "VVTK_ImageWriter.h" + +#include + +#include +#include +#include +#include + +#ifdef _DEBUG_ +static int MYDEBUG = 0; +#else +static int MYDEBUG = 0; +#endif + + +//---------------------------------------------------------------------------- +VVTK_ImageWriter +::VVTK_ImageWriter(QSemaphore* theSemaphore, + vtkImageData* theImageData, + const std::string& theName, + int theProgressive, + int theQuality): + mySemaphore(theSemaphore), + myImageData(theImageData), + myName(theName), + myProgressive(theProgressive), + myQuality(theQuality), + myConstraint16Flag(true) +{} + +//---------------------------------------------------------------------------- +VVTK_ImageWriter +::~VVTK_ImageWriter() +{ + if(MYDEBUG) cout<<"VVTK_ImageWriter::~VVTK_ImageWriter - this = "< anImageClip; + // + if(myConstraint16Flag){ + int uExtent[6]; + myImageData->GetUpdateExtent(uExtent); + unsigned int width = uExtent[1] - uExtent[0] + 1; + unsigned int height = uExtent[3] - uExtent[2] + 1; + width = (width / 16) * 16; + height= (height / 16) * 16; + uExtent[1] = uExtent[0] + width - 1; + uExtent[3] = uExtent[2] + height - 1; + // + anImageClip = vtkImageClip::New(); + anImageClip->Delete(); + + anImageClip->SetInput(myImageData); + anImageClip->SetOutputWholeExtent(uExtent); + anImageClip->ClipDataOn(); + anImageData = anImageClip->GetOutput(); + } + // + aWriter->WriteToMemoryOff(); + aWriter->SetFileName(myName.c_str()); + aWriter->SetQuality(myQuality); + aWriter->SetProgressive(myProgressive); + aWriter->SetInput(anImageData); + aWriter->Write(); + + aWriter->Delete(); + myImageData->Delete(); + + if(MYDEBUG) cout<<"VVTK_ImageWriter::run "<< + "- this = "< + +#include + +#include + + +#ifdef _DEBUG_ +static int MYDEBUG = 0; +#else +static int MYDEBUG = 0; +#endif + +//---------------------------------------------------------------------------- +VVTK_ImageWriterMgr +::VVTK_ImageWriterMgr() +{ + int aMax = std::numeric_limits::max() / 2; + mySemaphore = new QSemaphore(aMax); + *mySemaphore += aMax; + if(MYDEBUG) cout<<"VVTK_ImageWriterMgr::VVTK_ImageWriterMgr "<< + "- total = "<total()<< + "; available = "<available()<start(); + +} + + +//---------------------------------------------------------------------------- +void +VVTK_ImageWriterMgr +::Stop() +{ + if(MYDEBUG) cout<<"VVTK_ImageWriterMgr::Stop "<< + "- total = "<total()<< + "; available = "<available()< +#include +#include +#include +#include +#include + + +//---------------------------------------------------------------------------- +vtkStandardNewMacro(VVTK_InteractorStyle); +//---------------------------------------------------------------------------- + +VVTK_InteractorStyle +::VVTK_InteractorStyle(): + myIsMidButtonDown( false ), + myIsLeftButtonDown( false ), + mySMDecreaseMagnificationBtn(10), + mySMIncreaseMagnificationBtn(11) +{ +} + +//---------------------------------------------------------------------------- +VVTK_InteractorStyle +::~VVTK_InteractorStyle() +{ +} + +//---------------------------------------------------------------------------- +void +VVTK_InteractorStyle +::OnLeftButtonDown(int ctrl, int shift, + int x, int y) +{ + myIsLeftButtonDown = true; + + if (this->HasObserver(vtkCommand::LeftButtonPressEvent)) { + this->InvokeEvent(vtkCommand::LeftButtonPressEvent,NULL); + return; + } + this->FindPokedRenderer(x, y); + if (this->CurrentRenderer == NULL) { + return; + } + myShiftState = shift; + // finishing current viewer operation + if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) { + onFinishOperation(); + startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); + } + myOtherPoint = myPoint = QPoint(x, y); + if (ForcedState != VTK_INTERACTOR_STYLE_CAMERA_NONE) { + startOperation(ForcedState); + } + else { + if (!(ctrl||shift)){ + if (myIsMidButtonDown){ + startOperation(VTK_INTERACTOR_STYLE_CAMERA_ZOOM); + } + else{ + startOperation(VTK_INTERACTOR_STYLE_CAMERA_ROTATE); + } + } + } + return; +} + +//---------------------------------------------------------------------------- +void +VVTK_InteractorStyle +::OnMiddleButtonDown(int ctrl, + int shift, + int x, int y) +{ + myIsMidButtonDown = true; + + if (this->HasObserver(vtkCommand::MiddleButtonPressEvent)) { + this->InvokeEvent(vtkCommand::MiddleButtonPressEvent,NULL); + return; + } + this->FindPokedRenderer(x, y); + if (this->CurrentRenderer == NULL) { + return; + } + myShiftState = shift; + // finishing current viewer operation + if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) { + onFinishOperation(); + startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); + } + myOtherPoint = myPoint = QPoint(x, y); + if (ForcedState != VTK_INTERACTOR_STYLE_CAMERA_NONE) { + startOperation(ForcedState); + } + else { + if (!(ctrl||shift)){ + if ( myIsLeftButtonDown ){ + startOperation(VTK_INTERACTOR_STYLE_CAMERA_ZOOM); + } + else{ + startOperation(VTK_INTERACTOR_STYLE_CAMERA_PAN); + } + } + } +} + +//---------------------------------------------------------------------------- +void +VVTK_InteractorStyle +::OnLeftButtonUp(int ctrl, int shift, int x, int y) +{ + myIsLeftButtonDown = false; + SVTK_InteractorStyle::OnLeftButtonUp( ctrl, shift, x, y ); + + if ( myIsMidButtonDown ) + OnMiddleButtonDown( ctrl, shift, x, y ); +} + +//---------------------------------------------------------------------------- +void +VVTK_InteractorStyle +::OnMiddleButtonUp(int ctrl, int shift, int x, int y) +{ + myIsMidButtonDown = false; + SVTK_InteractorStyle::OnMiddleButtonUp( ctrl, shift, x, y ); + + if ( myIsLeftButtonDown ) + OnLeftButtonDown( ctrl, shift, x, y ); +} +//---------------------------------------------------------------------------- +void VVTK_InteractorStyle::onFinishOperation() +{ + Superclass::onFinishOperation(); +} + + +//---------------------------------------------------------------------------- +void +VVTK_InteractorStyle +::SetInteractor( vtkRenderWindowInteractor* theInteractor ) +{ + // register EventCallbackCommand as observer of standard events (keypress, mousemove, etc) + Superclass::SetInteractor( theInteractor ); + + if(theInteractor){ + theInteractor->AddObserver( VISU::SetSMDecreaseMagnificationEvent, EventCallbackCommand, Priority ); + theInteractor->AddObserver( VISU::SetSMIncreaseMagnificationEvent, EventCallbackCommand, Priority ); + } +} + + +//---------------------------------------------------------------------------- +void +VVTK_InteractorStyle +::ProcessEvents( vtkObject* object, + unsigned long event, + void* clientData, + void* callData ) +{ + if ( clientData ) { + vtkObject* anObject = reinterpret_cast( clientData ); + VVTK_InteractorStyle* self = dynamic_cast( anObject ); + if( self ){ + switch ( event ) { + case VISU::SetSMDecreaseMagnificationEvent: + self->mySMDecreaseMagnificationBtn = *((int*)callData); + return; + case VISU::SetSMIncreaseMagnificationEvent: + self->mySMIncreaseMagnificationBtn = *((int*)callData); + return; + } + } + } + + Superclass::ProcessEvents( object, event, clientData, callData ); +} + + +//---------------------------------------------------------------------------- +void +VVTK_InteractorStyle +::onSpaceMouseButton( int button ) +{ + if( mySMDecreaseMagnificationBtn == button ) + DecreaseGaussPointMagnification(); + if( mySMIncreaseMagnificationBtn == button ) + IncreaseGaussPointMagnification(); + + Superclass::onSpaceMouseButton( button ); +} + +//---------------------------------------------------------------------------- +void +VVTK_InteractorStyle +::DecreaseGaussPointMagnification() +{ + Interactor->InvokeEvent(VISU::SetSMDecreaseMagnificationEvent,NULL); +} + +//---------------------------------------------------------------------------- +void +VVTK_InteractorStyle +::IncreaseGaussPointMagnification() +{ + Interactor->InvokeEvent(VISU::SetSMIncreaseMagnificationEvent,NULL); +} +//============================================================================ +// +// Controllers +// +vtkStandardNewMacro(VVTK_ControllerIncrement); +//---------------------------------------------------------------------------- +VVTK_ControllerIncrement::VVTK_ControllerIncrement() +{ + myIncrement=10; +} +//---------------------------------------------------------------------------- +VVTK_ControllerIncrement::~VVTK_ControllerIncrement() +{ +} +//---------------------------------------------------------------------------- +int VVTK_ControllerIncrement::Increase() +{ + myIncrement*=2; + return myIncrement; +} +//---------------------------------------------------------------------------- +int VVTK_ControllerIncrement::Decrease() +{ + myIncrement/=2; + if (!myIncrement){ + myIncrement=1; + } + return myIncrement; +} +// +vtkStandardNewMacro(VVTK_ControllerOnKeyDown); +//---------------------------------------------------------------------------- +VVTK_ControllerOnKeyDown::VVTK_ControllerOnKeyDown() +{ +} +//---------------------------------------------------------------------------- +VVTK_ControllerOnKeyDown::~VVTK_ControllerOnKeyDown() +{ +} +//---------------------------------------------------------------------------- +bool VVTK_ControllerOnKeyDown::OnKeyDown(vtkInteractorStyle* theIS) +{ + SVTK_InteractorStyle *pIS=dynamic_cast(theIS); + if (pIS){ + if(pIS->GetSelector()->SelectionMode()==GaussPointSelection){ + char key = pIS->GetInteractor()->GetKeyCode(); + // + if (key == 'S') { + pIS->ActionPicking(); + return false; + } + } + } + return Superclass::OnKeyDown(theIS); +} diff --git a/src/VVTK/VVTK_InteractorStyle.h b/src/VVTK/VVTK_InteractorStyle.h new file mode 100644 index 00000000..9e33bfa7 --- /dev/null +++ b/src/VVTK/VVTK_InteractorStyle.h @@ -0,0 +1,149 @@ +// SALOME VTKViewer : build VTK viewer into Salome desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : VVTK_InteractorStyle.h +// Author : Christophe ATTANASIO +// Module : SALOME +// $Header$ + +#ifndef __VVTK_InteractorStyle_h +#define __VVTK_InteractorStyle_h + + +#include "VVTK.h" + +#include "SVTK_InteractorStyle.h" +// +//------------------------------------------- +//! Control the value of increment in new style of interaction. +/*! + This class controls of value of increment, + for pan/rotate/zoom operations in new style + of interaction +*/ +class VVTK_ControllerIncrement : public SVTK_ControllerIncrement { + public: + vtkTypeMacro(VVTK_ControllerIncrement,SVTK_ControllerIncrement); + static VVTK_ControllerIncrement* New(); + + //! Increace the increment value by multiplying on 2 + virtual int Increase(); + + //! Decreace the increment value by division on 2 + virtual int Decrease(); + + protected: + VVTK_ControllerIncrement(); + virtual ~VVTK_ControllerIncrement(); + // + private: + VVTK_ControllerIncrement(const VVTK_ControllerIncrement&); //Not implemented + void operator=(const VVTK_ControllerIncrement&); //Not implemented +}; +// +//------------------------------------------- +//! Control the behaviour of KeyDown event in new style of interaction. +/*! + This class controls of behaviour of of KeyDown event + in new style of interaction. +*/ +class VVTK_ControllerOnKeyDown : public SVTK_ControllerOnKeyDown{ + public: + vtkTypeMacro(VVTK_ControllerOnKeyDown, SVTK_ControllerOnKeyDown); + static VVTK_ControllerOnKeyDown* New(); + + //! Provides the action on event + virtual bool OnKeyDown(vtkInteractorStyle* ); + + protected: + VVTK_ControllerOnKeyDown(); + virtual ~VVTK_ControllerOnKeyDown(); + + private: + VVTK_ControllerOnKeyDown(const VVTK_ControllerOnKeyDown&);//Not implemented + void operator=(const VVTK_ControllerOnKeyDown&); //Not implemented +}; + + +//! Introduce new style of interaction (keyboard free) +class VVTK_EXPORT VVTK_InteractorStyle : public SVTK_InteractorStyle +{ + public: + static VVTK_InteractorStyle *New(); + vtkTypeMacro(VVTK_InteractorStyle,SVTK_InteractorStyle); + + //! Redefined from SVTK_InteractorStyle::SetInteractor in order to add an observer (callback) for custorm event (space mouse event) + virtual + void + SetInteractor( vtkRenderWindowInteractor* ); + + protected: + VVTK_InteractorStyle(); + ~VVTK_InteractorStyle(); + + VVTK_InteractorStyle(const VVTK_InteractorStyle&); // Not implemented + void operator=(const VVTK_InteractorStyle&); // Not implemented + + // Generic event bindings must be overridden in subclasses + + //! Redefine SVTK_InteractorStyle::OnLeftButtonDown + virtual void OnLeftButtonDown(int ctrl, int shift, int x, int y); + + //! Redefine SVTK_InteractorStyle::OnMiddleButtonDown + virtual void OnMiddleButtonDown(int ctrl, int shift, int x, int y); + + //! Redefine SVTK_InteractorStyle::OnLeftButtonUp + virtual void OnLeftButtonUp(int ctrl, int shift, int x, int y); + + //! Redefine SVTK_InteractorStyle::OnMiddleButtonUp + virtual void OnMiddleButtonUp(int ctrl, int shift, int x, int y); + + //! Redefine SVTK_InteractorStyle::onFinishOperation + virtual void onFinishOperation(); + + //! Main process VTK event method + static + void + ProcessEvents(vtkObject* object, + unsigned long event, + void* clientData, + void* callData ); + + //! Redefine SVTK_InteractorStyle::onSpaceMouseButton + virtual void onSpaceMouseButton( int button ); + + //! To decrease magnification of the Gauss Points + void DecreaseGaussPointMagnification(); + + //! To increase magnification of the Gauss Points + void IncreaseGaussPointMagnification(); + + //! SpaceMouse short cuts + int mySMDecreaseMagnificationBtn; + int mySMIncreaseMagnificationBtn; + + bool myIsMidButtonDown; + bool myIsLeftButtonDown; +}; + +#endif diff --git a/src/VVTK/VVTK_MainWindow.cxx b/src/VVTK/VVTK_MainWindow.cxx new file mode 100644 index 00000000..de0ebfd0 --- /dev/null +++ b/src/VVTK/VVTK_MainWindow.cxx @@ -0,0 +1,537 @@ +// SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : +// Author : +// Module : +// $Header$ + +#include "VVTK_MainWindow.h" +#include "VVTK_InteractorStyle.h" +#include "VVTK_Recorder.h" +#include "VVTK_RecorderDlg.h" +#include "VISU_WidgetCtrl.hxx" +#include "VISU_GaussPtsAct.h" +#include "VISU_Event.h" + +#include "SVTK_RenderWindowInteractor.h" +#include "VVTK_Renderer.h" +#include "VVTK_PickingDlg.h" +#include "VVTK_SegmentationCursorDlg.h" + +#include "SUIT_Application.h" +#include "SUIT_Session.h" +#include "SUIT_Tools.h" +#include "SUIT_ViewWindow.h" +#include "SUIT_ResourceMgr.h" +#include "SUIT_ToolButton.h" +#include "SUIT_Accel.h" +#include "QtxAction.h" + +#include +#include +#include +#include +#include + +//---------------------------------------------------------------------------- +VVTK_MainWindow +::VVTK_MainWindow(QWidget* theParent, + const char* theName, + SUIT_ResourceMgr* theResourceMgr, + SUIT_ViewWindow* theViewWindow): + SVTK_MainWindow(theParent,theName,theResourceMgr,theViewWindow), + myInteractorStyle(VVTK_InteractorStyle::New()), + myControllerIncrement(VVTK_ControllerIncrement::New()), + myControllerOnKeyDown(VVTK_ControllerOnKeyDown::New()) +{ + myInteractorStyle->SetControllerIncrement(myControllerIncrement.GetPointer()); + myControllerIncrement->Delete(); + + myInteractorStyle->SetControllerOnKeyDown(myControllerOnKeyDown.GetPointer()); + myControllerOnKeyDown->Delete(); + + myInteractorStyle->Delete(); + + moveDockWindow(myToolBar,Qt::DockLeft); + myActionsMap[NonIsometric]->removeFrom(myToolBar); + + // Recording + myRecordingToolBar = new QToolBar(this); + myRecordingToolBar->setCloseMode(QDockWindow::Undocked); + myRecordingToolBar->setLabel(tr("LBL_TOOLBAR_LABEL")); + moveDockWindow(myRecordingToolBar,Qt::DockLeft); + + myStartAction = new QtxAction(tr("MNU_VVTK_RECORDING_START"), + theResourceMgr->loadPixmap( "VISU", tr( "ICON_VVTK_RECORDING_START" ) ), + tr( "MNU_VVTK_RECORDING_START" ), 0, this); + myStartAction->setStatusTip(tr("DSC_VVTK_RECORDING_START")); + myStartAction->addTo( myRecordingToolBar ); + connect( myStartAction, SIGNAL( activated() ), this, SLOT( OnStartRecording() ) ); + + myPlayAction = new QtxAction(tr("MNU_VVTK_RECORDING_PLAY"), + theResourceMgr->loadPixmap( "VISU", tr( "ICON_VVTK_RECORDING_PLAY" ) ), + tr( "MNU_VVTK_RECORDING_PLAY" ), 0, this); + myPlayAction->setStatusTip(tr("DSC_VVTK_RECORDING_PLAY")); + myPlayAction->setEnabled( false ); + myPlayAction->addTo( myRecordingToolBar ); + connect( myPlayAction, SIGNAL( activated() ), this, SLOT( OnPlayRecording() ) ); + + myPauseAction = new QtxAction(tr("MNU_VVTK_RECORDING_PAUSE"), + theResourceMgr->loadPixmap( "VISU", tr( "ICON_VVTK_RECORDING_PAUSE" ) ), + tr( "MNU_VVTK_RECORDING_PAUSE" ), 0, this); + myPauseAction->setStatusTip(tr("DSC_VVTK_RECORDING_PAUSE")); + myPauseAction->setEnabled( false ); + myPauseAction->addTo( myRecordingToolBar ); + connect( myPauseAction, SIGNAL( activated() ), this, SLOT( OnPauseRecording() ) ); + + myStopAction = new QtxAction(tr("MNU_VVTK_RECORDING_STOP"), + theResourceMgr->loadPixmap( "VISU", tr( "ICON_VVTK_RECORDING_STOP" ) ), + tr( "MNU_VVTK_RECORDING_STOP" ), 0, this); + myStopAction->setStatusTip(tr("DSC_VVTK_RECORDING_STOP")); + myStopAction->setEnabled( false ); + myStopAction->addTo( myRecordingToolBar ); + connect( myStopAction, SIGNAL( activated() ), this, SLOT( OnStopRecording() ) ); + + myRecorder = VVTK_Recorder::New(); + myRecorder->CheckExistAVIMaker(); + if(myRecorder->ErrorStatus()) + myRecordingToolBar->setEnabled(false); +} + +//---------------------------------------------------------------------------- +void +VVTK_MainWindow +::Initialize(SVTK_RenderWindowInteractor* theInteractor) +{ + vtkInteractorStyle* aStyle = theInteractor->GetInteractorStyle(); + if(SVTK_InteractorStyle *anInteractorStyle = dynamic_cast(aStyle)){ + anInteractorStyle->SetControllerIncrement(myControllerIncrement.GetPointer()); + anInteractorStyle->SetControllerOnKeyDown(myControllerOnKeyDown.GetPointer()); + } + + myRecorder->SetNbFPS(17.3); + myRecorder->SetQuality(100); + myRecorder->SetProgressiveMode(true); + myRecorder->SetUseSkippedFrames(true); + myRecorder->SetRenderWindow(theInteractor->getRenderWindow()); + + disconnect( myActionsMap[ DumpId ], SIGNAL( activated() ), + myViewWindow, SLOT( onDumpView() ) ); + + connect( myActionsMap[ DumpId ], SIGNAL( activated() ), + this, SLOT( onDumpView() ) ); + + SVTK_MainWindow::Initialize(theInteractor); +} + +VVTK_MainWindow::~VVTK_MainWindow() +{ + if(myRecorder) + myRecorder->Delete(); +} + +//---------------------------------------------------------------------------- +void VVTK_MainWindow::onDumpView() +{ + SUIT_Application* app = SUIT_Session::session()->activeApplication(); + QString fileName = app->getFileName( false, QString::null, + tr( "TLT_IMAGE_FILES" ), + tr( "TLT_DUMP_VIEW" ), 0 ); + if( fileName.isEmpty() ) + return; + + QImage img = dumpView(); + if( img.isNull() ) + return; + + QString fmt = SUIT_Tools::extension( fileName ).upper(); + if( fmt.isEmpty() ) + fmt = QString( "BMP" ); // default format + else if( fmt == "JPG" ) + fmt = "JPEG"; + + QApplication::setOverrideCursor( Qt::waitCursor ); + bool res = img.save( fileName, fmt.latin1() ); + QApplication::restoreOverrideCursor(); +} + +//---------------------------------------------------------------------------- +void +VVTK_MainWindow +::OnInteractorStyleSwitch(bool theIsGaussStyleOn) +{ + if ( theIsGaussStyleOn ) + this->PushInteractorStyle(myInteractorStyle.GetPointer()); + else + this->PopInteractorStyle(); +} + +//---------------------------------------------------------------------------- +void VVTK_MainWindow::OnStartRecording() +{ + VVTK_RecorderDlg* aRecorderDlg = new VVTK_RecorderDlg( this, myRecorder ); + + if( !aRecorderDlg->exec() ) + return; + + myStartAction->setEnabled( false ); + myPlayAction->setEnabled( false ); + myPauseAction->setEnabled( true ); + myStopAction->setEnabled( true ); + + myRecorder->Record(); +} + +//---------------------------------------------------------------------------- +void VVTK_MainWindow::OnPlayRecording() +{ + myStartAction->setEnabled( false ); + myPlayAction->setEnabled( false ); + myPauseAction->setEnabled( true ); + myStopAction->setEnabled( true ); + // + myRecorder->Pause(); +} + +//---------------------------------------------------------------------------- +void VVTK_MainWindow::OnPauseRecording() +{ + myStartAction->setEnabled( false ); + myPlayAction->setEnabled( true ); + myPauseAction->setEnabled( false ); + myStopAction->setEnabled( true ); + // + myRecorder->Pause(); +} + +//---------------------------------------------------------------------------- +void VVTK_MainWindow::OnStopRecording() +{ + myStartAction->setEnabled( true ); + myPlayAction->setEnabled( false ); + myPauseAction->setEnabled( false ); + myStopAction->setEnabled( false ); + // + myRecorder->Stop(); +} + +//---------------------------------------------------------------------------- +int +convertAction( const int accelAction ); + +void +VVTK_MainWindow +::action( const int accelAction ) +{ + if ( accelAction == SUIT_Accel::ZoomFit ) + onFitAll(); + else { + int anEvent = convertAction( accelAction ); + InvokeEvent( anEvent, 0 ); + } +} + +//---------------------------------------------------------------------------- +VVTK_MainWindow1 +::VVTK_MainWindow1(QSplitter* theParent, + const char* theName, + SUIT_ResourceMgr* theResourceMgr, + SUIT_ViewWindow* theViewWindow): + VVTK_MainWindow(theParent,theName,theResourceMgr,theViewWindow), + myStyleSwitchAction(NULL), + mySplitter(theParent), + myPickingDlg(NULL) +{ + myPtsToolBar = new QToolBar(this); + myPtsToolBar->setCloseMode(QDockWindow::Undocked); + myPtsToolBar->setLabel(tr("LBL_TOOLBAR_LABEL")); + moveDockWindow(myPtsToolBar,Qt::DockLeft); + + QPixmap aPixmap; + QtxAction* anAction; + + aPixmap = theResourceMgr->loadPixmap( "VISU", tr( "ICON_VVTK_INTERACTOR_STYLE_SWITCH" ) ); + anAction = new QtxAction(tr("MNU_VVTK_INTERACTOR_STYLE_SWITCH"), + aPixmap, + tr( "MNU_VVTK_INTERACTOR_STYLE_SWITCH" ), + 0, + this, + "VVTK/SVTK StyleSwitch", + true); + anAction->setToggleAction(true); + anAction->setStatusTip(tr("DSC_VVTK_INTERACTOR_STYLE_SWITCH")); + + anAction->addTo( myPtsToolBar ); + myStyleSwitchAction = anAction; + + if( theResourceMgr->integerValue( "VISU", "mouse_behaviour", true ) == 1 ) + myStyleSwitchAction->toggle(); + + aPixmap = theResourceMgr->loadPixmap("VISU",tr("ICON_VVTK_SELECTION_MODE_SWITCH")); + myPickingAction = new QtxAction(tr("MNU_VVTK_SELECTION_MODE_SWITCH"), + aPixmap, + tr( "MNU_VVTK_SELECTION_MODE_SWITCH" ), + 0, + this, + "VVTK/SVTK SelectionSwitch", + true); + myPickingAction->setToggleAction(true); + myPickingAction->setStatusTip(tr("DSC_VVTK_SELECTION_MODE_SWITCH")); + myPickingAction->addTo( myPtsToolBar ); + connect(myPickingAction, SIGNAL(toggled(bool)), this, SLOT(OnSelectionModeSwitch(bool))); + + myPickingDlg = new VVTK_PickingDlg( this, "PickingDlg" ); + myPickingDlg->SetAction( myPickingAction ); + + // Plane/Sphere Segmentation + aPixmap = theResourceMgr->loadPixmap("VISU",tr("ICON_VVTK_PLANE_SEGMENTATION_SWITCH")); + myPlaneSegmentationAction = new QtxAction(tr("MNU_VVTK_PLANE_SEGMENTATION_SWITCH"), + aPixmap, + tr( "MNU_VVTK_PLANE_SEGMENTATION_SWITCH" ), + 0, + this, + "VVTK/SVTK PlaneSegmentationSwitch", + true); + myPlaneSegmentationAction->setToggleAction(true); + myPlaneSegmentationAction->setStatusTip(tr("DSC_VVTK_PLANE_SEGMENTATION_SWITCH")); + //myPlaneSegmentationAction->addTo( myPtsToolBar ); + connect( myPlaneSegmentationAction, SIGNAL( activated() ), this, SLOT( OnSegmentationSwitch() ) ); + + aPixmap = theResourceMgr->loadPixmap("VISU",tr("ICON_VVTK_SPHERE_SEGMENTATION_SWITCH")); + mySphereSegmentationAction = new QtxAction(tr("MNU_VVTK_SPHERE_SEGMENTATION_SWITCH"), + aPixmap, + tr( "MNU_VVTK_SPHERE_SEGMENTATION_SWITCH" ), + 0, + this, + "VVTK/SVTK SphereSegmentationSwitch", + true); + mySphereSegmentationAction->setToggleAction(true); + mySphereSegmentationAction->setStatusTip(tr("DSC_VVTK_SPHERE_SEGMENTATION_SWITCH")); + //mySphereSegmentationAction->addTo( myPtsToolBar ); + connect( mySphereSegmentationAction, SIGNAL( activated() ), this, SLOT( OnSegmentationSwitch() ) ); + + mySegmentationCursorDlg = new VVTK_SegmentationCursorDlg( this, "SegmentationCursorDlg" ); + mySegmentationCursorDlg->SetPlaneAction( myPlaneSegmentationAction ); + mySegmentationCursorDlg->SetSphereAction( mySphereSegmentationAction ); + connect( mySegmentationCursorDlg, SIGNAL( scgClose() ), this, SLOT( OnSegmentationSwitch() ) ); + + SUIT_ToolButton* aSegmentationButton = new SUIT_ToolButton( myPtsToolBar ); + aSegmentationButton->AddAction( myPlaneSegmentationAction ); + aSegmentationButton->AddAction( mySphereSegmentationAction ); +} + +void +VVTK_MainWindow1 +::Initialize(SVTK_RenderWindowInteractor* theInteractor, + VVTK_Renderer1* theRenderer) +{ + myRenderer = theRenderer; + VVTK_MainWindow::Initialize(theInteractor); + + if( myStyleSwitchAction->isOn() ) + PushInteractorStyle(myInteractorStyle.GetPointer()); + connect(myStyleSwitchAction, SIGNAL(toggled(bool)), this, SLOT(OnInteractorStyleSwitch(bool))); + + mySegmentationCursorDlg->SetWidgetCtrl( theRenderer->GetWidgetCtrl() ); + mySegmentationCursorDlg->SetInteractor( theInteractor ); + + connect( theInteractor, SIGNAL( selectionChanged() ), SLOT( OnSelectionChanged() ) ); + myPickingDlg->SetInteractor( theInteractor ); +} + +VVTK_MainWindow1 +::~VVTK_MainWindow1() +{} + +//---------------------------------------------------------------------------- +VVTK_MainWindow2* +VVTK_MainWindow1 +::CreateMainWindow2(QWidget* theParent, + const char* theName, + SUIT_ResourceMgr* theResourceMgr, + SUIT_ViewWindow* theViewWindow) +{ + myMainWindow2 = new VVTK_MainWindow2(theParent, + theName, + theResourceMgr, + theViewWindow, + myStyleSwitchAction); + return myMainWindow2; +} + + +//---------------------------------------------------------------------------- +void +VVTK_MainWindow1 +::OnSelectionModeSwitch(bool theIsSelectionOn) +{ + Selection_Mode aSelectionMode = SelectionMode(); + if(theIsSelectionOn && aSelectionMode != GaussPointSelection) + SetSelectionMode(GaussPointSelection); + else if(!theIsSelectionOn && aSelectionMode == GaussPointSelection) + SetSelectionMode(ActorSelection); + + if( theIsSelectionOn ) + { + myPickingDlg->Update(); + myPickingDlg->show(); + } + else + myPickingDlg->hide(); +} + +void +VVTK_MainWindow1 +::OnSelectionChanged() +{ + Selection_Mode aSelectionMode = SelectionMode(); + if(myPickingAction->isOn() && aSelectionMode != GaussPointSelection) + myPickingAction->setOn(false); + else if(!myPickingAction->isOn() && aSelectionMode == GaussPointSelection) + myPickingAction->setOn(true); +} + + +//---------------------------------------------------------------------------- +VISU_WidgetCtrl* +VVTK_MainWindow1 +::GetWidgetCtrl() +{ + return myRenderer->GetWidgetCtrl(); +} + +VISU_InsideCursorSettings* +VVTK_MainWindow1 +::GetInsideCursorSettings() +{ + return mySegmentationCursorDlg->GetInsideCursorSettings(); +} + +VISU_OutsideCursorSettings* +VVTK_MainWindow1 +::GetOutsideCursorSettings() +{ + return mySegmentationCursorDlg->GetOutsideCursorSettings(); +} + +VISU_PickingSettings* +VVTK_MainWindow1 +::GetPickingSettings() +{ + return myPickingDlg->GetPickingSettings(); +} + +//---------------------------------------------------------------------------- +void +VVTK_MainWindow1 +::SetPlanesSegementation(bool theIsOn) +{ + myPlaneSegmentationAction->setOn( theIsOn ); + OnSegmentationSwitch(myPlaneSegmentationAction); +} + +void +VVTK_MainWindow1 +::SetSphereSegementation(bool theIsOn) +{ + mySphereSegmentationAction->setOn( theIsOn ); + OnSegmentationSwitch(mySphereSegmentationAction); +} + +void +VVTK_MainWindow1 +::OnSegmentationSwitch(QtxAction* theAction) +{ + bool anIsSegmentationOn = myPlaneSegmentationAction->isOn() || + mySphereSegmentationAction->isOn(); + + if( !theAction ) + return; + + VISU_WidgetCtrl *aWidgetCtrl = myRenderer->GetWidgetCtrl(); + + if (anIsSegmentationOn) { + int anIndex = (theAction == myPlaneSegmentationAction) ? 0 : 1; + aWidgetCtrl->SetActiveIndex(anIndex); + } + aWidgetCtrl->SetEnabled(anIsSegmentationOn); + + if( theAction == myPlaneSegmentationAction && anIsSegmentationOn ) + mySphereSegmentationAction->setOn( false ); + else if( theAction == mySphereSegmentationAction && anIsSegmentationOn ) + myPlaneSegmentationAction->setOn( false ); + + if( anIsSegmentationOn ) + { + myMainWindow2->show(); + mySegmentationCursorDlg->SetIsPlaneSegmentation( theAction == myPlaneSegmentationAction ); + mySegmentationCursorDlg->UpdateSegmentation(); + mySegmentationCursorDlg->UpdateInsideGaussPoints(); + mySegmentationCursorDlg->UpdateOutsideGaussPoints(); + mySegmentationCursorDlg->show(); + } + else + { + myMainWindow2->hide(); + mySegmentationCursorDlg->hide(); + } +} + +void +VVTK_MainWindow1 +::OnSegmentationSwitch() +{ + QtxAction* anAction = ( QtxAction* )sender(); + OnSegmentationSwitch(anAction); +} + + +//---------------------------------------------------------------------------- +VVTK_MainWindow2 +::VVTK_MainWindow2(QWidget* theParent, + const char* theName, + SUIT_ResourceMgr* theResourceMgr, + SUIT_ViewWindow* theViewWindow, + QtxAction* theStyleSwitchAction): + VVTK_MainWindow(theParent,theName,theResourceMgr,theViewWindow), + myStyleSwitchAction(theStyleSwitchAction) +{} + +VVTK_MainWindow2 +::~VVTK_MainWindow2() +{} + + +//---------------------------------------------------------------------------- +void +VVTK_MainWindow2 +::Initialize(SVTK_RenderWindowInteractor* theInteractor) +{ + VVTK_MainWindow::Initialize(theInteractor); + + if( myStyleSwitchAction->isOn() ) + PushInteractorStyle(myInteractorStyle.GetPointer()); + connect(myStyleSwitchAction, SIGNAL(toggled(bool)), this, SLOT(OnInteractorStyleSwitch(bool))); +} + diff --git a/src/VVTK/VVTK_MainWindow.h b/src/VVTK/VVTK_MainWindow.h new file mode 100644 index 00000000..1d0b0bc3 --- /dev/null +++ b/src/VVTK/VVTK_MainWindow.h @@ -0,0 +1,222 @@ +#ifndef VVTK_MAINWINDOW_H +#define VVTK_MAINWINDOW_H + +#ifdef WIN32 +#pragma warning( disable:4251 ) +#endif + +#include "VVTK.h" +#include "SVTK_MainWindow.h" + +class QSplitter; + +class VISU_WidgetCtrl; +class VVTK_SegmentationCursorDlg; +class VISU_InsideCursorSettings; +class VISU_OutsideCursorSettings; +class VISU_PickingSettings; +class VVTK_InteractorStyle; +class VVTK_ControllerIncrement; +class VVTK_ControllerOnKeyDown; +class VVTK_PickingDlg; +class VVTK_MainWindow2; +class VVTK_Renderer1; +class VVTK_Renderer2; +class VVTK_Recorder; + +//---------------------------------------------------------------------------- +//! Customize SVTK_MainWindow to provide VVTK functionality +class VVTK_EXPORT VVTK_MainWindow: public SVTK_MainWindow +{ + Q_OBJECT; + +public: + //! Construct instance of the class + VVTK_MainWindow(QWidget* theParent, + const char* theName, + SUIT_ResourceMgr* theResourceMgr, + SUIT_ViewWindow* theViewWindow); + + //! Reimplement SVTK_MainWindow::Initialize + virtual + void + Initialize(SVTK_RenderWindowInteractor* theInteractor); + + //! Destroy instance of the class + virtual + ~VVTK_MainWindow(); + + public slots: + + virtual + void + onDumpView(); + + //! To change active interactor style at run-time + virtual + void + OnInteractorStyleSwitch(bool theIsGaussStyleOn); + + virtual + void + action( const int ); + + virtual + void + OnStartRecording(); + + virtual + void + OnPlayRecording(); + + virtual + void + OnPauseRecording(); + + virtual + void + OnStopRecording(); + + protected: + vtkSmartPointer myInteractorStyle; + vtkSmartPointer myControllerIncrement; + vtkSmartPointer myControllerOnKeyDown; + + QToolBar* myRecordingToolBar; + QtxAction* myStartAction; + QtxAction* myPlayAction; + QtxAction* myPauseAction; + QtxAction* myStopAction; + + VVTK_Recorder *myRecorder; +}; + + +//---------------------------------------------------------------------------- +//! Extend VVTK_MainWindow to implement functionality for base view +class VVTK_EXPORT VVTK_MainWindow1: public VVTK_MainWindow +{ + Q_OBJECT; + +public: + //! Construct instance of the class + VVTK_MainWindow1(QSplitter* theParent, + const char* theName, + SUIT_ResourceMgr* theResourceMgr, + SUIT_ViewWindow* theViewWindow); + + //! Reimplement VVTK_MainWindow::Initialize + virtual + void + Initialize(SVTK_RenderWindowInteractor* theInteractor, + VVTK_Renderer1* theRenderer); + + //! Destroy instance of the class + virtual + ~VVTK_MainWindow1(); + + //! Create instance of the segmented VVTK_MainWindow + /*! + The two views (VVTK_MainWindow1 and VVTK_MainWindow2) should change its behaviour in the same time. + So, it is necessary to synhronize them through sharing some common pointers. + */ + VVTK_MainWindow2* + CreateMainWindow2(QWidget* theParent, + const char* theName, + SUIT_ResourceMgr* theResourceMgr, + SUIT_ViewWindow* theViewWindow); + + VISU_WidgetCtrl* GetWidgetCtrl(); + + void + SetPlanesSegementation(bool theIsOn); + + void + SetSphereSegementation(bool theIsOn); + + VISU_InsideCursorSettings* + GetInsideCursorSettings(); + + //! Get contained VISU_OutsideCursorSettings + VISU_OutsideCursorSettings* + GetOutsideCursorSettings(); + + //! Get contained VISU_PickingSettings + VISU_PickingSettings* + GetPickingSettings(); + + public slots: + //! To activate/ deactivate the segementation cursor at run-time + void + OnSegmentationSwitch();//bool theIsSegmentationOn); + + void + OnSegmentationSwitch(QtxAction* theAction);//bool theIsSegmentationOn); + + //! To change active selection mode at run-time + virtual + void + OnSelectionModeSwitch(bool theIsSelectionOn); + + //! To adjust to the current selection mode + virtual + void + OnSelectionChanged(); + + protected: + VVTK_Renderer1* myRenderer; //!< Keeps extended version of SVTK_Renderer + + VVTK_MainWindow2* myMainWindow2; //!< Refer to segmented view + + QtxAction* myStyleSwitchAction; //!< Action for switch interactor style + QToolBar* myPtsToolBar; //!< Additional tool bar + + //! To implement show/hide segmented view on acttivate/ deactivate segementation cursor + QSplitter* mySplitter; + + QtxAction* myPickingAction; //!< Action for switch selection mode + QtxAction* myPlaneSegmentationAction; //!< Action for switch segmentation mode to plane + QtxAction* mySphereSegmentationAction; //!< Action for switch segmentation mode to sphere + + //! Keep reference to VVTK_SegmentationCursorDlg + VVTK_SegmentationCursorDlg* mySegmentationCursorDlg; + VVTK_PickingDlg* myPickingDlg; //!< Keep reference to VVTK_PickingDlg +}; + + +//---------------------------------------------------------------------------- +//! Extend VVTK_MainWindow to implement functionality for segmented view +class VVTK_EXPORT VVTK_MainWindow2: public VVTK_MainWindow +{ + Q_OBJECT; + + friend class VVTK_MainWindow1; + + //! Construct instance of the class + VVTK_MainWindow2(QWidget* theParent, + const char* theName, + SUIT_ResourceMgr* theResourceMgr, + SUIT_ViewWindow* theViewWindow, + QtxAction* theStyleSwitchAction); +public: + //! Destroy instance of the class + virtual + ~VVTK_MainWindow2(); + + //! Reimplement SVTK_MainWindow::Initialize + virtual + void + Initialize(SVTK_RenderWindowInteractor* theInteractor); + + protected: + // Refer to the VVTK_MainWindow1::myStyleSwitchAction instance + QtxAction* myStyleSwitchAction; + +}; + + +#ifdef WIN32 +#pragma warning( default:4251 ) +#endif + +#endif diff --git a/src/VVTK/VVTK_PickingDlg.cxx b/src/VVTK/VVTK_PickingDlg.cxx new file mode 100644 index 00000000..06e1dabb --- /dev/null +++ b/src/VVTK/VVTK_PickingDlg.cxx @@ -0,0 +1,378 @@ +// VISU VISUGUI : GUI of VISU component +// +// Copyright (C) 2003 CEA/DEN, EDF R&D +// +// +// +// File : VVTK_PickingDlg.cxx +// Author : Oleg Uvarov +// Module : VISU + +#include "VVTK_PickingDlg.h" + +#include "VISU_GaussPtsAct.h" +#include "VISU_GaussPtsSettings.h" + +#include "SUIT_ResourceMgr.h" +#include "SUIT_Session.h" + +#include "SVTK_RenderWindowInteractor.h" + +#include +#include +#include +#include +#include +#include + +#include "utilities.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "QtxAction.h" +#include "QtxDblSpinBox.h" +#include "QtxIntSpinBox.h" + +using namespace std; + +VVTK_PickingDlg::VVTK_PickingDlg( QWidget* parent, const char* name ) + :QDialog( parent, name, false, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ), + myEventCallbackCommand( vtkCallbackCommand::New() ), + myPickingSettings( VISU_PickingSettings::New() ) +{ + myPriority = 0.0; + myEventCallbackCommand->Delete(); + myEventCallbackCommand->SetClientData(this); + myEventCallbackCommand->SetCallback(VVTK_PickingDlg::ProcessEvents); + + SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr(); + + setCaption( tr( "PICKING_DLG_TITLE" ) ); + setSizeGripEnabled(TRUE); + + QVBoxLayout* TopLayout = new QVBoxLayout( this ); + TopLayout->setSpacing(6); + TopLayout->setMargin(11); + + QVBox* aBox = new QVBox( this ); + aBox->setMargin(0); + aBox->setSpacing(6); + + // Cursor + QGroupBox* CursorGroup = new QGroupBox( tr( "CURSOR_TITLE" ), aBox, "CursorGroup" ); + CursorGroup->setColumnLayout(0, Qt::Vertical ); + CursorGroup->layout()->setSpacing( 0 ); + CursorGroup->layout()->setMargin( 0 ); + + QGridLayout* CursorGroupLayout = new QGridLayout (CursorGroup->layout()); + CursorGroupLayout->setAlignment(Qt::AlignTop | Qt::AlignCenter); + CursorGroupLayout->setSpacing(6); + CursorGroupLayout->setMargin(11); + + QLabel* CursorSizeLabel = new QLabel( tr( "CURSOR_SIZE" ), CursorGroup ); + myCursorSizeSpinBox = new QtxDblSpinBox( 0, 1, 0.1, CursorGroup ); + myCursorSizeSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + QLabel* PyramidHeightLabel = new QLabel( tr( "PYRAMID_HEIGHT" ), CursorGroup ); + double aHeightMin=1.e-7; + double aHeightMax=10.; + double aHeightStep=0.1; + myPyramidHeightSpinBox = new QtxDblSpinBox(aHeightMin, aHeightMax, aHeightStep, CursorGroup ); + myPyramidHeightSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + QLabel* SelectionColorLabel = new QLabel( tr( "SELECTION_COLOR" ), CursorGroup ); + mySelectionColorButton = new QPushButton( CursorGroup ); + mySelectionColorButton->setPaletteBackgroundColor( Qt::blue ); + mySelectionColorButton->setPaletteForegroundColor( Qt::blue ); + connect( mySelectionColorButton, SIGNAL( clicked() ), this, SLOT( onColorButtonPressed() ) ); + + CursorGroupLayout->addWidget( CursorSizeLabel, 0, 0 ); + CursorGroupLayout->addWidget( myCursorSizeSpinBox, 0, 1 ); + CursorGroupLayout->addWidget( PyramidHeightLabel, 1, 0 ); + CursorGroupLayout->addWidget( myPyramidHeightSpinBox, 1, 1 ); + CursorGroupLayout->addWidget( SelectionColorLabel, 2, 0 ); + CursorGroupLayout->addWidget( mySelectionColorButton, 2, 1 ); + + // Tolerance + QGroupBox* ToleranceGroup = new QGroupBox( tr( "TOLERANCE_TITLE" ), aBox, "ToleranceGroup" ); + ToleranceGroup->setColumnLayout(0, Qt::Vertical ); + ToleranceGroup->layout()->setSpacing( 0 ); + ToleranceGroup->layout()->setMargin( 0 ); + + QGridLayout* ToleranceGroupLayout = new QGridLayout (ToleranceGroup->layout()); + ToleranceGroupLayout->setAlignment(Qt::AlignTop | Qt::AlignCenter); + ToleranceGroupLayout->setSpacing(6); + ToleranceGroupLayout->setMargin(11); + + QLabel* PointToleranceLabel = new QLabel( tr( "POINT_TOLERANCE" ), ToleranceGroup ); + myPointToleranceSpinBox = new QtxDblSpinBox( 0.001, 10.0, 0.01, ToleranceGroup ); + myPointToleranceSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + ToleranceGroupLayout->addWidget( PointToleranceLabel, 0, 0 ); + ToleranceGroupLayout->addWidget( myPointToleranceSpinBox, 0, 1 ); + + // Information window + QGroupBox* InfoWindowGroup = new QGroupBox( tr( "INFO_WINDOW_TITLE" ), aBox, "InfoWindowGroup" ); + InfoWindowGroup->setColumnLayout(0, Qt::Vertical ); + InfoWindowGroup->layout()->setSpacing( 0 ); + InfoWindowGroup->layout()->setMargin( 0 ); + + QGridLayout* InfoWindowGroupLayout = new QGridLayout (InfoWindowGroup->layout()); + InfoWindowGroupLayout->setAlignment(Qt::AlignTop | Qt::AlignCenter); + InfoWindowGroupLayout->setSpacing(6); + InfoWindowGroupLayout->setMargin(11); + + QLabel* TransparencyLabel = new QLabel( tr( "TRANSPARENCY" ), InfoWindowGroup ); + myTransparencySpinBox = new QtxIntSpinBox( 0, 100, 10, InfoWindowGroup ); + myTransparencySpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + InfoWindowGroupLayout->addWidget( TransparencyLabel, 0, 0 ); + InfoWindowGroupLayout->addWidget( myTransparencySpinBox, 0, 1 ); + + QLabel* PositionLabel = new QLabel( tr( "POSITION" ), InfoWindowGroup ); + myPositionComboBox = new QComboBox( InfoWindowGroup ); + myPositionComboBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + myPositionComboBox->insertItem( tr( "BELOW_POINT" ) ); + myPositionComboBox->insertItem( tr( "TOP_LEFT_CORNER" ) ); + + InfoWindowGroupLayout->addWidget( TransparencyLabel, 0, 0 ); + InfoWindowGroupLayout->addWidget( myTransparencySpinBox, 0, 1 ); + InfoWindowGroupLayout->addWidget( PositionLabel, 1, 0 ); + InfoWindowGroupLayout->addWidget( myPositionComboBox, 1, 1 ); + + // Movement of the camera + QGroupBox* CameraGroup = new QGroupBox( tr( "CAMERA_TITLE" ), aBox, "CameraGroup" ); + CameraGroup->setColumnLayout(0, Qt::Vertical ); + CameraGroup->layout()->setSpacing( 0 ); + CameraGroup->layout()->setMargin( 0 ); + + QGridLayout* CameraGroupLayout = new QGridLayout (CameraGroup->layout()); + CameraGroupLayout->setAlignment(Qt::AlignTop | Qt::AlignCenter); + CameraGroupLayout->setSpacing(6); + CameraGroupLayout->setMargin(11); + + QLabel* ZoomFactorLabel = new QLabel( tr( "ZOOM_FACTOR" ), CameraGroup ); + myZoomFactorSpinBox = new QtxDblSpinBox( 0.1, 10.0, 0.1, CameraGroup ); + myZoomFactorSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + QLabel* StepNumberLabel = new QLabel( tr( "STEP_NUMBER" ), CameraGroup ); + myStepNumberSpinBox = new QtxIntSpinBox( 1, 100, 1, CameraGroup ); + myStepNumberSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + CameraGroupLayout->addWidget( ZoomFactorLabel, 0, 0 ); + CameraGroupLayout->addWidget( myZoomFactorSpinBox, 0, 1 ); + CameraGroupLayout->addWidget( StepNumberLabel, 1, 0 ); + CameraGroupLayout->addWidget( myStepNumberSpinBox, 1, 1 ); + + // Display parent mesh element + QGroupBox* ParentMeshGroup = new QGroupBox( tr( "PARENT_MESH_TITLE" ), aBox, "ParentMeshGroup" ); + ParentMeshGroup->setColumnLayout(0, Qt::Vertical ); + ParentMeshGroup->layout()->setSpacing( 0 ); + ParentMeshGroup->layout()->setMargin( 0 ); + + QGridLayout* ParentMeshGroupLayout = new QGridLayout (ParentMeshGroup->layout()); + ParentMeshGroupLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft); + ParentMeshGroupLayout->setSpacing(6); + ParentMeshGroupLayout->setMargin(11); + + myDisplayParentMeshCheckBox = new QCheckBox( tr( "DISPLAY_PARENT_MESH" ), ParentMeshGroup ); + ParentMeshGroupLayout->addWidget( myDisplayParentMeshCheckBox, 0, 0 ); + + // Common buttons =========================================================== + 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 ); + + QPushButton* buttonApply = new QPushButton( tr( "&Apply" ), GroupButtons, "buttonApply" ); + buttonApply->setAutoDefault( TRUE ); + buttonApply->setDefault( TRUE ); + GroupButtonsLayout->addWidget( buttonApply, 0, 0 ); + GroupButtonsLayout->addItem( new QSpacerItem( 5, 5, QSizePolicy::Expanding, QSizePolicy::Minimum ), 0, 1 ); + + QPushButton* buttonClose = new QPushButton( tr( "&Close" ) , GroupButtons, "buttonClose" ); + buttonClose->setAutoDefault( TRUE ); + GroupButtonsLayout->addWidget( buttonClose, 0, 2 ); + + TopLayout->addWidget( aBox ); + TopLayout->addWidget( GroupButtons ); + + connect( buttonApply, SIGNAL( clicked() ), this, SLOT( onClickApply() ) ); + connect( buttonClose, SIGNAL( clicked() ), this, SLOT( onClickClose() ) ); +} + +VVTK_PickingDlg::~VVTK_PickingDlg() +{ +} + +void VVTK_PickingDlg::AddActor( VISU_GaussPtsAct* theActor ) +{ + theActor->SetPickingSettings( myPickingSettings.GetPointer() ); +} + +void VVTK_PickingDlg::RemoveActor( VISU_GaussPtsAct* theActor ) +{ + theActor->SetPickingSettings( NULL ); +} + +void VVTK_PickingDlg::Update() +{ + float aCursorSize = 0.5; + float aPyramidHeight = 10.0; + float aPointTolerance = 0.1; + QColor aColor = Qt::yellow; + int anInfoWindowTransparency = 50; + int anInfoWindowPosition = VISU_PickingSettings::BelowPoint; + float aZoomFactor = 1.5; + int aStepNumber = 10; + bool aDisplayParentMesh = false; + + if( !myPickingSettings->GetInitial() ) + { + myCursorSizeSpinBox->setValue( myPickingSettings->GetCursorSize() ); + myPyramidHeightSpinBox->setValue( myPickingSettings->GetPyramidHeight() ); + myPointToleranceSpinBox->setValue( myPickingSettings->GetPointTolerance() ); + myTransparencySpinBox->setValue( int(myPickingSettings->GetInfoWindowTransparency() * 100.0) ); + myPositionComboBox->setCurrentItem( myPickingSettings->GetInfoWindowPosition() ); + myZoomFactorSpinBox->setValue( myPickingSettings->GetZoomFactor() ); + myStepNumberSpinBox->setValue( myPickingSettings->GetStepNumber() ); + myDisplayParentMeshCheckBox->setChecked( myPickingSettings->GetDisplayParentMesh() ); + + float* aColor = myPickingSettings->GetColor(); + mySelectionColorButton->setPaletteBackgroundColor( QColor( ( int )( aColor[0] * 255.0 ), + ( int )( aColor[1] * 255.0 ), + ( int )( aColor[2] * 255.0 ) ) ); + + return; + } + + SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr(); + + aCursorSize = aResourceMgr->doubleValue( "VISU", "picking_cursor_size", aCursorSize ); + myCursorSizeSpinBox->setValue( aCursorSize ); + + aPyramidHeight = aResourceMgr->doubleValue( "VISU", "picking_pyramid_height", aPyramidHeight ); + myPyramidHeightSpinBox->setValue( aPyramidHeight ); + + aPointTolerance = aResourceMgr->doubleValue( "VISU", "picking_point_tolerance", aPointTolerance ); + myPointToleranceSpinBox->setValue( aPointTolerance ); + + aColor = aResourceMgr->colorValue( "VISU", "picking_selection_color", aColor ); + mySelectionColorButton->setPaletteBackgroundColor( aColor ); + + anInfoWindowTransparency = aResourceMgr->integerValue( "VISU", "picking_transparency", anInfoWindowTransparency ); + myTransparencySpinBox->setValue( anInfoWindowTransparency ); + + anInfoWindowPosition = aResourceMgr->integerValue( "VISU", "picking_position", anInfoWindowPosition ); + myPositionComboBox->setCurrentItem( anInfoWindowPosition ); + + aZoomFactor = aResourceMgr->doubleValue( "VISU", "picking_zoom_factor", aZoomFactor ); + myZoomFactorSpinBox->setValue( aZoomFactor ); + + aStepNumber = aResourceMgr->integerValue( "VISU", "picking_step_number", aStepNumber ); + myStepNumberSpinBox->setValue( aStepNumber ); + + aDisplayParentMesh = aResourceMgr->booleanValue( "VISU", "picking_display_parent_mesh", aDisplayParentMesh ); + myDisplayParentMeshCheckBox->setChecked( aDisplayParentMesh ); + + onClickApply(); +} + + +VISU_PickingSettings* +VVTK_PickingDlg +::GetPickingSettings() +{ + return myPickingSettings.GetPointer(); +} + +void VVTK_PickingDlg::SetInteractor( SVTK_RenderWindowInteractor* theInteractor ) +{ + myInteractor = theInteractor; + + theInteractor->GetDevice()->AddObserver(vtkCommand::KeyPressEvent, + myEventCallbackCommand.GetPointer(), + myPriority); +} + + +void VVTK_PickingDlg::ProcessEvents(vtkObject* vtkNotUsed(theObject), + unsigned long theEvent, + void* theClientData, + void* vtkNotUsed(theCallData)) +{ + VVTK_PickingDlg* self = reinterpret_cast(theClientData); + + switch(theEvent){ + case vtkCommand::KeyPressEvent: + self->KeyPressed(); + break; + } +} + +void VVTK_PickingDlg::KeyPressed() +{ + if( myInteractor->GetDevice()->GetKeyCode() == 'P' ) + { + bool aDisplayParentMesh = !myPickingSettings->GetDisplayParentMesh(); + myPickingSettings->SetDisplayParentMesh( aDisplayParentMesh ); + + myDisplayParentMeshCheckBox->setChecked( aDisplayParentMesh ); + + myPickingSettings->InvokeEvent(VISU::UpdatePickingSettingsEvent,NULL); + } +} + +void VVTK_PickingDlg::onClickApply() +{ + myPickingSettings->SetInitial( false ); + + myPickingSettings->SetCursorSize( myCursorSizeSpinBox->value() ); + myPickingSettings->SetPyramidHeight( myPyramidHeightSpinBox->value() ); + myPickingSettings->SetPointTolerance( myPointToleranceSpinBox->value() ); + myPickingSettings->SetInfoWindowTransparency( myTransparencySpinBox->value() / 100.0 ); + myPickingSettings->SetInfoWindowPosition( myPositionComboBox->currentItem() ); + myPickingSettings->SetZoomFactor( myZoomFactorSpinBox->value() ); + myPickingSettings->SetStepNumber( myStepNumberSpinBox->value() ); + myPickingSettings->SetDisplayParentMesh( myDisplayParentMeshCheckBox->isChecked() ); + + QColor aButtonColor = mySelectionColorButton->paletteBackgroundColor(); + float aColor[3]; + aColor[0] = aButtonColor.red() / 255.0; + aColor[1] = aButtonColor.green() / 255.0; + aColor[2] = aButtonColor.blue() / 255.0; + myPickingSettings->SetColor( aColor ); + + myPickingSettings->InvokeEvent(VISU::UpdatePickingSettingsEvent,NULL); +} + +void VVTK_PickingDlg::onClickClose() +{ + myAction->setOn( false ); + reject(); +} + +void VVTK_PickingDlg::done( int r ) +{ + myAction->setOn( false ); + QDialog::done( r ); +} + +void VVTK_PickingDlg::onColorButtonPressed() +{ + QColor aColor = QColorDialog::getColor( mySelectionColorButton->paletteBackgroundColor(), this ); + if( aColor.isValid() ) + mySelectionColorButton->setPaletteBackgroundColor( aColor ); +} diff --git a/src/VVTK/VVTK_PickingDlg.h b/src/VVTK/VVTK_PickingDlg.h new file mode 100644 index 00000000..72d3a4ec --- /dev/null +++ b/src/VVTK/VVTK_PickingDlg.h @@ -0,0 +1,100 @@ +// VISU VISUGUI : GUI of VISU component +// +// Copyright (C) 2003 CEA/DEN, EDF R&D +// +// +// +// File : VVTK_PickingDlg.h +// Author : Oleg Uvarov +// Module : VISU + +#ifndef VVTK_PICKINGDLG_H +#define VVTK_PICKINGDLG_H + +#include + +#include +#include + +class vtkActorCollection; +class vtkCallbackCommand; +class vtkImageData; + +class QLabel; +class QComboBox; +class QCheckBox; +class QPushButton; + +class QtxAction; +class QtxDblSpinBox; +class QtxIntSpinBox; + +class VISU_GaussPtsAct; +class VISU_PickingSettings; + +class SVTK_RenderWindowInteractor; + +//! Picking Dialog. +/*! + * Uses for set up picking preferenses and apply + * them to all actors in the current renderer. + */ +class VVTK_PickingDlg : public QDialog +{ + Q_OBJECT + +public: + VVTK_PickingDlg( QWidget* parent = 0, const char* name = 0 ); + ~VVTK_PickingDlg(); + + //! Used to switch toggle state of the Picking action. + void SetAction( QtxAction* theAction ) { myAction = theAction; } + + //! Make an actor to listen the event of Update Picking Settings event. + void AddActor( VISU_GaussPtsAct* ); + void RemoveActor( VISU_GaussPtsAct* ); + + //! Update dialog contents. + void Update(); + + VISU_PickingSettings* GetPickingSettings(); + + void SetInteractor( SVTK_RenderWindowInteractor* ); + +protected slots: + virtual void done( int ); + + void onClickApply(); + void onClickClose(); + + void onColorButtonPressed(); + +private: + static void ProcessEvents(vtkObject* theObject, + unsigned long theEvent, + void* theClientData, + void* theCallData); + + void KeyPressed(); + +private: + QtxDblSpinBox* myCursorSizeSpinBox; + QtxDblSpinBox* myPyramidHeightSpinBox; + QPushButton* mySelectionColorButton; + QtxDblSpinBox* myPointToleranceSpinBox; + QtxIntSpinBox* myTransparencySpinBox; + QComboBox* myPositionComboBox; + QtxDblSpinBox* myZoomFactorSpinBox; + QtxIntSpinBox* myStepNumberSpinBox; + QCheckBox* myDisplayParentMeshCheckBox; + + QtxAction* myAction; + vtkSmartPointer myPickingSettings; + + SVTK_RenderWindowInteractor* myInteractor; + + float myPriority; + vtkSmartPointer myEventCallbackCommand; +}; + +#endif diff --git a/src/VVTK/VVTK_PrimitiveBox.cxx b/src/VVTK/VVTK_PrimitiveBox.cxx new file mode 100644 index 00000000..84ef52b9 --- /dev/null +++ b/src/VVTK/VVTK_PrimitiveBox.cxx @@ -0,0 +1,358 @@ +// VISU VISUGUI : GUI of VISU 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 : VVTK_PrimitiveBox.cxx +// Author : Oleg UVAROV +// Module : VISU + +#include "VVTK_PrimitiveBox.h" + +#include "VISU_OpenGLPointSpriteMapper.hxx" + +#include "SUIT_ResourceMgr.h" +#include "SUIT_Session.h" + +#include "QtxDblSpinBox.h" +#include "QtxIntSpinBox.h" + +#include +#include +#include +#include +#include +#include +#include + +#include + +using namespace std; + +VVTK_PrimitiveBox::VVTK_PrimitiveBox( QWidget* parent ) : + QGroupBox( parent ) +{ + SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr(); + + setTitle( tr( "PRIMITIVE_TITLE" ) ); + setColumnLayout(0, Qt::Vertical ); + layout()->setSpacing( 0 ); + layout()->setMargin( 0 ); + + QGridLayout* aLayout = new QGridLayout( layout() ); + aLayout->setAlignment(Qt::AlignTop | Qt::AlignCenter); + aLayout->setSpacing(6); + aLayout->setMargin(11); + + myPrimitiveType = VISU_OpenGLPointSpriteMapper::PointSprite; + + QString aRootDir = QString( getenv( "VISU_ROOT_DIR") ) + "/share/salome/resources/"; + myMainTexture = aRootDir + "sprite_texture.bmp"; + myAlphaTexture = aRootDir + "sprite_alpha.bmp"; + + // Primitive Type + QButtonGroup* aPrimitiveTypeGroup = new QButtonGroup( 3, Qt::Horizontal, this, "PrimitiveTypeGroup" ); + aPrimitiveTypeGroup->setMinimumWidth( 450 ); + aPrimitiveTypeGroup->setRadioButtonExclusive( true ); + aPrimitiveTypeGroup->setFrameStyle( QFrame::NoFrame ); + aPrimitiveTypeGroup->layout()->setMargin( 0 ); + + myPointSpriteButton = new QRadioButton( tr( "POINT_SPRITE" ), aPrimitiveTypeGroup ); + myOpenGLPointButton = new QRadioButton( tr( "OPENGL_POINT" ), aPrimitiveTypeGroup ); + myGeomSphereButton = new QRadioButton( tr( "GEOMETRICAL_SPHERE" ), aPrimitiveTypeGroup ); + + aLayout->addMultiCellWidget( aPrimitiveTypeGroup, 0, 0, 0, 2 ); + + // Clamp ( Point Sprite & OpenGL Point ) + myClampLabel = new QLabel( tr( "CLAMP" ), this ); + myClampSpinBox = new QtxDblSpinBox( 1.0, 512.0, 1.0, this ); + myClampSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + aLayout->addWidget( myClampLabel, 1, 0 ); + aLayout->addMultiCellWidget( myClampSpinBox, 1, 1, 1, 2 ); + + // Main Texture ( Point Sprite ) + myMainTextureLabel = new QLabel( tr( "MAIN_TEXTURE" ), this ); + myMainTextureLineEdit = new QLineEdit( this ); + myMainTextureButton = new QPushButton( this ); + myMainTextureButton->setAutoDefault( false ); + myMainTextureButton->setPixmap( aResourceMgr->loadPixmap( "VISU", tr( "ICON_LOAD_TEXTURE" ) ) ); + connect( myMainTextureButton, SIGNAL( clicked() ), this, SLOT( onBrowseMainTexture() ) ); + + aLayout->addWidget( myMainTextureLabel, 2, 0 ); + aLayout->addWidget( myMainTextureLineEdit, 2, 1 ); + aLayout->addWidget( myMainTextureButton, 2, 2 ); + + // Alpha Texture ( Point Sprite ) + myAlphaTextureLabel = new QLabel( tr( "ALPHA_TEXTURE" ), this ); + myAlphaTextureLineEdit = new QLineEdit( this ); + myAlphaTextureButton = new QPushButton( this ); + myAlphaTextureButton->setAutoDefault( false ); + myAlphaTextureButton->setPixmap( aResourceMgr->loadPixmap( "VISU", tr( "ICON_LOAD_TEXTURE" ) ) ); + connect( myAlphaTextureButton, SIGNAL( clicked() ), this, SLOT( onBrowseAlphaTexture() ) ); + + aLayout->addWidget( myAlphaTextureLabel, 3, 0 ); + aLayout->addWidget( myAlphaTextureLineEdit, 3, 1 ); + aLayout->addWidget( myAlphaTextureButton, 3, 2 ); + + // Alpha Threshold ( Point Sprite ) + myAlphaThresholdLabel = new QLabel( tr( "ALPHA_THRESHOLD" ), this ); + myAlphaThresholdSpinBox = new QtxDblSpinBox( 0.0, 1.0, 0.1, this ); + myAlphaThresholdSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + aLayout->addWidget( myAlphaThresholdLabel, 4, 0 ); + aLayout->addMultiCellWidget( myAlphaThresholdSpinBox, 4, 4, 1, 2 ); + + // Resolution ( Geometrical Sphere ) + myResolutionLabel = new QLabel( tr( "RESOLUTION" ), this ); + myResolutionSpinBox = new QtxIntSpinBox( 3, 100, 1, this ); + myResolutionSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + connect( myResolutionSpinBox, SIGNAL( valueChanged( int ) ), this, SLOT( onResolutionChanged( int ) ) ); + + aLayout->addWidget( myResolutionLabel, 1, 0 ); + aLayout->addMultiCellWidget( myResolutionSpinBox, 1, 1, 1, 2 ); + + // Number of faces ( Geometrical Sphere ) + myFaceNumberLabel = new QLabel( tr( "FACE_NUMBER" ), this ); + myFaceNumberLineEdit = new QLineEdit( this ); + myFaceNumberLineEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + myFaceNumberLineEdit->setEnabled( false ); + //myFaceNumberLineEdit->setReadOnly( true ); + + aLayout->addWidget( myFaceNumberLabel, 2, 0 ); + aLayout->addMultiCellWidget( myFaceNumberLineEdit, 2, 2, 1, 2 ); + + // Notification ( Geometrical Sphere ) + myFaceLimitLabel = new QLabel( tr( "FACE_LIMIT" ), this ); + myFaceLimitSpinBox = new QtxIntSpinBox( 10, 1000000, 10, this ); + myFaceLimitSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + aLayout->addWidget( myFaceLimitLabel, 3, 0 ); + aLayout->addMultiCellWidget( myFaceLimitSpinBox, 3, 3, 1, 2 ); + + connect( myPointSpriteButton, SIGNAL( clicked() ), this, SLOT( onTogglePointSprite() ) ); + connect( myOpenGLPointButton, SIGNAL( clicked() ), this, SLOT( onToggleOpenGLPoint() ) ); + connect( myGeomSphereButton, SIGNAL( clicked() ), this, SLOT( onToggleGeomSphere() ) ); +} + +void VVTK_PrimitiveBox::onTogglePointSprite() +{ + myPrimitiveType = VISU_OpenGLPointSpriteMapper::PointSprite; + + myClampLabel->show(); + myClampSpinBox->show(); + + myMainTextureLabel->show(); + myMainTextureLineEdit->show(); + myMainTextureButton->show(); + + myAlphaTextureLabel->show(); + myAlphaTextureLineEdit->show(); + myAlphaTextureButton->show(); + + myAlphaThresholdLabel->show(); + myAlphaThresholdSpinBox->show(); + + myResolutionLabel->hide(); + myResolutionSpinBox->hide(); + + myFaceNumberLabel->hide(); + myFaceNumberLineEdit->hide(); + + myFaceLimitLabel->hide(); + myFaceLimitSpinBox->hide(); +} + +void VVTK_PrimitiveBox::onToggleOpenGLPoint() +{ + myPrimitiveType = VISU_OpenGLPointSpriteMapper::OpenGLPoint; + + myClampLabel->show(); + myClampSpinBox->show(); + + myMainTextureLabel->hide(); + myMainTextureLineEdit->hide(); + myMainTextureButton->hide(); + + myAlphaTextureLabel->hide(); + myAlphaTextureLineEdit->hide(); + myAlphaTextureButton->hide(); + + myAlphaThresholdLabel->hide(); + myAlphaThresholdSpinBox->hide(); + + myResolutionLabel->hide(); + myResolutionSpinBox->hide(); + + myFaceNumberLabel->hide(); + myFaceNumberLineEdit->hide(); + + myFaceLimitLabel->hide(); + myFaceLimitSpinBox->hide(); +} + +void VVTK_PrimitiveBox::onToggleGeomSphere() +{ + myPrimitiveType = VISU_OpenGLPointSpriteMapper::GeomSphere; + + myClampLabel->hide(); + myClampSpinBox->hide(); + + myMainTextureLabel->hide(); + myMainTextureLineEdit->hide(); + myMainTextureButton->hide(); + + myAlphaTextureLabel->hide(); + myAlphaTextureLineEdit->hide(); + myAlphaTextureButton->hide(); + + myAlphaThresholdLabel->hide(); + myAlphaThresholdSpinBox->hide(); + + myResolutionLabel->show(); + myResolutionSpinBox->show(); + + myFaceNumberLabel->show(); + myFaceNumberLineEdit->show(); + + myFaceLimitLabel->show(); + myFaceLimitSpinBox->show(); +} + +void VVTK_PrimitiveBox::onResolutionChanged( int theResolution ) +{ + setFaceNumber( 2 * theResolution * ( theResolution - 2 ) ); +} + +void VVTK_PrimitiveBox::setPrimitiveType( int theType ) +{ + myPrimitiveType = theType; + + switch( myPrimitiveType ) + { + case VISU_OpenGLPointSpriteMapper::PointSprite : + myPointSpriteButton->setChecked( true ); + onTogglePointSprite(); + break; + case VISU_OpenGLPointSpriteMapper::OpenGLPoint : + myOpenGLPointButton->setChecked( true ); + onToggleOpenGLPoint(); + break; + case VISU_OpenGLPointSpriteMapper::GeomSphere : + myGeomSphereButton->setChecked( true ); + onToggleGeomSphere(); + break; + default : break; + } +} + +float VVTK_PrimitiveBox::getClamp() const +{ + return myClampSpinBox->value(); +} + +void VVTK_PrimitiveBox::setClamp( float theClamp ) +{ + myClampSpinBox->setValue( theClamp ); +} + +void VVTK_PrimitiveBox::setClampMaximum( float theClampMaximum ) +{ + myClampSpinBox->setMaxValue( theClampMaximum ); +} + +void VVTK_PrimitiveBox::setMainTexture( const QString& theMainTexture ) +{ + myMainTexture = theMainTexture; + myMainTextureLineEdit->setText( theMainTexture.section( '/', -1 ) ); +} + +void VVTK_PrimitiveBox::setAlphaTexture( const QString& theAlphaTexture ) +{ + myAlphaTexture = theAlphaTexture; + myAlphaTextureLineEdit->setText( theAlphaTexture.section( '/', -1 ) ); +} + +float VVTK_PrimitiveBox::getAlphaThreshold() const +{ + return myAlphaThresholdSpinBox->value(); +} + +void VVTK_PrimitiveBox::setAlphaThreshold( float theAlphaThreshold ) +{ + myAlphaThresholdSpinBox->setValue( theAlphaThreshold ); +} + +int VVTK_PrimitiveBox::getResolution() const +{ + return myResolutionSpinBox->value(); +} + +void VVTK_PrimitiveBox::setResolution( int theResolution ) +{ + myResolutionSpinBox->setValue( theResolution ); +} + +int VVTK_PrimitiveBox::getFaceNumber() const +{ + int aResolution = getResolution(); + return 2 * aResolution * ( aResolution - 2 ); + //return myFaceNumberLineEdit->text().toInt(); +} + +void VVTK_PrimitiveBox::setFaceNumber( int theFaceNumber ) +{ + myFaceNumberLineEdit->setText( QString::number( theFaceNumber ) ); +} + +int VVTK_PrimitiveBox::getFaceLimit() const +{ + return myFaceLimitSpinBox->value(); +} + +void VVTK_PrimitiveBox::setFaceLimit( int theFaceLimit ) +{ + myFaceLimitSpinBox->setValue( theFaceLimit ); +} + +void VVTK_PrimitiveBox::onBrowseMainTexture() +{ + QString aRootDir = QString( getenv( "VISU_ROOT_DIR") ) + "/share/salome/resources/"; + QString aFileName = QFileDialog::getOpenFileName( aRootDir, "Bitmap (*.bmp *.jpg *.png)", this ); + + if( aFileName.isNull() ) + return; + + myMainTexture = aFileName; + myMainTextureLineEdit->setText( aFileName.section( '/', -1 ) ); +} + +void VVTK_PrimitiveBox::onBrowseAlphaTexture() +{ + QString aRootDir = QString( getenv( "VISU_ROOT_DIR") ) + "/share/salome/resources/"; + QString aFileName = QFileDialog::getOpenFileName( aRootDir, "Bitmap (*.bmp *.jpg *.png)", this ); + + if( aFileName.isNull() ) + return; + + myAlphaTexture = aFileName; + myAlphaTextureLineEdit->setText( aFileName.section( '/', -1 ) ); +} diff --git a/src/VVTK/VVTK_PrimitiveBox.h b/src/VVTK/VVTK_PrimitiveBox.h new file mode 100644 index 00000000..a6b8a0af --- /dev/null +++ b/src/VVTK/VVTK_PrimitiveBox.h @@ -0,0 +1,121 @@ +// VISU VISUGUI : GUI of VISU 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 : VVTK_PrimitiveBox.h +// Author : Oleg UVAROV +// Module : VISU + +#ifndef VVTK_PRIMITIVEBOX_H +#define VVTK_PRIMITIVEBOX_H + +#include + +class QLabel; +class QLineEdit; +class QPushButton; +class QRadioButton; + +class QtxDblSpinBox; +class QtxIntSpinBox; + +class VVTK_PrimitiveBox : public QGroupBox +{ + Q_OBJECT + +public: + VVTK_PrimitiveBox( QWidget* ); + ~VVTK_PrimitiveBox() {} + +public: + int getPrimitiveType() const { return myPrimitiveType; } + void setPrimitiveType( int ); + + float getClamp() const; + void setClamp( float ); + void setClampMaximum( float ); + + QString getMainTexture() const { return myMainTexture; } + void setMainTexture( const QString& ); + + QString getAlphaTexture() const { return myAlphaTexture; } + void setAlphaTexture( const QString& ); + + float getAlphaThreshold() const; + void setAlphaThreshold( float ); + + int getResolution() const; + void setResolution( int ); + + int getFaceNumber() const; + void setFaceNumber( int ); + + int getFaceLimit() const; + void setFaceLimit( int ); + +protected slots: + void onTogglePointSprite(); + void onToggleOpenGLPoint(); + void onToggleGeomSphere(); + + void onBrowseMainTexture(); + void onBrowseAlphaTexture(); + + void onResolutionChanged( int ); + +private: + int myPrimitiveType; + + QRadioButton* myPointSpriteButton; + QRadioButton* myOpenGLPointButton; + QRadioButton* myGeomSphereButton; + + QString myMainTexture; + QString myAlphaTexture; + + QLabel* myClampLabel; + QtxDblSpinBox* myClampSpinBox; + + QLabel* myMainTextureLabel; + QLineEdit* myMainTextureLineEdit; + QPushButton* myMainTextureButton; + + QLabel* myAlphaTextureLabel; + QLineEdit* myAlphaTextureLineEdit; + QPushButton* myAlphaTextureButton; + + QLabel* myAlphaThresholdLabel; + QtxDblSpinBox* myAlphaThresholdSpinBox; + + QLabel* myResolutionLabel; + QtxIntSpinBox* myResolutionSpinBox; + + QLabel* myFaceNumberLabel; + QLineEdit* myFaceNumberLineEdit; + + QLabel* myFaceLimitLabel; + QtxIntSpinBox* myFaceLimitSpinBox; +}; + + + +#endif diff --git a/src/VVTK/VVTK_Recorder.cxx b/src/VVTK/VVTK_Recorder.cxx new file mode 100755 index 00000000..e9c734e9 --- /dev/null +++ b/src/VVTK/VVTK_Recorder.cxx @@ -0,0 +1,464 @@ +// SALOME VTKViewer : build VTK viewer into Salome desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : +// Author : +// Module : +// $Header$ + +#include "VVTK_Recorder.h" + +#include "VVTK_ImageWriter.h" +#include "VVTK_ImageWriterMgr.h" + +#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 + + +namespace +{ + //---------------------------------------------------------------------------- + inline + void + GetNameJPEG(const std::string& thePreffix, + const int theIndex, + std::string& theName) + { + using namespace std; + ostringstream aStream; + aStream<SetClientData(this); + myCommand->SetCallback(VVTK_Recorder::ProcessEvents); +} + + +//---------------------------------------------------------------------------- +VVTK_Recorder +::~VVTK_Recorder() +{ + myCommand->Delete(); + myFilter->Delete(); + delete myWriterMgr; +} + + +//---------------------------------------------------------------------------- +void +VVTK_Recorder +::CheckExistAVIMaker() +{ + myErrorStatus = 0; + using namespace std; + ostringstream aStream; + aStream<<"which "<& /dev/null"; + std::string anAVIMakeCheck = aStream.str(); + int iErr = system(anAVIMakeCheck.c_str()); + if(iErr != 0) + myErrorStatus = 127; +} + + +//---------------------------------------------------------------------------- +void +VVTK_Recorder +::SetName(const char* theName) +{ + myName = theName; +} + +const char* +VVTK_Recorder::Name() const +{ + return myName.c_str(); +} + + +//---------------------------------------------------------------------------- +void +VVTK_Recorder +::SetNbFPS(const double theNbFPS) +{ + myNbFPS = theNbFPS; +} + +double +VVTK_Recorder +::NbFPS() const +{ + return myNbFPS; +} + + +//---------------------------------------------------------------------------- +void +VVTK_Recorder +::SetQuality(int theQuality) +{ + myQuality = theQuality; +} + +int +VVTK_Recorder +::GetQuality() const +{ + return myQuality; +} + + +//---------------------------------------------------------------------------- +void +VVTK_Recorder +::SetRenderWindow(vtkRenderWindow* theRenderWindow) +{ + myRenderWindow = theRenderWindow; +} + +vtkRenderWindow* +VVTK_Recorder +::RenderWindow() +{ + return myRenderWindow; +} + + +//---------------------------------------------------------------------------- +void +VVTK_Recorder +::SetProgressiveMode(bool theProgressiveMode) +{ + myProgressiveMode = theProgressiveMode; +} + +bool +VVTK_Recorder +::GetProgressiveMode() const +{ + return myProgressiveMode; +} + + +//---------------------------------------------------------------------------- +void +VVTK_Recorder +::SetUseSkippedFrames(bool theUseSkippedFrames) +{ + myUseSkippedFrames = theUseSkippedFrames; +} + +bool +VVTK_Recorder +::UseSkippedFrames() const +{ + return myUseSkippedFrames; +} + + +//---------------------------------------------------------------------------- +int +VVTK_Recorder +::ErrorStatus() const +{ + return myErrorStatus; +} + +int +VVTK_Recorder +::State() const +{ + return myState; +} + + +//---------------------------------------------------------------------------- +void +VVTK_Recorder +::ProcessEvents(vtkObject* vtkNotUsed(theObject), + unsigned long theEvent, + void* theClientData, + void* vtkNotUsed(theCallData)) +{ + if(vtkObject* anObj = reinterpret_cast(theClientData)){ + if(VVTK_Recorder* aSelf = dynamic_cast(anObj)){ + if(theEvent==vtkCommand::EndEvent){ + if(aSelf->State() == VVTK_Recorder::VVTK_Recorder_Record){ + aSelf->DoRecord(); + } + } + } + } +} + + +//---------------------------------------------------------------------------- +void +VVTK_Recorder +::Record() +{ + if(myState == VVTK_Recorder_Stop){ + if(myRenderWindow){ + myState = VVTK_Recorder_Record; + myFilter->SetInput(myRenderWindow); + myFrameIndex = -1; + myNbWrittenFrames = 0; + myRenderWindow->RemoveObserver(myCommand); + myRenderWindow->AddObserver(vtkCommand::EndEvent, + myCommand, + myPriority); + myRenderWindow->Render(); + } + } +} + + +//---------------------------------------------------------------------------- +void +VVTK_Recorder +::Stop() +{ + QApplication::setOverrideCursor( Qt::waitCursor ); + + if(myState == VVTK_Recorder_Record){ + if(!myPaused) + DoRecord(); + + myWriterMgr->Stop(); + + if(myUseSkippedFrames) + AddSkippedFrames(); + + myFrameIndexes.clear(); + + MakeFileAVI(); + } + myState = VVTK_Recorder_Stop; + myPaused = 0; + + QApplication::restoreOverrideCursor(); +} + + +//---------------------------------------------------------------------------- +void +VVTK_Recorder +::Pause() +{ + myPaused = myPaused ? 0 : 1; + if(myPaused && !myFrameIndexes.empty()){ + size_t aLastId = myFrameIndexes.size() - 1; + myFrameIndexes[aLastId] *= -1; + } +} + + +//---------------------------------------------------------------------------- +void +VVTK_Recorder +::DoRecord() +{ + if(myPaused) + return; + + if(myFrameIndex < 0){ + myFrameIndex = 0; + myTimeStart = vtkTimerLog::GetCurrentTime(); + }else{ + double aTimeNow = vtkTimerLog::GetCurrentTime(); + double aDelta = aTimeNow - myTimeStart; + if(aDelta < 0.0) + return; + + int aFrameIndex = int(aDelta*myNbFPS); + if(aFrameIndex == myFrameIndex) + return; + + myFrameIndex = aFrameIndex; + } + + myFrameIndexes.push_back(myFrameIndex); + if(MYDEBUG) cout<<"VVTK_Recorder::DoRecord - myFrameIndex = "<RemoveObserver(myCommand); + myFilter->Modified(); + + std::string aName; + GetNameJPEG(myName,myFrameIndex,aName); + + PreWrite(); + + vtkImageData *anImageData = vtkImageData::New(); + anImageData->DeepCopy(myFilter->GetOutput()); + + myWriterMgr->StartImageWriter(anImageData,aName,myProgressiveMode,myQuality); + myNbWrittenFrames++; + + myRenderWindow->AddObserver(vtkCommand::EndEvent, + myCommand, + myPriority); +} + + +//---------------------------------------------------------------------------- +void +VVTK_Recorder +::PreWrite() +{ + vtkImageData *anImageData = myFilter->GetOutput(); + // + if(!anImageData){ + myErrorStatus = 20; + return; + } + anImageData->UpdateInformation(); + int *anExtent = anImageData->GetWholeExtent(); + anImageData->SetUpdateExtent(anExtent[0], anExtent[1], + anExtent[2], anExtent[3], + 0,0); + anImageData->UpdateData(); +} + + +//---------------------------------------------------------------------------- +void +VVTK_Recorder +::AddSkippedFrames() +{ + myErrorStatus = 0; + + if(myFrameIndexes.size() < 2) + return; + + size_t anId = 0, anEnd = myFrameIndexes.size() - 1; + for(; anId < anEnd; anId++){ + int aStartIndex = myFrameIndexes[anId]; + if(aStartIndex < 0) + continue; + + int aFinishIndex = abs(myFrameIndexes[anId + 1]); + if(aStartIndex + 1 == aFinishIndex) + continue; + + std::string anInitialName; + std::ostringstream aStream; + GetNameJPEG(myName,aStartIndex,anInitialName); + for(int anIndex = aStartIndex + 1; anIndex < aFinishIndex; anIndex++){ + myNbWrittenFrames++; + std::string anCurrentName; + GetNameJPEG(myName,anIndex,anCurrentName); + aStream<<"ln -s "<< anInitialName<<" "< +#include +#include + +#include + +class vtkRenderWindow; +class vtkCallbackCommand; +class vtkWindowToImageFilter; +class VVTK_ImageWriterMgr; +// +class VVTK_Recorder : public vtkObject +{ + protected: + enum State { + VVTK_Recorder_Unknown=0, + VVTK_Recorder_Record, + VVTK_Recorder_Stop + }; + + public: + static VVTK_Recorder *New(); + vtkTypeRevisionMacro(VVTK_Recorder,vtkObject); + + void + SetRenderWindow(vtkRenderWindow* theRenderWindow); + + vtkRenderWindow* + RenderWindow(); + + void + SetName(const char *theName); + + const char* + Name() const; + + void + SetNbFPS(const double theNbFPS); + + double + NbFPS() const; + + void + SetQuality(int theQuality); + + int + GetQuality() const; + + void + SetProgressiveMode(bool theProgressiveMode); + + bool + GetProgressiveMode() const; + + void + SetUseSkippedFrames(bool theUseSkippedFrames); + + bool + UseSkippedFrames() const; + + void + Record(); + + void + Pause(); + + void + Stop(); + + int + State() const; + + int + ErrorStatus() const; + + void + CheckExistAVIMaker(); + +protected : + VVTK_Recorder(); + + ~VVTK_Recorder(); + + void + DoRecord(); + + void + MakeFileAVI(); + + void + AddSkippedFrames(); + + void + PreWrite(); + + static + void + ProcessEvents(vtkObject* theObject, + unsigned long theEvent, + void* theClientData, + void* theCallData); + +protected : + int myState; + int myPaused; + int myErrorStatus; + + float myPriority; + double myTimeStart; + + int myFrameIndex; + int myNbWrittenFrames; + + double myNbFPS; + int myQuality; + bool myProgressiveMode; + + typedef std::vector TFrameIndexes; + TFrameIndexes myFrameIndexes; + bool myUseSkippedFrames; + + std::string myName; + std::string myNameAVIMaker; + + vtkCallbackCommand *myCommand; + vtkRenderWindow *myRenderWindow; + vtkWindowToImageFilter *myFilter; + VVTK_ImageWriterMgr *myWriterMgr; + + +private: + VVTK_Recorder(const VVTK_Recorder&); //Not implemented + void operator=(const VVTK_Recorder&); //Not implemented +}; +#endif diff --git a/src/VVTK/VVTK_RecorderDlg.cxx b/src/VVTK/VVTK_RecorderDlg.cxx new file mode 100644 index 00000000..b188c99e --- /dev/null +++ b/src/VVTK/VVTK_RecorderDlg.cxx @@ -0,0 +1,183 @@ +// VISU VISUGUI : GUI of VISU 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 : VVTK_RecorderDlg.cxx +// Author : Oleg UVAROV +// Module : VISU + +#include "VVTK_RecorderDlg.h" +#include "VVTK_Recorder.h" + +#include "SUIT_FileDlg.h" +#include "SUIT_ResourceMgr.h" +#include "SUIT_Session.h" + +#include "QtxDblSpinBox.h" +#include "QtxIntSpinBox.h" + +#include +#include +#include +#include +#include +#include +#include + +/*! + * Constructor + */ +VVTK_RecorderDlg::VVTK_RecorderDlg( QWidget* theParent, VVTK_Recorder* theRecorder ): + QDialog( theParent, "VVTK_RecorderDlg", false ), + myRecorder( theRecorder ) +{ + setCaption( tr( "DLG_RECORDER_TITLE" ) ); + + SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr(); + + QVBoxLayout* aTopLayout = new QVBoxLayout( this ); + aTopLayout->setSpacing( 6 ); + aTopLayout->setMargin( 6 ); + aTopLayout->setAutoAdd( true ); + + // Settings + QGroupBox* mySettingsBox = new QGroupBox( tr( "SETTINGS" ), this ); + mySettingsBox->setColumnLayout( 0, Qt::Vertical ); + mySettingsBox->layout()->setSpacing( 0 ); + mySettingsBox->layout()->setMargin( 0 ); + + QGridLayout* aSettingsLayout = new QGridLayout( mySettingsBox->layout() ); + aSettingsLayout->setSpacing( 6 ); + aSettingsLayout->setMargin( 11 ); + + QLabel* aFileNameLabel = new QLabel( tr( "FILE_NAME" ), mySettingsBox ); + myFileNameLineEdit = new QLineEdit( mySettingsBox ); + myFileNameLineEdit->setMinimumWidth( 250 ); + myFileNameLineEdit->setReadOnly( true ); + /* + QPushButton* aFileNameButton = new QPushButton( mySettingsBox ); + aFileNameButton->setAutoDefault( false ); + aFileNameButton->setPixmap( aResourceMgr->loadPixmap( "VISU", tr( "ICON_LOAD_TEXTURE" ) ) ); + connect( aFileNameButton, SIGNAL( clicked() ), this, SLOT( onBrowseFile() ) ); + */ + QLabel* aRecordingModeLabel = new QLabel( tr( "RECORDING_MODE" ), mySettingsBox ); + myRecordingModeComboBox = new QComboBox( mySettingsBox ); + myRecordingModeComboBox->insertItem( tr( "SKIPPED_FRAMES" ) ); + myRecordingModeComboBox->insertItem( tr( "ALL_DISLPAYED_FRAMES" ) ); + myRecordingModeComboBox->setCurrentItem( aResourceMgr->integerValue( "VISU", "recorder_mode", 1 ) ); + + QLabel* aFPSLabel = new QLabel( tr( "FPS" ), mySettingsBox ); + myFPSSpinBox = new QtxDblSpinBox( 0.1, 100.0, 1.0, mySettingsBox ); + myFPSSpinBox->setValue( aResourceMgr->doubleValue( "VISU", "recorder_fps", 10.0 ) ); + + QLabel* aQualityLabel = new QLabel( tr( "QUALITY" ), mySettingsBox ); + myQualitySpinBox = new QtxIntSpinBox( 1, 100, 1, mySettingsBox ); + myQualitySpinBox->setValue( aResourceMgr->integerValue( "VISU", "recorder_quality", 80 ) ); + + myProgressiveCheckBox = new QCheckBox( tr( "PROGRESSIVE" ), mySettingsBox ); + myProgressiveCheckBox->setChecked( aResourceMgr->booleanValue( "VISU", "recorder_progressive", false ) ); + + aSettingsLayout->addWidget( aFileNameLabel, 0, 0 ); + aSettingsLayout->addMultiCellWidget( myFileNameLineEdit, 1, 1, 0, 1 ); + //aSettingsLayout->addWidget( aFileNameButton, 1, 2 ); + aSettingsLayout->addWidget( aRecordingModeLabel, 2, 0 ); + aSettingsLayout->addWidget( myRecordingModeComboBox, 2, 1 ); + aSettingsLayout->addWidget( aFPSLabel, 3, 0 ); + aSettingsLayout->addWidget( myFPSSpinBox, 3, 1 ); + aSettingsLayout->addWidget( aQualityLabel, 4, 0 ); + aSettingsLayout->addWidget( myQualitySpinBox, 4, 1 ); + aSettingsLayout->addWidget( myProgressiveCheckBox, 5, 0 ); + + // Start / Close + QGroupBox* CommonGroup = new QGroupBox( this ); + CommonGroup->setColumnLayout(0, Qt::Vertical ); + CommonGroup->layout()->setSpacing( 0 ); + CommonGroup->layout()->setMargin( 0 ); + QGridLayout* CommonGroupLayout = new QGridLayout( CommonGroup->layout() ); + CommonGroupLayout->setAlignment( Qt::AlignTop ); + CommonGroupLayout->setSpacing( 6 ); + CommonGroupLayout->setMargin( 11 ); + + QPushButton* aStartButton = new QPushButton( tr( "START" ), CommonGroup ); + aStartButton->setAutoDefault( true ); + aStartButton->setDefault( true ); + CommonGroupLayout->addWidget( aStartButton, 0, 0 ); + CommonGroupLayout->addItem( new QSpacerItem( 5, 5, QSizePolicy::Expanding, QSizePolicy::Minimum ), 0, 1 ); + + QPushButton* aCloseButton = new QPushButton( tr( "CLOSE" ), CommonGroup ); + aCloseButton->setAutoDefault( true ); + CommonGroupLayout->addWidget( aCloseButton, 0, 2 ); + + connect( aStartButton, SIGNAL( clicked() ), this, SLOT( onStart() ) ); + connect( aCloseButton, SIGNAL( clicked() ), this, SLOT( onClose() ) ); +} + +VVTK_RecorderDlg::~VVTK_RecorderDlg() +{ +} + +void VVTK_RecorderDlg::show() +{ + if( onBrowseFile() ) + QWidget::show(); +} + +void VVTK_RecorderDlg::onStart() +{ + if( myFileName.isNull() ) + return; + + myRecorder->SetName( myFileName.latin1() ); + + myRecorder->SetUseSkippedFrames( myRecordingModeComboBox->currentItem() == 0 ); + myRecorder->SetNbFPS( myFPSSpinBox->value() ); + myRecorder->SetQuality( myQualitySpinBox->value() ); + myRecorder->SetProgressiveMode( myProgressiveCheckBox->isChecked() ); + + accept(); + +} + +void VVTK_RecorderDlg::onClose() +{ + reject(); +} + +bool VVTK_RecorderDlg::onBrowseFile() +{ + QString aRootDir = QString( getenv( "VISU_ROOT_DIR") ); + + QStringList aFilter; + aFilter.append( tr( "FLT_AVI_FILES" ) ); + aFilter.append( tr( "FLT_ALL_FILES" ) ); + + QString aFileName = SUIT_FileDlg::getFileName( this, getenv( "HOME" ), aFilter, + tr( "FILE_NAME" ), false ); + + if( aFileName.isNull() ) + return false; + + myFileName = aFileName; + myFileNameLineEdit->setText( aFileName.section( '/', -1 ) ); + + return true; +} diff --git a/src/VISUGUI/VisuGUI_FontWg.h b/src/VVTK/VVTK_RecorderDlg.h old mode 100755 new mode 100644 similarity index 52% rename from src/VISUGUI/VisuGUI_FontWg.h rename to src/VVTK/VVTK_RecorderDlg.h index e3a45ee4..f46ef1b1 --- a/src/VISUGUI/VisuGUI_FontWg.h +++ b/src/VVTK/VVTK_RecorderDlg.h @@ -1,3 +1,5 @@ +// VISU VISUGUI : GUI of VISU component +// // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // @@ -19,50 +21,60 @@ // // // -// File : VisuGUI_FontWg.h -// Author : Sergey LITONIN +// File : VVTK_RecorderDlg.h +// Author : Oleg UVAROV // Module : VISU +// $Header$ +#ifndef VVTK_RECORDERDLG_H +#define VVTK_RECORDERDLG_H -#ifndef VisuGUI_FontWg_H -#define VisuGUI_FontWg_H - -#include +#include +#include -class QToolButton; -class QComboBox; class QCheckBox; -class QColor; +class QComboBox; +class QGroupBox; +class QLCDNumber; +class QLineEdit; +class QPushButton; +class QTimer; +class QtxDblSpinBox; +class QtxIntSpinBox; -/*! - * Class : VisuGUI_FontWg - * Description : Dialog for specifynig font - */ -class VisuGUI_FontWg : public QHBox +class VVTK_Recorder; + +//! Recorder Dialog. +class VVTK_RecorderDlg : public QDialog { Q_OBJECT public: - VisuGUI_FontWg( QWidget* ); - virtual ~VisuGUI_FontWg(); + VVTK_RecorderDlg( QWidget*, VVTK_Recorder* ); + ~VVTK_RecorderDlg(); - void SetColor( const QColor& ); - QColor GetColor() const; + virtual void show(); - void SetData( const QColor&, const int, const bool, const bool, const bool ); + QString fileName() const { return myFileName; } - void GetData( QColor&, int&, bool&, bool&, bool& ) const; +protected slots: + void onStart(); + void onClose(); -private slots: - void onColor(); + bool onBrowseFile(); private: - QToolButton* myColorBtn; - QComboBox* myFamily; - QCheckBox* myBold; - QCheckBox* myItalic; - QCheckBox* myShadow; + VVTK_Recorder* myRecorder; + QString myFileName; + + QLineEdit* myFileNameLineEdit; + + QComboBox* myRecordingModeComboBox; + QtxDblSpinBox* myFPSSpinBox; + QtxIntSpinBox* myQualitySpinBox; + QCheckBox* myProgressiveCheckBox; + }; #endif diff --git a/src/VVTK/VVTK_Renderer.cxx b/src/VVTK/VVTK_Renderer.cxx new file mode 100644 index 00000000..484eff95 --- /dev/null +++ b/src/VVTK/VVTK_Renderer.cxx @@ -0,0 +1,432 @@ +// SALOME VTKViewer : build VTK viewer into Salome desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : +// Author : +// Module : +// $Header$ + +#include "VVTK_Renderer.h" + +#include "VISU_GaussPtsAct.h" +#include "VISU_GaussPointsPL.hxx" +#include "VISU_WidgetCtrl.hxx" +#include "VISU_PlanesWidget.hxx" +#include "VISU_SphereWidget.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 "utilities.h" + +#ifdef _DEBUG_ +static int MYDEBUG = 0; +#else +static int MYDEBUG = 0; +#endif + +//====================================================================== +class VISU_FPSActor : public vtkTextActor +{ +public: + vtkTypeMacro( VISU_FPSActor, vtkTextActor); + static + VISU_FPSActor* + New(); + + virtual + int + RenderOpaqueGeometry(vtkViewport *theViewport); +}; + +//====================================================================== +vtkStandardNewMacro(VISU_FPSActor); + +//====================================================================== +// function: RenderOpaqueGeometry +// purpose : +//====================================================================== +int +VISU_FPSActor +::RenderOpaqueGeometry(vtkViewport *theViewport) +{ + // It's impossible to render opaque geometry of text actor + // if the size of the viewport is less than 1.0 + int *size = theViewport->GetSize(); + if( size[0] <= 1.0 || size[1] <= 1.0 ) + return 1; + + if(vtkRenderer *aRenderer = dynamic_cast(theViewport)){ + static float aTol = 1.e-6; + float aLastRenderTimeInSeconds = aRenderer->GetLastRenderTimeInSeconds(); + if(aLastRenderTimeInSeconds > aTol){ + size_t aNumberOfCells = 0; + if(vtkActorCollection *anActorCollection = aRenderer->GetActors()){ + anActorCollection->InitTraversal(); + while(vtkActor *anActor = anActorCollection->GetNextActor()){ + if(anActor->GetVisibility()){ + if(SALOME_Actor *aSActor = dynamic_cast(anActor)){ + if(vtkMapper *aMapper = aSActor->GetMapper()){ + if(vtkDataSet *aDataSet = aMapper->GetInput()){ + aNumberOfCells += aDataSet->GetNumberOfCells(); + } + } + } + } + } + } + std::ostringstream aStr; + float aFPS = 1.0 / aLastRenderTimeInSeconds; + aStr<<"FPS: "<Delete(); + + vtkTextMapper* aTextMapper = vtkTextMapper::New(); + vtkTextProperty *aTextProperty = aTextMapper->GetTextProperty(); + aTextProperty->SetJustificationToRight(); + aTextProperty->SetVerticalJustificationToTop(); + aTextProperty->SetFontSize(10); + + myFPSActor->SetPickable(false); + myFPSActor->ScaledTextOff(); + myFPSActor->SetAlignmentPoint(8); + myFPSActor->SetPosition2 (1., 1.); + myFPSActor->SetMapper(aTextMapper); + aTextMapper->Delete(); + + GetDevice()->AddActor2D(myFPSActor.GetPointer()); + + myGaussPointPicker->Delete(); + + myGaussPreHighlightProperty->Delete(); + myGaussPreHighlightProperty->SetColor(0,1,1); + + myGaussHighlightProperty->Delete(); + myGaussHighlightProperty->SetColor(1,1,0); + +} + +VVTK_Renderer +::~VVTK_Renderer() +{ + if(MYDEBUG) INFOS("~VVTK_Renderer() - "<(theActor)){ + anActor->SetPointPicker(myGaussPointPicker.GetPointer()); + anActor->SetPreHighlightProperty(myGaussPreHighlightProperty.GetPointer()); + anActor->SetHighlightProperty(myGaussHighlightProperty.GetPointer()); + + anActor->SetInsideCursorSettings(myInsideCursorSettings); + anActor->SetPickingSettings(myPickingSettings); + } +} + +//---------------------------------------------------------------------------- +void +VVTK_Renderer +::RemoveActor(VTKViewer_Actor* theActor) +{ + Superclass::RemoveActor(theActor); + if(VISU_GaussPtsAct* anActor = dynamic_cast(theActor)){ + anActor->SetPointPicker(NULL); + anActor->SetPreHighlightProperty(NULL); + anActor->SetHighlightProperty(NULL); + + anActor->SetInsideCursorSettings(NULL); + anActor->SetPickingSettings(NULL); + } +} + +//---------------------------------------------------------------------------- +void +VVTK_Renderer +::SetInsideCursorSettings(VISU_InsideCursorSettings* theInsideCursorSettings) +{ + myInsideCursorSettings = theInsideCursorSettings; +} + +//---------------------------------------------------------------------------- +void +VVTK_Renderer +::SetPickingSettings(VISU_PickingSettings* thePickingSettings) +{ + myPickingSettings = thePickingSettings; +} + + +//---------------------------------------------------------------------------- +vtkStandardNewMacro(VVTK_Renderer1); + +//---------------------------------------------------------------------------- +VVTK_Renderer1::VVTK_Renderer1(): + //myImplicitFunctionWidget(VISU_ImplicitFunctionWidget::New()), + myWidgetCtrl(VISU_WidgetCtrl::New()), + myOutsideCursorSettings(NULL) +{ + if(MYDEBUG) INFOS("VVTK_Renderer1() - "<SetPlaceFactor(1.1); + myWidgetCtrl->SetPlaceFactor(1.1); + // + VISU_PlanesWidget *pPlanesWidget=myWidgetCtrl->GetPlanesWidget(); + pPlanesWidget->SetOutlineTranslation(false); + vtkProperty* aSelectedPlaneProperty = pPlanesWidget->GetSelectedPlaneProperty(); + vtkProperty* aPlaneProperty = pPlanesWidget->GetPlaneProperty(); + aPlaneProperty->SetOpacity(aSelectedPlaneProperty->GetOpacity()*1.5); + // + myWidgetCtrl->Delete(); +} + +VVTK_Renderer1 +::~VVTK_Renderer1() +{ + if(MYDEBUG) INFOS("~VVTK_Renderer1() - "<SetInteractor(NULL); +} + +//---------------------------------------------------------------------------- +void +VVTK_Renderer1 +::AddActor(VTKViewer_Actor* theActor) +{ + Superclass::AddActor(theActor); + if(VISU_GaussPtsAct1* anActor = dynamic_cast(theActor)){ + anActor->SetWidgetCtrl(GetWidgetCtrl()); + anActor->SetOutsideCursorSettings(myOutsideCursorSettings); + AdjustWidgetCtrl(); + } +} + +//---------------------------------------------------------------------------- +void +VVTK_Renderer1 +::RemoveActor(VTKViewer_Actor* theActor) +{ + Superclass::RemoveActor(theActor); + if(VISU_GaussPtsAct1* anActor = dynamic_cast(theActor)){ + anActor->SetWidgetCtrl(NULL); + anActor->SetOutsideCursorSettings(NULL); + AdjustWidgetCtrl(); + } +} +//---------------------------------------------------------------------------- +void VVTK_Renderer1::AdjustWidgetCtrl() +{ + if(SVTK_Renderer::OnAdjustActors()){ + VISU_PlanesWidget *pPlanesWidget=myWidgetCtrl->GetPlanesWidget(); + pPlanesWidget->InitialPlaceWidget(myBndBox); + pPlanesWidget->SetOrigin(0.5*(myBndBox[1] + myBndBox[0]), + 0.5*(myBndBox[3] + myBndBox[2]), + 0.5*(myBndBox[5] + myBndBox[4])); + // + VISU_SphereWidget *pSphereWidget=myWidgetCtrl->GetSphereWidget(); + pSphereWidget->SetCenter(0.5*(myBndBox[1] + myBndBox[0]), + 0.5*(myBndBox[3] + myBndBox[2]), + 0.5*(myBndBox[5] + myBndBox[4])); + float dX, dXmin=1.e20; + for (int i=0; i<3; ++i) { + dX=myBndBox[2*i+1]-myBndBox[2*i]; + if (dXSetRadius(dXmin); + } +} +//---------------------------------------------------------------------------- +void +VVTK_Renderer1 +::Initialize(vtkRenderWindowInteractor* theInteractor, + SVTK_Selector* theSelector) +{ + SVTK_Renderer::Initialize(theInteractor,theSelector); + myWidgetCtrl->SetInteractor(theInteractor); +} + +//---------------------------------------------------------------------------- +void +VVTK_Renderer1 +::SetOutsideCursorSettings(VISU_OutsideCursorSettings* theOutsideCursorSettings) +{ + myOutsideCursorSettings = theOutsideCursorSettings; +} + +//---------------------------------------------------------------------------- +VISU_WidgetCtrl* VVTK_Renderer1::GetWidgetCtrl() +{ + return myWidgetCtrl.GetPointer(); +} + +//---------------------------------------------------------------------------- +bool +VVTK_Renderer1 +::OnAdjustActors() +{ + return SVTK_Renderer::OnAdjustActors(); +} + + +//---------------------------------------------------------------------------- +vtkStandardNewMacro(VVTK_Renderer2); + +//---------------------------------------------------------------------------- +VVTK_Renderer2 +::VVTK_Renderer2(): + myEventCallbackCommand(vtkCallbackCommand::New()) +{ + if(MYDEBUG) INFOS("VVTK_Renderer2() - "<Delete(); + + myPriority = 0.0; + myEventCallbackCommand->SetClientData(this); + myEventCallbackCommand->SetCallback(VVTK_Renderer2::ProcessEvents); +} + +VVTK_Renderer2 +::~VVTK_Renderer2() +{ + if(MYDEBUG) INFOS("~VVTK_Renderer2() - "<AddObserver(vtkCommand::EndInteractionEvent, + myEventCallbackCommand.GetPointer(), + myPriority); + theWidgetCtrl->AddObserver(vtkCommand::EnableEvent, + myEventCallbackCommand.GetPointer(), + myPriority); + theWidgetCtrl->AddObserver(vtkCommand::DisableEvent, + myEventCallbackCommand.GetPointer(), + myPriority); + myWidgetCtrl = theWidgetCtrl; +} + +void +VVTK_Renderer2 +::ProcessEvents(vtkObject* vtkNotUsed(theObject), + unsigned long theEvent, + void* theClientData, + void* vtkNotUsed(theCallData)) +{ + VVTK_Renderer2* self = reinterpret_cast(theClientData); + + switch(theEvent){ + case vtkCommand::EnableEvent: + case vtkCommand::EndInteractionEvent: + self->OnEndInteractionEvent(); + break; + } +} + +void +VVTK_Renderer2 +::OnEndInteractionEvent() +{ + AdjustActors(); + myInteractor->Render(); +} + + +//---------------------------------------------------------------------------- +void VVTK_Renderer2::AddActor(VTKViewer_Actor* theActor) +{ + if(VISU_GaussPtsAct1* anActor = dynamic_cast(theActor)){ + if(VISU::TGaussPtsActorFactory* aFactory = anActor->GetGaussPtsFactory()){ + if(VISU_GaussPtsAct2* anActor2 = aFactory->CloneActor(anActor)){ + anActor2->SetWidgetCtrl(myWidgetCtrl); + Superclass::AddActor(anActor2); + } + } + } +} + +//---------------------------------------------------------------------------- +void +VVTK_Renderer2 +::RemoveActor(VTKViewer_Actor* theActor) +{ + using namespace VISU; + if(VISU_GaussPtsAct2* anActor = dynamic_cast(theActor)){ + anActor->SetWidgetCtrl(NULL); + Superclass::RemoveActor(theActor); + } +} diff --git a/src/VVTK/VVTK_Renderer.h b/src/VVTK/VVTK_Renderer.h new file mode 100644 index 00000000..1f566884 --- /dev/null +++ b/src/VVTK/VVTK_Renderer.h @@ -0,0 +1,179 @@ +// SALOME VTKViewer : build VTK viewer into Salome desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : +// Author : +// Module : SALOME +// $Header$ + +#ifndef VVTK_Renderer_h +#define VVTK_Renderer_h + +#include "VVTK.h" + +#include "SVTK_Renderer.h" + +class VISU_WidgetCtrl; +class VISU_InsideCursorSettings; +class VISU_OutsideCursorSettings; +class VISU_PickingSettings; +class VISU_FPSActor; + +class vtkPointPicker; +class vtkImplicitFunction; + +//---------------------------------------------------------------------------- +//! To customize SVTK_Renderer according to VVTK functionality +class VVTK_EXPORT VVTK_Renderer : public SVTK_Renderer +{ + public: + vtkTypeMacro(VVTK_Renderer,SVTK_Renderer); + static VVTK_Renderer* New(); + + //! Reimplement SVTK_Renderer::AddActor + /*! + Perform an additional action - apply picking settings on the published VISU_GaussPtsAct actors + */ + virtual + void + AddActor(VTKViewer_Actor* theActor); + + //! Reimplement SVTK_Renderer::RemoveActor (remove additional settings) + virtual + void + RemoveActor(VTKViewer_Actor* theActor); + + //! To set VISU_PickingSettings to share them among all VISU_GaussPtsAct actors published into the view + void + SetInsideCursorSettings(VISU_InsideCursorSettings* theInsideCursorSettings); + + void + SetPickingSettings(VISU_PickingSettings* thePickingSettings); + + protected: + VVTK_Renderer(); + ~VVTK_Renderer(); + + VISU_PickingSettings* myPickingSettings; //! Keeps reference of the VISU_PickingSettings + VISU_InsideCursorSettings* myInsideCursorSettings; //! Keeps reference of the VISU_InsideCursorSettings + vtkSmartPointer myFPSActor; //!< To show FPS of the rendering at run-time + + vtkSmartPointer myGaussPointPicker; + vtkSmartPointer myGaussPreHighlightProperty; + vtkSmartPointer myGaussHighlightProperty; +}; + + +//---------------------------------------------------------------------------- +//! To extend VVTK_Renderer to implement base view functionality +class VVTK_EXPORT VVTK_Renderer1 : public VVTK_Renderer +{ + public: + vtkTypeMacro(VVTK_Renderer1,VVTK_Renderer); + static VVTK_Renderer1* New(); + + //! Reimplement SVTK_Renderer::Initialize + virtual + void + Initialize(vtkRenderWindowInteractor* theInteractor, + SVTK_Selector* theSelector); + + //! Reimplement VVTK_Renderer::AddActor to apply to the actor additional settings + virtual + void + AddActor(VTKViewer_Actor* theActor); + + //! Reimplement VVTK_Renderer::RemoveActor + virtual + void + RemoveActor(VTKViewer_Actor* theActor); + + //! To set VISU_PickingSettings to share them among all VISU_GaussPtsAct1 actors published into the view + void + SetOutsideCursorSettings(VISU_OutsideCursorSettings* theOutsideCursorSettings); + + VISU_WidgetCtrl* GetWidgetCtrl(); + + protected: + VVTK_Renderer1(); + ~VVTK_Renderer1(); + + //! Reimplement VVTK_Renderer::OnAdjustActors + virtual + bool + OnAdjustActors(); + + void AdjustWidgetCtrl(); + + vtkSmartPointer myWidgetCtrl; + VISU_OutsideCursorSettings* myOutsideCursorSettings; + vtkSmartPointer myTextActor; +}; + + +//---------------------------------------------------------------------------- +class VVTK_EXPORT VVTK_Renderer2 : public VVTK_Renderer +{ + public: + vtkTypeMacro(VVTK_Renderer2,VVTK_Renderer); + static VVTK_Renderer2* New(); + + //! Reimplement VVTK_Renderer::AddActor to apply to the actor additional settings + virtual + void + AddActor(VTKViewer_Actor* theActor); + + //! Reimplement VVTK_Renderer::RemoveActor + virtual + void + RemoveActor(VTKViewer_Actor* theActor); + + void SetWidgetCtrl(VISU_WidgetCtrl* theWidgetCtrl); + + //! To handle vtkCommand::EndInteractionEvent to redraw the view + void + OnEndInteractionEvent(); + + protected: + VVTK_Renderer2(); + ~VVTK_Renderer2(); + + //! Main process VTK event method + static + void + ProcessEvents(vtkObject* theObject, + unsigned long theEvent, + void* theClientData, + void* theCallData); + + //! Used to process VTK events + vtkSmartPointer myEventCallbackCommand; + + //! Priority at which events are processed + float myPriority; + + VISU_WidgetCtrl* myWidgetCtrl; +}; + + +#endif diff --git a/src/VVTK/VVTK_SegmentationCursorDlg.cxx b/src/VVTK/VVTK_SegmentationCursorDlg.cxx new file mode 100644 index 00000000..63487fed --- /dev/null +++ b/src/VVTK/VVTK_SegmentationCursorDlg.cxx @@ -0,0 +1,839 @@ +// VISU VISUGUI : GUI of VISU component +// +// Copyright (C) 2003 CEA/DEN, EDF R&D +// +// +// +// File : VVTK_SegmentationCursorDlg.cxx +// Author : Oleg Uvarov +// Module : VISU + +#include "VVTK_SegmentationCursorDlg.h" +#include "VVTK_PrimitiveBox.h" +#include "VVTK_SizeBox.h" + +#include "VISU_GaussPtsAct.h" +#include "VISU_GaussPtsSettings.h" + +#include "VISU_WidgetCtrl.hxx" +#include "VISU_PlanesWidget.hxx" +#include "VISU_SphereWidget.hxx" + +#include "VISU_GaussPointsPL.hxx" +#include "VISU_OpenGLPointSpriteMapper.hxx" + +#include "SUIT_MessageBox.h" +#include "SUIT_ResourceMgr.h" +#include "SUIT_Session.h" + +#include "SVTK_RenderWindowInteractor.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "utilities.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "QtxAction.h" +#include "QtxDblSpinBox.h" +#include "QtxIntSpinBox.h" + +using namespace std; + + +//---------------------------------------------------------------- +namespace VISU +{ + inline + QString + Image2VTI(const QString& theImageFileName) + { + QFileInfo aFileInfo(theImageFileName); + QString aFormat = aFileInfo.extension(FALSE); + QString aVTIName = QString("/tmp/") + getenv("USER") + "-" + aFileInfo.baseName(TRUE) + ".vti"; + QString aCommand = QString( "VISU_img2vti " ) + aFormat + " " + theImageFileName + " " + aVTIName; + + if(system( aCommand.latin1() ) == 0) + return aVTIName; + + return QString::null; + } + + inline + void + RemoveFile(const QString& theFileName) + { + if( !theFileName.isNull() ){ + QString aCommand = QString( "rm -fr " ) + theFileName; + system( aCommand.latin1() ); + } + } + + + TTextureValue + GetTexture(const QString& theMainTexture, + const QString& theAlphaTexture) + { + typedef std::pair TTextureKey; + typedef std::map TTextureMap; + + static TTextureMap aTextureMap; + + TTextureValue aTextureValue; + TTextureKey aTextureKey(theMainTexture,theAlphaTexture); + TTextureMap::const_iterator anIter = aTextureMap.find(aTextureKey); + if(anIter != aTextureMap.end()){ + aTextureValue = anIter->second; + }else{ + QString aMainTextureVTI = Image2VTI(theMainTexture); + QString anAlphaTextureVTI = Image2VTI(theAlphaTexture); + + if( !aMainTextureVTI.isNull() && !anAlphaTextureVTI.isNull() ){ + aTextureValue = + VISU_GaussPointsPL::MakeTexture( aMainTextureVTI.latin1(), + anAlphaTextureVTI.latin1()); + + if( aTextureValue.GetPointer() ) + aTextureMap[aTextureKey] = aTextureValue; + } + + RemoveFile(aMainTextureVTI); + RemoveFile(anAlphaTextureVTI); + } + + return aTextureValue; + } +} + + +//---------------------------------------------------------------- +VVTK_SegmentationCursorDlg::VVTK_SegmentationCursorDlg( QWidget* parent, const char* name ) + :QDialog( parent, name, false, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ), + myEventCallbackCommand( vtkCallbackCommand::New() ), + myInsideCursorSettings( VISU_InsideCursorSettings::New() ), + myOutsideCursorSettings( VISU_OutsideCursorSettings::New() ), + myIsPlaneSegmentation( true ), + myWidgetCtrl(NULL), + myInteractor(NULL) +{ + myPriority = 0.0; + myEventCallbackCommand->Delete(); + myEventCallbackCommand->SetClientData(this); + myEventCallbackCommand->SetCallback(VVTK_SegmentationCursorDlg::ProcessEvents); + + myInsideCursorSettings->AddObserver(VISU::UpdateFromSettingsEvent, + myEventCallbackCommand.GetPointer(), + myPriority); + + SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr(); + + setCaption( tr( "SEGMENTATION_CURSOR_DLG_TITLE" ) ); + setSizeGripEnabled(TRUE); + + QVBoxLayout* TopLayout = new QVBoxLayout( this ); + TopLayout->setSpacing(6); + TopLayout->setMargin(11); + + myTabBox = new QTabWidget( this ); + + // Segmentation cursor pane + mySegmentationCursorBox = new QVBox( this ); + mySegmentationCursorBox->setMargin(11); + mySegmentationCursorBox->setSpacing(6); + mySegmentationCursorBox->layout()->setAlignment(Qt::AlignTop); + + // Origin + myOriginGroup = new QGroupBox( tr( "ORIGIN_TITLE" ), mySegmentationCursorBox, "OriginGroup" ); + myOriginGroup->setColumnLayout( 0, Qt::Vertical ); + myOriginGroup->layout()->setSpacing( 0 ); + myOriginGroup->layout()->setMargin( 0 ); + + QGridLayout* OriginGroupLayout = new QGridLayout( myOriginGroup->layout() ); + OriginGroupLayout->setAlignment(Qt::AlignTop | Qt::AlignCenter); + OriginGroupLayout->setSpacing(6); + OriginGroupLayout->setMargin(11); + + QLabel* XOriginLabel = new QLabel( tr( "ORIGIN_X" ), myOriginGroup ); + myXOriginSpinBox = new QtxDblSpinBox( -1000.0, 1000.0, 0.1, myOriginGroup ); + myXOriginSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + myXOriginSpinBox->setMinimumWidth( 100 ); + myXOriginSpinBox->setValue( 0.0 ); + + QLabel* YOriginLabel = new QLabel( tr( "ORIGIN_Y" ), myOriginGroup ); + myYOriginSpinBox = new QtxDblSpinBox( -1000.0, 1000.0, 0.1, myOriginGroup ); + myYOriginSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + myYOriginSpinBox->setMinimumWidth( 100 ); + myYOriginSpinBox->setValue( 0.0 ); + + QLabel* ZOriginLabel = new QLabel( tr( "ORIGIN_Z" ), myOriginGroup ); + myZOriginSpinBox = new QtxDblSpinBox( -1000.0, 1000.0, 0.1, myOriginGroup ); + myZOriginSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + myZOriginSpinBox->setMinimumWidth( 100 ); + myZOriginSpinBox->setValue( 0.0 ); + + OriginGroupLayout->addWidget( XOriginLabel, 0, 0 ); + OriginGroupLayout->addWidget( myXOriginSpinBox, 0, 1 ); + OriginGroupLayout->addWidget( YOriginLabel, 0, 2 ); + OriginGroupLayout->addWidget( myYOriginSpinBox, 0, 3 ); + OriginGroupLayout->addWidget( ZOriginLabel, 0, 4 ); + OriginGroupLayout->addWidget( myZOriginSpinBox, 0, 5 ); + + // Direction ( Plane Segmentation ) + myDirectionGroup = new QGroupBox( tr( "DIRECTION_TITLE" ), mySegmentationCursorBox, "DirectionGroup" ); + myDirectionGroup->setColumnLayout( 0, Qt::Vertical ); + myDirectionGroup->layout()->setSpacing( 0 ); + myDirectionGroup->layout()->setMargin( 0 ); + + QGridLayout* DirectionGroupLayout = new QGridLayout( myDirectionGroup->layout() ); + DirectionGroupLayout->setAlignment(Qt::AlignTop | Qt::AlignCenter); + DirectionGroupLayout->setSpacing(6); + DirectionGroupLayout->setMargin(11); + + QLabel* DXDirectionLabel = new QLabel( tr( "DIRECTION_DX" ), myDirectionGroup ); + myDXDirectionSpinBox = new QtxDblSpinBox( -1.0, 1.0, 0.1, myDirectionGroup ); + myDXDirectionSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + myDXDirectionSpinBox->setMinimumWidth( 100 ); + myDXDirectionSpinBox->setValue( 0.0 ); + + QLabel* DYDirectionLabel = new QLabel( tr( "DIRECTION_DY" ), myDirectionGroup ); + myDYDirectionSpinBox = new QtxDblSpinBox( -1.0, 1.0, 0.1, myDirectionGroup ); + myDYDirectionSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + myDYDirectionSpinBox->setMinimumWidth( 100 ); + myDYDirectionSpinBox->setValue( 0.0 ); + + QLabel* DZDirectionLabel = new QLabel( tr( "DIRECTION_DZ" ), myDirectionGroup ); + myDZDirectionSpinBox = new QtxDblSpinBox( -1.0, 1.0, 0.1, myDirectionGroup ); + myDZDirectionSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + myDZDirectionSpinBox->setMinimumWidth( 100 ); + myDZDirectionSpinBox->setValue( 1.0 ); + + DirectionGroupLayout->addWidget( DXDirectionLabel, 0, 0 ); + DirectionGroupLayout->addWidget( myDXDirectionSpinBox, 0, 1 ); + DirectionGroupLayout->addWidget( DYDirectionLabel, 0, 2 ); + DirectionGroupLayout->addWidget( myDYDirectionSpinBox, 0, 3 ); + DirectionGroupLayout->addWidget( DZDirectionLabel, 0, 4 ); + DirectionGroupLayout->addWidget( myDZDirectionSpinBox, 0, 5 ); + + // Depth ( Plane Segmentation ) + myDepthGroup = new QGroupBox( tr( "DEPTH_TITLE" ), mySegmentationCursorBox, "DepthGroup" ); + myDepthGroup->setColumnLayout( 0, Qt::Vertical ); + myDepthGroup->layout()->setSpacing( 0 ); + myDepthGroup->layout()->setMargin( 0 ); + + QGridLayout* DepthGroupLayout = new QGridLayout( myDepthGroup->layout() ); + DepthGroupLayout->setAlignment(Qt::AlignTop | Qt::AlignCenter); + DepthGroupLayout->setSpacing(6); + DepthGroupLayout->setMargin(11); + + QLabel* DepthLabel = new QLabel( tr( "DEPTH" ), myDepthGroup ); + myDepthSpinBox = new QtxDblSpinBox( 0.0, VTK_LARGE_FLOAT, 0.1, myDepthGroup ); + myDepthSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + myDepthSpinBox->setMinimumWidth( 100 ); + myDepthSpinBox->setValue( 1.0 ); + + DepthGroupLayout->addWidget( DepthLabel, 0, 0 ); + DepthGroupLayout->addWidget( myDepthSpinBox, 0, 1 ); + + // Radius ( Sphere Segmentation ) + myRadiusGroup = new QGroupBox( tr( "RADIUS_TITLE" ), mySegmentationCursorBox, "RadiusGroup" ); + myRadiusGroup->setColumnLayout( 0, Qt::Vertical ); + myRadiusGroup->layout()->setSpacing( 0 ); + myRadiusGroup->layout()->setMargin( 0 ); + + QGridLayout* RadiusGroupLayout = new QGridLayout( myRadiusGroup->layout() ); + RadiusGroupLayout->setAlignment(Qt::AlignTop | Qt::AlignCenter); + RadiusGroupLayout->setSpacing(6); + RadiusGroupLayout->setMargin(11); + + QLabel* RadiusLabel = new QLabel( tr( "RADIUS" ),myRadiusGroup ); + myRadiusSpinBox = new QtxDblSpinBox( 0.0, 1000.0, 1.0,myRadiusGroup ); + myRadiusSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + myRadiusSpinBox->setMinimumWidth( 100 ); + myRadiusSpinBox->setValue( 100.0 ); + + QLabel* RatioLabel = new QLabel( tr( "RATIO" ), myRadiusGroup ); + myRatioSpinBox = new QtxDblSpinBox( 0.1, 10.0, 0.1,myRadiusGroup ); + myRatioSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + myRatioSpinBox->setMinimumWidth( 100 ); + myRatioSpinBox->setValue( 2.0 ); + + RadiusGroupLayout->addWidget( RadiusLabel, 0, 0 ); + RadiusGroupLayout->addWidget( myRadiusSpinBox, 0, 1 ); + RadiusGroupLayout->addWidget( RatioLabel, 0, 2 ); + RadiusGroupLayout->addWidget( myRatioSpinBox, 0, 3 ); + + + myTabBox->addTab( mySegmentationCursorBox, tr( "SEGMENTATION_CURSOR_TAB" ) ); + + + // Gauss points pane + myGaussPointsBox = new QVBox( this ); + myGaussPointsBox->setMargin(11); + myGaussPointsBox->setSpacing(6); + + // Inside Gauss points + QGroupBox* anInsideGroup = new QGroupBox( tr( "INSIDE_GAUSS_POINTS" ), myGaussPointsBox ); + anInsideGroup->setColumnLayout( 0, Qt::Vertical ); + anInsideGroup->layout()->setSpacing( 0 ); + anInsideGroup->layout()->setMargin( 0 ); + + QGridLayout* anInsideGroupLayout = new QGridLayout( anInsideGroup->layout() ); + anInsideGroupLayout->setAlignment(Qt::AlignTop | Qt::AlignCenter); + anInsideGroupLayout->setSpacing(6); + anInsideGroupLayout->setMargin(11); + + // Primitive + myInsidePrimitiveBox = new VVTK_PrimitiveBox( anInsideGroup ); + + // Size + myInsideSizeBox = new VVTK_SizeBox( anInsideGroup ); + myInsideSizeBox->setType( VVTK_SizeBox::Inside ); + + anInsideGroupLayout->addWidget( myInsidePrimitiveBox, 0, 0 ); + anInsideGroupLayout->addWidget( myInsideSizeBox, 1, 0 ); + + // Outside Gauss points + QGroupBox* anOutsideGroup = new QGroupBox( tr( "OUTSIDE_GAUSS_POINTS" ), myGaussPointsBox ); + anOutsideGroup->setColumnLayout( 0, Qt::Vertical ); + anOutsideGroup->layout()->setSpacing( 0 ); + anOutsideGroup->layout()->setMargin( 0 ); + + QGridLayout* anOutsideGroupLayout = new QGridLayout( anOutsideGroup->layout() ); + anOutsideGroupLayout->setAlignment(Qt::AlignTop | Qt::AlignCenter); + anOutsideGroupLayout->setSpacing(6); + anOutsideGroupLayout->setMargin(11); + + // Primitive + myOutsidePrimitiveBox = new VVTK_PrimitiveBox( anOutsideGroup ); + + // Size + myOutsideSizeBox = new VVTK_SizeBox( anOutsideGroup ); + myOutsideSizeBox->setType( VVTK_SizeBox::Outside ); + + anOutsideGroupLayout->addWidget( myOutsidePrimitiveBox, 0, 0 ); + anOutsideGroupLayout->addWidget( myOutsideSizeBox, 1, 0 ); + + + // Magnification + QGroupBox* MagnificationGroup = new QGroupBox ( tr( "MAGNIFICATION_TITLE" ), myGaussPointsBox, "MagnificationGroup" ); + MagnificationGroup->setColumnLayout(0, Qt::Vertical ); + MagnificationGroup->layout()->setSpacing( 0 ); + MagnificationGroup->layout()->setMargin( 0 ); + + QGridLayout* MagnificationGroupLayout = new QGridLayout (MagnificationGroup->layout()); + MagnificationGroupLayout->setAlignment(Qt::AlignTop | Qt::AlignCenter); + MagnificationGroupLayout->setSpacing(6); + MagnificationGroupLayout->setMargin(11); + + myMagnificationLabel = new QLabel( tr( "MAGNIFICATION" ), MagnificationGroup ); + myMagnificationSpinBox = new QtxIntSpinBox( 1, 10000, 10, MagnificationGroup ); + myMagnificationSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + MagnificationGroupLayout->addWidget( myMagnificationLabel, 0, 0 ); + MagnificationGroupLayout->addWidget( myMagnificationSpinBox, 0, 1 ); + + // Increment + myIncrementLabel = new QLabel( tr( "INCREMENT" ), MagnificationGroup ); + myIncrementSpinBox = new QtxDblSpinBox( 0.01, 10, 0.1, MagnificationGroup ); + myIncrementSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + MagnificationGroupLayout->addWidget( myIncrementLabel, 0, 2 ); + MagnificationGroupLayout->addWidget( myIncrementSpinBox, 0, 3 ); + + + myTabBox->addTab( myGaussPointsBox, tr( "GAUSS_POINTS_TAB" ) ); + myTabBox->showPage( myGaussPointsBox ); + + + // Common buttons =========================================================== + 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 ); + + QPushButton* buttonApply = new QPushButton( tr( "&Apply" ), GroupButtons, "buttonApply" ); + buttonApply->setAutoDefault( TRUE ); + buttonApply->setDefault( TRUE ); + GroupButtonsLayout->addWidget( buttonApply, 0, 0 ); + GroupButtonsLayout->addItem( new QSpacerItem( 5, 5, QSizePolicy::Expanding, QSizePolicy::Minimum ), 0, 1 ); + + QPushButton* buttonClose = new QPushButton( tr( "&Close" ) , GroupButtons, "buttonClose" ); + buttonClose->setAutoDefault( TRUE ); + GroupButtonsLayout->addWidget( buttonClose, 0, 2 ); + + TopLayout->addWidget( myTabBox ); + TopLayout->addWidget( GroupButtons ); + + connect( buttonApply, SIGNAL( clicked() ), this, SLOT( onClickApply() ) ); + connect( buttonClose, SIGNAL( clicked() ), this, SLOT( onClickClose() ) ); +} + +VVTK_SegmentationCursorDlg::~VVTK_SegmentationCursorDlg() +{ + SetWidgetCtrl(NULL); +} + +float VVTK_SegmentationCursorDlg::getMagnification() const +{ + return myMagnificationSpinBox->value() / 100.0; +} + +void VVTK_SegmentationCursorDlg::setMagnification( float theMagnification ) +{ + myMagnificationSpinBox->setValue( ( int )( theMagnification * 100 ) ); +} + +float VVTK_SegmentationCursorDlg::getIncrement() const +{ + return myIncrementSpinBox->value(); +} + +void VVTK_SegmentationCursorDlg::setIncrement( float theIncrement ) +{ + myIncrementSpinBox->setValue( theIncrement ); +} + + +void VVTK_SegmentationCursorDlg::SetWidgetCtrl( VISU_WidgetCtrl* theWidgetCtrl ) +{ + if(myWidgetCtrl == theWidgetCtrl) + return; + + if(myWidgetCtrl) + myWidgetCtrl->RemoveObserver(myEventCallbackCommand.GetPointer()); + + myWidgetCtrl = theWidgetCtrl; + + if(theWidgetCtrl) + theWidgetCtrl->AddObserver(vtkCommand::EndInteractionEvent, + myEventCallbackCommand.GetPointer(), + myPriority); +} + +void VVTK_SegmentationCursorDlg::ProcessEvents(vtkObject* vtkNotUsed(theObject), + unsigned long theEvent, + void* theClientData, + void* vtkNotUsed(theCallData)) +{ + VVTK_SegmentationCursorDlg* self = reinterpret_cast(theClientData); + + switch(theEvent){ + case vtkCommand::EndInteractionEvent: + self->UpdateSegmentation(); + break; + case VISU::UpdateFromSettingsEvent: + self->GetOutsideCursorSettings()->SetMagnification( self->GetInsideCursorSettings()->GetMagnification() ); + self->GetOutsideCursorSettings()->SetIncrement( self->GetInsideCursorSettings()->GetIncrement() ); + + self->UpdateInsideGaussPoints(); + self->UpdateOutsideGaussPoints(); + + self->GetInsideCursorSettings()->InvokeEvent(VISU::UpdateInsideSettingsEvent,NULL); + self->GetOutsideCursorSettings()->InvokeEvent(VISU::UpdateOutsideSettingsEvent,NULL); + break; + } +} + +void VVTK_SegmentationCursorDlg::UpdateSegmentation() +{ + if( myIsPlaneSegmentation ) + { + myDirectionGroup->show(); + myDepthGroup->show(); + myRadiusGroup->hide(); + + VISU_PlanesWidget *pPlanesWidget=myWidgetCtrl->GetPlanesWidget(); + float origin[3]; + pPlanesWidget->GetOrigin( origin ); + myXOriginSpinBox->setValue( origin[0] ); + myYOriginSpinBox->setValue( origin[1] ); + myZOriginSpinBox->setValue( origin[2] ); + + float normal[3]; + pPlanesWidget->GetNormal( normal ); + myDXDirectionSpinBox->setValue( normal[0] ); + myDYDirectionSpinBox->setValue( normal[1] ); + myDZDirectionSpinBox->setValue( normal[2] ); + + myDepthSpinBox->setValue( pPlanesWidget->Distance() ); + } + else + { + myDirectionGroup->hide(); + myDepthGroup->hide(); + myRadiusGroup->show(); + + VISU_SphereWidget *pSphereWidget=myWidgetCtrl->GetSphereWidget(); + float origin[3], aRadius; + pSphereWidget->GetCenter(origin); + myXOriginSpinBox->setValue( origin[0] ); + myYOriginSpinBox->setValue( origin[1] ); + myZOriginSpinBox->setValue( origin[2] ); + aRadius=pSphereWidget->GetRadius(); + myRadiusSpinBox->setValue(aRadius); + myRatioSpinBox->setValue(pSphereWidget->GetRatio()); + } +} + +void VVTK_SegmentationCursorDlg::UpdateInsideGaussPoints() +{ + int aPrimitiveType = VISU_OpenGLPointSpriteMapper::PointSprite; + float aClamp = 200.0; + QString aMainTexture = QString( getenv( "VISU_ROOT_DIR") ) + "/share/salome/resources/sprite_texture.bmp"; + QString anAlphaTexture = QString( getenv( "VISU_ROOT_DIR") ) + "/share/salome/resources/sprite_alpha.bmp"; + float anAlphaThreshold = 0.1; + int aResolution = 8; + int aMinSize = 3; + int aMaxSize = 33; + int aMagnification = 100; + float anIncrement = 2.0; + + if( !myInsideCursorSettings->GetInitial() ) + { + myInsidePrimitiveBox->setPrimitiveType( myInsideCursorSettings->GetPrimitiveType() ); + myInsidePrimitiveBox->setClamp( myInsideCursorSettings->GetClamp() ); + myInsidePrimitiveBox->setMainTexture( myInsideMainTexture ); + myInsidePrimitiveBox->setAlphaTexture( myInsideAlphaTexture ); + myInsidePrimitiveBox->setAlphaThreshold( myInsideCursorSettings->GetAlphaThreshold() ); + myInsidePrimitiveBox->setResolution( myInsideCursorSettings->GetResolution() ); + + myInsideSizeBox->setMinSize( myInsideCursorSettings->GetMinSize() ); + myInsideSizeBox->setMaxSize( myInsideCursorSettings->GetMaxSize() ); + + this->setMagnification( myInsideCursorSettings->GetMagnification() ); + this->setIncrement( myInsideCursorSettings->GetIncrement() ); + + return; + } + + SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr(); + + aPrimitiveType = aResourceMgr->integerValue( "VISU", "inside_point_sprite_primitive_type", aPrimitiveType ); + myInsidePrimitiveBox->setPrimitiveType( aPrimitiveType ); + + aClamp = aResourceMgr->doubleValue( "VISU", "inside_point_sprite_clamp", aClamp ); + myInsidePrimitiveBox->setClamp( aClamp ); + + aMainTexture = aResourceMgr->stringValue( "VISU", "inside_point_sprite_main_texture", aMainTexture ); + myInsidePrimitiveBox->setMainTexture( aMainTexture ); + + anAlphaTexture = aResourceMgr->stringValue( "VISU", "inside_point_sprite_alpha_texture", anAlphaTexture ); + myInsidePrimitiveBox->setAlphaTexture( anAlphaTexture ); + + anAlphaThreshold = aResourceMgr->doubleValue( "VISU", "inside_point_sprite_alpha_threshold", anAlphaThreshold ); + myInsidePrimitiveBox->setAlphaThreshold( anAlphaThreshold ); + + aResolution = aResourceMgr->integerValue( "VISU", "inside_geom_sphere_resolution", aResolution ); + myInsidePrimitiveBox->setResolution( aResolution ); + + aMinSize = aResourceMgr->integerValue( "VISU", "inside_point_sprite_min_size", aMinSize ); + myInsideSizeBox->setMinSize( aMinSize / 100.0 ); + + aMaxSize = aResourceMgr->integerValue( "VISU", "inside_point_sprite_max_size", aMaxSize ); + myInsideSizeBox->setMaxSize( aMaxSize / 100.0 ); + + aMagnification = aResourceMgr->integerValue( "VISU", "inside_point_sprite_magnification", aMagnification ); + this->setMagnification( aMagnification / 100.0 ); + + anIncrement = aResourceMgr->doubleValue( "VISU", "inside_point_sprite_increment", anIncrement ); + this->setIncrement( anIncrement ); + + myInsidePrimitiveBox->setFaceLimit( 50000 ); + + ApplyInsideGaussPoints(); +} + +void VVTK_SegmentationCursorDlg::UpdateOutsideGaussPoints() +{ + float aClamp = 256.0; + int aPrimitiveType = VISU_OpenGLPointSpriteMapper::PointSprite; + QString aMainTexture = QString( getenv( "VISU_ROOT_DIR") ) + "/share/salome/resources/sprite_texture.bmp"; + QString anAlphaTexture = QString( getenv( "VISU_ROOT_DIR") ) + "/share/salome/resources/sprite_alpha.bmp"; + float anAlphaThreshold = 0.1; + int aResolution = 8; + int aSize = 25; + bool aUniform = false; + QColor aColor = Qt::blue; + + if( !myOutsideCursorSettings->GetInitial() ) + { + myOutsidePrimitiveBox->setPrimitiveType( myOutsideCursorSettings->GetPrimitiveType() ); + myOutsidePrimitiveBox->setClamp( myOutsideCursorSettings->GetClamp() ); + myOutsidePrimitiveBox->setMainTexture( myOutsideMainTexture ); + myOutsidePrimitiveBox->setAlphaTexture( myOutsideAlphaTexture ); + myOutsidePrimitiveBox->setAlphaThreshold( myOutsideCursorSettings->GetAlphaThreshold() ); + myOutsidePrimitiveBox->setResolution( myOutsideCursorSettings->GetResolution() ); + + myOutsideSizeBox->setOutsideSize( myOutsideCursorSettings->GetSize() ); + myOutsideSizeBox->setUniform( myOutsideCursorSettings->GetUniform() ); + + float* aColor = myOutsideCursorSettings->GetColor(); + myOutsideSizeBox->setColor( QColor( ( int )( aColor[0] * 255.0 ), + ( int )( aColor[1] * 255.0 ), + ( int )( aColor[2] * 255.0 ) ) ); + + return; + } + + SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr(); + + aPrimitiveType = aResourceMgr->integerValue( "VISU", "outside_point_sprite_primitive_type", aPrimitiveType ); + myOutsidePrimitiveBox->setPrimitiveType( aPrimitiveType ); + + aClamp = aResourceMgr->doubleValue( "VISU", "outside_point_sprite_clamp", aClamp ); + myOutsidePrimitiveBox->setClamp( aClamp ); + + aMainTexture = aResourceMgr->stringValue( "VISU", "outside_point_sprite_main_texture", aMainTexture ); + myOutsidePrimitiveBox->setMainTexture( aMainTexture ); + + anAlphaTexture = aResourceMgr->stringValue( "VISU", "outside_point_sprite_alpha_texture", anAlphaTexture ); + myOutsidePrimitiveBox->setAlphaTexture( anAlphaTexture ); + + anAlphaThreshold = aResourceMgr->doubleValue( "VISU", "outside_point_sprite_alpha_threshold", anAlphaThreshold ); + myOutsidePrimitiveBox->setAlphaThreshold( anAlphaThreshold ); + + aResolution = aResourceMgr->integerValue( "VISU", "outside_geom_sphere_resolution", aResolution ); + myOutsidePrimitiveBox->setResolution( aResolution ); + + aSize = aResourceMgr->integerValue( "VISU", "outside_point_sprite_size", aSize ); + myOutsideSizeBox->setOutsideSize( aSize / 100.0 ); + + aUniform = aResourceMgr->booleanValue( "VISU", "outside_point_sprite_uniform", aUniform ); + myOutsideSizeBox->setUniform( aUniform ); + + aColor = aResourceMgr->colorValue( "VISU", "outside_point_sprite_color", aColor ); + myOutsideSizeBox->setColor( aColor ); + + myOutsidePrimitiveBox->setFaceLimit( 50000 ); + + ApplyOutsideGaussPoints(); +} + +VISU_InsideCursorSettings* VVTK_SegmentationCursorDlg::GetInsideCursorSettings() +{ + return myInsideCursorSettings.GetPointer(); +} + +VISU_OutsideCursorSettings* VVTK_SegmentationCursorDlg::GetOutsideCursorSettings() +{ + return myOutsideCursorSettings.GetPointer(); +} + +VISU::TTextureValue +VVTK_SegmentationCursorDlg +::MakeImageData( bool theInside, + const QString& theMainTexture, + const QString& theAlphaTexture ) +{ + if( theInside ) + { + bool updateMainTexture = myInsideMainTexture != theMainTexture; + bool updateAlphaTexture = myInsideAlphaTexture != theAlphaTexture; + if( !updateMainTexture && !updateAlphaTexture ) + return 0; + + myInsideMainTexture = theMainTexture; + myInsideAlphaTexture = theAlphaTexture; + } + else + { + bool updateMainTexture = myOutsideMainTexture != theMainTexture; + bool updateAlphaTexture = myOutsideAlphaTexture != theAlphaTexture; + if( !updateMainTexture && !updateAlphaTexture ) + return 0; + + myOutsideMainTexture = theMainTexture; + myOutsideAlphaTexture = theAlphaTexture; + } + + return VISU::GetTexture( theMainTexture.latin1(), + theAlphaTexture.latin1()); +} + +void VVTK_SegmentationCursorDlg::onClickApply() +{ + if( myTabBox->currentPage() == mySegmentationCursorBox ) + ApplySegmentationCursor(); + else + { + QString aWarning = "The number of faces needed to perform the 'Geometrical Sphere' primitive\n"; + aWarning.append( "presentation might be too important to ensure an acceptable frame rate.\n\n" ); + aWarning.append( "Can you please confirm that you want to continue anyway?" ); + bool toApply = CheckNumberOfFaces() || + SUIT_MessageBox::warn2( this, tr( "Warning" ), aWarning, + tr( "&OK" ), tr( "&Cancel" ), 0, 1, 1 ) == 0; + + if( toApply ) + { + ApplyInsideGaussPoints(); + ApplyOutsideGaussPoints(); + } + } +} + +void VVTK_SegmentationCursorDlg::ApplySegmentationCursor() +{ + if( myIsPlaneSegmentation ) + { + VISU_PlanesWidget *pPlanesWidget=myWidgetCtrl->GetPlanesWidget(); + float origin[3]; + origin[0] = myXOriginSpinBox->value(); + origin[1] = myYOriginSpinBox->value(); + origin[2] = myZOriginSpinBox->value(); + pPlanesWidget->SetOrigin( origin ); + + float normal[3]; + normal[0] = myDXDirectionSpinBox->value(); + normal[1] = myDYDirectionSpinBox->value(); + normal[2] = myDZDirectionSpinBox->value(); + + if( normal[0] == 0.0 && normal[1] == 0.0 && normal[2] == 0.0 ) + { + normal[2] = 1.0; + myDZDirectionSpinBox->setValue( 1.0 ); + } + pPlanesWidget->SetNormal( normal ); + + pPlanesWidget->SetDistance( myDepthSpinBox->value() ); + + myWidgetCtrl->InvokeEvent(vtkCommand::EndInteractionEvent,NULL); + myWidgetCtrl->GetInteractor()->Render(); + } + else + { + VISU_SphereWidget *pSphereWidget=myWidgetCtrl->GetSphereWidget(); + float origin[3], aRadius; + origin[0] = myXOriginSpinBox->value(); + origin[1] = myYOriginSpinBox->value(); + origin[2] = myZOriginSpinBox->value(); + pSphereWidget->SetCenter(origin); + + aRadius=myRadiusSpinBox->value(); + pSphereWidget->SetRadius(aRadius); + + pSphereWidget->SetRatio(myRatioSpinBox->value()); + + myWidgetCtrl->InvokeEvent(vtkCommand::EndInteractionEvent,NULL); + myWidgetCtrl->GetInteractor()->Render(); + } +} + +void VVTK_SegmentationCursorDlg::ApplyInsideGaussPoints() +{ + QString anInsideMainTexture = myInsidePrimitiveBox->getMainTexture(); + QString anInsideAlphaTexture = myInsidePrimitiveBox->getAlphaTexture(); + VISU::TTextureValue aTexture = MakeImageData( true, anInsideMainTexture, anInsideAlphaTexture ); + + if( aTexture.GetPointer() ) + myInsideCursorSettings->SetTexture( aTexture.GetPointer() ); + + myInsideCursorSettings->SetInitial( false ); + myInsideCursorSettings->SetPrimitiveType( myInsidePrimitiveBox->getPrimitiveType() ); + myInsideCursorSettings->SetClamp( myInsidePrimitiveBox->getClamp() ); + myInsideCursorSettings->SetAlphaThreshold( myInsidePrimitiveBox->getAlphaThreshold() ); + myInsideCursorSettings->SetResolution( myInsidePrimitiveBox->getResolution() ); + + myInsideCursorSettings->SetMinSize( myInsideSizeBox->getMinSize() ); + myInsideCursorSettings->SetMaxSize( myInsideSizeBox->getMaxSize() ); + + myInsideCursorSettings->SetMagnification( this->getMagnification() ); + myInsideCursorSettings->SetIncrement( this->getIncrement() ); + + myInsideCursorSettings->InvokeEvent(VISU::UpdateInsideSettingsEvent,NULL); +} + +void VVTK_SegmentationCursorDlg::ApplyOutsideGaussPoints() +{ + QString anOutsideMainTexture = myOutsidePrimitiveBox->getMainTexture(); + QString anOutsideAlphaTexture = myOutsidePrimitiveBox->getAlphaTexture(); + VISU::TTextureValue aTexture = MakeImageData( false, anOutsideMainTexture, anOutsideAlphaTexture ); + + if( aTexture.GetPointer() ) + myOutsideCursorSettings->SetTexture( aTexture.GetPointer() ); + + myOutsideCursorSettings->SetInitial( false ); + myOutsideCursorSettings->SetPrimitiveType( myOutsidePrimitiveBox->getPrimitiveType() ); + myOutsideCursorSettings->SetClamp( myOutsidePrimitiveBox->getClamp() ); + myOutsideCursorSettings->SetAlphaThreshold( myOutsidePrimitiveBox->getAlphaThreshold() ); + myOutsideCursorSettings->SetResolution( myOutsidePrimitiveBox->getResolution() ); + + myOutsideCursorSettings->SetSize( myOutsideSizeBox->getOutsideSize() ); + myOutsideCursorSettings->SetUniform( myOutsideSizeBox->getUniform() ); + + QColor aButtonColor = myOutsideSizeBox->getColor(); + float aColor[3]; + aColor[0] = aButtonColor.red() / 255.0; + aColor[1] = aButtonColor.green() / 255.0; + aColor[2] = aButtonColor.blue() / 255.0; + myOutsideCursorSettings->SetColor( aColor ); + + myOutsideCursorSettings->SetMagnification( this->getMagnification() ); + myOutsideCursorSettings->SetIncrement( this->getIncrement() ); + + myOutsideCursorSettings->InvokeEvent(VISU::UpdateOutsideSettingsEvent,NULL); +} + +void VVTK_SegmentationCursorDlg::onClickClose() +{ + myPlaneAction->setOn( false ); + mySphereAction->setOn( false ); + + emit scgClose(); + + reject(); +} + +void VVTK_SegmentationCursorDlg::done( int r ) +{ + myPlaneAction->setOn( false ); + mySphereAction->setOn( false ); + + emit scgClose(); + + QDialog::done( r ); +} + +bool VVTK_SegmentationCursorDlg::CheckNumberOfFaces() +{ + if( !myInteractor ) + return false; + + vtkRenderer* aRenderer = myInteractor->getRenderer(); + + if( !aRenderer ) + return false; + + int aNumberOfPoints = 0; + + vtkActor* anActor; + vtkActorCollection* anActColl = aRenderer->GetActors(); + for( anActColl->InitTraversal(); ( anActor = anActColl->GetNextActor() ) != NULL; ) + { + if( VISU_GaussPtsAct1* aGaussActor = VISU_GaussPtsAct1::SafeDownCast( anActor ) ) + aNumberOfPoints += aGaussActor->GetInput()->GetNumberOfCells(); + } + return !( myInsidePrimitiveBox->getPrimitiveType() == VISU_OpenGLPointSpriteMapper::GeomSphere && + aNumberOfPoints * myInsidePrimitiveBox->getFaceNumber() * 2 > myInsidePrimitiveBox->getFaceLimit() || + myOutsidePrimitiveBox->getPrimitiveType() == VISU_OpenGLPointSpriteMapper::GeomSphere && + aNumberOfPoints * myOutsidePrimitiveBox->getFaceNumber() > myOutsidePrimitiveBox->getFaceLimit() ); +} diff --git a/src/VVTK/VVTK_SegmentationCursorDlg.h b/src/VVTK/VVTK_SegmentationCursorDlg.h new file mode 100644 index 00000000..edac2165 --- /dev/null +++ b/src/VVTK/VVTK_SegmentationCursorDlg.h @@ -0,0 +1,182 @@ +// VISU VISUGUI : GUI of VISU component +// +// Copyright (C) 2003 CEA/DEN, EDF R&D +// +// +// +// File : VVTK_SegmentationCursorDlg.h +// Author : Oleg Uvarov +// Module : VISU + +#ifndef VVTK_SEGMENTATIONCURSORDLG_H +#define VVTK_SEGMENTATIONCURSORDLG_H + +#include + +#include +#include + +class vtkActorCollection; +class vtkCallbackCommand; +class vtkImageData; + +class QLabel; +class QLineEdit; +class QPushButton; +class QRadioButton; +class QTabWidget; +class QGroupBox; +class QVBox; + +class QtxAction; +class QtxDblSpinBox; +class QtxIntSpinBox; + +class VISU_GaussPtsAct1; +class VISU_InsideCursorSettings; +class VISU_OutsideCursorSettings; +class VISU_WidgetCtrl; + +class VVTK_PrimitiveBox; +class VVTK_SizeBox; + +class SVTK_RenderWindowInteractor; + +namespace VISU +{ + typedef vtkSmartPointer TTextureValue; + + TTextureValue + GetTexture(const QString& theMainTexture, + const QString& theAlphaTexture); +} + +//! Segmentation Cursor Dialog. +/*! + * Uses for set up Segmentation and Outside Cursor Gauss Points preferenses + * and apply them to all actors in the current renderer. + */ +class VVTK_SegmentationCursorDlg : public QDialog +{ + Q_OBJECT + +public: + VVTK_SegmentationCursorDlg( QWidget* parent = 0, const char* name = 0 ); + ~VVTK_SegmentationCursorDlg(); + + void SetWidgetCtrl( VISU_WidgetCtrl* ); + void SetPlaneAction( QtxAction* theAction ) { myPlaneAction = theAction; } + void SetSphereAction( QtxAction* theAction ) { mySphereAction = theAction; } + + bool GetIsPlaneSegmentation() const { return myIsPlaneSegmentation; } + void SetIsPlaneSegmentation( bool on ) { myIsPlaneSegmentation = on; } + + //! Update contents of the Segmentation tab. + void UpdateSegmentation(); + void UpdateInsideGaussPoints(); + void UpdateOutsideGaussPoints(); + + //! Update contents of the Outside Cursor tab. + void UpdateOutsideCursor(); + + VISU_InsideCursorSettings* GetInsideCursorSettings(); + VISU_OutsideCursorSettings* GetOutsideCursorSettings(); + + vtkSmartPointer GetEventCallbackCommand() { return myEventCallbackCommand; } + + void SetInteractor( SVTK_RenderWindowInteractor* theInteractor ) { myInteractor = theInteractor; } + +public: + float getMagnification() const; + void setMagnification( float ); + + float getIncrement() const; + void setIncrement( float ); + +protected: + void ApplySegmentationCursor(); + void ApplyInsideGaussPoints(); + void ApplyOutsideGaussPoints(); + + bool CheckNumberOfFaces(); + + VISU::TTextureValue + MakeImageData( bool theInside, + const QString& theMainTexture, + const QString& theAlphaTexture ); + +private: + static void ProcessEvents(vtkObject* theObject, + unsigned long theEvent, + void* theClientData, + void* theCallData); + +protected slots: + virtual void done( int ); + + void onClickApply(); + void onClickClose(); + +signals: + void scgClose(); + +private: + SVTK_RenderWindowInteractor* myInteractor; + + QTabWidget* myTabBox; + + // Segmentation cursor + QVBox* mySegmentationCursorBox; + + QGroupBox* myOriginGroup; + QtxDblSpinBox* myXOriginSpinBox; + QtxDblSpinBox* myYOriginSpinBox; + QtxDblSpinBox* myZOriginSpinBox; + + QGroupBox* myDirectionGroup; + QtxDblSpinBox* myDXDirectionSpinBox; + QtxDblSpinBox* myDYDirectionSpinBox; + QtxDblSpinBox* myDZDirectionSpinBox; + + QGroupBox* myDepthGroup; + QtxDblSpinBox* myDepthSpinBox; + + QGroupBox* myRadiusGroup; + QtxDblSpinBox* myRadiusSpinBox; + QtxDblSpinBox* myRatioSpinBox; + + bool myIsPlaneSegmentation; + + float myPriority; + vtkSmartPointer myEventCallbackCommand; + + VISU_WidgetCtrl* myWidgetCtrl; + QtxAction* myPlaneAction; + QtxAction* mySphereAction; + + // Gauss Points + QVBox* myGaussPointsBox; + + VVTK_PrimitiveBox* myInsidePrimitiveBox; + VVTK_SizeBox* myInsideSizeBox; + + QString myInsideMainTexture; + QString myInsideAlphaTexture; + + vtkSmartPointer myInsideCursorSettings; + + VVTK_PrimitiveBox* myOutsidePrimitiveBox; + VVTK_SizeBox* myOutsideSizeBox; + + QString myOutsideMainTexture; + QString myOutsideAlphaTexture; + + vtkSmartPointer myOutsideCursorSettings; + + QLabel* myMagnificationLabel; + QtxIntSpinBox* myMagnificationSpinBox; + QLabel* myIncrementLabel; + QtxDblSpinBox* myIncrementSpinBox; +}; + +#endif diff --git a/src/VVTK/VVTK_SizeBox.cxx b/src/VVTK/VVTK_SizeBox.cxx new file mode 100644 index 00000000..654b69a7 --- /dev/null +++ b/src/VVTK/VVTK_SizeBox.cxx @@ -0,0 +1,350 @@ +// VISU VISUGUI : GUI of VISU 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 : VVTK_SizeBox.cxx +// Author : Oleg UVAROV +// Module : VISU + +#include "VVTK_SizeBox.h" + +#include "SUIT_ResourceMgr.h" +#include "SUIT_Session.h" + +#include "QtxDblSpinBox.h" +#include "QtxIntSpinBox.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +VVTK_SizeBox::VVTK_SizeBox( QWidget* parent ) : + QVBox( parent ) +{ + SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr(); + + layout()->setSpacing( 0 ); + layout()->setMargin( 0 ); + + // Size + QGroupBox* SizeGroup = new QGroupBox ( tr( "SIZE_TITLE" ), this, "SizeGroup" ); + SizeGroup->setColumnLayout(0, Qt::Vertical ); + SizeGroup->layout()->setSpacing( 0 ); + SizeGroup->layout()->setMargin( 0 ); + + QGridLayout* SizeGroupLayout = new QGridLayout (SizeGroup->layout()); + SizeGroupLayout->setAlignment(Qt::AlignTop | Qt::AlignCenter); + SizeGroupLayout->setSpacing(6); + SizeGroupLayout->setMargin(11); + + // Outside Size + myOutsideSizeLabel = new QLabel( tr( "OUTSIDE_SIZE" ), SizeGroup ); + myOutsideSizeSpinBox = new QtxIntSpinBox( 0, 100, 1, SizeGroup ); + myOutsideSizeSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + SizeGroupLayout->addWidget( myOutsideSizeLabel, 0, 0 ); + SizeGroupLayout->addWidget( myOutsideSizeSpinBox, 0, 1 ); + + // Geometry Size + myGeomSizeLabel = new QLabel( tr( "GEOM_SIZE" ), SizeGroup ); + myGeomSizeSpinBox = new QtxIntSpinBox( 0, 100, 1, SizeGroup ); + myGeomSizeSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + SizeGroupLayout->addWidget( myGeomSizeLabel, 0, 0 ); + SizeGroupLayout->addWidget( myGeomSizeSpinBox, 0, 1 ); + + // Min Size + myMinSizeLabel = new QLabel( tr( "MIN_SIZE" ), SizeGroup ); + myMinSizeSpinBox = new QtxIntSpinBox( 0, 100, 1, SizeGroup ); + myMinSizeSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + SizeGroupLayout->addWidget( myMinSizeLabel, 1, 0 ); + SizeGroupLayout->addWidget( myMinSizeSpinBox, 1, 1 ); + + // Max Size + myMaxSizeLabel = new QLabel( tr( "MAX_SIZE" ), SizeGroup ); + myMaxSizeSpinBox = new QtxIntSpinBox( 0, 100, 1, SizeGroup ); + myMaxSizeSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + SizeGroupLayout->addWidget( myMaxSizeLabel, 1, 2 ); + SizeGroupLayout->addWidget( myMaxSizeSpinBox, 1, 3 ); + + // Magnification + myMagnificationLabel = new QLabel( tr( "MAGNIFICATION" ), SizeGroup ); + myMagnificationSpinBox = new QtxIntSpinBox( 1, 10000, 10, SizeGroup ); + myMagnificationSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + SizeGroupLayout->addWidget( myMagnificationLabel, 2, 0 ); + SizeGroupLayout->addWidget( myMagnificationSpinBox, 2, 1 ); + + // Increment + myIncrementLabel = new QLabel( tr( "INCREMENT" ), SizeGroup ); + myIncrementSpinBox = new QtxDblSpinBox( 0.01, 10, 0.1, SizeGroup ); + myIncrementSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + SizeGroupLayout->addWidget( myIncrementLabel, 2, 2 ); + SizeGroupLayout->addWidget( myIncrementSpinBox, 2, 3 ); + + + // Color + myColorGroup = new QGroupBox ( tr( "COLOR_TITLE" ), this, "ColorGroup" ); + myColorGroup->setColumnLayout(0, Qt::Vertical ); + myColorGroup->layout()->setSpacing( 0 ); + myColorGroup->layout()->setMargin( 0 ); + + QGridLayout* ColorGroupLayout = new QGridLayout (myColorGroup->layout()); + ColorGroupLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft); + ColorGroupLayout->setSpacing(6); + ColorGroupLayout->setMargin(11); + + myUniformCheckBox = new QCheckBox( tr( "UNIFORM_COLOR" ), myColorGroup ); + + myColorLabel = new QLabel( tr( "COLOR" ), myColorGroup ); + myColorButton = new QPushButton( myColorGroup ); + + ColorGroupLayout->addWidget( myUniformCheckBox, 0, 0 ); + ColorGroupLayout->addWidget( myColorLabel, 0, 1 ); + ColorGroupLayout->addWidget( myColorButton, 0, 2 ); + + connect( myUniformCheckBox, SIGNAL( toggled( bool ) ), myColorButton, SLOT( setEnabled( bool ) ) ); + connect( myColorButton, SIGNAL( clicked() ), this, SLOT( onColorButtonPressed() ) ); + + setType( VVTK_SizeBox::Results ); +} + +void VVTK_SizeBox::onToggleResults() +{ + myType = VVTK_SizeBox::Results; + + myOutsideSizeLabel->hide(); + myOutsideSizeSpinBox->hide(); + + myGeomSizeLabel->hide(); + myGeomSizeSpinBox->hide(); + + myMinSizeLabel->show(); + myMinSizeSpinBox->show(); + + myMaxSizeLabel->show(); + myMaxSizeSpinBox->show(); + + myMagnificationLabel->show(); + myMagnificationSpinBox->show(); + + myIncrementLabel->show(); + myIncrementSpinBox->show(); + + myColorGroup->hide(); + + myUniformCheckBox->hide(); +} + +void VVTK_SizeBox::onToggleGeometry() +{ + myType = VVTK_SizeBox::Geometry; + + myOutsideSizeLabel->hide(); + myOutsideSizeSpinBox->hide(); + + myGeomSizeLabel->show(); + myGeomSizeSpinBox->show(); + + myMinSizeLabel->hide(); + myMinSizeSpinBox->hide(); + + myMaxSizeLabel->hide(); + myMaxSizeSpinBox->hide(); + + myMagnificationLabel->show(); + myMagnificationSpinBox->show(); + + myIncrementLabel->show(); + myIncrementSpinBox->show(); + + myColorGroup->show(); + + myUniformCheckBox->hide(); +} + +void VVTK_SizeBox::onToggleInside() +{ + myType = VVTK_SizeBox::Inside; + + myOutsideSizeLabel->hide(); + myOutsideSizeSpinBox->hide(); + + myGeomSizeLabel->hide(); + myGeomSizeSpinBox->hide(); + + myMinSizeLabel->show(); + myMinSizeSpinBox->show(); + + myMaxSizeLabel->show(); + myMaxSizeSpinBox->show(); + + myMagnificationLabel->hide(); + myMagnificationSpinBox->hide(); + + myIncrementLabel->hide(); + myIncrementSpinBox->hide(); + + myColorGroup->hide(); + + myUniformCheckBox->hide(); +} + +void VVTK_SizeBox::onToggleOutside() +{ + myType = VVTK_SizeBox::Outside; + + myOutsideSizeLabel->show(); + myOutsideSizeSpinBox->show(); + + myGeomSizeLabel->hide(); + myGeomSizeSpinBox->hide(); + + myMinSizeLabel->hide(); + myMinSizeSpinBox->hide(); + + myMaxSizeLabel->hide(); + myMaxSizeSpinBox->hide(); + + myMagnificationLabel->hide(); + myMagnificationSpinBox->hide(); + + myIncrementLabel->hide(); + myIncrementSpinBox->hide(); + + myColorGroup->show(); + + myUniformCheckBox->show(); +} + +void VVTK_SizeBox::setType( int theType ) +{ + myType = theType; + + switch( myType ) + { + case VVTK_SizeBox::Results : onToggleResults(); break; + case VVTK_SizeBox::Geometry : onToggleGeometry(); break; + case VVTK_SizeBox::Inside : onToggleInside(); break; + case VVTK_SizeBox::Outside : onToggleOutside(); break; + default : break; + } +} + +float VVTK_SizeBox::getOutsideSize() const +{ + return myOutsideSizeSpinBox->value() / 100.0; +} + +void VVTK_SizeBox::setOutsideSize( float theOutsideSize ) +{ + myOutsideSizeSpinBox->setValue( ( int )( theOutsideSize * 100 ) ); +} + +float VVTK_SizeBox::getGeomSize() const +{ + return myGeomSizeSpinBox->value() / 100.0; +} + +void VVTK_SizeBox::setGeomSize( float theGeomSize ) +{ + myGeomSizeSpinBox->setValue( ( int )( theGeomSize * 100 ) ); +} + +float VVTK_SizeBox::getMinSize() const +{ + return myMinSizeSpinBox->value() / 100.0; +} + +void VVTK_SizeBox::setMinSize( float theMinSize ) +{ + myMinSizeSpinBox->setValue( ( int )( theMinSize * 100 ) ); +} + +float VVTK_SizeBox::getMaxSize() const +{ + return myMaxSizeSpinBox->value() / 100.0; +} + +void VVTK_SizeBox::setMaxSize( float theMaxSize ) +{ + myMaxSizeSpinBox->setValue( ( int )( theMaxSize * 100 ) ); +} + +float VVTK_SizeBox::getMagnification() const +{ + return myMagnificationSpinBox->value() / 100.0; +} + +void VVTK_SizeBox::setMagnification( float theMagnification ) +{ + myMagnificationSpinBox->setValue( ( int )( theMagnification * 100 ) ); +} + +float VVTK_SizeBox::getIncrement() const +{ + return myIncrementSpinBox->value(); +} + +void VVTK_SizeBox::setIncrement( float theIncrement ) +{ + myIncrementSpinBox->setValue( theIncrement ); +} + +bool VVTK_SizeBox::getUniform() const +{ + return myUniformCheckBox->isChecked(); +} + +void VVTK_SizeBox::setUniform( bool theUniform ) +{ + myUniformCheckBox->setChecked( theUniform ); + myColorButton->setEnabled( theUniform ); +} + +QColor VVTK_SizeBox::getColor() const +{ + return myColorButton->paletteBackgroundColor(); +} + +void VVTK_SizeBox::setColor( const QColor& theColor ) +{ + myColorButton->setPaletteBackgroundColor( theColor ); +} + +void VVTK_SizeBox::onColorButtonPressed() +{ + QColor aColor = QColorDialog::getColor( myColorButton->paletteBackgroundColor(), this ); + if( aColor.isValid() ) + myColorButton->setPaletteBackgroundColor( aColor ); +} diff --git a/src/VVTK/VVTK_SizeBox.h b/src/VVTK/VVTK_SizeBox.h new file mode 100644 index 00000000..a47f342c --- /dev/null +++ b/src/VVTK/VVTK_SizeBox.h @@ -0,0 +1,119 @@ +// VISU VISUGUI : GUI of VISU 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 : VVTK_SizeBox.h +// Author : Oleg UVAROV +// Module : VISU + +#ifndef VVTK_SIZEBOX_H +#define VVTK_SIZEBOX_H + +#include + +class QLabel; +class QLineEdit; +class QPushButton; +class QCheckBox; +class QGroupBox; + +class QtxDblSpinBox; +class QtxIntSpinBox; + +class VVTK_SizeBox : public QVBox +{ + Q_OBJECT + +public: + enum { Results = 0, Geometry, Inside, Outside }; + +public: + VVTK_SizeBox( QWidget* ); + ~VVTK_SizeBox() {} + +public: + int getType() const { return myType; } + void setType( int ); + + float getOutsideSize() const; + void setOutsideSize( float ); + + float getGeomSize() const; + void setGeomSize( float ); + + float getMinSize() const; + void setMinSize( float ); + + float getMaxSize() const; + void setMaxSize( float ); + + float getMagnification() const; + void setMagnification( float ); + + float getIncrement() const; + void setIncrement( float ); + + bool getUniform() const; + void setUniform( bool ); + + QColor getColor() const; + void setColor( const QColor& ); + +protected slots: + void onToggleResults(); + void onToggleGeometry(); + void onToggleInside(); + void onToggleOutside(); + + void onColorButtonPressed(); + +private: + int myType; + + QLabel* myOutsideSizeLabel; + QtxIntSpinBox* myOutsideSizeSpinBox; + + QLabel* myGeomSizeLabel; + QtxIntSpinBox* myGeomSizeSpinBox; + + QLabel* myMinSizeLabel; + QtxIntSpinBox* myMinSizeSpinBox; + + QLabel* myMaxSizeLabel; + QtxIntSpinBox* myMaxSizeSpinBox; + + QLabel* myMagnificationLabel; + QtxIntSpinBox* myMagnificationSpinBox; + + QLabel* myIncrementLabel; + QtxDblSpinBox* myIncrementSpinBox; + + QCheckBox* myUniformCheckBox; + + QGroupBox* myColorGroup; + QLabel* myColorLabel; + QPushButton* myColorButton; +}; + + + +#endif diff --git a/src/VVTK/VVTK_ViewManager.cxx b/src/VVTK/VVTK_ViewManager.cxx new file mode 100644 index 00000000..8c3cb03b --- /dev/null +++ b/src/VVTK/VVTK_ViewManager.cxx @@ -0,0 +1,26 @@ +#include "VVTK_ViewManager.h" +#include "VVTK_ViewModel.h" + +int VVTK_ViewManager::_VVTKViewMgr_Id = 0; + +//*************************************************************** +VVTK_ViewManager +::VVTK_ViewManager( SUIT_Study* study, + SUIT_Desktop* theDesktop ) +: SUIT_ViewManager( study, theDesktop ) +{ + myId = ++_VVTKViewMgr_Id; + setViewModel( new VVTK_Viewer() ); +} + +//*************************************************************** +VVTK_ViewManager::~VVTK_ViewManager() +{ +} + +//*************************************************************** +void VVTK_ViewManager::setViewName(SUIT_ViewWindow* theView) +{ + int aPos = myViews.find(theView); + theView->setCaption( tr( "VTK_VIEW_TITLE" ).arg( myId ).arg( aPos + 1 ) ); +} diff --git a/src/VVTK/VVTK_ViewManager.h b/src/VVTK/VVTK_ViewManager.h new file mode 100644 index 00000000..101fa583 --- /dev/null +++ b/src/VVTK/VVTK_ViewManager.h @@ -0,0 +1,28 @@ +#ifndef VVTK_VIEWMANAGER_H +#define VVTK_VIEWMANAGER_H + +#include "SUIT_ViewManager.h" +#include "VVTK.h" + +class SUIT_Desktop; + +//! Extend SUIT_ViewManager to deal with VVTK_Viewer +class VVTK_EXPORT VVTK_ViewManager : public SUIT_ViewManager +{ + Q_OBJECT; +public: + //! Construct the view manager + VVTK_ViewManager( SUIT_Study* study, SUIT_Desktop* ); + + //! Destroy the view manager + virtual ~VVTK_ViewManager(); + +protected: + void setViewName( SUIT_ViewWindow* theView ); + +private: + int myId; + static int _VVTKViewMgr_Id; +}; + +#endif diff --git a/src/VVTK/VVTK_ViewModel.cxx b/src/VVTK/VVTK_ViewModel.cxx new file mode 100644 index 00000000..e3778816 --- /dev/null +++ b/src/VVTK/VVTK_ViewModel.cxx @@ -0,0 +1,208 @@ +#include +#include + +#include "VVTK_ViewModel.h" +#include "VVTK_ViewWindow.h" + +#include "SVTK_View.h" +#include "SVTK_MainWindow.h" +#include "SVTK_RenderWindowInteractor.h" + +#include "VTKViewer_ViewModel.h" + +//========================================================== +VVTK_Viewer +::VVTK_Viewer() +{ + myTrihedronSize = 105; +} + +VVTK_Viewer +::~VVTK_Viewer() +{} + + +//========================================================== +void +VVTK_Viewer +::setViewManager(SUIT_ViewManager* theViewManager) +{ + SUIT_ViewModel::setViewManager(theViewManager); + + if ( !theViewManager ) + return; + + connect(theViewManager, SIGNAL(mousePress(SUIT_ViewWindow*, QMouseEvent*)), + this, SLOT(onMousePress(SUIT_ViewWindow*, QMouseEvent*))); + + connect(theViewManager, SIGNAL(mouseMove(SUIT_ViewWindow*, QMouseEvent*)), + this, SLOT(onMouseMove(SUIT_ViewWindow*, QMouseEvent*))); + + connect(theViewManager, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)), + this, SLOT(onMouseRelease(SUIT_ViewWindow*, QMouseEvent*))); +} + + +//========================================================== +SUIT_ViewWindow* +VVTK_Viewer +::createView( SUIT_Desktop* theDesktop ) +{ + TViewWindow* aViewWindow = new TViewWindow(theDesktop); + aViewWindow->Initialize(this); + + aViewWindow->setBackgroundColor( backgroundColor() ); + aViewWindow->SetTrihedronSize( trihedronSize() ); + + return aViewWindow; +} + + +//========================================================== +void +VVTK_Viewer +::contextMenuPopup( QPopupMenu* thePopup ) +{ + thePopup->insertItem( VTKViewer_Viewer::tr( "MEN_DUMP_VIEW" ), this, SLOT( onDumpView() ) ); + thePopup->insertItem( VTKViewer_Viewer::tr( "MEN_CHANGE_BACKGROUD" ), this, SLOT( onChangeBgColor() ) ); + + thePopup->insertSeparator(); + + if(TViewWindow* aView = dynamic_cast(myViewManager->getActiveView())){ + if ( !aView->getMainWindow()->getToolBar()->isVisible() ){ + thePopup->insertItem( VTKViewer_Viewer::tr( "MEN_SHOW_TOOLBAR" ), this, SLOT( onShowToolbar() ) ); + } + } +} + + +//========================================================== +void +VVTK_Viewer +::Repaint() +{ + QPtrVector aViews = myViewManager->getViews(); + for(int i = 0, iEnd = aViews.size(); i < iEnd; i++){ + if(TViewWindow* aView = dynamic_cast(aViews.at(i))){ + aView->getMainWindow()->Repaint(); + } + } +} + + +//========================================================== +bool +VVTK_Viewer +::isVisible( const Handle(SALOME_InteractiveObject)& io ) +{ + QPtrVector aViews = myViewManager->getViews(); + for(int i = 0, iEnd = aViews.size(); i < iEnd; i++) + if(SUIT_ViewWindow* aViewWindow = aViews.at(i)) + if(TViewWindow* aView = dynamic_cast(aViewWindow)) + if(!aView->getView()->isVisible( io )) + return false; + + return true; +} + + +//========================================================== +void +VVTK_Viewer +::onMousePress(SUIT_ViewWindow* vw, QMouseEvent* event) +{} + +void +VVTK_Viewer +::onMouseMove(SUIT_ViewWindow* vw, QMouseEvent* event) +{} + +void +VVTK_Viewer +::onMouseRelease(SUIT_ViewWindow* vw, QMouseEvent* event) +{} + + +//========================================================== +QColor +VVTK_Viewer +::backgroundColor() const +{ + return myBgColor; +} + +void +VVTK_Viewer +::setBackgroundColor( const QColor& theColor ) +{ + if ( !theColor.isValid() ) + return; + + QPtrVector aViews = myViewManager->getViews(); + for(int i = 0, iEnd = aViews.size(); i < iEnd; i++){ + if(SUIT_ViewWindow* aViewWindow = aViews.at(i)){ + if(TViewWindow* aView = dynamic_cast(aViewWindow)){ + aView->setBackgroundColor(theColor); + } + } + } + + myBgColor = theColor; +} + +//========================================================== +int +VVTK_Viewer +::trihedronSize() const +{ + return myTrihedronSize; +} + +void +VVTK_Viewer +::setTrihedronSize( const int theSize ) +{ + myTrihedronSize = theSize; + if(SUIT_ViewManager* aViewManager = getViewManager()){ + QPtrVector aViews = aViewManager->getViews(); + for ( int i = 0; i < aViews.count(); i++ ){ + if(TViewWindow* aView = dynamic_cast(aViews.at( i ))){ + aView->getMainWindow()->SetTrihedronSize( theSize ); + } + } + } +} + +//========================================================== +void +VVTK_Viewer +::onDumpView() +{ + if(SUIT_ViewWindow* aView = myViewManager->getActiveView()) + aView->onDumpView(); +} + +//========================================================== +void +VVTK_Viewer +::onChangeBgColor() +{ + if(SUIT_ViewWindow* aView = myViewManager->getActiveView()){ + QColor aColor = QColorDialog::getColor( backgroundColor(), aView); + setBackgroundColor(aColor); + } +} + +//========================================================== +void +VVTK_Viewer +::onShowToolbar() +{ + QPtrVector aViews = myViewManager->getViews(); + for(int i = 0, iEnd = aViews.size(); i < iEnd; i++){ + if(TViewWindow* aView = dynamic_cast(aViews.at(i))){ + aView->getMainWindow()->getToolBar()->show(); + } + } +} + diff --git a/src/VVTK/VVTK_ViewModel.h b/src/VVTK/VVTK_ViewModel.h new file mode 100644 index 00000000..0846edcd --- /dev/null +++ b/src/VVTK/VVTK_ViewModel.h @@ -0,0 +1,70 @@ +#ifndef VVTK_VIEWMODEL_H +#define VVTK_VIEWMODEL_H + +#include + +#include "VVTK.h" +#include "SVTK_ViewModelBase.h" + +#include "SALOME_Prs.h" +#include "SALOME_InteractiveObject.hxx" + +class VVTK_ViewWindow; + +//! Extends two interfaces #SVTK_ViewModelBase and #SALOME_View +class VVTK_EXPORT VVTK_Viewer : public SVTK_ViewModelBase, public SALOME_View +{ + Q_OBJECT; + +public: + typedef VVTK_ViewWindow TViewWindow; + static QString Type() { return "VVTK"; } + + VVTK_Viewer(); + virtual ~VVTK_Viewer(); + + //! Redefine SUIT_ViewModel::createView + virtual SUIT_ViewWindow* createView(SUIT_Desktop*); + + //! Redefine SUIT_ViewModel::setViewManager + virtual void setViewManager(SUIT_ViewManager* theViewManager); + //! Redefine SUIT_ViewModel::contextMenuPopup + virtual void contextMenuPopup( QPopupMenu* ); + //! See SUIT_ViewModel::getType + virtual QString getType() const { return Type(); } + + //! Redefine SALOME_View::Repaint + virtual void Repaint(); + + //! Redefine SALOME_View::isVisible + virtual bool isVisible( const Handle(SALOME_InteractiveObject)& ); + + //! Get background color of the viewer + QColor backgroundColor() const; + + //! Set background color to the viewer + void setBackgroundColor( const QColor& ); + + //! Get size of trihedron of the viewer (see SVTK_Renderer::SetTrihedronSize) + int trihedronSize() const; + + //! Set size of trihedron of the viewer (see SVTK_Renderer::SetTrihedronSize) + void setTrihedronSize( const int ); + +protected slots: + void onMousePress(SUIT_ViewWindow*, QMouseEvent*); + void onMouseMove(SUIT_ViewWindow*, QMouseEvent*); + void onMouseRelease(SUIT_ViewWindow*, QMouseEvent*); + + void onDumpView(); + void onShowToolbar(); + void onChangeBgColor(); + +private: + QColor myBgColor; + int myTrihedronSize; + bool mySelectionEnabled; + bool myMultiSelectionEnabled; +}; + +#endif diff --git a/src/VVTK/VVTK_ViewWindow.cxx b/src/VVTK/VVTK_ViewWindow.cxx new file mode 100755 index 00000000..a181ad6a --- /dev/null +++ b/src/VVTK/VVTK_ViewWindow.cxx @@ -0,0 +1,297 @@ +// SALOME VTKViewer : build VTK viewer into Salome desktop +// +// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : +// Author : +// Module : SALOME +// $Header$ + +#include "VVTK_ViewWindow.h" +#include "VVTK_ViewModel.h" +#include "VVTK_MainWindow.h" +#include "SVTK_View.h" + +#include "SUIT_Session.h" + +#include "VVTK_Renderer.h" +#include "SVTK_Selector.h" +#include "SVTK_InteractorStyle.h" +#include "SVTK_RenderWindowInteractor.h" +#include "SVTK_GenericRenderWindowInteractor.h" + +#include +#include +#include + +//---------------------------------------------------------------------------- +VVTK_ViewWindow +::VVTK_ViewWindow(SUIT_Desktop* theDesktop): + SVTK_ViewWindow(theDesktop), + myMainWindow1(NULL), + myMainWindow2(NULL), + myView2(NULL) +{} + +//---------------------------------------------------------------------------- +void VVTK_ViewWindow::Initialize(SVTK_ViewModelBase* theModel) +{ + if(SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr()){ + QWidget* aWidget = new QWidget(this); + setCentralWidget(aWidget); + + QBoxLayout* aLayout = new QVBoxLayout(aWidget); + aLayout->setAutoAdd(true); + QSplitter* aSplitter = new QSplitter(Qt::Vertical,aWidget); + //aSplitter->setChildrenCollapsible(true); + + VISU_WidgetCtrl* aWidgetCtrl = NULL; + VISU_InsideCursorSettings* anInsideCursorSettings = NULL; + VISU_OutsideCursorSettings* anOutsideCursorSettings = NULL; + VISU_PickingSettings* aPickingSettings = NULL; + SVTK_Selector* aSelector = SVTK_Selector::New(); + { + myMainWindow1 = new VVTK_MainWindow1(aSplitter, + "VVTK_MainWindow", + aResourceMgr, + this); + + anInsideCursorSettings = myMainWindow1->GetInsideCursorSettings(); + anOutsideCursorSettings = myMainWindow1->GetOutsideCursorSettings(); + aPickingSettings = myMainWindow1->GetPickingSettings(); + + SVTK_RenderWindowInteractor* anIteractor = + new SVTK_RenderWindowInteractor(myMainWindow1,"SVTK_RenderWindowInteractor1"); + + SVTK_GenericRenderWindowInteractor* aDevice = + SVTK_GenericRenderWindowInteractor::New(); + aDevice->SetRenderWidget(anIteractor); + aDevice->SetSelector(aSelector); + + VVTK_Renderer1* aRenderer = VVTK_Renderer1::New(); + aRenderer->Initialize(aDevice,aSelector); + + aWidgetCtrl = aRenderer->GetWidgetCtrl(); + + aRenderer->SetInsideCursorSettings(anInsideCursorSettings); + aRenderer->SetOutsideCursorSettings(anOutsideCursorSettings); + aRenderer->SetPickingSettings(aPickingSettings); + + anIteractor->Initialize(aDevice,aRenderer,aSelector); + + SVTK_InteractorStyle* aStyle = SVTK_InteractorStyle::New(); + anIteractor->PushInteractorStyle(aStyle); + aStyle->Delete(); + + aDevice->Delete(); + aRenderer->Delete(); + + myMainWindow1->Initialize(anIteractor,aRenderer); + + myView1 = new SVTK_View(myMainWindow1); + SVTK_ViewWindow::Initialize(myView1,theModel); + } + { + myMainWindow2 = myMainWindow1->CreateMainWindow2(aSplitter, + "VVTK_SegmantationWindow", + aResourceMgr, + this); + SVTK_RenderWindowInteractor* anIteractor = + new SVTK_RenderWindowInteractor(myMainWindow2,"SVTK_RenderWindowInteractor1"); + + SVTK_GenericRenderWindowInteractor* aDevice = + SVTK_GenericRenderWindowInteractor::New(); + aDevice->SetRenderWidget(anIteractor); + aDevice->SetSelector(aSelector); + + VVTK_Renderer2* aRenderer = VVTK_Renderer2::New(); + aRenderer->Initialize(aDevice,aSelector); + + aRenderer->SetWidgetCtrl(aWidgetCtrl); + + aRenderer->SetInsideCursorSettings(anInsideCursorSettings); + aRenderer->SetPickingSettings(aPickingSettings); + + anIteractor->Initialize(aDevice,aRenderer,aSelector); + + SVTK_InteractorStyle* aStyle = SVTK_InteractorStyle::New(); + anIteractor->PushInteractorStyle(aStyle); + aStyle->Delete(); + + aDevice->Delete(); + aRenderer->Delete(); + + myMainWindow2->Initialize(anIteractor); + + myView2 = new SVTK_View(myMainWindow2); + SVTK_ViewWindow::Initialize(myView2,theModel); + } + aSelector->Delete(); + + int h = height() / 2; + QValueList aSizes; + aSizes.append( h ); + aSizes.append( h ); + aSplitter->setSizes( aSizes ); + myMainWindow2->hide(); + + myMainWindow = myMainWindow1; + myView = myView1; + } +} + +//---------------------------------------------------------------------------- +VVTK_ViewWindow +::~VVTK_ViewWindow() +{} + + +//---------------------------------------------------------------------------- +VVTK_MainWindow1* +VVTK_ViewWindow +::getMainWindow1() +{ + return myMainWindow1; +} + +VVTK_MainWindow2* +VVTK_ViewWindow +::getMainWindow2() +{ + return myMainWindow2; +} + + +//---------------------------------------------------------------------------- +void +VVTK_ViewWindow +::AddActor(VTKViewer_Actor* theActor, + bool theIsUpdate) +{ + myMainWindow1->AddActor(theActor,theIsUpdate); + myMainWindow2->AddActor(theActor,theIsUpdate); +} + +//---------------------------------------------------------------------------- +void +VVTK_ViewWindow +::RemoveActor(VTKViewer_Actor* theActor, + bool theIsUpdate) +{ + myMainWindow1->RemoveActor(theActor,theIsUpdate); + myMainWindow2->RemoveActor(theActor,theIsUpdate); +} + +//---------------------------------------------------------------------------- +void +VVTK_ViewWindow +::Repaint(bool theUpdateTrihedron) +{ + myMainWindow1->Repaint(theUpdateTrihedron); + myMainWindow2->Repaint(theUpdateTrihedron); +} + +//---------------------------------------------------------------- +void +VVTK_ViewWindow +::unHighlightAll() +{ + myView1->unHighlightAll(); + myView2->unHighlightAll(); +} + +//---------------------------------------------------------------- +void +VVTK_ViewWindow +::highlight(const Handle(SALOME_InteractiveObject)& theIO, + bool theIsHighlight, + bool theIsUpdate ) +{ + myView1->highlight( theIO, theIsHighlight, theIsUpdate ); + myView2->highlight( theIO, theIsHighlight, theIsUpdate ); +} + +//---------------------------------------------------------------- +void +VVTK_ViewWindow +::onSelectionChanged() +{ + myView1->onSelectionChanged(); + myView2->onSelectionChanged(); +} + +//---------------------------------------------------------------------------- +void +VVTK_ViewWindow +::onResetView() +{ + myMainWindow1->onResetView(); + myMainWindow2->onResetView(); +} + +//---------------------------------------------------------------------------- +void +VVTK_ViewWindow +::onFitAll() +{ + myMainWindow1->onFitAll(); + myMainWindow2->onFitAll(); +} + +//---------------------------------------------------------------------------- +void +VVTK_ViewWindow +::action( const int accelAction ) +{ + if(myMainWindow1->hasFocus()) + myMainWindow1->action(accelAction); + if(myMainWindow2->hasFocus()) + myMainWindow2->action(accelAction); +} + +//---------------------------------------------------------------------------- +QImage +VVTK_ViewWindow +::dumpView() +{ + if( myMainWindow1->GetInteractor()->hasFocus() ) + return myMainWindow1->dumpView(); + + if( myMainWindow2->GetInteractor()->hasFocus() ) + return myMainWindow2->dumpView(); + + return QImage(); +} + +//---------------------------------------------------------------------------- +void +VVTK_ViewWindow +::setBackgroundColor( const QColor& theColor ) +{ + if( myMainWindow1->GetInteractor()->hasFocus() ) + myMainWindow1->SetBackgroundColor( theColor ); + else if( myMainWindow2->GetInteractor()->hasFocus() ) + myMainWindow2->SetBackgroundColor( theColor ); + else + myMainWindow->SetBackgroundColor( theColor ); +} + diff --git a/src/VVTK/VVTK_ViewWindow.h b/src/VVTK/VVTK_ViewWindow.h new file mode 100755 index 00000000..54e4745d --- /dev/null +++ b/src/VVTK/VVTK_ViewWindow.h @@ -0,0 +1,124 @@ +#ifndef VVTK_VIEWWINDOW_H +#define VVTK_VIEWWINDOW_H + +#ifdef WIN32 +#pragma warning( disable:4251 ) +#endif + +#include "VVTK.h" +#include "SVTK_ViewWindow.h" + +#include + +class VVTK_MainWindow1; +class VVTK_MainWindow2; +class SVTK_View; + +//---------------------------------------------------------------------------- +//! Customize the SVTK_ViewWindow in order to manage two SVTK_View (base and segmented one) +class VVTK_EXPORT VVTK_ViewWindow : public SVTK_ViewWindow +{ + Q_OBJECT; + +public: + //! To construct the class + VVTK_ViewWindow(SUIT_Desktop* theDesktop); + + //! Destroy + virtual + ~VVTK_ViewWindow(); + + //! To initialize + virtual + void + Initialize(SVTK_ViewModelBase* theModel); + + //---------------------------------------------------------------------------- + //! Get access to base SVTK_MainWindow + VVTK_MainWindow1* + getMainWindow1(); + + //! Get access to segmented SVTK_MainWindow + VVTK_MainWindow2* + getMainWindow2(); + + //---------------------------------------------------------------------------- + //! Redefine SVTK_ViewWindow::AddActor method + /*! + This is an entry point for publication the presentation into the viewer. + Pointed actor published into the basic MainWindow. If the actor is + a Gauss Points one second actor is created from initial actor and + is put into segemented MainWindow. + */ + virtual + void + AddActor(VTKViewer_Actor* theActor, + bool theIsUpdate = false); + + //! Redefine SVTK_ViewWindow::RemoveActor method + virtual + void + RemoveActor(VTKViewer_Actor* theActor, + bool theIsUpdate = false); + + //! Redefine SVTK_ViewWindow::Repaint method + virtual + void + Repaint(bool theUpdateTrihedron = true); + + //---------------------------------------------------------------------------- + /* interactive object management */ + //! Redefine SVTK_ViewWindow::highlight method + virtual + void + highlight(const Handle(SALOME_InteractiveObject)& theIO, + bool theIsHighlight = true, + bool theIsUpdate = true); + + //! Redefine SVTK_ViewWindow::unHighlightAll method + virtual + void + unHighlightAll(); + + //! Redefine SVTK_ViewWindow::setBackgroundColor method + virtual + void + setBackgroundColor( const QColor& ); + + //---------------------------------------------------------------------------- +public slots: + //! Redefine SVTK_ViewWindow::onSelectionChanged method + virtual + void + onSelectionChanged(); + + //! Redefine SVTK_ViewWindow::onResetView method + virtual + void + onResetView(); + + //! Redefine SVTK_ViewWindow::onFitAll method + virtual + void + onFitAll(); + + //---------------------------------------------------------------------------- +protected: + virtual + void + action( const int ); + + virtual QImage dumpView(); + + VVTK_MainWindow1* myMainWindow1; //!< The manage base view + SVTK_View* myView1; //!< The manage base view + + VVTK_MainWindow2* myMainWindow2; //!< The manage segmented view + SVTK_View* myView2; //!< The manage segmented view +}; + +#ifdef WIN32 +#pragma warning( default:4251 ) +#endif + +#endif -- 2.39.2

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