From b78f7ff0779c7907ca2d9c847c39768272c03883 Mon Sep 17 00:00:00 2001 From: admin Date: Thu, 27 Oct 2005 14:00:10 +0000 Subject: [PATCH] This commit was generated by cvs2git to create tag 'BR-D5-38-2003_D2005-12-19'. Sprout from BR-D5-38-2003_Base 2005-10-27 14:00:09 UTC admin 'This commit was generated by cvs2git to create branch 'BR-D5-38-2003_Base'.' Cherrypick from BR-D5-38-2003 2005-10-18 15:41:31 UTC apo 'To update picking settings': src/CONVERTOR/Makefile.in src/CONVERTOR/VISUConvertor.cxx src/OBJECT/VISU_GaussPtsAct.cxx src/OBJECT/VISU_GaussPtsDeviceActor.cxx src/OBJECT/VISU_ScalarMapAct.cxx src/PIPELINE/Makefile.in src/PIPELINE/SALOME_ExtractGeometry.cxx src/PIPELINE/SALOME_ExtractGeometry.h src/PIPELINE/VISUPipeLine.cxx src/PIPELINE/VISU_ImplicitFunctionWidget.cxx src/PIPELINE/VISU_ImplicitFunctionWidget.h src/PIPELINE/VISU_OpenGLPointSpriteMapper.cxx src/PIPELINE/VISU_ScalarBarCtrl.cxx src/PIPELINE/VISU_ScalarBarCtrl.hxx src/VISUGUI/Makefile.in src/VISUGUI/VisuGUI.cxx src/VISUGUI/VisuGUI_Tools.cxx src/VISUGUI/VisuGUI_ViewTools.h src/VISU_I/Makefile.in src/VISU_I/VISU_ColoredPrs3d_i.cc src/VISU_I/VISU_Gen_i.hh src/VISU_I/VISU_TimeAnimation.cxx src/VISU_I/VISU_View_i.cc src/VVTK/VVTK_Renderer.cxx Cherrypick from master 2005-10-04 14:38:51 UTC jfa 'Update version to 3.1.0a': INSTALL Makefile.in doc/salome/tui/VISU/doxyfile examples/Fields_group3D.med examples/Makefile.in examples/ResOK_0000.med examples/VISU_Example_01.py examples/VISU_Example_02.py examples/VISU_Example_03.py examples/VISU_Example_04.py examples/VISU_Example_05.py examples/VISU_Example_06.py examples/tables_test.xls src/OBJECT/VISU_ScalarMapAct.h src/VISUGUI/VISU_msg_en.po src/VISUGUI/VisuGUI_ActionsDef.h src/VISU_I/VISU_View_i.hh src/VISU_SWIG/batchmode_visu_view3d.py src/VISU_SWIG/visu_delete.py src/VISU_SWIG/visu_med.py src/VISU_SWIG/visu_prs_example.py src/VISU_SWIG/visu_swig_test.py src/VISU_SWIG/visu_view3d.py Delete: src/VISUGUI/VisuGUI_Timer.cxx src/VISUGUI/VisuGUI_Timer.h src/VISU_SWIG/VISU_Example_01.py src/VISU_SWIG/VISU_Example_02.py src/VISU_SWIG/VISU_Example_03.py src/VISU_SWIG/VISU_Example_04.py src/VISU_SWIG/VISU_Example_05.py src/VISU_SWIG/VISU_Example_06.py --- INSTALL | 8 +- Makefile.in | 2 +- doc/salome/tui/VISU/doxyfile | 97 +-- examples/Fields_group3D.med | Bin 0 -> 44352 bytes examples/Makefile.in | 33 + examples/ResOK_0000.med | Bin 0 -> 175696 bytes .../VISU_SWIG => examples}/VISU_Example_01.py | 2 +- .../VISU_SWIG => examples}/VISU_Example_02.py | 4 +- .../VISU_SWIG => examples}/VISU_Example_03.py | 2 +- .../VISU_SWIG => examples}/VISU_Example_04.py | 6 +- .../VISU_SWIG => examples}/VISU_Example_05.py | 0 .../VISU_SWIG => examples}/VISU_Example_06.py | 2 +- examples/tables_test.xls | 115 +++ src/CONVERTOR/Makefile.in | 2 +- src/CONVERTOR/VISUConvertor.cxx | 9 +- src/OBJECT/VISU_GaussPtsAct.cxx | 27 +- src/OBJECT/VISU_GaussPtsDeviceActor.cxx | 2 +- src/OBJECT/VISU_ScalarMapAct.cxx | 26 +- src/OBJECT/VISU_ScalarMapAct.h | 3 - src/PIPELINE/Makefile.in | 2 +- src/PIPELINE/SALOME_ExtractGeometry.cxx | 49 +- src/PIPELINE/SALOME_ExtractGeometry.h | 1 - src/PIPELINE/VISUPipeLine.cxx | 14 +- src/PIPELINE/VISU_ImplicitFunctionWidget.cxx | 729 +++++++--------- src/PIPELINE/VISU_ImplicitFunctionWidget.h | 88 +- src/PIPELINE/VISU_OpenGLPointSpriteMapper.cxx | 13 +- src/PIPELINE/VISU_ScalarBarCtrl.cxx | 12 +- src/PIPELINE/VISU_ScalarBarCtrl.hxx | 2 +- src/VISUGUI/Makefile.in | 3 +- src/VISUGUI/VISU_msg_en.po | 9 - src/VISUGUI/VisuGUI.cxx | 10 +- src/VISUGUI/VisuGUI_ActionsDef.h | 3 - src/VISUGUI/VisuGUI_Timer.cxx | 103 --- src/VISUGUI/VisuGUI_Timer.h | 43 - src/VISUGUI/VisuGUI_Tools.cxx | 2 +- src/VISUGUI/VisuGUI_ViewTools.h | 2 +- src/VISU_I/Makefile.in | 36 +- src/VISU_I/VISU_ColoredPrs3d_i.cc | 4 +- src/VISU_I/VISU_Gen_i.hh | 15 +- src/VISU_I/VISU_TimeAnimation.cxx | 4 +- src/VISU_I/VISU_View_i.cc | 797 +++++++----------- src/VISU_I/VISU_View_i.hh | 72 +- src/VISU_SWIG/batchmode_visu_view3d.py | 4 +- src/VISU_SWIG/visu_delete.py | 2 +- src/VISU_SWIG/visu_med.py | 2 +- src/VISU_SWIG/visu_prs_example.py | 2 +- src/VISU_SWIG/visu_swig_test.py | 2 +- src/VISU_SWIG/visu_view3d.py | 4 +- src/VVTK/VVTK_Renderer.cxx | 2 +- 49 files changed, 977 insertions(+), 1394 deletions(-) create mode 100644 examples/Fields_group3D.med create mode 100644 examples/Makefile.in create mode 100644 examples/ResOK_0000.med rename {src/VISU_SWIG => examples}/VISU_Example_01.py (99%) rename {src/VISU_SWIG => examples}/VISU_Example_02.py (98%) rename {src/VISU_SWIG => examples}/VISU_Example_03.py (95%) rename {src/VISU_SWIG => examples}/VISU_Example_04.py (96%) rename {src/VISU_SWIG => examples}/VISU_Example_05.py (100%) rename {src/VISU_SWIG => examples}/VISU_Example_06.py (96%) create mode 100644 examples/tables_test.xls delete mode 100644 src/VISUGUI/VisuGUI_Timer.cxx delete mode 100644 src/VISUGUI/VisuGUI_Timer.h diff --git a/INSTALL b/INSTALL index 5953dd67..fc58f193 100644 --- a/INSTALL +++ b/INSTALL @@ -1,5 +1,5 @@ -This is the version 3.1.0a2 of VISU +This is the version 3.1.0a of VISU Compatible with : - - KERNEL 3.1.0a2 - - SALOMEGUI 3.1.0a2 - - MED 3.1.0a2 + - KERNEL 3.1.0a + - SALOMEGUI 3.1.0a + - MED 3.1.0a diff --git a/Makefile.in b/Makefile.in index 519f470b..ca5acded 100644 --- a/Makefile.in +++ b/Makefile.in @@ -14,7 +14,7 @@ VPATH=.:@srcdir@:@top_srcdir@/bin:@top_srcdir@/resources:./bin:@top_srcdir@/idl: @COMMENCE@ -SUBDIRS = idl src doc +SUBDIRS = idl src examples doc BIN_SCRIPT= \ VERSION diff --git a/doc/salome/tui/VISU/doxyfile b/doc/salome/tui/VISU/doxyfile index b4346ae4..3ee35aea 100755 --- a/doc/salome/tui/VISU/doxyfile +++ b/doc/salome/tui/VISU/doxyfile @@ -1,89 +1,73 @@ -# Doxyfile 1.3.7 +# Doxyfile 1.3-rc1 #--------------------------------------------------------------------------- -# Project related configuration options +# General configuration options #--------------------------------------------------------------------------- -PROJECT_NAME = "SALOME v.3.1.0a" +PROJECT_NAME = "SALOME - VISU - v.2.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 -EXTRACT_LOCAL_METHODS = NO -HIDE_UNDOC_MEMBERS = YES -HIDE_UNDOC_CLASSES = YES +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO HIDE_IN_BODY_DOCS = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = NO +ALWAYS_DETAILED_SEC = YES +INLINE_INHERITED_MEMB = YES +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = INTERNAL_DOCS = YES CASE_SENSE_NAMES = YES +SHORT_NAMES = NO HIDE_SCOPE_NAMES = NO +VERBATIM_HEADERS = YES SHOW_INCLUDE_FILES = YES +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES INLINE_INFO = YES SORT_MEMBER_DOCS = NO -SORT_BRIEF_DOCS = NO -SORT_BY_SCOPE_NAME = NO +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 5 GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES GENERATE_DEPRECATEDLIST= YES +ALIASES = ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 25 +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = YES SHOW_USED_FILES = NO - #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES -WARN_IF_DOC_ERROR = YES WARN_FORMAT = "$file:$line: $text" WARN_LOGFILE = log.txt - #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- -INPUT = ../../../share/salome/src \ - ../../../share/salome/idl -FILE_PATTERNS = *.idl *.h *.hh *.hxx *.c *.cc *.cxx *.ixx *.jxx -RECURSIVE = YES +INPUT = ../../../share/salome/idl/VISU_Gen.idl +FILE_PATTERNS = +RECURSIVE = NO EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = EXAMPLE_PATH = EXAMPLE_PATTERNS = -EXAMPLE_RECURSIVE = YES +EXAMPLE_RECURSIVE = NO IMAGE_PATH = sources/ INPUT_FILTER = FILTER_SOURCE_FILES = YES - #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- @@ -92,15 +76,12 @@ 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 #--------------------------------------------------------------------------- @@ -121,7 +102,6 @@ DISABLE_INDEX = YES ENUM_VALUES_PER_LINE = 4 GENERATE_TREEVIEW = YES TREEVIEW_WIDTH = 250 - #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- @@ -136,8 +116,6 @@ LATEX_HEADER = PDF_HYPERLINKS = NO USE_PDFLATEX = NO LATEX_BATCHMODE = NO -LATEX_HIDE_INDICES = NO - #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- @@ -147,7 +125,6 @@ COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = - #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- @@ -155,21 +132,16 @@ 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 #--------------------------------------------------------------------------- @@ -177,7 +149,6 @@ GENERATE_PERLMOD = NO PERLMOD_LATEX = NO PERLMOD_PRETTY = YES PERLMOD_MAKEVAR_PREFIX = - #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- @@ -190,16 +161,14 @@ INCLUDE_FILE_PATTERNS = PREDEFINED = EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = NO - #--------------------------------------------------------------------------- -# Configuration::additions related to external references +# Configuration::addtions related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = ALLEXTERNALS = NO EXTERNAL_GROUPS = YES PERL_PATH = /usr/bin/perl - #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- @@ -208,22 +177,24 @@ 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::additions related to the search engine +# Configuration::addtions related to the search engine #--------------------------------------------------------------------------- SEARCHENGINE = NO +CGI_NAME = search.cgi +CGI_URL = +DOC_URL = +DOC_ABSPATH = +BIN_ABSPATH = /usr/local/bin/ +EXT_DOC_PATHS = diff --git a/examples/Fields_group3D.med b/examples/Fields_group3D.med new file mode 100644 index 0000000000000000000000000000000000000000..956017747c765d85811fcfc7a896dbc1c29b85e3 GIT binary patch literal 44352 zcmeHQVQd^n72ZqSVqCX4B_NZg;sOP%Drud>fs{me9s3-ojn7xdL8%DXY2)I6)1-+h zZVRPU6>`-Ui~x}~rWgbw0wLuW3Id4;_~A-HwJ1M=`a^Kl%gIK$y4hefI9$ z&3b+Dt@qZm*6!Pxoj3F5&6_vh&djY}=<4XawQfV5Lq~0mQ{yx^YrOzpuFK*6IvA!< zgCxxGBWFZz4okQz*H-XuReYnm8IgF9T>e0RcUzm&-qq&JsYqhKf`=)leZ9FH)fT!1 zr7E}F#1*eias88AwT!dIv%{};A!7=Bju)xo z58o`AtzzQ$OEhM`Xz)v6eM6c8WEE?3WvXr(vp3$t^1Q=uH1oo7-&pHmw9(BRjlMB+ zH;1R1n9{g@_4Z(z!a5E&38g-ELHr}~F_q1n)p5-@b)L`Ri=*BJ8@=0gn_9(%xK7J0 zPRsTAcR$jWdYcg?d{U};oAiur&CT1@-;U<{cI@2oDfNme`DNA!19d=k5FhEZ-f5&>xuH1T;(m_s8lq2j8_&_7`Lk>`6SSE#B@KalO2?YUZhee}9OaHl@(LPx zOq!E1iTIK{Ci#8ExsO9jr779?CBZVKQ=~Um_Z4T$@D&3eW&K!Ru`+gI@)bH}Um59^ zuhcavtM{n0PMz;lCr!iAls-*+()118Qykq>98Fi!dApqCujqY-mL$nmDL+b2c@i(3 z{y3WAq@{#g)k&Cx%B6g%Y$}6Je_Xjf82u*ddqLrDRj@jUuN)tYce+Zy7x;bfg->`Q z8!uFs!bgmcQ~jV^yCJ)#BdXn;6uTk5a_k1>RoZUK)d$syj;Q*$Ao?J_a`b`n(xQ*4 zlHkKkLP4l6wht$l-yg3 zw3e=n22A^z-W6Y6(8OZwe3Q3lV{9uw#CUS`UJn0RXjTO;-4{&LOap;BYK1nb`#bk| zQM`7cZolbr_#vTWL&M@5P}a2A+Bu=*GakF2`H<$XT^#ehrxV#sddf7QJuiZ9Xmi1Cr-^x^cT|X_&pw%0?w??<->-CVS8J zu{^rH^H{)pTSvuL!S~K=W1b6IA6S{1t!$|oHM8gGMU=Bvp(47aZ4N{;vM&$&^&S*) zqrMN$e3}`EkBc}XIV6+#?PhvMGG$DHRQh<570d+LqF{*s?B>+gr$TG-Qj#j04TOEAD+mD0*dGMvf8Zi!+heUCgUG47{4D-Y!JrMpL3$)}z-_*A{k zepm;+Dx!1G~5npYR zQ&Ob?#T&8&TaAF?Px<7uQ&J^4e&pEj@ZjnG?p%i_BK0vpK*;wnn(uDg=RNOiV}rn_ z;gA@g*3o~W+Ody2Z}CrKStGRl-hZ_Bu%qs5V?M}J@3>wv@*}nC4}%{q?a{By;TuL} zKzUN=Q$jsvb-;VI_y7e{oqDn3Dofa4;^3(Tb73H^x(rND}DF^xKQ}#vq zEm1ywUszFoi^xa&PyO=gGXO>TEm1ywzgba!i^xa&X8rQ%fTAeBi1JaM_OKeT8n7C$ z8mN8^ULNBmpjL3pxhjrT5lxu0W!*>`_|!|R1o zKi>SUV4CsgIXonkL+QJsZ@8*z^qM>H_0n|=>l?ej$UL@hl-6CPV@>|>&=D@VS!ku@ zsD}L6FYtGBuYH9jhF=&M;qbs|rVWbB91o^(hdDg)C8lKa?>rn#lLo!RFOUvMKLdkY zM_k)w@g>YJj2z?C)-OP7@zRX?r82c$R*J=#IVnEAVNFmT{{l_D_;mD*lhXcOnjHjl zSRJ9_1)8OOQ@Tdf6!kYMS@Ai<$9-umQHu84&C#JmiIyl~;8R^C6=ALO-$;~rt3sGp zU!mi-txR8UebhVtDdB&$hK*;=Nmh{^&sN4%OgLA^WRMR14H)LG$MA${6b!TT6sNUq z9@Jf2Arpp~6WTHsv0m%)8k2Msbt9lpXw^H z2*Wtf(Iq{{cJFvo@W9_&xn{Gi9RH6{e2^XG)OM^`8GA6{1ASfx(!rL24?3Q}6Q)t{ z!J(%(t!?w5?&1oW@PR9SDGVRXeU+sIKIoJ7->lg|Ty;rOIX8+Apwp;x90RhBLwwwq z#*(BC`5&qLy_T*g6D3+Ag;ASJ@1c#9L}?=>QU6BD#hxd!Qc9@5T%u#975nt`wZx)* zW-^GFHp`-)=zM(-6+9J~_~=`dbolx7O|8c(XN|L7d5(hcng72ZBw|`rZV!LFZ}D=Q zy$q<_DF4?FbH4RX*E}D!m+A*zm^LeKQYYHWzlpo!-nL=-<|uHAlW)(-vXm-2m|vlD zf64q7+Nt!N$D}TPeUN-n?ZVIJ>0@u3m!(OMs3*!TmTGDCq`%u2$z$zl{zn1Uo?vZe z|D zSA}WrYxXDdKqFymNJB4iV%z4L(qaml=7^q`{eOprLLC2op{uWOEX<;ChQm!l37@_6 z-C&xz?{IiZD7AZ5`aSY7mCc;haYf$%Mjd}4D0h^(w8?KXkL?>l-Nh9$&8203$`a^v zX>rMw#B%(5UUt985~4p(itUeTeISYTsI*KsI*(W{0!E!j9Qr;p5Fh&yakiDNXvF;e zb~FBRM5a}k4C9Hb>P}dz`Ddk-5Qep;#1`y$Qd)PFjx}K|9TPzgv^g-u-vmqHc@zxc z{E$=IHiy>Yr6vsF{+#7V7lxRY{Q=W|;M!dQMLa0tK_z~6p7K7#w`D)#+pYd_;@R(U z?!XssNx%5L)<5EH>131^H@=vf;CfdBzL@(#GTJDKQedocm2iYF3cn~VWf;C_`VsTk zv8J@{DjjRW7y7&mX-1pCwZqVF$q zJ?R$vNFP?zb&9G*{YanAk1+B9Mf?I?+I|szj#k%C-tHH%`$ZOvOYVyIi@+XJLS6VB qeU8EQ54%4v*d3PUZ*@$Wc6$Prw)?5rGeRFJ@sqY1Rs*Tj!2bbC`uolR literal 0 HcmV?d00001 diff --git a/examples/Makefile.in b/examples/Makefile.in new file mode 100644 index 00000000..52f3a639 --- /dev/null +++ b/examples/Makefile.in @@ -0,0 +1,33 @@ +# Copyright (C) 2005 CEA/DEN, EDF R&D +# +# +# +# File : Makefile.in +# Author : Vasily Rusyaev (Open Cascade NN) +# Module : examples +# $Header: + +top_srcdir=@top_srcdir@ +top_builddir=.. +srcdir=@srcdir@ +VPATH=.:@srcdir@ +curdir = $(shell pwd) +instdatadir=${prefix}/examples + +SUBDIRS=. + +@COMMENCE@ + +data: + (cd $(srcdir) ; cp -fr `ls | grep -v "Makefile.in"` $(curdir)) + +clean: + rm -rf `ls | grep -v "Makefile"` + +install: + rm -rf $(instdatadir) + mkdir $(instdatadir) + cp -rf `ls | grep -v "Makefile"` $(instdatadir) + +uninstall: + rm -rf $(instdatadir) diff --git a/examples/ResOK_0000.med b/examples/ResOK_0000.med new file mode 100644 index 0000000000000000000000000000000000000000..47afde89ac3fb2bcbe036de4ccbd8e45cc0c4f3a GIT binary patch literal 175696 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 literal 0 HcmV?d00001 diff --git a/src/VISU_SWIG/VISU_Example_01.py b/examples/VISU_Example_01.py similarity index 99% rename from src/VISU_SWIG/VISU_Example_01.py rename to examples/VISU_Example_01.py index 82228544..8de2ce6c 100644 --- a/src/VISU_SWIG/VISU_Example_01.py +++ b/examples/VISU_Example_01.py @@ -9,7 +9,7 @@ import SALOMEDS import VISU import os -datadir = os.getenv("DATA_DIR") + "/MedFiles/" +datadir = os.getenv("VISU_ROOT_DIR") + "/examples/" #%====================Stage1: Creating a new study====================% diff --git a/src/VISU_SWIG/VISU_Example_02.py b/examples/VISU_Example_02.py similarity index 98% rename from src/VISU_SWIG/VISU_Example_02.py rename to examples/VISU_Example_02.py index be71fa76..a7f6ea3b 100644 --- a/src/VISU_SWIG/VISU_Example_02.py +++ b/examples/VISU_Example_02.py @@ -1,5 +1,5 @@ # T 2.24: Save/retrieve view parameters. -# Uses MED file fra.med from ${DATA_DIR}/MedFiles directory. +# Uses MED file fra.med from ${KERNEL_ROOT_DIR}/examples directory. # # This script is equivalent to non-regression test script 003/A3 @@ -9,7 +9,7 @@ import SALOMEDS import VISU import os -medFile = os.getenv("DATA_DIR") + "/MedFiles/fra.med" +medFile = os.getenv("KERNEL_ROOT_DIR") + "/examples/fra.med" #%====================Stage1: Creating a new study====================% diff --git a/src/VISU_SWIG/VISU_Example_03.py b/examples/VISU_Example_03.py similarity index 95% rename from src/VISU_SWIG/VISU_Example_03.py rename to examples/VISU_Example_03.py index dfa066cc..c64de44b 100644 --- a/src/VISU_SWIG/VISU_Example_03.py +++ b/examples/VISU_Example_03.py @@ -9,7 +9,7 @@ import VISU import os import time -medFile = os.getenv("DATA_DIR") + "/MedFiles/TimeStamps.med" +medFile = os.getenv("KERNEL_ROOT_DIR") + "/examples/TimeStamps.med" print 'Importing "TimeStamps.med"................', myVisu = visu_gui.myVisu diff --git a/src/VISU_SWIG/VISU_Example_04.py b/examples/VISU_Example_04.py similarity index 96% rename from src/VISU_SWIG/VISU_Example_04.py rename to examples/VISU_Example_04.py index a50a831a..71e40845 100644 --- a/src/VISU_SWIG/VISU_Example_04.py +++ b/examples/VISU_Example_04.py @@ -1,6 +1,6 @@ # Show some results presentations in different 3D and 2D viewers # with different options (view parameters and display modes). -# Uses MED files fra.med and TimeStamps.med from ${DATA_DIR}/MedFiles directory. +# Uses MED files fra.med and TimeStamps.med from ${KERNEL_ROOT_DIR}/examples directory. # # Pay attention to a viewer title to know its purpose. # @@ -46,7 +46,7 @@ aMeshName ="LE VOLUME" anEntity = VISU.NODE aTimeStampId = 1 -medFile = os.getenv('DATA_DIR') + '/MedFIles/' + medFile +medFile = os.getenv('KERNEL_ROOT_DIR') + '/examples/' + medFile myResult = myVisu.ImportFile(medFile) myView = myViewManager.Create3DView(); @@ -230,7 +230,7 @@ time.sleep(aDelay) medFile = "TimeStamps.med" myFieldName = "vitesse"; -medFile = os.getenv('DATA_DIR') + '/MedFiles/' + medFile +medFile = os.getenv('KERNEL_ROOT_DIR') + '/examples/' + medFile myResult = myVisu.ImportFile(medFile) anAnim = myVisu.CreateAnimation(myView); diff --git a/src/VISU_SWIG/VISU_Example_05.py b/examples/VISU_Example_05.py similarity index 100% rename from src/VISU_SWIG/VISU_Example_05.py rename to examples/VISU_Example_05.py diff --git a/src/VISU_SWIG/VISU_Example_06.py b/examples/VISU_Example_06.py similarity index 96% rename from src/VISU_SWIG/VISU_Example_06.py rename to examples/VISU_Example_06.py index f31b80e4..a4eee6cc 100644 --- a/src/VISU_SWIG/VISU_Example_06.py +++ b/examples/VISU_Example_06.py @@ -27,7 +27,7 @@ if not myComponent: myBuilder.DefineComponentInstance(myComponent,myVisu) # >>> Import a tables from a file ============================================ -aFileName = os.getenv("DATA_DIR") + "/Tables/tables_test.xls" +aFileName = os.getenv("VISU_ROOT_DIR") + "/examples/tables_test.xls" sobj = myVisu.ImportTables(aFileName) # >>> Create container and insert curves ===================================== diff --git a/examples/tables_test.xls b/examples/tables_test.xls new file mode 100644 index 00000000..4fedc011 --- /dev/null +++ b/examples/tables_test.xls @@ -0,0 +1,115 @@ +0 1 +1 2 +2 2.5 + +#TITLE: Table toto 1 +#COLUMN_TITLES: toto 1 | titi2 | subtitle 2.3 +#COLUMN_UNITS: s kg/m3 m +# It's a comment ... +0 4.3 -3 #TITLE: row title 1 +1 5 6 #TITLE: row title 2 +# Another comment +2 -7 4.5 #TITLE: row title 3 + +#TITLE: sinus +0.0 0.0 +0.01 0.125333233564 +0.02 0.248689887165 +0.03 0.368124552685 +0.04 0.481753674102 +0.05 0.587785252292 +0.06 0.684547105929 +0.07 0.770513242776 +0.08 0.844327925502 +0.09 0.904827052466 +0.1 0.951056516295 +0.11 0.982287250729 +0.12 0.998026728428 +0.13 0.998026728428 +0.14 0.982287250729 +0.15 0.951056516295 +0.16 0.904827052466 +0.17 0.844327925502 +0.18 0.770513242776 +0.19 0.684547105929 +0.2 0.587785252292 +0.21 0.481753674102 +0.22 0.368124552685 +0.23 0.248689887165 +0.24 0.125333233564 +0.25 1.22460635382e-16 +0.26 -0.125333233564 +0.27 -0.248689887165 +0.28 -0.368124552685 +0.29 -0.481753674102 +0.3 -0.587785252292 +0.31 -0.684547105929 +0.32 -0.770513242776 +0.33 -0.844327925502 +0.34 -0.904827052466 +0.35 -0.951056516295 +0.36 -0.982287250729 +0.37 -0.998026728428 +0.38 -0.998026728428 +0.39 -0.982287250729 +0.4 -0.951056516295 +0.41 -0.904827052466 +0.42 -0.844327925502 +0.43 -0.770513242776 +0.44 -0.684547105929 +0.45 -0.587785252292 +0.46 -0.481753674102 +0.47 -0.368124552685 +0.48 -0.248689887165 +0.49 -0.125333233564 +0.5 -2.44921270764e-16 +0.51 0.125333233564 +0.52 0.248689887165 +0.53 0.368124552685 +0.54 0.481753674102 +0.55 0.587785252292 +0.56 0.684547105929 +0.57 0.770513242776 +0.58 0.844327925502 +0.59 0.904827052466 +0.6 0.951056516295 +0.61 0.982287250729 +0.62 0.998026728428 +0.63 0.998026728428 +0.64 0.982287250729 +0.65 0.951056516295 +0.66 0.904827052466 +0.67 0.844327925502 +0.68 0.770513242776 +0.69 0.684547105929 +0.7 0.587785252292 +0.71 0.481753674102 +0.72 0.368124552685 +0.73 0.248689887165 +0.74 0.125333233564 +0.75 3.67381906147e-16 +0.76 -0.125333233564 +0.77 -0.248689887165 +0.78 -0.368124552685 +0.79 -0.481753674102 +0.8 -0.587785252292 +0.81 -0.684547105929 +0.82 -0.770513242776 +0.83 -0.844327925502 +0.84 -0.904827052466 +0.85 -0.951056516295 +0.86 -0.982287250729 +0.87 -0.998026728428 +0.88 -0.998026728428 +0.89 -0.982287250729 +0.9 -0.951056516295 +0.91 -0.904827052466 +0.92 -0.844327925502 +0.93 -0.770513242776 +0.94 -0.684547105929 +0.95 -0.587785252292 +0.96 -0.481753674102 +0.97 -0.368124552685 +0.98 -0.248689887165 +0.99 -0.125333233564 +1.0 -4.89842541529e-16 diff --git a/src/CONVERTOR/Makefile.in b/src/CONVERTOR/Makefile.in index 59057158..5549610d 100644 --- a/src/CONVERTOR/Makefile.in +++ b/src/CONVERTOR/Makefile.in @@ -68,6 +68,6 @@ LDFLAGS+= $(VTK_LIBS) $(QT_LIBS) \ -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 +LDFLAGSFORBIN=$(LDFLAGS) -lMEDWrapper_V2_2 -lMEDWrapper_V2_1 -lMEDWrapperBase -lVTKViewer @CONCLUDE@ diff --git a/src/CONVERTOR/VISUConvertor.cxx b/src/CONVERTOR/VISUConvertor.cxx index f34d4935..25aa1b32 100644 --- a/src/CONVERTOR/VISUConvertor.cxx +++ b/src/CONVERTOR/VISUConvertor.cxx @@ -88,25 +88,23 @@ void parseFile(const char* theFileName) 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<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++){ @@ -138,7 +136,6 @@ void parseFile(const char* theFileName) aVTKID = anIDMapper->GetElemVTKID(anObjID); cout<AddObserver(vtkCommand::DisableEvent, myEventCallbackCommand.GetPointer(), myPriority); - theWidget->AddObserver(vtkCommand::EndInteractionEvent, - myEventCallbackCommand.GetPointer(), - myPriority); + } myWidget = theWidget; @@ -364,7 +362,6 @@ VISU_GaussPtsAct { Superclass::SetVisibility(theMode); myScalarBarCtrl->SetVisibility(theMode); - Highlight(isHighlighted()); } //---------------------------------------------------------------------------- @@ -455,12 +452,6 @@ VISU_GaussPtsAct case VISU::UpdatePickingSettingsEvent: UpdatePickingSettings(); break; - case vtkCommand::EndInteractionEvent: - case vtkCommand::EnableEvent: - case vtkCommand::DisableEvent: - myCurrentPL->GetMapper()->Update(); - Highlight(isHighlighted()); - break; default: break; } @@ -517,7 +508,6 @@ bool VISU_GaussPtsAct::PreHighlight(vtkInteractorStyle* theInteractorStyle, return false; vtkIdType aVtkId = myPointPicker->GetPointId(); - if(aVtkId >= 0 && mySelector->IsValid(this,aVtkId,true) && hasIO()){ vtkIdType anObjId = GetNodeObjId( aVtkId ); if(myLastObjPointID != anObjId){ @@ -619,14 +609,13 @@ bool VISU_GaussPtsAct::Highlight(vtkInteractorStyle* theInteractorStyle, } //================================================================== -// function : Highlight +// function : highlight // purpose : //================================================================== void VISU_GaussPtsAct ::Highlight(bool theIsHighlight) { - myOutlineActor->SetVisibility(false); myTextActor->SetVisibility(0); myCursorPyramidSelected->SetVisibility(0); myCursorPyramid->SetVisibility(0); @@ -724,6 +713,8 @@ VISU_GaussPtsAct myCellActor->SetVisibility(anIsVisible && theIsHighlight); } } + myOutline->SetBounds( GetInput()->GetBounds() ); + myOutlineActor->SetVisibility( anIsVisible && theIsHighlight ); } @@ -999,7 +990,6 @@ VISU_GaussPtsAct1 break; } - switch(theEvent){ case vtkCommand::EnableEvent: myCurrentPL = myInsideDeviceActor->GetPipeLine(); @@ -1007,10 +997,8 @@ VISU_GaussPtsAct1 case vtkCommand::DisableEvent: myCurrentPL = myDeviceActor->GetPipeLine(); break; - default: - break; } - + Superclass::OnInteractorEvent(theEvent); } @@ -1082,6 +1070,9 @@ VISU_GaussPtsAct2 } if(theWidget){ + theWidget->AddObserver(vtkCommand::EndInteractionEvent, + myEventCallbackCommand.GetPointer(), + myPriority); myDeviceActor->GetPipeLine()->SetImplicitFunction(theWidget->ImplicitFunction()); myDeviceActor->SetVisibility(Superclass::GetVisibility() && theWidget->IsEnabled()); } @@ -1122,7 +1113,7 @@ VISU_GaussPtsAct2 } break; case vtkCommand::EndInteractionEvent: - Update(); + //vtkLODActor::SetMapper(GetMapper()); break; default: break; diff --git a/src/OBJECT/VISU_GaussPtsDeviceActor.cxx b/src/OBJECT/VISU_GaussPtsDeviceActor.cxx index 86eb25d2..fe4e22cf 100644 --- a/src/OBJECT/VISU_GaussPtsDeviceActor.cxx +++ b/src/OBJECT/VISU_GaussPtsDeviceActor.cxx @@ -131,7 +131,7 @@ VISU_GaussPtsDeviceActor myMapper->SetInput( myPassFilter[ anId ]->GetPolyDataOutput() ); - Superclass::SetMapper( myMapper.GetPointer() ); + vtkLODActor::SetMapper( myMapper.GetPointer() ); } VISU_GaussPointsPL* diff --git a/src/OBJECT/VISU_ScalarMapAct.cxx b/src/OBJECT/VISU_ScalarMapAct.cxx index 527f726f..391ec412 100644 --- a/src/OBJECT/VISU_ScalarMapAct.cxx +++ b/src/OBJECT/VISU_ScalarMapAct.cxx @@ -47,7 +47,7 @@ VISU_ScalarMapAct aProperty->SetAmbient(1.0); aProperty->SetDiffuse(0.0); aProperty->SetSpecular(0.0); - + myProperty->DeepCopy(aProperty); } @@ -97,27 +97,3 @@ VISU_ScalarMapAct myBarVisibility = theMode; if(myScalarBar) myScalarBar->SetVisibility(myBarVisibility); } - -void VISU_ScalarMapAct::SetShading(bool theOn) -{ - vtkProperty* aProperty = GetProperty(); - - if (theOn) - { - aProperty->SetAmbient(0.0); - aProperty->SetDiffuse(1.0); - } - else - { - aProperty->SetAmbient(1.0); - aProperty->SetDiffuse(0.0); - } - myProperty->DeepCopy(aProperty); -} - -bool VISU_ScalarMapAct::IsShading() -{ - vtkProperty* aProperty = GetProperty(); - - return (aProperty->GetAmbient() == 0 && aProperty->GetDiffuse() == 1); -} diff --git a/src/OBJECT/VISU_ScalarMapAct.h b/src/OBJECT/VISU_ScalarMapAct.h index 1d8197a1..bae6e529 100644 --- a/src/OBJECT/VISU_ScalarMapAct.h +++ b/src/OBJECT/VISU_ScalarMapAct.h @@ -50,9 +50,6 @@ class VTKOCC_EXPORT VISU_ScalarMapAct : public VISU_Actor { virtual void SetBarVisibility(bool theMode); virtual bool GetBarVisibility(){ return myBarVisibility;} - virtual void SetShading(bool theOn = true); - virtual bool IsShading(); - protected: VISU_ScalarMapAct(); bool myBarVisibility; diff --git a/src/PIPELINE/Makefile.in b/src/PIPELINE/Makefile.in index 72311f9d..9515408c 100644 --- a/src/PIPELINE/Makefile.in +++ b/src/PIPELINE/Makefile.in @@ -98,6 +98,6 @@ LDFLAGS+= \ -L${GUI_ROOT_DIR}/lib/salome \ -L${MED_ROOT_DIR}/lib/salome -LDFLAGSFORBIN=$(LDFLAGS) -lOpUtil -lMEDWrapper -lMEDWrapper_V2_2 -lMEDWrapper_V2_1 -lMEDWrapperBase -lmed_V2_1 -lsuit -lqtx -lSALOMEBasics +LDFLAGSFORBIN=$(LDFLAGS) -lOpUtil -lMEDWrapper -lMEDWrapper_V2_2 -lMEDWrapper_V2_1 -lMEDWrapperBase -lsuit -lqtx @CONCLUDE@ diff --git a/src/PIPELINE/SALOME_ExtractGeometry.cxx b/src/PIPELINE/SALOME_ExtractGeometry.cxx index 5a1762e8..c962e6aa 100755 --- a/src/PIPELINE/SALOME_ExtractGeometry.cxx +++ b/src/PIPELINE/SALOME_ExtractGeometry.cxx @@ -48,8 +48,7 @@ vtkStandardNewMacro(SALOME_ExtractGeometry); //---------------------------------------------------------------------------- SALOME_ExtractGeometry ::SALOME_ExtractGeometry(): - myStoreMapping(false), - myIsDoneShallowCopy(false) + myStoreMapping(false) {} SALOME_ExtractGeometry @@ -107,9 +106,9 @@ vtkIdType SALOME_ExtractGeometry ::GetElemVTKId(vtkIdType theID) { - if(!myStoreMapping||myIsDoneShallowCopy){ + if(myElemVTK2ObjIds.empty()) return theID; - } + vtkIdType iEnd = myElemVTK2ObjIds.size(); for(vtkIdType i = 0; i < iEnd; i++) if(myElemVTK2ObjIds[i] == theID) @@ -122,9 +121,9 @@ vtkIdType SALOME_ExtractGeometry ::GetNodeVTKId(vtkIdType theID) { - if (!myStoreMapping||myIsDoneShallowCopy){ + if (myElemVTK2ObjIds.empty()) return theID; - } + vtkIdType iEnd = myNodeVTK2ObjIds.size(); for(vtkIdType i = 0; i < iEnd; i++) if(myNodeVTK2ObjIds[i] == theID) @@ -139,14 +138,14 @@ vtkIdType SALOME_ExtractGeometry ::GetElemObjId(int theVtkID) { - if (!myStoreMapping||myIsDoneShallowCopy){ + if (myElemVTK2ObjIds.empty()) return theVtkID; - } - // - if (theVtkIDImplicitFunction; - if(!myIsDoneShallowCopy && myImplicitBoolean.GetPointer()){ + bool anIsNothingToDo = !this->ImplicitFunction; + + if(!anIsNothingToDo && myImplicitBoolean.GetPointer()){ if(vtkImplicitFunctionCollection* aFunction = myImplicitBoolean->GetFunction()){ - myIsDoneShallowCopy = aFunction->GetNumberOfItems() == 0; + anIsNothingToDo = aFunction->GetNumberOfItems() == 0; } } - if(myIsDoneShallowCopy){ + if(anIsNothingToDo){ GetOutput()->ShallowCopy(GetInput()); Modified(); return; diff --git a/src/PIPELINE/SALOME_ExtractGeometry.h b/src/PIPELINE/SALOME_ExtractGeometry.h index b225434f..d348fe60 100755 --- a/src/PIPELINE/SALOME_ExtractGeometry.h +++ b/src/PIPELINE/SALOME_ExtractGeometry.h @@ -75,7 +75,6 @@ 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 59f5f91a..c6cdc826 100644 --- a/src/PIPELINE/VISUPipeLine.cxx +++ b/src/PIPELINE/VISUPipeLine.cxx @@ -129,23 +129,19 @@ int main(int argc, char** argv){ aPresent->Init(); aPresent->SetSourceRange(); vtkDataSet* anOutput = aPresent->GetMapper()->GetInput(); - //for(int i = 0, iEnd = anOutput->GetNumberOfCells(); i < iEnd; i++){ - // cout<GetPointSize(i)<GetNumberOfCells(); i < iEnd; i++){ + cout<GetPointSize(i)<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" ) ); + char* 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" ) ); + char* anAlphaTexture = getenv( "VISU_ROOT_DIR" ); strcat( anAlphaTexture, "/share/salome/resources/sprite_alpha.vti" ); - //cout << anAlphaTexture << endl; aPresent->SetImageData( VISU_GaussPointsPL::MakeTexture( aMainTexture, anAlphaTexture ) ); diff --git a/src/PIPELINE/VISU_ImplicitFunctionWidget.cxx b/src/PIPELINE/VISU_ImplicitFunctionWidget.cxx index 844371c9..2ac6af1d 100644 --- a/src/PIPELINE/VISU_ImplicitFunctionWidget.cxx +++ b/src/PIPELINE/VISU_ImplicitFunctionWidget.cxx @@ -168,14 +168,6 @@ static float DistanceToPlane(const float x[3], const float n[3], const float p0[3]); -static void GetBndPoints(vtkDataSet *pDataSet, - float aPnts[24]); - -static - bool IsValidPlane2Position(vtkPlane *pPx, - vtkDataSet *pDataSet, - float aTol=0.003); - vtkCxxRevisionMacro(VISU_ImplicitFunctionWidget, "$Revision$"); vtkStandardNewMacro(VISU_ImplicitFunctionWidget); @@ -201,9 +193,9 @@ VISU_ImplicitFunctionWidget::VISU_ImplicitFunctionWidget() // Build the representation of the widget // - myPlane1 = vtkPlane::New(); - myPlane1->SetNormal(0,0,1); - myPlane1->SetOrigin(0,0,0); + Plane = vtkPlane::New(); + Plane->SetNormal(0,0,1); + Plane->SetOrigin(0,0,0); // myDistance = 10.; myPlane2 = vtkPlane::New(); @@ -213,53 +205,43 @@ VISU_ImplicitFunctionWidget::VISU_ImplicitFunctionWidget() 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(); + Box = vtkImageData::New(); + Box->SetDimensions(2,2,2); + Outline = vtkOutlineFilter::New(); + Outline->SetInput(Box); + OutlineMapper = vtkPolyDataMapper::New(); + OutlineMapper->SetInput(Outline->GetOutput()); + OutlineActor = vtkActor::New(); + this->OutlineActor->SetMapper(this->OutlineMapper); + this->OutlineActor->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->Cutter = vtkCutter::New(); + this->Cutter->SetInput(this->Box); + this->Cutter->SetCutFunction(this->Plane); + this->CutMapper = vtkPolyDataMapper::New(); + this->CutMapper->SetInput(this->Cutter->GetOutput()); + this->CutActor = vtkActor::New(); + this->CutActor->SetMapper(this->CutMapper); + this->DrawPlane = 1; this->myCutter2 = vtkCutter::New(); - this->myCutter2->SetInput(myBox); + this->myCutter2->SetInput(this->Box); 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); + this->Edges = vtkFeatureEdges::New(); + Edges->SetColoring(0); + this->Edges->SetInput(this->Cutter->GetOutput()); + this->EdgesMapper = vtkPolyDataMapper::New(); + this->EdgesMapper->SetInput(this->Edges->GetOutput()); + this->EdgesActor = vtkActor::New(); + this->EdgesActor->SetMapper(this->EdgesMapper); + EdgesActor->GetProperty()->SetLineWidth(4.); + EdgesActor->GetProperty()->SetColor(0., .5, .7); // Create the + plane normal this->LineSource = vtkLineSource::New(); @@ -325,14 +307,14 @@ VISU_ImplicitFunctionWidget::VISU_ImplicitFunctionWidget() //Manage the picking stuff this->Picker = vtkCellPicker::New(); this->Picker->SetTolerance(0.005); - this->Picker->AddPickList(this->myCutActor1); + this->Picker->AddPickList(this->CutActor); 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->AddPickList(this->OutlineActor); this->Picker->PickFromListOn(); // Set up the initial properties @@ -345,31 +327,27 @@ VISU_ImplicitFunctionWidget::VISU_ImplicitFunctionWidget() //================================================================== VISU_ImplicitFunctionWidget::~VISU_ImplicitFunctionWidget() { - myPlane1->Delete(); + this->Plane->Delete(); this->myPlane2->Delete(); this->myImplicitFunction->Delete(); - myBox->Delete(); - this->myOutline->Delete(); - this->myOutlineMapper->Delete(); - this->myOutlineActor->Delete(); + this->Box->Delete(); + this->Outline->Delete(); + this->OutlineMapper->Delete(); + this->OutlineActor->Delete(); - this->myCutter1->Delete(); - this->myCutMapper1->Delete(); - this->myCutActor1->Delete(); + this->Cutter->Delete(); + this->CutMapper->Delete(); + this->CutActor->Delete(); - this->myEdges1->Delete(); - this->myEdgesMapper1->Delete(); - this->myEdgesActor1->Delete(); - myCutter2->Delete(); myCutMapper2->Delete(); myCutActor2->Delete(); - - myEdges2->Delete(); - myEdgesMapper2->Delete(); - myEdgesActor2->Delete(); + + this->Edges->Delete(); + this->EdgesMapper->Delete(); + this->EdgesActor->Delete(); this->LineSource->Delete(); this->LineMapper->Delete(); @@ -423,8 +401,8 @@ void VISU_ImplicitFunctionWidget::SetDistance(const float theDistance) myDistance=theDistance; // float *origin, *normal, oNew[3], aN2[3]; - origin = myPlane1->GetOrigin(); - normal = myPlane1->GetNormal(); + origin = Plane->GetOrigin(); + normal = Plane->GetNormal(); vtkMath::Normalize(normal); oNew[0] = origin[0] + myDistance*normal[0]; oNew[1] = origin[1] + myDistance*normal[1]; @@ -473,51 +451,46 @@ void VISU_ImplicitFunctionWidget::SetEnabled(int enabling) vtkCamera *pCamera=CurrentRenderer->GetActiveCamera(); pCamera->SetParallelProjection(1); // - this->myImplicitFunction->AddFunction(myPlane1); + this->myImplicitFunction->AddFunction(this->Plane); 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, + if( this->HandleMoveEvent ) + { + i->AddObserver(vtkCommand::MouseMoveEvent, this->EventCallbackCommand, this->Priority); } - if( this->HandleLeftButtonEvent ) { + if( this->HandleLeftButtonEvent ) + { i->AddObserver(vtkCommand::LeftButtonPressEvent, - this->EventCallbackCommand, - this->Priority); + this->EventCallbackCommand, this->Priority); i->AddObserver(vtkCommand::LeftButtonReleaseEvent, - this->EventCallbackCommand, - this->Priority); + this->EventCallbackCommand, this->Priority); } - if( this->HandleMiddleButtonEvent ) { + if( this->HandleMiddleButtonEvent ) + { i->AddObserver(vtkCommand::MiddleButtonPressEvent, - this->EventCallbackCommand, - this->Priority); + this->EventCallbackCommand, this->Priority); i->AddObserver(vtkCommand::MiddleButtonReleaseEvent, - this->EventCallbackCommand, - this->Priority); + this->EventCallbackCommand, this->Priority); } - if( this->HandleRightButtonEvent ) { + if( this->HandleRightButtonEvent ) + { i->AddObserver(vtkCommand::RightButtonPressEvent, - this->EventCallbackCommand, - this->Priority); + this->EventCallbackCommand, this->Priority); i->AddObserver(vtkCommand::RightButtonReleaseEvent, - this->EventCallbackCommand, - this->Priority); + this->EventCallbackCommand, this->Priority); } // add the outline - this->CurrentRenderer->AddActor(this->myOutlineActor); - this->myOutlineActor->SetProperty(this->OutlineProperty); + this->CurrentRenderer->AddActor(this->OutlineActor); + this->OutlineActor->SetProperty(this->OutlineProperty); // add the edges - this->CurrentRenderer->AddActor(this->myEdgesActor1); - this->CurrentRenderer->AddActor(myEdgesActor2); - - this->myOutlineActor->SetProperty(this->EdgesProperty); + this->CurrentRenderer->AddActor(this->EdgesActor); + this->OutlineActor->SetProperty(this->EdgesProperty); // add the normal vector this->CurrentRenderer->AddActor(this->LineActor); @@ -535,17 +508,18 @@ void VISU_ImplicitFunctionWidget::SetEnabled(int enabling) this->SphereActor->SetProperty(this->NormalProperty); // add the plane (if desired) - if ( this->myDrawPlane ) { - this->CurrentRenderer->AddActor(this->myCutActor1); + if ( this->DrawPlane ) + { + this->CurrentRenderer->AddActor(this->CutActor); this->CurrentRenderer->AddActor(this->myCutActor2); - } - this->myCutActor1->SetProperty(this->PlaneProperty); + } + this->CutActor->SetProperty(this->PlaneProperty); myCutActor2->SetProperty(this->PlaneProperty); - + this->UpdateRepresentation(); this->SizeHandles(); this->InvokeEvent(vtkCommand::EnableEvent,NULL); - } + } else {//disabling---------------------------------------------------------- vtkDebugMacro(<<"Disabling plane widget"); @@ -565,15 +539,14 @@ void VISU_ImplicitFunctionWidget::SetEnabled(int enabling) 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->OutlineActor); + this->CurrentRenderer->RemoveActor(this->EdgesActor); 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(this->CutActor); this->CurrentRenderer->RemoveActor(myCutActor2); this->InvokeEvent(vtkCommand::DisableEvent,NULL); @@ -582,14 +555,15 @@ void VISU_ImplicitFunctionWidget::SetEnabled(int enabling) this->Interactor->Render(); } -//================================================================== -// function: IsEnabled -// purpose : -//================================================================== -int VISU_ImplicitFunctionWidget::IsEnabled() + +int +VISU_ImplicitFunctionWidget +::IsEnabled() { return this->Enabled; } + + //================================================================== // function: ProcessEvents // purpose : @@ -626,8 +600,6 @@ void VISU_ImplicitFunctionWidget::ProcessEvents(vtkObject* vtkNotUsed(object), case vtkCommand::MouseMoveEvent: self->OnMouseMove(); break; - default: - break; } } //================================================================== @@ -652,6 +624,7 @@ void VISU_ImplicitFunctionWidget::HighlightNormal(int highlight) this->SphereActor->SetProperty(this->NormalProperty); } } + //================================================================== // function: HighlightPlane // purpose : @@ -659,11 +632,11 @@ void VISU_ImplicitFunctionWidget::HighlightNormal(int highlight) void VISU_ImplicitFunctionWidget::HighlightPlane(int highlight) { if ( highlight ) { - this->myCutActor1->SetProperty(this->SelectedPlaneProperty); + this->CutActor->SetProperty(this->SelectedPlaneProperty); myCutActor2->SetProperty(this->SelectedPlaneProperty); } else { - this->myCutActor1->SetProperty(this->PlaneProperty); + this->CutActor->SetProperty(this->PlaneProperty); myCutActor2->SetProperty(this->PlaneProperty); } } @@ -673,11 +646,11 @@ void VISU_ImplicitFunctionWidget::HighlightPlane(int highlight) //================================================================== void VISU_ImplicitFunctionWidget::HighlightOutline(int highlight) { - if (highlight) { - this->myOutlineActor->SetProperty(this->SelectedOutlineProperty); + if ( highlight ) { + this->OutlineActor->SetProperty(this->SelectedOutlineProperty); } else { - this->myOutlineActor->SetProperty(this->OutlineProperty); + this->OutlineActor->SetProperty(this->OutlineProperty); } } //================================================================== @@ -720,7 +693,7 @@ void VISU_ImplicitFunctionWidget::OnLeftButtonDown() this->HighlightNormal(1); this->State = VISU_ImplicitFunctionWidget::Rotating; } - else if ( prop == this->myCutActor1) { + else if ( prop == this->CutActor) { this->HighlightPlane(1); this->State = VISU_ImplicitFunctionWidget::Pushing; } @@ -923,33 +896,26 @@ void VISU_ImplicitFunctionWidget::OnMouseMove() // Process the motion if ( this->State == VISU_ImplicitFunctionWidget::MovingPlane ) { - //this->TranslatePlane(prevPickPoint, pickPoint); - //printf(" TranslatePlane\n"); + this->TranslatePlane(prevPickPoint, pickPoint); } else if ( this->State == VISU_ImplicitFunctionWidget::MovingOutline ) { - //this->TranslateOutline(prevPickPoint, pickPoint); - //printf(" TranslateOutline\n"); + this->TranslateOutline(prevPickPoint, pickPoint); } else if ( this->State == VISU_ImplicitFunctionWidget::MovingOrigin ) { this->TranslateOrigin(prevPickPoint, pickPoint); - //printf(" TranslateOrigin\n"); } else if ( this->State == VISU_ImplicitFunctionWidget::Pushing ) { this->Push(prevPickPoint, pickPoint); - // printf(" Push\n"); } else if ( this->State == VISU_ImplicitFunctionWidget::Scaling ) { - //this->Scale(prevPickPoint, pickPoint, X, Y); - //printf(" Scale\n"); + this->Scale(prevPickPoint, pickPoint, X, Y); } else if ( this->State == VISU_ImplicitFunctionWidget::Rotating ) { camera->GetViewPlaneNormal(vpn); this->Rotate(X, Y, prevPickPoint, pickPoint, vpn); - //printf(" Rotate\n"); } else if ( this->State == VISU_ImplicitFunctionWidget::ChangeDistance ) { this->PushDistance(prevPickPoint, pickPoint); - //printf(" PushDistance\n"); } // Interact, if desired this->EventCallbackCommand->SetAbortFlag(1); @@ -958,121 +924,22 @@ void VISU_ImplicitFunctionWidget::OnMouseMove() this->Interactor->Render(); } //================================================================== -// function: Push -// purpose : -//================================================================== -void VISU_ImplicitFunctionWidget::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_ImplicitFunctionWidget::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_ImplicitFunctionWidget::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_ImplicitFunctionWidget::Rotate(int X, int Y, - double *p1, double *p2, - double *vpn) +void VISU_ImplicitFunctionWidget::Rotate(int X, int Y, double *p1, double *p2, double *vpn) { - double v[3]; //vector of motion + double v[3]; //vector of motion double axis[3]; //axis of rotation - double theta; //rotation angle - int i; + double theta; //rotation angle // 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(); + v[0] = p2[0] - p1[0]; + v[1] = p2[1] - p1[1]; + v[2] = p2[2] - p1[2]; + + float *origin = this->Plane->GetOrigin(); + float *normal = this->Plane->GetNormal(); // Create axis of rotation and angle of rotation vtkMath::Cross(vpn,v,axis); @@ -1094,84 +961,23 @@ void VISU_ImplicitFunctionWidget::Rotate(int X, int Y, this->Transform->Translate(-origin[0],-origin[1],-origin[2]); //Set the new normal - float nNew[3], aN2[3], oNew[3]; + float nNew[3], aN2[3]; this->Transform->TransformNormal(normal,nNew); - // - for (i=0; i<3; ++i){ - aN2[i] = -nNew[i]; - } + this->Plane->SetNormal(nNew); + + aN2[0] = -nNew[0]; + aN2[1] = -nNew[1]; + aN2[2] = -nNew[2]; + this->myPlane2->SetNormal(aN2); + float oNew[3]; 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_ImplicitFunctionWidget::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(); + oNew[0] = origin[0] + myDistance*nNew[0]; + oNew[1] = origin[1] + myDistance*nNew[1]; + oNew[2] = origin[2] + myDistance*nNew[2]; + this->myPlane2->SetOrigin(oNew); + this->UpdateRepresentation(); } - //================================================================== // function: TranslatePlane // purpose : Loop through all points and translate them @@ -1186,11 +992,11 @@ void VISU_ImplicitFunctionWidget::TranslatePlane(double *p1, double *p2) //Translate the plane float oNew[3]; - float *origin = myPlane1->GetOrigin(); + float *origin = this->Plane->GetOrigin(); oNew[0] = origin[0] + v[0]; oNew[1] = origin[1] + v[1]; oNew[2] = origin[2] + v[2]; - myPlane1->SetOrigin(oNew); + this->Plane->SetOrigin(oNew); origin = this->myPlane2->GetOrigin(); oNew[0] = origin[0] + v[0]; @@ -1213,19 +1019,19 @@ void VISU_ImplicitFunctionWidget::TranslateOutline(double *p1, double *p2) v[2] = p2[2] - p1[2]; //Translate the bounding box - float *origin = myBox->GetOrigin(); + float *origin = this->Box->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); + this->Box->SetOrigin(oNew); //Translate the plane - origin = myPlane1->GetOrigin(); + origin = this->Plane->GetOrigin(); oNew[0] = origin[0] + v[0]; oNew[1] = origin[1] + v[1]; oNew[2] = origin[2] + v[2]; - myPlane1->SetOrigin(oNew); + this->Plane->SetOrigin(oNew); origin = this->myPlane2->GetOrigin(); oNew[0] = origin[0] + v[0]; @@ -1235,7 +1041,31 @@ void VISU_ImplicitFunctionWidget::TranslateOutline(double *p1, double *p2) this->UpdateRepresentation(); } +//================================================================== +// function: TranslateOrigin +// purpose :Loop through all points and translate them +//================================================================== +void VISU_ImplicitFunctionWidget::TranslateOrigin(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]; + + //Add to the current point, project back down onto plane + float *o = this->Plane->GetOrigin(); + float *n = this->Plane->GetNormal(); + float newOrigin[3]; + newOrigin[0] = o[0] + v[0]; + newOrigin[1] = o[1] + v[1]; + newOrigin[2] = o[2] + v[2]; + + vtkPlane::ProjectPoint(newOrigin,o,n,newOrigin); + this->SetOrigin(newOrigin); + this->UpdateRepresentation(); +} //================================================================== // function: Scale // purpose : @@ -1250,10 +1080,10 @@ void VISU_ImplicitFunctionWidget::Scale(double *p1, double *p2, v[2] = p2[2] - p1[2]; //int res = this->PlaneSource->GetXResolution(); - float *o = myPlane1->GetOrigin(); + float *o = this->Plane->GetOrigin(); // Compute the scale factor - float sf = vtkMath::Norm(v) / this->myOutline->GetOutput()->GetLength(); + float sf = vtkMath::Norm(v) / this->Outline->GetOutput()->GetLength(); if ( Y > this->Interactor->GetLastEventPosition()[1] ) { sf = 1.0 + sf; } @@ -1266,8 +1096,8 @@ void VISU_ImplicitFunctionWidget::Scale(double *p1, double *p2, this->Transform->Scale(sf,sf,sf); this->Transform->Translate(-o[0],-o[1],-o[2]); - float *origin = myBox->GetOrigin(); - float *spacing = myBox->GetSpacing(); + float *origin = this->Box->GetOrigin(); + float *spacing = this->Box->GetSpacing(); float oNew[3], p[3], pNew[3]; p[0] = origin[0] + spacing[0]; p[1] = origin[1] + spacing[1]; @@ -1276,13 +1106,71 @@ void VISU_ImplicitFunctionWidget::Scale(double *p1, double *p2, 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->Box->SetOrigin(oNew); + this->Box->SetSpacing( (pNew[0]-oNew[0]), (pNew[1]-oNew[1]), (pNew[2]-oNew[2]) ); this->UpdateRepresentation(); } +//================================================================== +// function: Push +// purpose : +//================================================================== +void VISU_ImplicitFunctionWidget::Push(double *p1, double *p2) +{ + //Get the motion vector + float v[3]; + v[0] = p2[0] - p1[0]; + v[1] = p2[1] - p1[1]; + v[2] = p2[2] - p1[2]; + + float z0 = this->Plane->GetOrigin()[2]; + double distance = vtkMath::Dot( v, myPlane2->GetNormal() ); + float z1 = z0 + distance * myPlane2->GetNormal()[2]; + if( z1 <= this->Box->GetOrigin()[2] ) + return; + + this->Plane->Push( vtkMath::Dot(v,this->Plane->GetNormal()) ); + this->SetOrigin(this->Plane->GetOrigin()); + myPlane2->Push( vtkMath::Dot(v,this->Plane->GetNormal()) ); + this->UpdateRepresentation(); +} +//================================================================== +// function: PushDistance +// purpose : +//================================================================== +void VISU_ImplicitFunctionWidget::PushDistance(double *p1, double *p2) +{ + float v[3], *anOrigin1, *aN1, *anOrigin2, *aN2, aD; + //Get the motion vector + v[0] = p2[0] - p1[0]; + v[1] = p2[1] - p1[1]; + v[2] = p2[2] - p1[2]; + // + anOrigin1 = Plane->GetOrigin(); + aN1 = Plane->GetNormal(); + anOrigin2 = myPlane2->GetOrigin(); + aN2 = myPlane2->GetNormal(); + + vtkMath::Normalize(aN1); + float* origin = new float[3]; + double distance = vtkMath::Dot( v, aN2 ); + for( int i = 0; i < 3; i++ ) + origin[i] = anOrigin2[i] + distance * aN2[i]; + float d = DistanceToPlane(origin, aN1, anOrigin1); + delete [] origin; + + if( d <= 0.0 ) + return; + + myPlane2->Push( vtkMath::Dot(v, myPlane2->GetNormal())); + aD=DistanceToPlane(anOrigin2, aN1, anOrigin1); + // + myDistance=aD; + // + this->UpdateRepresentation(); +} //================================================================== // function: CreateDefaultProperties @@ -1355,25 +1243,25 @@ void VISU_ImplicitFunctionWidget::PlaceWidget(float bds[6]) 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]), + this->Box->SetOrigin(bounds[0],bounds[2],bounds[4]); + this->Box->SetSpacing((bounds[1]-bounds[0]),(bounds[3]-bounds[2]), (bounds[5]-bounds[4])); - this->myOutline->Update(); + this->Outline->Update(); if (this->Input || this->Prop3D) { - this->LineSource->SetPoint1(myPlane1->GetOrigin()); + this->LineSource->SetPoint1(this->Plane->GetOrigin()); if ( this->NormalToYAxis ) { - myPlane1->SetNormal(0,1,0); + this->Plane->SetNormal(0,1,0); myPlane2->SetNormal(0,-1,0); this->LineSource->SetPoint2(0,1,0); } else if ( this->NormalToZAxis ) { - myPlane1->SetNormal(0,0,1); + this->Plane->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); + this->Plane->SetNormal(1,0,0); myPlane2->SetNormal(-1,0,0); this->LineSource->SetPoint2(1,0,0); } @@ -1391,7 +1279,7 @@ void VISU_ImplicitFunctionWidget::PlaceWidget(float bds[6]) } //================================================================== // function: SetOrigin -// purpose :Set the origin of the plane.(for external calls) +// purpose :Set the origin of the plane. //================================================================== void VISU_ImplicitFunctionWidget::SetOrigin(float x, float y, float z) { @@ -1402,12 +1290,12 @@ void VISU_ImplicitFunctionWidget::SetOrigin(float x, float y, float z) this->SetOrigin(origin); } //================================================================== -// function: SetOrigin -// purpose : Set the origin of the plane.(for external calls) +// function: SetOrigin +// purpose :Set the origin of the plane. //================================================================== -void VISU_ImplicitFunctionWidget::SetOrigin(float x[3]) +void VISU_ImplicitFunctionWidget::SetOrigin(float x[3]) { - float *bounds = this->myOutline->GetOutput()->GetBounds(); + float *bounds = this->Outline->GetOutput()->GetBounds(); for (int i=0; i<3; i++) { if ( x[i] < bounds[2*i] ) { x[i] = bounds[2*i]; @@ -1416,10 +1304,10 @@ void VISU_ImplicitFunctionWidget::SetOrigin(float x[3]) x[i] = bounds[2*i+1]; } } - myPlane1->SetOrigin(x); - float *origin, *normal, oNew[3]; - origin = myPlane1->GetOrigin(); - normal = myPlane1->GetNormal(); + this->Plane->SetOrigin(x); + float *origin, *normal, oNew[3]; + origin = Plane->GetOrigin(); + normal = Plane->GetNormal(); vtkMath::Normalize(normal); oNew[0] = origin[0] + myDistance*normal[0]; oNew[1] = origin[1] + myDistance*normal[1]; @@ -1433,12 +1321,12 @@ void VISU_ImplicitFunctionWidget::SetOrigin(float x[3]) //================================================================== float* VISU_ImplicitFunctionWidget::GetOrigin() { - return myPlane1->GetOrigin(); + return this->Plane->GetOrigin(); } void VISU_ImplicitFunctionWidget::GetOrigin(float xyz[3]) { - myPlane1->GetOrigin(xyz); + this->Plane->GetOrigin(xyz); } //================================================================== // function: SetNormal @@ -1451,7 +1339,7 @@ void VISU_ImplicitFunctionWidget::SetNormal(float x, float y, float z) n[1] = y; n[2] = z; vtkMath::Normalize(n); - myPlane1->SetNormal(n); + this->Plane->SetNormal(n); n[0] =- x; n[1] =- y; n[2] =- z; @@ -1474,7 +1362,7 @@ void VISU_ImplicitFunctionWidget::SetNormal(float n[3]) //================================================================== float* VISU_ImplicitFunctionWidget::GetNormal() { - return myPlane1->GetNormal(); + return this->Plane->GetNormal(); } //================================================================== // function: GetNormal @@ -1482,7 +1370,7 @@ float* VISU_ImplicitFunctionWidget::GetNormal() //================================================================== void VISU_ImplicitFunctionWidget::GetNormal(float xyz[3]) { - myPlane1->GetNormal(xyz); + this->Plane->GetNormal(xyz); } //================================================================== // function: SetDrawPlane @@ -1490,19 +1378,19 @@ void VISU_ImplicitFunctionWidget::GetNormal(float xyz[3]) //================================================================== void VISU_ImplicitFunctionWidget::SetDrawPlane(int drawPlane) { - if ( drawPlane == this->myDrawPlane ) { + if ( drawPlane == this->DrawPlane ) { return; } this->Modified(); - this->myDrawPlane = drawPlane; + this->DrawPlane = drawPlane; if ( this->Enabled ) { if ( drawPlane ) { - this->CurrentRenderer->AddActor(this->myCutActor1); + this->CurrentRenderer->AddActor(this->CutActor); this->CurrentRenderer->AddActor(myCutActor2); } else { - this->CurrentRenderer->RemoveActor(this->myCutActor1); + this->CurrentRenderer->RemoveActor(this->CutActor); this->CurrentRenderer->RemoveActor(myCutActor2); } this->Interactor->Render(); @@ -1559,7 +1447,7 @@ void VISU_ImplicitFunctionWidget::SetNormalToZAxis (int var) //================================================================== void VISU_ImplicitFunctionWidget::GetPolyData(vtkPolyData *pd) { - pd->ShallowCopy(this->myCutter1->GetOutput()); + pd->ShallowCopy(this->Cutter->GetOutput()); } //================================================================== // function: GetPolyDataSource @@ -1567,7 +1455,7 @@ void VISU_ImplicitFunctionWidget::GetPolyData(vtkPolyData *pd) //================================================================== vtkPolyDataSource *VISU_ImplicitFunctionWidget::GetPolyDataSource() { - return this->myCutter1; + return this->Cutter; } //================================================================== // function:GetPlane @@ -1579,8 +1467,8 @@ void VISU_ImplicitFunctionWidget::GetPlane(vtkPlane *plane) return; } - plane->SetNormal(myPlane1->GetNormal()); - plane->SetOrigin(myPlane1->GetOrigin()); + plane->SetNormal(this->Plane->GetNormal()); + plane->SetOrigin(this->Plane->GetOrigin()); } //================================================================== // function:UpdatePlacement @@ -1588,9 +1476,9 @@ void VISU_ImplicitFunctionWidget::GetPlane(vtkPlane *plane) //================================================================== void VISU_ImplicitFunctionWidget::UpdatePlacement(void) { - this->myOutline->Update(); - this->myCutter1->Update(); - this->myEdges1->Update(); + this->Outline->Update(); + this->Cutter->Update(); + this->Edges->Update(); } //================================================================== // function:UpdateRepresentation @@ -1602,12 +1490,12 @@ void VISU_ImplicitFunctionWidget::UpdateRepresentation() return; } - float *origin = myPlane1->GetOrigin(); - float *normal = myPlane1->GetNormal(); + float *origin = this->Plane->GetOrigin(); + float *normal = this->Plane->GetNormal(); float p2[3]; // Setup the plane normal - float d = this->myOutline->GetOutput()->GetLength(); + float d = this->Outline->GetOutput()->GetLength(); p2[0] = origin[0] + 0.30 * d * normal[0]; p2[1] = origin[1] + 0.30 * d * normal[1]; @@ -1633,7 +1521,7 @@ void VISU_ImplicitFunctionWidget::UpdateRepresentation() this->Sphere->SetCenter(origin); SphereActor->SetCenter(origin); - this->myEdgesMapper1->SetInput(this->myEdges1->GetOutput()); + this->EdgesMapper->SetInput(this->Edges->GetOutput()); } //================================================================== // function:SizeHandles @@ -1651,64 +1539,83 @@ void VISU_ImplicitFunctionWidget::SizeHandles() void VISU_ImplicitFunctionWidget::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 ( this->NormalProperty ) + { + os << indent << "Normal Property: " << this->NormalProperty << "\n"; } - } - 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]]; - } + else + { + os << indent << "Normal Property: (none)\n"; + } + if ( this->SelectedNormalProperty ) + { + os << indent << "Selected Normal Property: " + << this->SelectedNormalProperty << "\n"; + } + else + { + os << indent << "Selected Normal Property: (none)\n"; + } + + if ( this->PlaneProperty ) + { + os << indent << "Plane Property: " << this->PlaneProperty << "\n"; + } + else + { + os << indent << "Plane Property: (none)\n"; + } + if ( this->SelectedPlaneProperty ) + { + os << indent << "Selected Plane Property: " + << this->SelectedPlaneProperty << "\n"; + } + else + { + os << indent << "Selected Plane Property: (none)\n"; + } + + if ( this->OutlineProperty ) + { + os << indent << "Outline Property: " << this->OutlineProperty << "\n"; + } + else + { + os << indent << "Outline Property: (none)\n"; + } + if ( this->SelectedOutlineProperty ) + { + os << indent << "Selected Outline Property: " + << this->SelectedOutlineProperty << "\n"; + } + else + { + os << indent << "Selected Outline Property: (none)\n"; + } + + if ( this->EdgesProperty ) + { + os << indent << "Edges Property: " << this->EdgesProperty << "\n"; + } + else + { + os << indent << "Edges Property: (none)\n"; + } + + os << indent << "Normal To X Axis: " + << (this->NormalToXAxis ? "On" : "Off") << "\n"; + os << indent << "Normal To Y Axis: " + << (this->NormalToYAxis ? "On" : "Off") << "\n"; + os << indent << "Normal To Z Axis: " + << (this->NormalToZAxis ? "On" : "Off") << "\n"; + + os << indent << "Outline Translation: " + << (this->OutlineTranslation ? "On" : "Off") << "\n"; + os << indent << "Draw Plane: " << (this->DrawPlane ? "On" : "Off") << "\n"; } //================================================================== -// function: DistanceToPlane +// function:DistanceToPlane // purpose : //================================================================== float DistanceToPlane(const float x[3], diff --git a/src/PIPELINE/VISU_ImplicitFunctionWidget.h b/src/PIPELINE/VISU_ImplicitFunctionWidget.h index 4930989d..99403779 100644 --- a/src/PIPELINE/VISU_ImplicitFunctionWidget.h +++ b/src/PIPELINE/VISU_ImplicitFunctionWidget.h @@ -48,7 +48,6 @@ class vtkTransform; class vtkImplicitBoolean; class vtkImplicitFunction; class VISU_UnScaledActor; -class vtkDataSet; class VISU_ImplicitFunctionWidget : public vtkPolyDataSourceWidget { @@ -115,9 +114,8 @@ public: // plane interferes with the cut surface it produces producing // z-buffer artifacts.) void SetDrawPlane(int plane); - int GetDrawPlane(){ - return myDrawPlane; - } + vtkGetMacro(DrawPlane,int); + vtkBooleanMacro(DrawPlane,int); // Description: // Turn on/off the ability to translate the bounding box by grabbing it @@ -203,88 +201,72 @@ protected: 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; - + void UpdateRepresentation(); // Flags to handle mouse events bool HandleMoveEvent; bool HandleLeftButtonEvent; bool HandleMiddleButtonEvent; bool HandleRightButtonEvent; + // The actual plane which is being manipulated - vtkPlane *myPlane1; + vtkPlane *Plane; 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; - + vtkImageData *Box; + vtkOutlineFilter *Outline; + vtkPolyDataMapper *OutlineMapper; + vtkActor *OutlineActor; + void HighlightOutline(int highlight); int OutlineTranslation; //whether the outline can be moved // The cut plane is produced with a vtkCutter - vtkCutter *myCutter1; - vtkPolyDataMapper *myCutMapper1; - vtkActor *myCutActor1; + vtkCutter *Cutter; + vtkPolyDataMapper *CutMapper; + vtkActor *CutActor; vtkCutter *myCutter2; vtkPolyDataMapper *myCutMapper2; vtkActor *myCutActor2; - - vtkFeatureEdges *myEdges2; - vtkPolyDataMapper *myEdgesMapper2; - vtkActor *myEdgesActor2; - - int myDrawPlane; - vtkFeatureEdges *myEdges1; - vtkPolyDataMapper *myEdgesMapper1; - vtkActor *myEdgesActor1; + int DrawPlane; + void HighlightPlane(int highlight); + + // Optional tubes are represented by extracting boundary edges and tubing + vtkFeatureEdges *Edges; + //vtkTubeFilter *EdgesTuber; + vtkPolyDataMapper *EdgesMapper; + vtkActor *EdgesActor; + //int Tubing; //control whether tubing is on // The + normal cone vtkConeSource *ConeSource; vtkPolyDataMapper *ConeMapper; VISU_UnScaledActor *ConeActor; + void HighlightNormal(int highlight); + // 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; @@ -295,6 +277,17 @@ protected: // Transform the normal (used for rotation) vtkTransform *Transform; + + // 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); + // Properties used to control the appearance of selected objects and // the manipulator in general. vtkProperty *NormalProperty; @@ -305,6 +298,11 @@ protected: vtkProperty *SelectedOutlineProperty; vtkProperty *EdgesProperty; + void CreateDefaultProperties(); + + void GeneratePlane(); + virtual void SizeHandles(); + private: VISU_ImplicitFunctionWidget(const VISU_ImplicitFunctionWidget&); //Not implemented void operator=(const VISU_ImplicitFunctionWidget&); //Not implemented diff --git a/src/PIPELINE/VISU_OpenGLPointSpriteMapper.cxx b/src/PIPELINE/VISU_OpenGLPointSpriteMapper.cxx index 0709a853..913f0c94 100755 --- a/src/PIPELINE/VISU_OpenGLPointSpriteMapper.cxx +++ b/src/PIPELINE/VISU_OpenGLPointSpriteMapper.cxx @@ -282,7 +282,7 @@ GLhandleARB VISU_OpenGLPointSpriteMapper::InitShader() else cout << "Loading vertex program... failed" << endl << endl; */ - free( shader ); + delete shader; glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); @@ -447,6 +447,8 @@ void VISU_OpenGLPointSpriteMapper::RenderPiece(vtkRenderer *ren, vtkActor *act) return; } + //cout << "Using OpenGLPointSpriteMapper" << endl; + vtkIdType numPts; vtkPolyData *input= this->GetInput(); @@ -798,10 +800,9 @@ void VISU_OpenGLPointSpriteMapper::DrawPoints(int idx, glPointSize( this->DefaultPointSize ); #ifdef GL_ARB_vertex_buffer_object - PFNGLGENBUFFERSARBPROC glGenBuffersARB = (PFNGLGENBUFFERSARBPROC)dlsym( this->OpenGLLibrary, "glGenBuffersARB" ); - PFNGLBINDBUFFERARBPROC glBindBufferARB = (PFNGLBINDBUFFERARBPROC)dlsym( this->OpenGLLibrary, "glBindBufferARB" ); - PFNGLBUFFERDATAARBPROC glBufferDataARB = (PFNGLBUFFERDATAARBPROC)dlsym( this->OpenGLLibrary, "glBufferDataARB" ); - PFNGLDELETEBUFFERSARBPROC glDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC)dlsym( this->OpenGLLibrary, "glDeleteBuffersARB" ); + PFNGLGENBUFFERSARBPROC glGenBuffersARB = (PFNGLGENBUFFERSARBPROC)dlsym( this->OpenGLLibrary, "glGenBuffersARB" ); + PFNGLBINDBUFFERARBPROC glBindBufferARB = (PFNGLBINDBUFFERARBPROC)dlsym( this->OpenGLLibrary, "glBindBufferARB" ); + PFNGLBUFFERDATAARBPROC glBufferDataARB = (PFNGLBUFFERDATAARBPROC)dlsym( this->OpenGLLibrary, "glBufferDataARB" ); #ifdef GL_ARB_shader_objects PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB = @@ -878,8 +879,6 @@ void VISU_OpenGLPointSpriteMapper::DrawPoints(int idx, glDisableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); - glDeleteBuffersARB( 1, &aBufferObjectID ); - #ifdef GL_ARB_shader_objects glUseProgramObjectARB( 0 ); #endif diff --git a/src/PIPELINE/VISU_ScalarBarCtrl.cxx b/src/PIPELINE/VISU_ScalarBarCtrl.cxx index 4554d1fb..e200b2ea 100644 --- a/src/PIPELINE/VISU_ScalarBarCtrl.cxx +++ b/src/PIPELINE/VISU_ScalarBarCtrl.cxx @@ -105,10 +105,10 @@ VISU_ScalarBarCtrl::~VISU_ScalarBarCtrl() void VISU_ScalarBarCtrl::SetMode(const int theMode) { myMode=theMode; - //myScalarBarNumber=myScalarBarNumberMax; - //if(!myMode){ - // myScalarBarNumber=1; - //} + myScalarBarNumber=myScalarBarNumberMax; + if(!myMode){ + myScalarBarNumber=1; + } } //================================================================== // function : GetMode @@ -256,7 +256,7 @@ void VISU_ScalarBarCtrl::AddToRender(vtkRenderer* theRenderer) int i; // Update(); - for (i=0; iAddActor2D(mySBA[i]); } } @@ -266,7 +266,7 @@ void VISU_ScalarBarCtrl::AddToRender(vtkRenderer* theRenderer) //================================================================== void VISU_ScalarBarCtrl::RemoveFromRender(vtkRenderer* theRenderer) { - for (int i=0; iRemoveActor2D(mySBA[i]); } } diff --git a/src/PIPELINE/VISU_ScalarBarCtrl.hxx b/src/PIPELINE/VISU_ScalarBarCtrl.hxx index f55ae051..dab82503 100644 --- a/src/PIPELINE/VISU_ScalarBarCtrl.hxx +++ b/src/PIPELINE/VISU_ScalarBarCtrl.hxx @@ -123,7 +123,7 @@ protected: protected: int myMode; - //int myScalarBarNumber; + int myScalarBarNumber; int myScalarBarNumberMax; float myDistance, myL, myB, myPosition[2]; float myRangeLocal[2]; diff --git a/src/VISUGUI/Makefile.in b/src/VISUGUI/Makefile.in index 84579bf2..3e9f92da 100644 --- a/src/VISUGUI/Makefile.in +++ b/src/VISUGUI/Makefile.in @@ -69,8 +69,7 @@ LIB_SRC = VisuGUI.cxx \ VisuGUI_CutLinesDlg.cxx \ VisuGUI_CutPlanesDlg.cxx \ VisuGUI_StreamLinesDlg.cxx \ - VisuGUI_VectorsDlg.cxx \ - VisuGUI_Timer.cxx + VisuGUI_VectorsDlg.cxx LIB_MOC = VisuGUI.h \ VisuGUI_Module.h \ diff --git a/src/VISUGUI/VISU_msg_en.po b/src/VISUGUI/VISU_msg_en.po index 5598166f..41f32151 100644 --- a/src/VISUGUI/VISU_msg_en.po +++ b/src/VISUGUI/VISU_msg_en.po @@ -268,12 +268,6 @@ msgstr "Show Table" msgid "VisuGUI::MEN_SHRINK" msgstr "Shrink" -msgid "VisuGUI::MEN_SHADING" -msgstr "Shading On" - -msgid "VisuGUI::MEN_NOSHADING" -msgstr "Shading Off" - msgid "VisuGUI::MEN_STREAM_LINES" msgstr "Stream Lines" @@ -671,9 +665,6 @@ msgstr "X:" msgid "VisuGUI_ScalarBarPane::LBL_Y" msgstr "Y:" -msgid "VisuGUI_ScalarBarPane::LBL_SHOW_PREVIEW" -msgstr "Show preview" - msgid "VisuGUI_ScalarBarPane::DIMENSIONS_GRP" msgstr "Dimensions" diff --git a/src/VISUGUI/VisuGUI.cxx b/src/VISUGUI/VisuGUI.cxx index def9b9fc..b3b56888 100644 --- a/src/VISUGUI/VisuGUI.cxx +++ b/src/VISUGUI/VisuGUI.cxx @@ -131,8 +131,6 @@ #include "VisuGUI_ActionsDef.h" -#include "VisuGUI_Timer.h" - using namespace VISU; #ifdef _DEBUG_ @@ -160,9 +158,6 @@ void VisuGUI:: OnImportFromFile() { - VisuGUI_Timer aTimer; - aTimer.Start(); - if(MYDEBUG) MESSAGE("VisuGUI::OnImportFromFile()"); CheckLock(GetCStudy(GetAppStudy(this))); SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr(); @@ -178,7 +173,7 @@ OnImportFromFile() tr("MEN_IMPORT_FROM_FILE"), true); if(aFileInfo.exists()) { - application()->putInfo( "Importing From File " + aFileInfo.filePath() + "...", -1 ); + application()->putInfo( "Importing From File " + aFileInfo.filePath() + "..." ); VISU::Result_var aResult; bool anIsBuild = aResourceMgr->booleanValue("VISU", "full_med_loading", false); @@ -206,9 +201,8 @@ OnImportFromFile() tr("ERR_ERROR_IN_THE_FILE"), tr("BUT_OK")); }else{ + application()->putInfo(aFileInfo.filePath() + tr("INF_DONE")); UpdateObjBrowser(this); - application()->putInfo(aFileInfo.filePath() + tr("INF_DONE") + - " in " + aTimer.GetTime() + " seconds", -1 ); } } } diff --git a/src/VISUGUI/VisuGUI_ActionsDef.h b/src/VISUGUI/VisuGUI_ActionsDef.h index b3b99f36..0a795733 100644 --- a/src/VISUGUI/VisuGUI_ActionsDef.h +++ b/src/VISUGUI/VisuGUI_ActionsDef.h @@ -55,9 +55,6 @@ #define VISU_SHRINK 4055 #define VISU_UNSHRINK 4056 -#define VISU_SHADING 4083 -#define VISU_NOSHADING 4084 - #define VISU_CELL_COLOR 4057 #define VISU_COLOR 4058 #define VISU_EDGE_COLOR 4059 diff --git a/src/VISUGUI/VisuGUI_Timer.cxx b/src/VISUGUI/VisuGUI_Timer.cxx deleted file mode 100644 index ce88bbfc..00000000 --- a/src/VISUGUI/VisuGUI_Timer.cxx +++ /dev/null @@ -1,103 +0,0 @@ -// 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); - - Cumul_user += (double) diffr_user / CLK_TCK ; - Cumul_sys += (double) diffr_sys / CLK_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 deleted file mode 100644 index bbfb7e57..00000000 --- a/src/VISUGUI/VisuGUI_Timer.h +++ /dev/null @@ -1,43 +0,0 @@ -// 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 71b4bcef..5593929b 100644 --- a/src/VISUGUI/VisuGUI_Tools.cxx +++ b/src/VISUGUI/VisuGUI_Tools.cxx @@ -730,7 +730,7 @@ namespace VISU FindActor(SVTK_ViewWindow* theViewWindow, const char* theEntry) { - using namespace SVTK; + using namespace VTK; if(vtkRenderer* aRenderer = theViewWindow->getRenderer()){ if(vtkActorCollection* aCollection = aRenderer->GetActors()){ if(VISU_Actor* anActor = Find(aCollection,TIsSameEntry(theEntry))){ diff --git a/src/VISUGUI/VisuGUI_ViewTools.h b/src/VISUGUI/VisuGUI_ViewTools.h index f732ab23..8a12e3c7 100644 --- a/src/VISUGUI/VisuGUI_ViewTools.h +++ b/src/VISUGUI/VisuGUI_ViewTools.h @@ -203,7 +203,7 @@ namespace VISU FindActor(TVieweWindow* theViewWindow, const char* theEntry) { - using namespace SVTK; + using namespace VTK; if(vtkRenderer* aRenderer = theViewWindow->getRenderer()){ if(vtkActorCollection* aCollection = aRenderer->GetActors()){ if(VISU_Actor* anActor = Find(aCollection,TIsSameEntry(theEntry))){ diff --git a/src/VISU_I/Makefile.in b/src/VISU_I/Makefile.in index bad03e4f..4ce33ec5 100644 --- a/src/VISU_I/Makefile.in +++ b/src/VISU_I/Makefile.in @@ -107,8 +107,7 @@ LDFLAGS += \ $(QWT_LIBS) \ $(BOOST_LIBS) \ -L${KERNEL_ROOT_DIR}/lib/salome \ - -L${GUI_ROOT_DIR}/lib/salome \ - -L${MED_ROOT_DIR}/lib/salome + -L${GUI_ROOT_DIR}/lib/salome LIBS+= -lboost_signals-mt \ -lSalomeHDFPersist \ @@ -129,38 +128,7 @@ LIBS+= -lboost_signals-mt \ -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 \ - -lObjBrowser \ - -lSalomePrs \ - -lPyInterp \ - -lPythonConsole \ - -lLogWindow \ - -lToolsGUI \ - -lGLViewer \ - -lOCCViewer \ - -lSOCC \ - -lPlot2d \ - -lMEDWrapper \ - -lMEDWrapperBase \ - -lMEDWrapper_V2_2 \ - -lMEDWrapper_V2_1 \ - -lmed_V2_1 +LDFLAGSFORBIN=$(LDFLAGS) $(LIBS) # additional file to be cleaned MOSTLYCLEAN = diff --git a/src/VISU_I/VISU_ColoredPrs3d_i.cc b/src/VISU_I/VISU_ColoredPrs3d_i.cc index a47ea458..4c6e2dff 100644 --- a/src/VISU_I/VISU_ColoredPrs3d_i.cc +++ b/src/VISU_I/VISU_ColoredPrs3d_i.cc @@ -639,10 +639,10 @@ VISU::ColoredPrs3d_i } }catch(std::exception& exc){ INFOS("Follow exception was occured :\n"<CommitCommand(); diff --git a/src/VISU_I/VISU_Gen_i.hh b/src/VISU_I/VISU_Gen_i.hh index a387b2e5..f8157bfd 100644 --- a/src/VISU_I/VISU_Gen_i.hh +++ b/src/VISU_I/VISU_Gen_i.hh @@ -59,24 +59,21 @@ namespace VISU{ 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 NULL; + return aPresent; 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))){ - TPrs3d_i* aPresent = new TPrs3d_i(pResult,theAddToStudy); - try{ - if(aPresent->Create(theMeshName,theEntity,theFieldName,int(theIteration))) - return aPresent; - }catch(...){ - } - aPresent->_remove_ref(); + aPresent = new TPrs3d_i(pResult,theAddToStudy); + if(aPresent->Create(theMeshName,theEntity,theFieldName,int(theIteration)) == NULL) + aPresent->_remove_ref(); } } - return NULL; + return aPresent; } template typename TPrs3d_i::TInterface::_var_type diff --git a/src/VISU_I/VISU_TimeAnimation.cxx b/src/VISU_I/VISU_TimeAnimation.cxx index cacc4046..c4049d7a 100644 --- a/src/VISU_I/VISU_TimeAnimation.cxx +++ b/src/VISU_I/VISU_TimeAnimation.cxx @@ -59,7 +59,9 @@ VISU_TimeAnimation::VISU_TimeAnimation (_PTR(Study) theStudy, if (!CORBA::is_nil(theView3D)) { VISU::View3D_i* pView = dynamic_cast(GetServant(theView3D).in()); - SUIT_ViewWindow* aVW = pView->GetViewWindow(); + //QAD_StudyFrame* aStudyFrame = pView->GetStudyFrame(); + //myView = VISU::GetViewFrame(aStudyFrame); + SUIT_ViewWindow* aVW = pView->myViewWindow; myView = VISU::GetViewWindow(aVW); } diff --git a/src/VISU_I/VISU_View_i.cc b/src/VISU_I/VISU_View_i.cc index be9223a3..92e46a57 100644 --- a/src/VISU_I/VISU_View_i.cc +++ b/src/VISU_I/VISU_View_i.cc @@ -49,6 +49,7 @@ #include "SPlot2d_ViewModel.h" #include "Plot2d_ViewFrame.h" +#include "Plot2d_ViewModel.h" #include "SalomeApp_Application.h" #include "SalomeApp_Study.h" @@ -211,7 +212,7 @@ namespace VISU { struct TSplitEvent: public SALOME_Event { SalomeApp_Application * myApplication; - SUIT_ViewWindow * myVW; + SUIT_ViewWindow * myViewWindow; Qt::Orientation myOrientation; QtxWorkstack::SplitType mySplitType; @@ -221,7 +222,7 @@ namespace VISU { Qt::Orientation theOrientation, QtxWorkstack::SplitType theSplitType): myApplication(theApplication), - myVW(theViewWindow), + myViewWindow(theViewWindow), myOrientation(theOrientation), mySplitType(theSplitType) {} @@ -233,7 +234,7 @@ namespace VISU { if (tabDesk) { QtxWorkstack* workstack = tabDesk->workstack(); if (workstack) { - workstack->Split(myVW, myOrientation, mySplitType); + workstack->Split(myViewWindow, myOrientation, mySplitType); } } } @@ -243,40 +244,32 @@ namespace VISU { View_i:: SplitRight() { - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TSplitEvent(myApplication, aVW, - Qt::Horizontal, QtxWorkstack::SPLIT_MOVE)); + ProcessVoidEvent(new TSplitEvent(myApplication,myViewWindow, + Qt::Horizontal,QtxWorkstack::SPLIT_MOVE)); } void View_i:: SplitLeft() { - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TSplitEvent(myApplication, aVW, - Qt::Horizontal, QtxWorkstack::SPLIT_STAY)); + ProcessVoidEvent(new TSplitEvent(myApplication,myViewWindow, + Qt::Horizontal,QtxWorkstack::SPLIT_STAY)); } void View_i:: SplitBottom() { - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TSplitEvent(myApplication, aVW, - Qt::Vertical, QtxWorkstack::SPLIT_MOVE)); + ProcessVoidEvent(new TSplitEvent(myApplication,myViewWindow, + Qt::Vertical,QtxWorkstack::SPLIT_MOVE)); } void View_i:: SplitTop() { - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TSplitEvent(myApplication, aVW, - Qt::Vertical, QtxWorkstack::SPLIT_STAY)); + ProcessVoidEvent(new TSplitEvent(myApplication,myViewWindow, + Qt::Vertical,QtxWorkstack::SPLIT_STAY)); } void @@ -285,31 +278,29 @@ namespace VISU { { struct TOnTopEvent: public SALOME_Event { - SUIT_ViewWindow * myVW; + SUIT_ViewWindow * myViewWindow; public: TOnTopEvent (SUIT_ViewWindow * theViewWindow): - myVW(theViewWindow) + myViewWindow(theViewWindow) {} virtual void Execute() { - if (myVW) { - myVW->setFocus(); + if (myViewWindow) { + myViewWindow->setFocus(); } } }; - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TOnTopEvent(aVW)); + ProcessVoidEvent(new TOnTopEvent(myViewWindow)); } struct TAttractEvent: public SALOME_Event { SalomeApp_Application * myApplication; - SUIT_ViewWindow * myVW1; - SUIT_ViewWindow * myVW2; + SUIT_ViewWindow * myViewWindow1; + SUIT_ViewWindow * myViewWindow2; bool myAttractAll; public: @@ -318,8 +309,8 @@ namespace VISU { SUIT_ViewWindow * theViewWindow2, bool theAttractAll): myApplication(theApplication), - myVW1(theViewWindow1), - myVW2(theViewWindow2), + myViewWindow1(theViewWindow1), + myViewWindow2(theViewWindow2), myAttractAll(theAttractAll) {} @@ -330,7 +321,7 @@ namespace VISU { if (tabDesk) { QtxWorkstack* workstack = tabDesk->workstack(); if (workstack) { - workstack->Attract(myVW1, myVW2, myAttractAll); + workstack->Attract(myViewWindow1, myViewWindow2, myAttractAll); } } } @@ -342,12 +333,7 @@ namespace VISU { { if (!CORBA::is_nil(theView)) { if (VISU::View_i* pView = dynamic_cast(VISU::GetServant(theView).in())) { - if (pView) { - SUIT_ViewWindow* aVW1 = GetViewWindow(); - SUIT_ViewWindow* aVW2 = pView->GetViewWindow(); - if (aVW1 && aVW2) - ProcessVoidEvent(new TAttractEvent(myApplication, aVW1, aVW2, false)); - } + ProcessVoidEvent(new TAttractEvent(myApplication,myViewWindow,pView->myViewWindow,false)); } } } @@ -358,12 +344,7 @@ namespace VISU { { if (!CORBA::is_nil(theView)) { if (VISU::View_i* pView = dynamic_cast(VISU::GetServant(theView).in())) { - if (pView) { - SUIT_ViewWindow* aVW1 = GetViewWindow(); - SUIT_ViewWindow* aVW2 = pView->GetViewWindow(); - if (aVW1 && aVW2) - ProcessVoidEvent(new TAttractEvent(myApplication, aVW1, aVW2, true)); - } + ProcessVoidEvent(new TAttractEvent(myApplication,myViewWindow,pView->myViewWindow,true)); } } } @@ -371,7 +352,7 @@ namespace VISU { struct TSizePositionEvent: public SALOME_Event { SalomeApp_Application * myApplication; - SUIT_ViewWindow * myVW; + SUIT_ViewWindow * myViewWindow; double myValue; bool myIsSize; @@ -381,7 +362,7 @@ namespace VISU { double theValue, bool theIsSize): myApplication(theApplication), - myVW(theViewWindow), + myViewWindow(theViewWindow), myValue(theValue), myIsSize(theIsSize) {} @@ -395,9 +376,9 @@ namespace VISU { QtxWorkstack* workstack = tabDesk->workstack(); if (workstack) { if (myIsSize) { - //jfa to do:workstack->SetRelativeSizeInSplitter(myVW, myValue); + //jfa to do:workstack->SetRelativeSizeInSplitter(myViewWindow, myValue); } else { - workstack->SetRelativePositionInSplitter(myVW, myValue); + workstack->SetRelativePositionInSplitter(myViewWindow, myValue); } } } @@ -411,9 +392,7 @@ namespace VISU { if (thePosition < 0.0 || 1.0 < thePosition) { return; } - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TSizePositionEvent(myApplication, aVW, thePosition, false)); + ProcessVoidEvent(new TSizePositionEvent(myApplication,myViewWindow,thePosition,false)); } void @@ -423,15 +402,13 @@ namespace VISU { if (theSize < 0.0 || 1.0 < theSize) { return; } - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TSizePositionEvent(myApplication, aVW, theSize, true)); + ProcessVoidEvent(new TSizePositionEvent(myApplication,myViewWindow,theSize,true)); } struct TWSSizePositionEvent: public SALOME_Event { SalomeApp_Application * myApplication; - SUIT_ViewWindow * myVW; + SUIT_ViewWindow * myViewWindow; Qt::Orientation myOrientation; double myValue; bool myIsSize; @@ -443,7 +420,7 @@ namespace VISU { double theValue, bool theIsSize): myApplication(theApplication), - myVW(theViewWindow), + myViewWindow(theViewWindow), myOrientation(theOrientation), myValue(theValue), myIsSize(theIsSize) @@ -458,9 +435,9 @@ namespace VISU { QtxWorkstack* workstack = tabDesk->workstack(); if (workstack) { if (myIsSize) { - //jfa to do:workstack->SetRelativeSize(myVW, myOrientation, myValue); + //jfa to do:workstack->SetRelativeSize(myViewWindow, myOrientation, myValue); } else { - workstack->SetRelativePosition(myVW, myOrientation, myValue); + workstack->SetRelativePosition(myViewWindow, myOrientation, myValue); } } } @@ -474,10 +451,8 @@ namespace VISU { if (thePosition < 0.0 || 1.0 < thePosition) { return; } - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TWSSizePositionEvent(myApplication, aVW, - Qt::Horizontal, thePosition, false)); + ProcessVoidEvent(new TWSSizePositionEvent(myApplication,myViewWindow, + Qt::Horizontal,thePosition,false)); } void @@ -487,10 +462,8 @@ namespace VISU { if (thePosition < 0.0 || 1.0 < thePosition) { return; } - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TWSSizePositionEvent(myApplication, aVW, - Qt::Vertical, thePosition, false)); + ProcessVoidEvent(new TWSSizePositionEvent(myApplication,myViewWindow, + Qt::Vertical,thePosition,false)); } void @@ -500,10 +473,8 @@ namespace VISU { if (theSize < 0.0 || 1.0 < theSize) { return; } - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TWSSizePositionEvent(myApplication, aVW, - Qt::Horizontal, theSize, true)); + ProcessVoidEvent(new TWSSizePositionEvent(myApplication,myViewWindow, + Qt::Horizontal,theSize,true)); } void @@ -513,17 +484,15 @@ namespace VISU { if (theSize < 0.0 || 1.0 < theSize) { return; } - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TWSSizePositionEvent(myApplication, aVW, - Qt::Vertical, theSize, true)); + ProcessVoidEvent(new TWSSizePositionEvent(myApplication,myViewWindow, + Qt::Vertical,theSize,true)); } // End: New methods for view parameters management // Begin: Old methods for view parameters management, they don't work now struct TSetViewSize: public SALOME_Event { - SUIT_ViewWindow* myVW; + SUIT_ViewWindow* myViewWindow; typedef void (QRect::* TAction)(int); TAction myAction; CORBA::Long mySize; @@ -532,7 +501,7 @@ namespace VISU { TSetViewSize(SUIT_ViewWindow* theViewWindow, TAction theAction, CORBA::Long theSize): - myVW(theViewWindow), + myViewWindow(theViewWindow), myAction(theAction), mySize(theSize) {} @@ -541,7 +510,7 @@ namespace VISU { void Execute() { - if (QWidget* aParent = myVW->parentWidget(true)) { + if (QWidget* aParent = myViewWindow->parentWidget(true)) { QRect aQRect = aParent->frameGeometry(); (aQRect.*myAction)(mySize); aParent->setGeometry(aQRect); @@ -566,7 +535,7 @@ namespace VISU { struct TGetViewSize: public SALOME_Event { - SUIT_ViewWindow* myVW; + SUIT_ViewWindow* myViewWindow; typedef int (QRect::* TAction)() const; TAction myAction; @@ -577,7 +546,7 @@ namespace VISU { public: TGetViewSize(SUIT_ViewWindow* theViewWindow, TAction theAction): - myVW(theViewWindow), + myViewWindow(theViewWindow), myAction(theAction) {} @@ -585,7 +554,7 @@ namespace VISU { void Execute() { - if(QWidget* aParent = myVW->parentWidget(true)){ + if(QWidget* aParent = myViewWindow->parentWidget(true)){ QRect aQRect = aParent->frameGeometry(); myResult = (aQRect.*myAction)(); } @@ -611,13 +580,13 @@ namespace VISU { class TWorkspaceEvent: public SALOME_Event { protected: - QWidget* myVW; + QWidget* myViewWindow; QWidget* myWorkspace; public: TWorkspaceEvent(QWidget* theViewWindow, QWidget* theWorkspace): - myVW(theViewWindow), + myViewWindow(theViewWindow), myWorkspace(theWorkspace) {} }; @@ -640,7 +609,7 @@ namespace VISU { void Execute() { - if(QWidget* aParent = myVW->parentWidget(true)) + if(QWidget* aParent = myViewWindow->parentWidget(true)) SUIT_Tools::alignWidget(aParent,myWorkspace,myAligment); } }; @@ -721,7 +690,7 @@ namespace VISU { void Execute() { - if(QWidget* aParent = myVW->parentWidget(true)) + if(QWidget* aParent = myViewWindow->parentWidget(true)) aParent->move(int(myX*myWorkspace->width()),int(myY*myWorkspace->height())); } }; @@ -748,7 +717,7 @@ namespace VISU { void Execute() { - if(QWidget* aParent = myVW->parentWidget(true)) + if(QWidget* aParent = myViewWindow->parentWidget(true)) aParent->setGeometry(aParent->x(), aParent->y(), int(myX*myWorkspace->width()), @@ -784,9 +753,7 @@ namespace VISU { } }; - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TEvent(aVW, theColor)); + ProcessVoidEvent(new TEvent(myViewWindow,theColor)); } @@ -815,42 +782,28 @@ namespace VISU { View_i:: GetBackground() { - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - return ProcessEvent(new TBackgroundEvent(aVW)); - - SALOMEDS::Color aBlack; - aBlack.R = 0.0; - aBlack.G = 0.0; - aBlack.B = 0.0; - return aBlack; + return ProcessEvent(new TBackgroundEvent(myViewWindow)); } void View_i:: Minimize() { - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TFrameActionEvent(aVW, &SUIT_ViewWindow::showMinimized)); + ProcessVoidEvent(new TFrameActionEvent(myViewWindow,&SUIT_ViewWindow::showMinimized)); } void View_i:: Restore() { - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TFrameActionEvent(aVW, &SUIT_ViewWindow::showNormal)); + ProcessVoidEvent(new TFrameActionEvent(myViewWindow,&SUIT_ViewWindow::showNormal)); } void View_i:: Maximize() { - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TFrameActionEvent(aVW, &SUIT_ViewWindow::showMaximized)); + ProcessVoidEvent(new TFrameActionEvent(myViewWindow,&SUIT_ViewWindow::showMaximized)); } void @@ -885,13 +838,13 @@ namespace VISU { class TSavePictureEvent: public SALOME_Event { - SUIT_ViewWindow * myVW; + SUIT_ViewWindow * myViewWindow; const char * myFileName; public: typedef CORBA::Boolean TResult; TResult myResult; TSavePictureEvent (SUIT_ViewWindow * theViewWindow, const char * theFileName) - : myVW(theViewWindow), + : myViewWindow(theViewWindow), myFileName(theFileName), myResult(false) { @@ -899,8 +852,8 @@ namespace VISU { virtual void Execute() { - if (myVW) { - QImage img = myVW->dumpView(); + if (myViewWindow) { + QImage img = myViewWindow->dumpView(); if (!img.isNull()) { QString fileName (myFileName); if (!fileName.isEmpty()) { @@ -909,7 +862,6 @@ namespace VISU { if (fmt == "JPG" ) fmt = "JPEG"; //QApplication::setOverrideCursor(Qt::waitCursor); img.save(fileName, fmt.latin1()); - myResult = true; //QApplication::restoreOverrideCursor(); } } @@ -920,11 +872,12 @@ namespace VISU { CORBA::Boolean View_i::SavePicture(const char* theFileName) { - return ProcessEvent(new TSavePictureEvent (GetViewWindow(), theFileName)); + return ProcessEvent(new TSavePictureEvent (myViewWindow,theFileName)); } const char* - View_i::GetComment() const + View_i:: + GetComment() const { return ""; } @@ -935,40 +888,76 @@ namespace VISU { { } - SUIT_ViewWindow* View_i::GetViewWindow() - { - if (myViewWindow) { - QPtrVector aViews = myViewManager->getViews(); - int aPos = aViews.find(myViewWindow); - if (aPos < 0) - myViewWindow = NULL; - } - return myViewWindow; - } - void View_i::SetViewWindow(SUIT_ViewWindow* theViewWindow) + //================= OLD CODE =================== + + //QAD_Study* CheckStudy (SALOMEDS::Study_ptr theStudy) + //{ + // //QAD_Desktop* aDesktop = QAD_Application::getDesktop(); + // //QAD_Study* aStudy = aDesktop->findStudy(theStudy); + // if (!aStudy) { + // CORBA::String_var aName = theStudy->Name(); + // aFileInfo.setFile(aName.in()); + // if (aFileInfo.exists()) + // aStudy = aDesktop->loadStudy(aFileInfo.baseName()); + // else + // aStudy = aDesktop->loadStudy(aName.in()); + // if (!aStudy) { + // MESSAGE("CheckStudy()::ERROR: Can't load study"); + // } + // } + // return aStudy; + //} + + template + struct TNewSpecViewEvent: public SALOME_Event { - myViewWindow = theViewWindow; - } + SalomeApp_Application* myApplication; + typedef SUIT_ViewManager* TResult; + TResult myResult; + + TNewSpecViewEvent (SalomeApp_Application* theApplication): + myApplication(theApplication), + myResult(NULL) + {} + + virtual + void + Execute() + { + myResult = myApplication->getViewManager(TViewer::Type(), false); + if (!myResult) { + myResult = myApplication->getViewManager(TViewer::Type(), true); + myResult->closeAllViews(); + } + } + }; //=========================================================================== XYPlot_i::XYPlot_i (SalomeApp_Application* theApplication) : View_i(theApplication, NULL) { if (MYDEBUG) MESSAGE("XYPlot_i::XYPlot_i"); + if (theApplication) { + myViewManager = ProcessEvent(new TNewSpecViewEvent(theApplication)); + } } + struct TCreatePlot2dViewEvent: public SALOME_Event { - XYPlot_i * myPlot2dView; - int myNew; + SUIT_ViewManager* myViewManager; + XYPlot_i * myPlot2dView; + int myNew; typedef Plot2d_ViewFrame* TResult; TResult myResult; - TCreatePlot2dViewEvent (XYPlot_i * thePlot2dView, - const int theNew): + TCreatePlot2dViewEvent (SUIT_ViewManager* theViewManager, + XYPlot_i * thePlot2dView, + const int theNew): + myViewManager(theViewManager), myPlot2dView(thePlot2dView), myNew(theNew), myResult(NULL) @@ -978,48 +967,27 @@ namespace VISU { void Execute() { - if (!myPlot2dView->myApplication) - return; - - SUIT_ViewManager* aViewMgr = - myPlot2dView->myApplication->getViewManager(SPlot2d_Viewer::Type(), false); - SUIT_ViewWindow* aVW = NULL; - - if (aViewMgr) { - if (myNew) - aVW = aViewMgr->createViewWindow(); - else - aVW = aViewMgr->getActiveView(); + if (myNew) { + myPlot2dView->myViewWindow = myViewManager->createViewWindow(); } else { - if (myNew) { - aViewMgr = myPlot2dView->myApplication->getViewManager(SPlot2d_Viewer::Type(), true); - aVW = aViewMgr->getActiveView(); - } else { - return; // there are no current Plot2d view - } + myPlot2dView->myViewWindow = myViewManager->getActiveView(); } - - if (aVW) { - Plot2d_ViewWindow* aPlot2dVW = dynamic_cast(aVW); + if (myPlot2dView->myViewWindow) { + Plot2d_ViewWindow* aPlot2dVW = dynamic_cast(myPlot2dView->myViewWindow); if (aPlot2dVW) { myResult = aPlot2dVW->getViewFrame(); if (myResult) { myResult->Repaint(); - } - - myPlot2dView->myViewManager = aViewMgr; - myPlot2dView->SetViewWindow(aVW); - } + } + } } } }; Storable* XYPlot_i::Create (int theNew) { - myView = ProcessEvent(new TCreatePlot2dViewEvent(this, theNew)); - if (myView) - return this; - return NULL; + myView = ProcessEvent(new TCreatePlot2dViewEvent(myViewManager, this, theNew)); + return this; } void XYPlot_i::Update() @@ -1030,13 +998,7 @@ namespace VISU { void XYPlot_i::Close() { //jfa: may be need to be enclosed in SALOME_Event? - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - aVW->close(); - //QPtrVector aViews = myViewManager->getViews(); - //int aPos = aViews.find(myViewWindow); - //if (aPos >= 0) - // myViewWindow->close(); + myViewWindow->close(); } XYPlot_i::~XYPlot_i() { @@ -1045,59 +1007,49 @@ namespace VISU { void XYPlot_i::SetTitle (const char* theTitle) { - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TVoidMemFun1ArgEvent - (aVW, &SUIT_ViewWindow::setCaption, QString(theTitle))); + ProcessVoidEvent(new TVoidMemFun1ArgEvent + (myViewWindow, &SUIT_ViewWindow::setCaption, QString(theTitle))); } char* XYPlot_i::GetTitle() { - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - return CORBA::string_dup(aVW->caption().latin1()); - return CORBA::string_dup(""); + //jfa: may be need to be enclosed in SALOME_Event? + return CORBA::string_dup(myViewWindow->caption().latin1()); } void XYPlot_i::SetSubTitle (const char* theTitle) { - if (GetViewWindow()) - ProcessVoidEvent(new TVoidMemFun1ArgEvent - (myView, &Plot2d_ViewFrame::setTitle, QString(theTitle))); + ProcessVoidEvent(new TVoidMemFun1ArgEvent + (myView, &Plot2d_ViewFrame::setTitle, QString(theTitle))); } char* XYPlot_i::GetSubTitle() { - if (GetViewWindow()) - return CORBA::string_dup(myView->getTitle()); - return CORBA::string_dup(""); + //jfa: may be need to be enclosed in SALOME_Event? + return CORBA::string_dup(myView->getTitle()); } void XYPlot_i::SetCurveType (VISU::XYPlot::CurveType theType) { - if (GetViewWindow()) - ProcessVoidEvent(new TVoidMemFun2ArgEvent - (myView,&Plot2d_ViewFrame::setCurveType,theType,true)); + ProcessVoidEvent(new TVoidMemFun2ArgEvent + (myView,&Plot2d_ViewFrame::setCurveType,theType,true)); } VISU::XYPlot::CurveType XYPlot_i::GetCurveType() { - if (GetViewWindow()) - return (VISU::XYPlot::CurveType)myView->getCurveType(); - return VISU::XYPlot::POINTS; + //jfa: may be need to be enclosed in SALOME_Event? + return (VISU::XYPlot::CurveType)myView->getCurveType(); } void XYPlot_i::SetMarkerSize (CORBA::Long theSize) { - if (GetViewWindow()) - ProcessVoidEvent(new TVoidMemFun2ArgEvent - (myView,&Plot2d_ViewFrame::setMarkerSize,theSize,true)); + ProcessVoidEvent(new TVoidMemFun2ArgEvent + (myView,&Plot2d_ViewFrame::setMarkerSize,theSize,true)); } CORBA::Long XYPlot_i::GetMarkerSize() { - if (GetViewWindow()) - return myView->getMarkerSize(); - return -1; + //jfa: may be need to be enclosed in SALOME_Event? + return myView->getMarkerSize(); } class TEnableGridEvent: public SALOME_Event @@ -1119,24 +1071,21 @@ namespace VISU { protected: Plot2d_ViewFrame* myView; TFun myFun; - CORBA::Boolean myMajor, myMinor; - CORBA::Long myNumMajor, myNumMinor; + CORBA::Boolean myMajor, myNumMajor; + CORBA::Boolean myMinor, myNumMinor; }; void XYPlot_i::EnableXGrid (CORBA::Boolean theMajor, CORBA::Long theNumMajor, CORBA::Boolean theMinor, CORBA::Long theNumMinor) { - if (GetViewWindow()) - ProcessVoidEvent(new TEnableGridEvent(myView,&Plot2d_ViewFrame::setXGrid, - theMajor,theNumMajor,theMinor,theNumMinor)); + ProcessVoidEvent(new TEnableGridEvent(myView,&Plot2d_ViewFrame::setXGrid, + theMajor,theNumMajor,theMinor,theNumMinor)); } void XYPlot_i::EnableYGrid(CORBA::Boolean theMajor, CORBA::Long theNumMajor, CORBA::Boolean theMinor, CORBA::Long theNumMinor) { - //asl: Plot2d_ViewFrame::setYGrid has more parameters - //if (GetViewWindow()) - // ProcessVoidEvent(new TEnableGridEvent(myView,&Plot2d_ViewFrame::setYGrid, - // theMajor,theNumMajor,theMinor,theNumMinor)); + //jfa tmp:ProcessVoidEvent(new TEnableGridEvent(myView,&Plot2d_ViewFrame::setYGrid, + //jfa tmp: theMajor,theNumMajor,theMinor,theNumMinor)); } class TSetScaleModeEvent: public SALOME_Event @@ -1159,31 +1108,26 @@ namespace VISU { void XYPlot_i::SetHorScaling (VISU::Scaling theScaling) { - if (GetViewWindow()) - ProcessVoidEvent(new TSetScaleModeEvent(myView,&Plot2d_ViewFrame::setHorScaleMode, - theScaling == VISU::LOGARITHMIC)); + ProcessVoidEvent(new TSetScaleModeEvent(myView,&Plot2d_ViewFrame::setHorScaleMode, + theScaling == VISU::LOGARITHMIC)); } VISU::Scaling XYPlot_i::GetHorScaling() { //jfa: may be need to be enclosed in SALOME_Event? - if (GetViewWindow()) - return (VISU::Scaling)myView->getHorScaleMode(); - return VISU::LINEAR; + return (VISU::Scaling)myView->getHorScaleMode(); } void XYPlot_i::SetVerScaling(VISU::Scaling theScaling) { - if (GetViewWindow()) - ProcessVoidEvent(new TSetScaleModeEvent(myView,&Plot2d_ViewFrame::setVerScaleMode, - theScaling == VISU::LOGARITHMIC)); + ProcessVoidEvent(new TSetScaleModeEvent(myView,&Plot2d_ViewFrame::setVerScaleMode, + theScaling == VISU::LOGARITHMIC)); } VISU::Scaling XYPlot_i::GetVerScaling() { - if (GetViewWindow()) - return (VISU::Scaling)myView->getVerScaleMode(); - return VISU::LINEAR; + //jfa: may be need to be enclosed in SALOME_Event? + return (VISU::Scaling)myView->getVerScaleMode(); } class TSetTitleEvent: public SALOME_Event @@ -1204,33 +1148,28 @@ namespace VISU { void XYPlot_i::SetXTitle (const char* theTitle) { - if (GetViewWindow()) - ProcessVoidEvent(new TSetTitleEvent(myView, Plot2d_ViewFrame::XTitle, theTitle)); + ProcessVoidEvent(new TSetTitleEvent(myView, Plot2d_ViewFrame::XTitle, theTitle)); } char* XYPlot_i::GetXTitle() { - if (GetViewWindow()) - return CORBA::string_dup(myView->getTitle(Plot2d_ViewFrame::XTitle)); - return CORBA::string_dup(""); + //jfa: may be need to be enclosed in SALOME_Event? + return CORBA::string_dup(myView->getTitle(Plot2d_ViewFrame::XTitle)); } void XYPlot_i::SetYTitle (const char* theTitle) { - if (GetViewWindow()) - ProcessVoidEvent(new TSetTitleEvent(myView, Plot2d_ViewFrame::YTitle, theTitle)); + ProcessVoidEvent(new TSetTitleEvent(myView, Plot2d_ViewFrame::YTitle, theTitle)); } char* XYPlot_i::GetYTitle() { - if (GetViewWindow()) - return CORBA::string_dup(myView->getTitle(Plot2d_ViewFrame::YTitle)); - return CORBA::string_dup(""); + //jfa: may be need to be enclosed in SALOME_Event? + return CORBA::string_dup(myView->getTitle(Plot2d_ViewFrame::YTitle)); } void XYPlot_i::ShowLegend (CORBA::Boolean theShowing) { - if (GetViewWindow()) - ProcessVoidEvent(new TVoidMemFun2ArgEvent - (myView,&Plot2d_ViewFrame::showLegend,theShowing,true)); + ProcessVoidEvent(new TVoidMemFun2ArgEvent + (myView,&Plot2d_ViewFrame::showLegend,theShowing,true)); } class TXYPlotViewEvent: public SALOME_Event @@ -1298,87 +1237,29 @@ namespace VISU { void XYPlot_i::Display (PrsObject_ptr thePrsObj) { - if (GetViewWindow()) - ProcessVoidEvent(new TXYPlotViewEvent (myApplication,myView,thePrsObj,eDisplay)); + ProcessVoidEvent(new TXYPlotViewEvent (myApplication,myView,thePrsObj,eDisplay)); } void XYPlot_i::Erase (PrsObject_ptr thePrsObj) { - if (GetViewWindow()) - ProcessVoidEvent(new TXYPlotViewEvent (myApplication,myView,thePrsObj,eErase)); + ProcessVoidEvent(new TXYPlotViewEvent (myApplication,myView,thePrsObj,eErase)); } void XYPlot_i::DisplayOnly (PrsObject_ptr thePrsObj) { - if (GetViewWindow()) - ProcessVoidEvent(new TXYPlotViewEvent (myApplication,myView,thePrsObj,eDisplayOnly)); + ProcessVoidEvent(new TXYPlotViewEvent (myApplication,myView,thePrsObj,eDisplayOnly)); } void XYPlot_i::EraseAll() { - if (GetViewWindow()) - ProcessVoidEvent(new TVoidMemFunEvent (myView,&Plot2d_ViewFrame::EraseAll)); + ProcessVoidEvent(new TVoidMemFunEvent (myView,&Plot2d_ViewFrame::EraseAll)); } void XYPlot_i::FitAll() { - if (GetViewWindow()) - ProcessVoidEvent(new TVoidMemFunEvent (myView,&Plot2d_ViewFrame::fitAll)); - } - - class TFitRangeEvent: public SALOME_Event - { - public: - TFitRangeEvent (Plot2d_ViewFrame* theView, - const int mode, - const double xMin, const double xMax, - const double yMin, const double yMax): - myView(theView), - myMode(mode), - myXMin(xMin),myXMax(xMax), - myYMin(yMin),myYMax(yMax) - {} - virtual void Execute() - { - myView->fitData(myMode,myXMin,myXMax,myYMin,myYMax); - } - protected: - const int myMode; - const double myXMin; - const double myXMax; - const double myYMin; - const double myYMax; - Plot2d_ViewFrame* myView; - }; - - void XYPlot_i::FitXRange(const CORBA::Double xMin,const CORBA::Double xMax) - { - const CORBA::Long mode = 1; - const CORBA::Double yMin = 0.0; - const CORBA::Double yMax = 0.0; - ProcessVoidEvent(new TFitRangeEvent(myView,mode,xMin,xMax,yMin,yMax)); + ProcessVoidEvent(new TVoidMemFunEvent (myView,&Plot2d_ViewFrame::fitAll)); } - void XYPlot_i::FitYRange(const CORBA::Double yMin,const CORBA::Double yMax) - { - const CORBA::Long mode = 2; - const CORBA::Double xMin = 0.0; - const CORBA::Double xMax = 0.0; - ProcessVoidEvent(new TFitRangeEvent(myView,mode,xMin,xMax,yMin,yMax)); - } - - void XYPlot_i::FitRange(const CORBA::Double xMin,const CORBA::Double xMax, - const CORBA::Double yMin,const CORBA::Double yMax) - { - 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; - myView->getFitRanges(xMin,xMax,yMin,yMax,y2Min,y2Max); - } //=========================================================================== TableView_i::TableView_i (SalomeApp_Application* theApplication) @@ -1479,19 +1360,22 @@ namespace VISU { : View_i(theApplication, NULL) { if (MYDEBUG) MESSAGE("View3D_i::View3D_i"); + if (theApplication) { + myViewManager = ProcessEvent(new TNewSpecViewEvent(theApplication)); + } } struct TCreateView3dEvent: public SALOME_Event { - View3D_i * myView3D; - int myNew; + SUIT_ViewManager* myViewManager; + int myNew; typedef SUIT_ViewWindow* TResult; TResult myResult; - TCreateView3dEvent (View3D_i * theView3D, - const int theNew): - myView3D(theView3D), + TCreateView3dEvent (SUIT_ViewManager* theViewManager, + const int theNew): + myViewManager(theViewManager), myNew(theNew), myResult(NULL) {} @@ -1500,54 +1384,33 @@ namespace VISU { void Execute() { - if (!myView3D->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) { + myResult = myViewManager->createViewWindow(); } else { - if (myNew) { - aViewMgr = myView3D->myApplication->getViewManager(SVTK_Viewer::Type(), true); - myResult = aViewMgr->getActiveView(); - } else { - return; // there are no current 3D view - } + myResult = myViewManager->getActiveView(); } - - myView3D->myViewManager = aViewMgr; } }; Storable* View3D_i::Create (int theNew) { if (MYDEBUG) MESSAGE("View3D_i::Create"); - SUIT_ViewWindow* aVW = ProcessEvent(new TCreateView3dEvent(this, theNew)); - if (aVW) { - SetViewWindow(aVW); - return this; - } - return NULL; + myViewWindow = ProcessEvent(new TCreateView3dEvent(myViewManager, theNew)); + return this; } void View3D_i::Update() { class TEvent: public SALOME_Event { - SUIT_ViewWindow* myVW; + SUIT_ViewWindow* myViewWindow; public: - TEvent(SUIT_ViewWindow* theViewWindow): - myVW(theViewWindow) + TEvent(SUIT_ViewWindow* theStudyFrame): + myViewWindow(theStudyFrame) {} virtual void Execute() { - SVTK_ViewWindow* vf = VISU::GetViewWindow(myVW); + SVTK_ViewWindow* vf = GetViewWindow(myViewWindow); vtkRenderer* Renderer = vf->getRenderer(); vtkActorCollection* theActors = Renderer->GetActors(); theActors->InitTraversal(); @@ -1560,22 +1423,15 @@ namespace VISU { } } } - RepaintView(myVW); + RepaintView(myViewWindow); } }; - - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TEvent(aVW)); + ProcessVoidEvent(new TEvent(myViewWindow)); } bool View3D_i::SaveViewParams (SUIT_ViewManager* theViewManager, const char* theName) { MESSAGE("View3D_i::SaveViewParams()"); - - if (!theViewManager || !theName) - return false; - _PTR(Study) aCStudy; if (SUIT_Study* aSStudy = theViewManager->study()) { if (SalomeApp_Study* aStudy = dynamic_cast(aSStudy)) { @@ -1585,7 +1441,7 @@ namespace VISU { if (!aCStudy) return false; - if (strcmp(theName, "") != 0) { + if (theName) { std::vector<_PTR(SObject)> aList = aCStudy->FindObjectByName(theName, "VISU"); _PTR(GenericAttribute) anAttr; int iEnd = aList.size(); @@ -1613,18 +1469,18 @@ namespace VISU { class TSaveViewParamsEvent: public SALOME_Event { - SUIT_ViewManager* myViewMgr; + SUIT_ViewManager* myViewManager; const char* myName; public: TSaveViewParamsEvent (SUIT_ViewManager* theViewManager, const char* theName): - myViewMgr(theViewManager), + myViewManager(theViewManager), myName(theName) {} virtual void Execute() { - myResult = View3D_i::SaveViewParams(myViewMgr, myName); + myResult = View3D_i::SaveViewParams(myViewManager, myName); } typedef CORBA::Boolean TResult; TResult myResult; @@ -1672,18 +1528,18 @@ namespace VISU { class TRestoreViewParamsEvent: public SALOME_Event { - SUIT_ViewManager* myViewMgr; + SUIT_ViewManager* myViewManager; const char* myName; public: TRestoreViewParamsEvent (SUIT_ViewManager* theViewManager, const char* theName): - myViewMgr(theViewManager), + myViewManager(theViewManager), myName(theName) {} virtual void Execute() { - myResult = View3D_i::RestoreViewParams(myViewMgr, myName); + myResult = View3D_i::RestoreViewParams(myViewManager, myName); } typedef CORBA::Boolean TResult; TResult myResult; @@ -1694,7 +1550,7 @@ namespace VISU { return ProcessEvent(new TRestoreViewParamsEvent (myViewManager, theName)); } - void View3D_i::Restore (SUIT_ViewWindow* theViewWindow, + void View3D_i::Restore (SUIT_ViewWindow* theStudyFrame, const Storable::TRestoringMap& theMap) { SALOMEDS::Color aColor; @@ -1724,59 +1580,59 @@ namespace VISU { aScaleFactor[1] = VISU::Storable::FindValue(theMap,"myScaleFactor[1]").toDouble(); aScaleFactor[2] = VISU::Storable::FindValue(theMap,"myScaleFactor[2]").toDouble(); - SetBackground(theViewWindow,aColor); - SetPointOfView(theViewWindow,aPosition); - SetViewUp(theViewWindow,aViewUp); - SetFocalPoint(theViewWindow,aFocalPnt); - SetParallelScale(theViewWindow,aParallelScale); - ScaleView(theViewWindow,VISU::View3D::XAxis,aScaleFactor[0]); - ScaleView(theViewWindow,VISU::View3D::YAxis,aScaleFactor[1]); - ScaleView(theViewWindow,VISU::View3D::ZAxis,aScaleFactor[2]); + SetBackground(theStudyFrame,aColor); + SetPointOfView(theStudyFrame,aPosition); + SetViewUp(theStudyFrame,aViewUp); + SetFocalPoint(theStudyFrame,aFocalPnt); + SetParallelScale(theStudyFrame,aParallelScale); + ScaleView(theStudyFrame,VISU::View3D::XAxis,aScaleFactor[0]); + ScaleView(theStudyFrame,VISU::View3D::YAxis,aScaleFactor[1]); + ScaleView(theStudyFrame,VISU::View3D::ZAxis,aScaleFactor[2]); } - string View3D_i::ToString (SUIT_ViewWindow* theViewWindow) + string View3D_i::ToString (SUIT_ViewWindow* theStudyFrame) { ostringstream strOut; - Storable::DataToStream(strOut, "myComment", myComment.c_str()); - ToStream(theViewWindow, strOut); - strOut << ends; - if(MYDEBUG) MESSAGE("View3D_i::ToString - " << strOut.str()); + Storable::DataToStream( strOut, "myComment", myComment.c_str() ); + ToStream(theStudyFrame,strOut); + strOut<GetBackground(backint); + GetRenderer(theStudyFrame)->GetBackground(backint); Storable::DataToStream(theStr,"myColor.R",backint[0]); Storable::DataToStream(theStr,"myColor.G",backint[1]); Storable::DataToStream(theStr,"myColor.B",backint[2]); double aPosition[3]; - GetPointOfView(theViewWindow,aPosition); + GetPointOfView(theStudyFrame,aPosition); Storable::DataToStream(theStr,"myPosition[0]",aPosition[0]); Storable::DataToStream(theStr,"myPosition[1]",aPosition[1]); Storable::DataToStream(theStr,"myPosition[2]",aPosition[2]); double aFocalPnt[3]; - GetFocalPoint(theViewWindow,aFocalPnt); + GetFocalPoint(theStudyFrame,aFocalPnt); Storable::DataToStream(theStr,"myFocalPnt[0]",aFocalPnt[0]); Storable::DataToStream(theStr,"myFocalPnt[1]",aFocalPnt[1]); Storable::DataToStream(theStr,"myFocalPnt[2]",aFocalPnt[2]); double aViewUp[3]; - GetCamera(theViewWindow)->GetViewUp(aViewUp); + GetCamera(theStudyFrame)->GetViewUp(aViewUp); Storable::DataToStream(theStr,"myViewUp[0]",aViewUp[0]); Storable::DataToStream(theStr,"myViewUp[1]",aViewUp[1]); Storable::DataToStream(theStr,"myViewUp[2]",aViewUp[2]); - Storable::DataToStream(theStr,"myParallelScale",GetParallelScale(theViewWindow)); + Storable::DataToStream(theStr,"myParallelScale",GetParallelScale(theStudyFrame)); double aScaleFactor[3]; - VISU::GetViewWindow(theViewWindow)->GetScale(aScaleFactor); + GetViewWindow(theStudyFrame)->GetScale(aScaleFactor); Storable::DataToStream(theStr,"myScaleFactor[0]",aScaleFactor[0]); Storable::DataToStream(theStr,"myScaleFactor[1]",aScaleFactor[1]); Storable::DataToStream(theStr,"myScaleFactor[2]",aScaleFactor[2]); @@ -1784,21 +1640,13 @@ namespace VISU { void View3D_i::ToStream(std::ostringstream& theStr) { - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ToStream(aVW, theStr); + ToStream(myViewWindow,theStr); } void View3D_i::Close() { //jfa: may be need to be enclosed in SALOME_Event? - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - aVW->close(); - //QPtrVector aViews = myViewManager->getViews(); - //int aPos = aViews.find(myViewWindow); - //if (aPos >= 0) - // myViewWindow->close(); + myViewWindow->close(); } View3D_i::~View3D_i() @@ -1808,21 +1656,17 @@ namespace VISU { void View3D_i::SetTitle (const char* theTitle) { - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TVoidMemFun1ArgEvent - (aVW,&SUIT_ViewWindow::setCaption,QString(theTitle))); + ProcessVoidEvent(new TVoidMemFun1ArgEvent + (myViewWindow,&SUIT_ViewWindow::setCaption,QString(theTitle))); } char* View3D_i::GetTitle() { - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - return CORBA::string_dup(aVW->caption().latin1()); - return CORBA::string_dup(""); + //jfa: may be need to be enclosed in SALOME_Event? + return CORBA::string_dup(myViewWindow->caption().latin1()); } - void View3D_i::SetBackground (SUIT_ViewWindow* theViewWindow, + void View3D_i::SetBackground (SUIT_ViewWindow* theStudyFrame, const SALOMEDS::Color& theColor) { //jfa: may be need to be enclosed in SALOME_Event? @@ -1830,123 +1674,110 @@ namespace VISU { aColor[0] = int(255.0*theColor.R); aColor[1] = int(255.0*theColor.G); aColor[2] = int(255.0*theColor.B); - QColor aNewColor (aColor[0],aColor[1],aColor[2]); - VISU::GetViewWindow(theViewWindow)->setBackgroundColor(aNewColor); + QColor aNewColor(aColor[0],aColor[1],aColor[2]); + GetViewWindow(theStudyFrame)->setBackgroundColor(aNewColor); } - SALOMEDS::Color View3D_i::GetBackground (SUIT_ViewWindow* theViewWindow) + SALOMEDS::Color View3D_i::GetBackground (SUIT_ViewWindow* theStudyFrame) { + //jfa: may be need to be enclosed in SALOME_Event? SALOMEDS::Color aColor; float backint[3]; - GetRenderer(theViewWindow)->GetBackground(backint); + GetRenderer(theStudyFrame)->GetBackground(backint); aColor.R = backint[0]; aColor.G = backint[1]; aColor.B = backint[2]; return aColor; } class TUpdateViewerEvent: public SALOME_Event { - SUIT_ViewWindow* myVW; + SUIT_ViewWindow* myViewWindow; Prs3d_i* myPrs3d; int myDisplaing; public: - TUpdateViewerEvent(SUIT_ViewWindow* theViewWindow, + TUpdateViewerEvent(SUIT_ViewWindow* theStudyFrame, Prs3d_i* thePrs3d, int theDisplaing): - myVW(theViewWindow), + myViewWindow(theStudyFrame), myPrs3d(thePrs3d), myDisplaing(theDisplaing) {} virtual void Execute(){ - UpdateViewer(myVW, myDisplaing, myPrs3d); + UpdateViewer(myViewWindow,myDisplaing,myPrs3d); } }; void View3D_i::EraseAll() { if(MYDEBUG) MESSAGE("View3D_i::EraseAll"); - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TUpdateViewerEvent(aVW,NULL,eEraseAll)); + ProcessVoidEvent(new TUpdateViewerEvent(myViewWindow,NULL,eEraseAll)); } void View3D_i::DisplayAll() { if(MYDEBUG) MESSAGE("View3D_i::DisplayAll"); - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TUpdateViewerEvent(aVW,NULL,eDisplayAll)); + ProcessVoidEvent(new TUpdateViewerEvent(myViewWindow,NULL,eDisplayAll)); } void View3D_i::Erase (PrsObject_ptr thePrsObj) { if(MYDEBUG) MESSAGE("View3D_i::Erase"); - SUIT_ViewWindow* aVW = GetViewWindow(); CORBA::Object_ptr anObj = thePrsObj; - Prs3d_i* aPrs = dynamic_cast(VISU::GetServant(anObj).in()); - if (aVW && aPrs) - ProcessVoidEvent(new TUpdateViewerEvent(aVW,aPrs,eErase)); + if(Prs3d_i* aPrs = dynamic_cast(VISU::GetServant(anObj).in())){ + ProcessVoidEvent(new TUpdateViewerEvent(myViewWindow,aPrs,eErase)); + } } void View3D_i::Display (PrsObject_ptr thePrsObj) { if(MYDEBUG) MESSAGE("View3D_i::Display"); - SUIT_ViewWindow* aVW = GetViewWindow(); CORBA::Object_ptr anObj = thePrsObj; - Prs3d_i* aPrs = dynamic_cast(VISU::GetServant(anObj).in()); - if (aVW && aPrs) - ProcessVoidEvent(new TUpdateViewerEvent(aVW,aPrs,eDisplay)); + if(Prs3d_i* aPrs = dynamic_cast(VISU::GetServant(anObj).in())){ + ProcessVoidEvent(new TUpdateViewerEvent(myViewWindow,aPrs,eDisplay)); + } } void View3D_i::DisplayOnly (PrsObject_ptr thePrsObj) { if(MYDEBUG) MESSAGE("View3D_i::DisplayOnly"); - SUIT_ViewWindow* aVW = GetViewWindow(); CORBA::Object_ptr anObj = thePrsObj; - Prs3d_i* aPrs = dynamic_cast(VISU::GetServant(anObj).in()); - if (aVW && aPrs) - ProcessVoidEvent(new TUpdateViewerEvent(aVW,aPrs,eDisplayOnly)); + if(Prs3d_i* aPrs = dynamic_cast(VISU::GetServant(anObj).in())){ + ProcessVoidEvent(new TUpdateViewerEvent(myViewWindow,aPrs,eDisplayOnly)); + } } void View3D_i::FitAll() { - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) { - ProcessVoidEvent(new TVoidMemFunEvent - (VISU::GetViewWindow(aVW), &SVTK_ViewWindow::onFitAll)); - Update(); - } + ProcessVoidEvent(new TVoidMemFunEvent + (GetViewWindow(myViewWindow), &SVTK_ViewWindow::onFitAll)); + Update(); } void View3D_i::SetView (VISU::View3D::ViewType theType) { - SUIT_ViewWindow* aVW = GetViewWindow(); - if (!aVW) - return; - switch (theType) { case VISU::View3D::FRONT : ProcessVoidEvent(new TVoidMemFunEvent - (VISU::GetViewWindow(aVW), &SVTK_ViewWindow::onFrontView)); + (GetViewWindow(myViewWindow), &SVTK_ViewWindow::onFrontView)); break; case VISU::View3D::BACK : ProcessVoidEvent(new TVoidMemFunEvent - (VISU::GetViewWindow(aVW), &SVTK_ViewWindow::onBackView)); + (GetViewWindow(myViewWindow), &SVTK_ViewWindow::onBackView)); break; case VISU::View3D::LEFT : ProcessVoidEvent(new TVoidMemFunEvent - (VISU::GetViewWindow(aVW),&SVTK_ViewWindow::onLeftView)); + (GetViewWindow(myViewWindow),&SVTK_ViewWindow::onLeftView)); break; case VISU::View3D::RIGHT : ProcessVoidEvent(new TVoidMemFunEvent - (VISU::GetViewWindow(aVW),&SVTK_ViewWindow::onRightView)); + (GetViewWindow(myViewWindow),&SVTK_ViewWindow::onRightView)); break; case VISU::View3D::TOP : ProcessVoidEvent(new TVoidMemFunEvent - (VISU::GetViewWindow(aVW),&SVTK_ViewWindow::onTopView)); + (GetViewWindow(myViewWindow),&SVTK_ViewWindow::onTopView)); break; case VISU::View3D::BOTTOM : ProcessVoidEvent(new TVoidMemFunEvent - (VISU::GetViewWindow(aVW),&SVTK_ViewWindow::onBottomView)); + (GetViewWindow(myViewWindow),&SVTK_ViewWindow::onBottomView)); break; } Update(); @@ -1955,199 +1786,181 @@ namespace VISU { class TSet3DViewParamEvent: public SALOME_Event { public: - typedef void (*TFun)(SUIT_ViewWindow* theViewWindow, const CORBA::Double theParam[3]); + typedef void (*TFun)(SUIT_ViewWindow* theStudyFrame, const CORBA::Double theParam[3]); TSet3DViewParamEvent (TFun theFun, - SUIT_ViewWindow* theViewWindow, + SUIT_ViewWindow* theStudyFrame, const CORBA::Double theParam[3]): myFun(theFun), - myVW(theViewWindow), + myViewWindow(theStudyFrame), myParam(theParam) {} - virtual void Execute() { - myFun(myVW,myParam); + virtual void Execute(){ + myFun(myViewWindow,myParam); } private: TFun myFun; - SUIT_ViewWindow* myVW; + SUIT_ViewWindow* myViewWindow; const CORBA::Double* myParam; }; - void View3D_i::SetPointOfView (SUIT_ViewWindow* theViewWindow, + void View3D_i::SetPointOfView (SUIT_ViewWindow* theStudyFrame, const CORBA::Double thePosition[3]) { //jfa: may be need to be enclosed in SALOME_Event? - GetCamera(theViewWindow)->SetPosition(thePosition); + GetCamera(theStudyFrame)->SetPosition(thePosition); } void View3D_i::SetPointOfView (const VISU::View3D::XYZ thePosition) { if(MYDEBUG) MESSAGE("View3D_i::SetPointOfView"); - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TSet3DViewParamEvent(&SetPointOfView,aVW,thePosition)); + ProcessVoidEvent(new TSet3DViewParamEvent(&SetPointOfView,myViewWindow,thePosition)); } - void View3D_i::GetPointOfView (SUIT_ViewWindow* theViewWindow, + void View3D_i::GetPointOfView (SUIT_ViewWindow* theStudyFrame, CORBA::Double thePosition[3]) { - GetCamera(theViewWindow)->GetPosition(thePosition); + //jfa: may be need to be enclosed in SALOME_Event? + GetCamera(theStudyFrame)->GetPosition(thePosition); } VISU::View3D::XYZ_slice* View3D_i::GetPointOfView() { + //jfa: may be need to be enclosed in SALOME_Event? if(MYDEBUG) MESSAGE("View3D_i::GetPointOfView"); CORBA::Double aPosition[3]; - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - GetPointOfView(aVW,aPosition); + GetPointOfView(myViewWindow,aPosition); return VISU::View3D::XYZ_dup(aPosition); } - void View3D_i::SetViewUp (SUIT_ViewWindow* theViewWindow, + void View3D_i::SetViewUp (SUIT_ViewWindow* theStudyFrame, const CORBA::Double theViewUp[3]) { - GetCamera(theViewWindow)->SetViewUp(theViewUp); + GetCamera(theStudyFrame)->SetViewUp(theViewUp); } void View3D_i::SetViewUp (const VISU::View3D::XYZ theViewUp) { if(MYDEBUG) MESSAGE("View3D_i::SetViewUp"); - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TSet3DViewParamEvent(&SetViewUp,aVW,theViewUp)); + ProcessVoidEvent(new TSet3DViewParamEvent(&SetViewUp,myViewWindow,theViewUp)); } - void View3D_i::GetViewUp (SUIT_ViewWindow* theViewWindow, + void View3D_i::GetViewUp (SUIT_ViewWindow* theStudyFrame, CORBA::Double theViewUp[3]) { - GetCamera(theViewWindow)->GetViewUp(theViewUp); + GetCamera(theStudyFrame)->GetViewUp(theViewUp); } VISU::View3D::XYZ_slice* View3D_i::GetViewUp() { + //jfa: may be need to be enclosed in SALOME_Event? if(MYDEBUG) MESSAGE("View3D_i::GetViewUp"); CORBA::Double aViewUp[3]; - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - GetCamera(aVW)->GetViewUp(aViewUp); + GetCamera(myViewWindow)->GetViewUp(aViewUp); return VISU::View3D::XYZ_dup(aViewUp); } - void View3D_i::SetFocalPoint (SUIT_ViewWindow* theViewWindow, + void View3D_i::SetFocalPoint (SUIT_ViewWindow* theStudyFrame, const CORBA::Double theFocalPnt[3]) { - GetCamera(theViewWindow)->SetFocalPoint(theFocalPnt); + GetCamera(theStudyFrame)->SetFocalPoint(theFocalPnt); } void View3D_i::SetFocalPoint (const VISU::View3D::XYZ theCoord) { if(MYDEBUG) MESSAGE("View3D_i::SetFocalPoint"); - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TSet3DViewParamEvent(&SetFocalPoint,aVW,theCoord)); + ProcessVoidEvent(new TSet3DViewParamEvent(&SetFocalPoint,myViewWindow,theCoord)); } - void View3D_i::GetFocalPoint (SUIT_ViewWindow* theViewWindow, + void View3D_i::GetFocalPoint (SUIT_ViewWindow* theStudyFrame, CORBA::Double theFocalPnt[3]) { - GetCamera(theViewWindow)->GetFocalPoint(theFocalPnt); + GetCamera(theStudyFrame)->GetFocalPoint(theFocalPnt); } VISU::View3D::XYZ_slice* View3D_i::GetFocalPoint() { + //jfa: may be need to be enclosed in SALOME_Event? if(MYDEBUG) MESSAGE("View3D_i::GetFocalPoint"); CORBA::Double aFocalPnt[3]; - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - GetFocalPoint(aVW,aFocalPnt); + GetFocalPoint(myViewWindow,aFocalPnt); return VISU::View3D::XYZ_dup(aFocalPnt); } class TSetViewParamEvent: public SALOME_Event { public: - typedef void (*TFun)(SUIT_ViewWindow* theViewWindow, CORBA::Double theParam); + typedef void (*TFun)(SUIT_ViewWindow* theStudyFrame, CORBA::Double theParam); TSetViewParamEvent (TFun theFun, - SUIT_ViewWindow* theViewWindow, + SUIT_ViewWindow* theStudyFrame, CORBA::Double theParam): myFun(theFun), - myVW(theViewWindow), + myViewWindow(theStudyFrame), myParam(theParam) {} virtual void Execute() { - myFun(myVW,myParam); + myFun(myViewWindow,myParam); } private: TFun myFun; - SUIT_ViewWindow* myVW; + SUIT_ViewWindow* myViewWindow; CORBA::Double myParam; }; - void View3D_i::SetParallelScale (SUIT_ViewWindow* theViewWindow, + void View3D_i::SetParallelScale (SUIT_ViewWindow* theStudyFrame, CORBA::Double theScale) { - GetCamera(theViewWindow)->SetParallelScale(theScale); + GetCamera(theStudyFrame)->SetParallelScale(theScale); } void View3D_i::SetParallelScale (CORBA::Double theScale) { if(MYDEBUG) MESSAGE("View3D_i::SetParallelScale"); - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - ProcessVoidEvent(new TSetViewParamEvent(&SetParallelScale,aVW,theScale)); + ProcessVoidEvent(new TSetViewParamEvent(&SetParallelScale,myViewWindow,theScale)); } - CORBA::Double View3D_i::GetParallelScale (SUIT_ViewWindow* theViewWindow) + CORBA::Double View3D_i::GetParallelScale (SUIT_ViewWindow* theStudyFrame) { - return GetCamera(theViewWindow)->GetParallelScale(); + return GetCamera(theStudyFrame)->GetParallelScale(); } CORBA::Double View3D_i::GetParallelScale() { + //jfa: may be need to be enclosed in SALOME_Event? if(MYDEBUG) MESSAGE("View3D_i::GetParallelScale"); - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) - return GetParallelScale(aVW); - return 1.0; + return GetParallelScale(myViewWindow); } - void View3D_i::ScaleView (SUIT_ViewWindow* theViewWindow, + void View3D_i::ScaleView (SUIT_ViewWindow* theStudyFrame, VISU::View3D::Axis theAxis, CORBA::Double theParam) { - SVTK_ViewWindow* aViewWindow = VISU::GetViewWindow(theViewWindow); + SVTK_ViewWindow* aViewFrame = GetViewWindow(theStudyFrame); double aScaleFactor[3]; - aViewWindow->GetScale(aScaleFactor); + aViewFrame->GetScale(aScaleFactor); aScaleFactor[theAxis] = theParam; - aViewWindow->SetScale(aScaleFactor); + aViewFrame->SetScale(aScaleFactor); } - void SetScaleView (SUIT_ViewWindow* theViewWindow, const CORBA::Double theScale[3]) + void SetScaleView (SUIT_ViewWindow* theStudyFrame, const CORBA::Double theScale[3]) { double aScale[3] = {theScale[0], theScale[1], theScale[2]}; - VISU::GetViewWindow(theViewWindow)->SetScale(aScale); + GetViewWindow(theStudyFrame)->SetScale(aScale); } void View3D_i::ScaleView(VISU::View3D::Axis theAxis, CORBA::Double theParam) { if(MYDEBUG) MESSAGE("View3D_i::ScaleView"); - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) { - double aScale[3]; - VISU::GetViewWindow(aVW)->GetScale(aScale); - aScale[theAxis] = theParam; - ProcessVoidEvent(new TSet3DViewParamEvent(&SetScaleView,aVW,aScale)); - } + double aScale[3]; + GetViewWindow(myViewWindow)->GetScale(aScale); + aScale[theAxis] = theParam; + ProcessVoidEvent(new TSet3DViewParamEvent(&SetScaleView,myViewWindow,aScale)); } void View3D_i::RemoveScale() { if(MYDEBUG) MESSAGE("View3D_i::RemoveScale"); - SUIT_ViewWindow* aVW = GetViewWindow(); - if (aVW) { - double aScale[3] = {1.0, 1.0, 1.0}; - ProcessVoidEvent(new TSet3DViewParamEvent(&SetScaleView,aVW,aScale)); - } + double aScale[3] = {1.0, 1.0, 1.0}; + ProcessVoidEvent(new TSet3DViewParamEvent(&SetScaleView,myViewWindow,aScale)); } } diff --git a/src/VISU_I/VISU_View_i.hh b/src/VISU_I/VISU_View_i.hh index 76b44da5..ae1f245b 100644 --- a/src/VISU_I/VISU_View_i.hh +++ b/src/VISU_I/VISU_View_i.hh @@ -49,8 +49,15 @@ namespace VISU public virtual Storable { public: + QWidget *myWorkspace; + SUIT_ViewWindow *myViewWindow; + + protected: + SalomeApp_Application *myApplication; + SUIT_ViewManager *myViewManager; + View_i (SalomeApp_Application *theApplication, - SUIT_ViewManager* theViewManager); + SUIT_ViewManager* theViewManager); virtual ~View_i(); public: @@ -108,18 +115,6 @@ namespace VISU virtual void Close() = 0; virtual void ToStream(std::ostringstream& theStr); virtual const char* GetComment() const; - - SUIT_ViewWindow* GetViewWindow(); - void SetViewWindow(SUIT_ViewWindow* theViewWindow); - - public: - QWidget *myWorkspace; - - SalomeApp_Application *myApplication; - SUIT_ViewManager *myViewManager; - - private: - SUIT_ViewWindow *myViewWindow; }; @@ -148,9 +143,9 @@ namespace VISU virtual CORBA::Long GetMarkerSize(); virtual void EnableXGrid (CORBA::Boolean theMajor, CORBA::Long theNumMajor, - CORBA::Boolean theMinor, CORBA::Long theNumMinor); + CORBA::Boolean theMinor, CORBA::Long theNumMinor); virtual void EnableYGrid (CORBA::Boolean theMajor, CORBA::Long theNumMajor, - CORBA::Boolean theMinor, CORBA::Long theNumMinor); + CORBA::Boolean theMinor, CORBA::Long theNumMinor); virtual void SetHorScaling (VISU::Scaling theScaling); virtual VISU::Scaling GetHorScaling(); @@ -172,11 +167,6 @@ namespace VISU virtual void Update(); virtual void FitAll(); - virtual void FitXRange(const CORBA::Double xMin,const CORBA::Double xMax); - virtual void FitYRange(const CORBA::Double yMin,const CORBA::Double yMax); - virtual void FitRange(const CORBA::Double xMin,const CORBA::Double xMax, - const CORBA::Double yMin,const CORBA::Double yMax); - virtual void GetFitRanges(double& xMin, double& xMax, double& yMin, double& yMax); virtual void Close(); protected: @@ -225,10 +215,10 @@ namespace VISU virtual void SetTitle (const char* theTitle); virtual char* GetTitle(); - static void SetBackground (SUIT_ViewWindow* theViewWindow, + static void SetBackground (SUIT_ViewWindow* theStudyFrame, const SALOMEDS::Color& theColor); - static SALOMEDS::Color GetBackground (SUIT_ViewWindow* theViewWindow); + static SALOMEDS::Color GetBackground (SUIT_ViewWindow* theStudyFrame); virtual void EraseAll(); virtual void DisplayAll(); @@ -241,54 +231,54 @@ namespace VISU virtual void FitAll(); virtual void SetView (VISU::View3D::ViewType theType); - static void SetPointOfView (SUIT_ViewWindow* theViewWindow, - const CORBA::Double thePosition[3]); + static void SetPointOfView (SUIT_ViewWindow* theStudyFrame, + const CORBA::Double thePosition[3]); virtual void SetPointOfView (const VISU::View3D::XYZ theCoord); - static void GetPointOfView (SUIT_ViewWindow* theViewWindow, - CORBA::Double thePosition[3]); + static void GetPointOfView (SUIT_ViewWindow* theStudyFrame, + CORBA::Double thePosition[3]); virtual VISU::View3D::XYZ_slice* GetPointOfView(); - static void SetViewUp (SUIT_ViewWindow* theViewWindow, - const CORBA::Double theViewUp[3]); + static void SetViewUp (SUIT_ViewWindow* theStudyFrame, + const CORBA::Double theViewUp[3]); virtual void SetViewUp (const VISU::View3D::XYZ theDir); - static void GetViewUp (SUIT_ViewWindow* theViewWindow, CORBA::Double theViewUp[3]); + static void GetViewUp (SUIT_ViewWindow* theStudyFrame, CORBA::Double theViewUp[3]); virtual VISU::View3D::XYZ_slice* GetViewUp(); - static void SetFocalPoint (SUIT_ViewWindow* theViewWindow, const CORBA::Double theFocalPnt[3]); + static void SetFocalPoint (SUIT_ViewWindow* theStudyFrame, const CORBA::Double theFocalPnt[3]); virtual void SetFocalPoint (const VISU::View3D::XYZ theCoord); - static void View3D_i::GetFocalPoint (SUIT_ViewWindow* theViewWindow, CORBA::Double theFocalPnt[3]); + static void View3D_i::GetFocalPoint (SUIT_ViewWindow* theStudyFrame, CORBA::Double theFocalPnt[3]); virtual VISU::View3D::XYZ_slice* GetFocalPoint(); - static void SetParallelScale (SUIT_ViewWindow* theViewWindow, CORBA::Double theScale); + static void SetParallelScale (SUIT_ViewWindow* theStudyFrame, CORBA::Double theScale); virtual void SetParallelScale (CORBA::Double theScale); - static CORBA::Double GetParallelScale (SUIT_ViewWindow* theViewWindow); + static CORBA::Double GetParallelScale (SUIT_ViewWindow* theStudyFrame); virtual CORBA::Double GetParallelScale (); - static void ScaleView (SUIT_ViewWindow* theViewWindow, - VISU::View3D::Axis theAxis, CORBA::Double theParam); + static void ScaleView (SUIT_ViewWindow* theStudyFrame, + VISU::View3D::Axis theAxis, CORBA::Double theParam); virtual void ScaleView (VISU::View3D::Axis theAxis, CORBA::Double theParam); virtual void RemoveScale(); - static std::string ToString (SUIT_ViewWindow* theViewWindow); + static std::string ToString (SUIT_ViewWindow* theStudyFrame); - static void ToStream (SUIT_ViewWindow* theViewWindow, std::ostringstream& theStr); + static void ToStream (SUIT_ViewWindow* theStudyFrame, std::ostringstream& theStr); static bool SaveViewParams (SUIT_ViewManager* theViewManager, - const char* theName); + const char* theName); virtual CORBA::Boolean SaveViewParams (const char* theName); static bool RestoreViewParams (SUIT_ViewManager* theViewManager, - const char* theName); + const char* theName); virtual CORBA::Boolean RestoreViewParams (const char* theName); static QString GenerateViewParamsName(); - static void Restore (SUIT_ViewWindow* theViewWindow, - const Storable::TRestoringMap& theMap); + static void Restore (SUIT_ViewWindow* theStudyFrame, + const Storable::TRestoringMap& theMap); virtual void Close(); diff --git a/src/VISU_SWIG/batchmode_visu_view3d.py b/src/VISU_SWIG/batchmode_visu_view3d.py index f5154355..0d41aa6d 100644 --- a/src/VISU_SWIG/batchmode_visu_view3d.py +++ b/src/VISU_SWIG/batchmode_visu_view3d.py @@ -50,7 +50,7 @@ aMeshName ="LE VOLUME" anEntity = VISU.NODE aTimeStampId = 1 -medFile = os.getenv('DATA_DIR') + '/MedFiles/' + medFile +medFile = os.getenv('KERNEL_ROOT_DIR') + '/examples/' + medFile myResult = myVisu.ImportFile(medFile) @@ -240,7 +240,7 @@ time.sleep(aDelay) medFile = "TimeStamps.med" myFieldName = "vitesse"; -medFile = os.getenv('DATA_DIR') + '/MedFiles/' + medFile +medFile = os.getenv('KERNEL_ROOT_DIR') + '/examples/' + medFile myResult = myVisu.ImportFile(medFile) anAnim = myVisu.CreateAnimation(myView); diff --git a/src/VISU_SWIG/visu_delete.py b/src/VISU_SWIG/visu_delete.py index d001d601..b73173ca 100644 --- a/src/VISU_SWIG/visu_delete.py +++ b/src/VISU_SWIG/visu_delete.py @@ -12,7 +12,7 @@ aMeshName ="LE VOLUME" anEntity = VISU.NODE aTimeStampId = 1 -medFile = os.getenv('DATA_DIR') + '/MedFiles/' + medFile +medFile = os.getenv('KERNEL_ROOT_DIR') + '/examples/' + medFile myResult = myVisu.ImportFile(medFile) aScalarMap = myVisu.ScalarMapOnField(myResult,aMeshName,anEntity,myFieldName,aTimeStampId) diff --git a/src/VISU_SWIG/visu_med.py b/src/VISU_SWIG/visu_med.py index 04715e52..2a5532ae 100644 --- a/src/VISU_SWIG/visu_med.py +++ b/src/VISU_SWIG/visu_med.py @@ -42,7 +42,7 @@ def getFieldObjectFromStudy(number,subnumber): med_comp = salome.lcc.FindOrLoadComponent("FactoryServer", "MED") -medDir = os.getenv('DATA_DIR') + '/MedFiles/' +medDir = os.getenv('KERNEL_ROOT_DIR') + '/examples/' def importMedFrom(medDir,medFile): medFile = medDir + medFile diff --git a/src/VISU_SWIG/visu_prs_example.py b/src/VISU_SWIG/visu_prs_example.py index 1453c5ad..84d65be4 100644 --- a/src/VISU_SWIG/visu_prs_example.py +++ b/src/VISU_SWIG/visu_prs_example.py @@ -22,7 +22,7 @@ import visu_gui myVisu = visu_gui.myVisu medFile = "pointe.med" -medFile = os.getenv('DATA_DIR') + '/MedFiles/' + medFile +medFile = os.getenv('KERNEL_ROOT_DIR') + '/examples/' + medFile print medFile studyCurrent = salome.myStudyName diff --git a/src/VISU_SWIG/visu_swig_test.py b/src/VISU_SWIG/visu_swig_test.py index 411e532e..9946faba 100644 --- a/src/VISU_SWIG/visu_swig_test.py +++ b/src/VISU_SWIG/visu_swig_test.py @@ -1,5 +1,5 @@ from libVISU_Swig import * -medFile = os.getenv('DATA_DIR') + '/MedFiles/fra.med' +medFile = os.getenv('KERNEL_ROOT_DIR') + '/examples/fra.med' myCon=Convertor(medFile) myPrs=ScalarMap(myCon,"LE VOLUME",0,"VITESSE",1) myView=View3D() diff --git a/src/VISU_SWIG/visu_view3d.py b/src/VISU_SWIG/visu_view3d.py index d1bf0721..be807a71 100644 --- a/src/VISU_SWIG/visu_view3d.py +++ b/src/VISU_SWIG/visu_view3d.py @@ -50,7 +50,7 @@ aMeshName ="LE VOLUME" anEntity = VISU.NODE aTimeStampId = 1 -medFile = os.getenv('DATA_DIR') + '/MedFiles/' + medFile +medFile = os.getenv('KERNEL_ROOT_DIR') + '/examples/' + medFile myResult = myVisu.ImportFile(medFile) @@ -247,7 +247,7 @@ time.sleep(aDelay) medFile = "TimeStamps.med" myFieldName = "vitesse"; -medFile = os.getenv('DATA_DIR') + '/MedFiles/' + medFile +medFile = os.getenv('KERNEL_ROOT_DIR') + '/examples/' + medFile myResult = myVisu.ImportFile(medFile) anAnim = myVisu.CreateAnimation(myView); diff --git a/src/VVTK/VVTK_Renderer.cxx b/src/VVTK/VVTK_Renderer.cxx index 142008d1..a54004e6 100644 --- a/src/VVTK/VVTK_Renderer.cxx +++ b/src/VVTK/VVTK_Renderer.cxx @@ -209,7 +209,7 @@ VVTK_Renderer1 { if(MYDEBUG) INFOS("VVTK_Renderer1() - "<SetPlaceFactor(1.1); + myImplicitFunctionWidget->SetPlaceFactor(1.0); myImplicitFunctionWidget->SetOutlineTranslation(false); vtkProperty* aSelectedPlaneProperty = myImplicitFunctionWidget->GetSelectedPlaneProperty(); vtkProperty* aPlaneProperty = myImplicitFunctionWidget->GetPlaneProperty(); -- 2.39.2