From b9114b43aa01d06f55dcf3f0a62df984e0cfc556 Mon Sep 17 00:00:00 2001 From: prascle Date: Mon, 3 Nov 2003 20:05:38 +0000 Subject: [PATCH] PR : merge branch V1_2c dans branche principale pour V1_3_0_b1 --- Makefile.in | 2 +- doc/DevelopersGuide/Makefile.in | 30 +- doc/html/INPUT/HTML/Logger.html | 4 + doc/html/INPUT/HTML/SALOMEDS.html | 24 +- doc/html/INPUT/HTML/SALOME_Component.html | 4 + doc/html/INPUT/HTML/SALOME_Session.html | 2 +- doc/html/INPUT/doxyfile | 16 +- doc/html/INPUT/sources/Application-About.png | Bin 7684 -> 19226 bytes doc/html/INPUT/sources/Application-About1.jpg | Bin 21548 -> 14327 bytes doc/html/INPUT/sources/application.gif | Bin 2584 -> 2602 bytes doc/html/INPUT/sources/application.jpg | Bin 4664 -> 792 bytes .../{bg_salomepro.gif => bg_salome.gif} | Bin doc/html/INPUT/sources/static/Link.gif | Bin 0 -> 13959 bytes doc/html/INPUT/sources/static/SObject.gif | Bin 0 -> 4966 bytes .../INPUT/sources/static/Study_Struct.gif | Bin 0 -> 5833 bytes .../INPUT/sources/{ => static}/doxygen.css | 2 +- .../INPUT/sources/static/examples_Kernel.html | 134 ++ .../sources/static/examples_Life_cycle.html | 116 ++ .../INPUT/sources/static/examples_Naming.html | 66 + .../INPUT/sources/static/examples_Study.html | 790 ++++++++ doc/html/INPUT/sources/static/mapping.html | 329 ++++ doc/html/INPUT/sources/static/ns_f3-1.jpg | Bin 0 -> 8650 bytes .../INPUT/sources/static/overview_Kernel.html | 191 ++ .../sources/static/overview_Life_Cycle.html | 90 + .../INPUT/sources/static/overview_Naming.html | 197 ++ .../INPUT/sources/static/overview_Study.html | 261 +++ doc/html/INPUT/sources/static/page2.html | 34 + doc/html/INPUT/sources/static/tree.js | 200 ++ doc/html/INPUT/sources/static/treeview.js | 505 +++++ doc/html/Makefile.in | 5 +- examples/Makefile.in | 33 + idl/Logger.idl | 1 + idl/SALOMEDS.idl | 382 +--- idl/SALOME_Component.idl | 4 +- idl/SALOME_Exception.idl | 14 +- idl/SALOME_ModuleCatalog.idl | 5 +- idl/SALOME_Session.idl | 5 +- salome_adm/unix/config_files/check_cas.m4 | 30 +- salome_adm/unix/make_commence.in | 24 +- salome_adm/unix/make_module.in | 9 + src/Container/Component_i.cxx | 109 +- src/Container/Container_i.cxx | 122 +- src/Container/SALOME_ComponentPy.py | 28 +- src/Container/SALOME_Component_i.hxx | 5 + src/Container/SALOME_Container.cxx | 84 +- .../SALOME_DataTypeCatalog_Server.cxx | 83 +- src/HDFPersist/HDFattrCreate.c | 4 + src/HDFPersist/HDFattrRead.c | 6 +- src/HDFPersist/HDFattrWrite.c | 19 +- src/HDFPersist/HDFdatasetCreate.c | 4 + src/HDFPersist/HDFdatasetGetType.c | 4 +- src/HDFPersist/HDFdatasetRead.c | 8 +- src/HDFPersist/HDFdatasetWrite.c | 23 +- src/HDFPersist/Makefile.in | 2 +- src/Loader/InquireServersQThread.cxx | 36 +- src/Logger/SALOME_Logger_Server.cxx | 89 +- src/Logger/SALOME_Logger_Server.hxx | 1 + src/Logger/SALOME_Trace.cxx | 62 +- src/Makefile.in | 5 +- .../SALOME_ModuleCatalog_Server.cxx | 83 +- src/NamingService/SALOME_NamingServicePy.py | 28 +- src/OBJECT/Makefile.in | 4 +- src/OBJECT/SALOME_Actor.cxx | 41 +- src/OBJECT/SALOME_Actor.h | 18 +- src/OBJECT/SALOME_Transform.cxx | 123 -- src/OBJECT/SALOME_Transform.h | 66 - src/OCCViewer/Makefile.in | 2 +- src/Plot2d/Makefile.in | 2 +- src/Plot2d/Plot2d_ViewFrame.cxx | 12 +- src/Registry/SALOME_Registry_Server.cxx | 189 +- .../SALOME_RessourcesCatalog_Server.cxx | 82 +- src/SALOMEDS/Makefile.in | 2 +- src/SALOMEDS/SALOMEDS_Server.cxx | 83 +- src/SALOMEGUI/CLIENT_msg_en.po | 2 +- src/SALOMEGUI/Makefile.in | 19 +- src/SALOMEGUI/QAD_Application.cxx | 4 +- src/SALOMEGUI/QAD_Desktop.cxx | 518 +++-- src/SALOMEGUI/QAD_Desktop.h | 21 +- src/SALOMEGUI/QAD_Message.cxx | 6 +- src/SALOMEGUI/QAD_ObjectBrowser.cxx | 5 + src/SALOMEGUI/QAD_PyEditor.cxx | 37 +- src/SALOMEGUI/QAD_ResourceMgr.cxx | 42 +- src/SALOMEGUI/QAD_RightFrame.cxx | 171 +- src/SALOMEGUI/QAD_icons.po | 9 - src/SALOMEGUI/QAD_msg_en.po | 39 +- src/SALOMEGUI/QAD_msg_fr.po | 12 - .../SALOMEGUI_ActivateComponentDlg.cxx | 79 + .../SALOMEGUI_ActivateComponentDlg.h | 35 + src/SALOMEGUI/SALOMEGUI_Application.cxx | 44 +- .../SALOMEGUI_ExternalBrowserDlg.cxx | 134 ++ src/SALOMEGUI/SALOMEGUI_ExternalBrowserDlg.h | 36 + src/SALOMEGUI/SALOMEGUI_msg_en.po | 44 + src/SALOME_PY/Makefile.in | 2 +- src/SALOME_PYQT/Makefile.in | 2 +- src/SALOME_SWIG/batchmode_salome.py | 125 ++ src/SALOME_SWIG/salome_test.py | 78 +- src/Session/Makefile.in | 2 +- src/Session/SALOME_Session_Server.cxx | 77 +- src/TOOLSDS/Makefile.in | 2 +- src/TOOLSGUI/Makefile.in | 2 +- src/TOOLSGUI/ToolsGUI_CatalogGeneratorDlg.cxx | 6 +- src/TestContainer/TestContainer.cxx | 77 +- src/VTKViewer/Makefile.in | 12 +- .../VTKViewer_InteractorStyleSALOME.cxx | 75 +- .../VTKViewer_InteractorStyleSALOME.h | 1 + src/VTKViewer/VTKViewer_RenderWindow.cxx | 3 +- .../VTKViewer_RenderWindowInteractor.cxx | 15 +- src/VTKViewer/VTKViewer_VectorText.cxx | 1747 +++++++++++++++++ src/VTKViewer/VTKViewer_VectorText.h | 67 + src/VTKViewer/VTKViewer_ViewFrame.cxx | 91 +- 110 files changed, 7058 insertions(+), 1521 deletions(-) rename doc/html/INPUT/sources/{bg_salomepro.gif => bg_salome.gif} (100%) create mode 100755 doc/html/INPUT/sources/static/Link.gif create mode 100755 doc/html/INPUT/sources/static/SObject.gif create mode 100755 doc/html/INPUT/sources/static/Study_Struct.gif rename doc/html/INPUT/sources/{ => static}/doxygen.css (97%) create mode 100755 doc/html/INPUT/sources/static/examples_Kernel.html create mode 100755 doc/html/INPUT/sources/static/examples_Life_cycle.html create mode 100755 doc/html/INPUT/sources/static/examples_Naming.html create mode 100755 doc/html/INPUT/sources/static/examples_Study.html create mode 100755 doc/html/INPUT/sources/static/mapping.html create mode 100755 doc/html/INPUT/sources/static/ns_f3-1.jpg create mode 100755 doc/html/INPUT/sources/static/overview_Kernel.html create mode 100755 doc/html/INPUT/sources/static/overview_Life_Cycle.html create mode 100755 doc/html/INPUT/sources/static/overview_Naming.html create mode 100755 doc/html/INPUT/sources/static/overview_Study.html create mode 100755 doc/html/INPUT/sources/static/page2.html create mode 100755 doc/html/INPUT/sources/static/tree.js create mode 100644 doc/html/INPUT/sources/static/treeview.js create mode 100644 examples/Makefile.in delete mode 100644 src/OBJECT/SALOME_Transform.cxx delete mode 100644 src/OBJECT/SALOME_Transform.h create mode 100644 src/SALOMEGUI/SALOMEGUI_ActivateComponentDlg.cxx create mode 100644 src/SALOMEGUI/SALOMEGUI_ActivateComponentDlg.h create mode 100644 src/SALOMEGUI/SALOMEGUI_ExternalBrowserDlg.cxx create mode 100644 src/SALOMEGUI/SALOMEGUI_ExternalBrowserDlg.h create mode 100644 src/VTKViewer/VTKViewer_VectorText.cxx create mode 100644 src/VTKViewer/VTKViewer_VectorText.h diff --git a/Makefile.in b/Makefile.in index 52b547b1e..2aeee3a55 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 salome_adm +SUBDIRS = idl src examples salome_adm RESOURCES_FILES = \ back.xpm \ diff --git a/doc/DevelopersGuide/Makefile.in b/doc/DevelopersGuide/Makefile.in index 03e3387ad..fc731be0a 100644 --- a/doc/DevelopersGuide/Makefile.in +++ b/doc/DevelopersGuide/Makefile.in @@ -1,11 +1,29 @@ - -# -* Makefile *- +# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +# # -# Author : Patrick GOLDBRONN (CEA) -# Date : 30/11/2001 -# $Header$ # -# source path +# File : Makefile.in +# Author : Patrick GOLDBRONN (CEA) +# Module : doc +# $Header$ + top_srcdir=@top_srcdir@ top_builddir=../.. srcdir=@srcdir@ diff --git a/doc/html/INPUT/HTML/Logger.html b/doc/html/INPUT/HTML/Logger.html index 83cfa74dd..1a73901c0 100644 --- a/doc/html/INPUT/HTML/Logger.html +++ b/doc/html/INPUT/HTML/Logger.html @@ -10,5 +10,9 @@
void putMessage ( in string message )
putMessage ( message )
+ +
void ping ( )
+
ping ( )
+
diff --git a/doc/html/INPUT/HTML/SALOMEDS.html b/doc/html/INPUT/HTML/SALOMEDS.html index 7a9c3d9e7..52291faa3 100644 --- a/doc/html/INPUT/HTML/SALOMEDS.html +++ b/doc/html/INPUT/HTML/SALOMEDS.html @@ -271,10 +271,18 @@
Save ( aStudy, theMultiFile )
+
void SaveASCII ( in Study aStudy, in boolean theMultiFile )
+
SaveASCII ( aStudy, theMultiFile )
+ +
void SaveAs ( in URL aUrl, in Study aStudy, in boolean theMultiFile )
SaveAs ( aUrl, aStudy, theMultiFile )
+
void SaveAsASCII ( in URL aUrl, in Study aStudy, in boolean theMultiFile )
+
SaveAsASCII ( aUrl, aStudy, theMultiFile )
+ +
ListOfOpenStudies GetOpenStudies ( )
return_value = GetOpenStudies ( )
@@ -539,10 +547,18 @@
return_value = Save ( theComponent, theURL, isMultiFile )
+
TMPFile SaveASCII ( in SComponent theComponent, in string theURL, in boolean isMultiFile )
+
return_value = SaveASCII ( theComponent, theURL, isMultiFile )
+ +
boolean Load ( in SComponent theComponent, in TMPFile theStream, in string theURL, in boolean isMultiFile )
return_value = Load ( theComponent, theStream, theURL, isMultiFile )
+
boolean LoadASCII ( in SComponent theComponent, in TMPFile theStream, in string theURL, in boolean isMultiFile )
+
return_value = LoadASCII ( theComponent, theStream, theURL, isMultiFile )
+ +
void Close ( in SComponent aSComponent )
Close ( aSComponent )
@@ -551,12 +567,12 @@
return_value = ComponentDataType ( )
-
string IORToLocalPersistentID ( in SObject theSObject, in string IORString, in boolean isMultiFile )
-
return_value = IORToLocalPersistentID ( theSObject, IORString, isMultiFile )
+
string IORToLocalPersistentID ( in SObject theSObject, in string IORString, in boolean isMultiFile, in boolean isASCII )
+
return_value = IORToLocalPersistentID ( theSObject, IORString, isMultiFile, isASCII )
-
string LocalPersistentIDToIOR ( in SObject theSObject, in string aLocalPersistentID, in boolean isMultiFile )
-
return_value = LocalPersistentIDToIOR ( theSObject, aLocalPersistentID, isMultiFile )
+
string LocalPersistentIDToIOR ( in SObject theSObject, in string aLocalPersistentID, in boolean isMultiFile, in boolean isASCII )
+
return_value = LocalPersistentIDToIOR ( theSObject, aLocalPersistentID, isMultiFile, isASCII )
boolean CanPublishInStudy ( in Object theIOR )
diff --git a/doc/html/INPUT/HTML/SALOME_Component.html b/doc/html/INPUT/HTML/SALOME_Component.html index 8bb1d3341..045775117 100644 --- a/doc/html/INPUT/HTML/SALOME_Component.html +++ b/doc/html/INPUT/HTML/SALOME_Component.html @@ -70,5 +70,9 @@
boolean Resume_impl ( )
return_value = Resume_impl ( )
+ +
long CpuUsed_impl ( )
+
return_value = CpuUsed_impl ( )
+
diff --git a/doc/html/INPUT/HTML/SALOME_Session.html b/doc/html/INPUT/HTML/SALOME_Session.html index 2b92ed086..804a067a9 100644 --- a/doc/html/INPUT/HTML/SALOME_Session.html +++ b/doc/html/INPUT/HTML/SALOME_Session.html @@ -11,7 +11,7 @@
GetInterface ( )
-
VISU_Gen GetVisuGen ( )
+
Component GetVisuGen ( )
return_value = GetVisuGen ( )
diff --git a/doc/html/INPUT/doxyfile b/doc/html/INPUT/doxyfile index 7d216e70c..57798114c 100755 --- a/doc/html/INPUT/doxyfile +++ b/doc/html/INPUT/doxyfile @@ -3,7 +3,7 @@ #--------------------------------------------------------------------------- # General configuration options #--------------------------------------------------------------------------- -PROJECT_NAME = "SALOME PRO v.1.2" +PROJECT_NAME = "SALOME v.1.2" PROJECT_NUMBER = id#1.1 OUTPUT_DIRECTORY = ../ OUTPUT_LANGUAGE = English @@ -61,7 +61,11 @@ INPUT = ../../../share/salome/idl/SALOME_ModuleCatalog.idl \ ../../../share/salome/idl/SALOME_Exception.idl \ ../../../share/salome/idl/SALOMEDS_Attributes.idl \ ../../../share/salome/idl/SALOME_Session.idl \ - ../../../share/salome/idl/SALOME_Component.idl + ../../../share/salome/idl/SALOME_Component.idl \ + ../../../share/salome/src/LifeCycleCORBA/SALOME_LifeCycleCORBA.hxx \ + ../../../share/salome/src/NamingService/SALOME_NamingService.hxx \ + ../../../share/salome/src/NamingService/SALOME_NamingService.cxx \ + ../../../share/salome/src/LifeCycleCORBA/SALOME_LifeCycleCORBA.cxx FILE_PATTERNS = RECURSIVE = NO EXCLUDE = @@ -101,11 +105,11 @@ GENERATE_HTMLHELP = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO -BINARY_TOC = NO -TOC_EXPAND = NO -DISABLE_INDEX = NO +BINARY_TOC = YES +TOC_EXPAND = YES +DISABLE_INDEX = YES ENUM_VALUES_PER_LINE = 4 -GENERATE_TREEVIEW = NO +GENERATE_TREEVIEW = YES TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output diff --git a/doc/html/INPUT/sources/Application-About.png b/doc/html/INPUT/sources/Application-About.png index 80e0bcb063acf425fa1001d39beea368bb4497a3..7b58330d50856e28562e8f9ed80dae72d6e6dda3 100755 GIT binary patch literal 19226 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

5r3>=?gKv-6#gF2kVYm^Euk4pDx%bDo{L~m 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 diff --git a/doc/html/INPUT/sources/Application-About1.jpg b/doc/html/INPUT/sources/Application-About1.jpg index b8f2cfb6da8aa2f60922b1c60f642ce9e1eebab5..cf7ab8ba025d6bd9212f8bd5681e77d1aaef8e4f 100755 GIT binary patch literal 14327 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 Ao&W#< literal 21548 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 diff --git a/doc/html/INPUT/sources/application.gif b/doc/html/INPUT/sources/application.gif index 10da488d2dcf2a063029d868686e1882e45487ab..0b05d5c18ee88779d283508781836e2b151f606f 100644 GIT binary patch literal 2602 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 diff --git a/doc/html/INPUT/sources/application.jpg b/doc/html/INPUT/sources/application.jpg index 6d3b6a0a8c281dca8747fdd34b4d4de0f737c4a3..a6979ab9999552ccb91a0358f75103b09db5246c 100755 GIT binary patch literal 792 zcmex=LJ%Z3brs z4mLJ+HdYRHc6Lrq4lW)MULJ049!Vi#ei2zIc{y1r85so?J#_^o9c39A4RcK$149!N z6M1z@TMHu_J!2CikRgnmoSZz|JQBRT5=M$Libf=Z{|6WZIT%D3%$OOK7?=bZnFSgD zA7PMUU}Rthc>@7h+1MFbn1ONz0t}4I%#5t;OzcouMkZz!23A2KHbq0nKw(j(pu~w6 z3mZjLjGdA<9t7%;U}RuoMwkR-0lADUKp6!=1|~)pMph(AMnRxyib95giG>^g-(uil z25J^$7G$tz*b}$dob931la92ii?S2$h#I_dt2w(?+0U=MwPfirm!)r|%QL=xciqQ* zvhOkDlnJl1?mV9H$SWkchmTWj{f7p#7YBO!PTF5sw@#T`LbrdbWo*ZV_O$5xlkGCE z^PPVyNw8xApK>WbnDiuj&ts=vwm~?+7XwjY*R$0pI#j4 zw{W$hO=am?)v#v=Y$tVvo>o`d(V^*ixTv>ZZDX3QFXcToO*@xTm3CIa<27tEIc#! zWx8M8?h`8_qqEtJR5Yui4EIMazr(xByvXzMzf0?$2CWRax^UXZS*s@%RlmEiXqi&U zv6PDAY{#9wTC9VfKD+s&O=r4T6dx~>x9e7&gdYvo8^51ls#!DPMamTK%`aPJ6?q?+ z%yVDxb^Z406Q4}q)Ma`pwL@9=KH2nE%g+j0$PN+6w!7WCc0S)@-fuIzZ#hkAx*44E xJV2p&e;fZ&&B#yDAuHbPYtLW(<#g|%_lh@oH9azfmdriy#cs<|Z3p)MHvxBP8gc*t literal 4664 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 XJGIWw3pUly>lLb4Wn_sb)B64kGG>E? diff --git a/doc/html/INPUT/sources/bg_salomepro.gif b/doc/html/INPUT/sources/bg_salome.gif similarity index 100% rename from doc/html/INPUT/sources/bg_salomepro.gif rename to doc/html/INPUT/sources/bg_salome.gif diff --git a/doc/html/INPUT/sources/static/Link.gif b/doc/html/INPUT/sources/static/Link.gif new file mode 100755 index 0000000000000000000000000000000000000000..75330d0c82be86f95a77075a906d8fb6b4af6e72 GIT binary patch literal 13959 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 M)V!}C!ol$TKY@nC6951J literal 0 HcmV?d00001 diff --git a/doc/html/INPUT/sources/static/SObject.gif b/doc/html/INPUT/sources/static/SObject.gif new file mode 100755 index 0000000000000000000000000000000000000000..1d4e9cb24adb525809f8e97a21e96ecdafd4c11b GIT binary patch literal 4966 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 literal 0 HcmV?d00001 diff --git a/doc/html/INPUT/sources/static/Study_Struct.gif b/doc/html/INPUT/sources/static/Study_Struct.gif new file mode 100755 index 0000000000000000000000000000000000000000..bc0ce35be243b94242ac361985adf86c250a071e GIT binary patch literal 5833 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 literal 0 HcmV?d00001 diff --git a/doc/html/INPUT/sources/doxygen.css b/doc/html/INPUT/sources/static/doxygen.css similarity index 97% rename from doc/html/INPUT/sources/doxygen.css rename to doc/html/INPUT/sources/static/doxygen.css index 6e2c772fe..0a8e93d50 100755 --- a/doc/html/INPUT/sources/doxygen.css +++ b/doc/html/INPUT/sources/static/doxygen.css @@ -15,7 +15,7 @@ TD.mdname1 { background-color: lightblue; font-weight: bold; color: #602020; } TD.mdname { background-color: lightblue; font-weight: bold; color: #602020; width: 600px; } DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold } DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller } -BODY { background: url(sources/bg_salomepro.gif) } +BODY { background: url(sources/bg_salome.gif) } TD.indexkey { background-color: #CCCCCC; font-weight: bold; diff --git a/doc/html/INPUT/sources/static/examples_Kernel.html b/doc/html/INPUT/sources/static/examples_Kernel.html new file mode 100755 index 000000000..beb74ae4f --- /dev/null +++ b/doc/html/INPUT/sources/static/examples_Kernel.html @@ -0,0 +1,134 @@ + + + + + + + + Main Page + + + + +   +
+ + + + + + + + +
+ + +
+
+ +

Examples

+ Package SALOME_ModuleCatalog
+
+      interface SALOME_ModuleCatalog::ModuleCatalog
+
+Package SALOME
+
+   
interface SALOME::Session
+
+Package Engines
+   

+    interface Engines::Container
+

+   
+   

+
+
    SALOME_ModuleCatalog::ModuleCatalog interface +
+
+
+

+
+

+Acomponent +GetComponent (in string componentname)
+
+See the example below
+
+
+
+
SALOME::Session interface

+

+
+GetInterface (), StopSession () raises (GUIActive, RunningStudies)
+
+Stop session and restart GUI application:
+
+mySession.StopSession()
+
+mySession.GetInterface()
+
+
+
Engines::Container +interface
+
+
+
Component +load_impl (in string nameToRegister, in string componentName)
+
+Load component with defined component name:
+
+compinfo = module_catalog.GetComponent(componentName)
+
+ try:
+    machineName = theComputer # name of machine
+    path = compoinfo.GetPathPrefix(machineName) + "/"
+ except SALOME_ModuleCatalog.NotFound, ex:
+    MESSAGE( "machine " + machineName + " not found in Module +Catalog" )
+    MESSAGE( "trying localhost" )
+    try:
+    path = compoinfo.GetPathPrefix("localhost") + "/"
+    except SALOME_ModuleCatalog.NotFound, ex:
+    path = ""
+
+implementation = path + "lib" + componentName + "Engine.so"
+MESSAGE( "Trying to load " + implementation )
+
+ try:
+
    component = container.load_impl(componentName, +implementation) # Loads into the container a new component, registers +it and starts it's CORBA servant.
+
+    MESSAGE( "component " + component._get_instanceName() ++ " launched !" )
+    return component
+except:
+    MESSAGE( "component " + componentName + " NOT launched +!" )
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/doc/html/INPUT/sources/static/examples_Life_cycle.html b/doc/html/INPUT/sources/static/examples_Life_cycle.html new file mode 100755 index 000000000..8d36282f6 --- /dev/null +++ b/doc/html/INPUT/sources/static/examples_Life_cycle.html @@ -0,0 +1,116 @@ + + + + + + + + Main Page + + + + +   +
+ + + + + + + + +
+ + +
+
+ +

Examples

+ //There is a CXX example of LifeCycleCORBA using
+

+#include CORBA_CLIENT_HEADER(TestComponent)
+#include "SALOME_NamingService.hxx"
+#include "SALOME_LifeCycleCORBA.hxx"
+
+int main (int argc, char * argv[]){
+  try {
+      // Initializing omniORB
+
      CORBA::ORB_var orb = CORBA::ORB_init(argc, +argv);
+   
+      // Obtain a reference +to the root POA
+
      CORBA::Object_var obj = orb->resolve_initial_references("RootPOA") +;
+      PortableServer::POA_var poa = PortableServer::POA::_narrow(obj) +;
+   
+      SALOME_NamingService _NS(orb) ;
+
+      SALOME_LifeCycleCORBA _LCC(&_NS) ;
+
+      Engines::Component_var myComponent = _LCC.FindOrLoad_Component("FactoryServerPy","TestComponentPy");
+       if(!CORBA::is_nil(myComponent)){
+          Engines::TestComponent_var +myConcreateComponent = TestComponent::_narrow(myComponent);
+          //do something +what you like with the interface
+          ...
+
          return 0;
+       }
+    }
+  catch(CORBA::COMM_FAILURE& ex){
+      cout<<"Caught system exception COMM_FAILURE +-- unable to contact the object.\n";
+  }catch(CORBA::SystemException&){
+      cout<<"Caught a CORBA::SystemException.\n";
+  }catch(CORBA::Exception&){
+      cout<<"Caught CORBA::Exception.\n";
+  }catch(...){
+      cout<<"Caught unknown exception.\n";
+  }
+  return 1;
+}
+
+#The example may be rewritten on Python like this:
+

+from omniORB import CORBA
+from SALOME_TestComponent import *
+from SALOME_NamingServicePy import *
+from LifeCycleCORBA import *
+
+try:
+    orb = CORBA.ORB_init(sys.argv,CORBA.ORB_ID)
+    _NS = SALOME_NamingService(orb)
+    _LCC = SALOME_LifeCycleCORBA(orb)
+
+     myComponent = _LCC.FindOrLoadComponent("FactoryServerPy","TestComponentPy");
+     myConcreatComponent = myComponent._narrow(TestComponent)
+    if myConcreatComponent is not None :
+        //do something what you like with the +interface
+         ...
+
        return 0
+    }
+except CosNaming.NamingContext.NotFound, e :
+    print "Caught exception: Naming Service can't found Logger"
+except CORBA.COMM_FAILURE, e:
+    print "Caught CORBA::SystemException CommFailure"
+except CORBA.SystemException, e:
+    print "Caught CORBA::SystemException."
+except CORBA.Exception, e:
+    print "Caught CORBA::Exception."
+except Exception, e:
+    print "Caught unknown exception."
+  
+
+
+ + diff --git a/doc/html/INPUT/sources/static/examples_Naming.html b/doc/html/INPUT/sources/static/examples_Naming.html new file mode 100755 index 000000000..ac08a6753 --- /dev/null +++ b/doc/html/INPUT/sources/static/examples_Naming.html @@ -0,0 +1,66 @@ + + + + + + + + Main Page + + + + +   +
+ + + + + + + + +
+ + +
+
+ +

Examples

+ #There is a python example of using SALOME_NamingService
+

+from omniORB import CORBA
+from time import sleep
+from LifeCycleCORBA import *
+from SALOME_NamingServicePy import *
+
+# initialise the ORB
+
orb = CORBA.ORB_init([''], CORBA.ORB_ID)
+
+# create an LifeCycleCORBA instance
+
myLifeCycleCORBA = LifeCycleCORBA(orb)
+
+#create a naming service instance
+
naming_service = SALOME_NamingServicePy_i(orb)
+
+mySession = myNamingService.Resolve("/Kernel/Session")
+mySession.GetInterface()
+sleep(10)
+myLocalVisu = myLifeCycleCORBA.FindOrLoadComponent("FactoryServer", "Visu")
+
+
+//There is some part of a code written by C++
+

+SALOME_NamingService aNamingService(orb);
+CORBA::Object_ptr anObject = aNamingService.Resolve("/Kernel/Session");
+SALOME::Session_var aSession = SALOME::Session::_narrow(anObject);
+Engines::Component_var aComponent = aSession->GetVisuGen();
+myVisuGen = VISU::VISU_Gen::_narrow(aComponent);
+
+ + diff --git a/doc/html/INPUT/sources/static/examples_Study.html b/doc/html/INPUT/sources/static/examples_Study.html new file mode 100755 index 000000000..31ccaffa5 --- /dev/null +++ b/doc/html/INPUT/sources/static/examples_Study.html @@ -0,0 +1,790 @@ + + + + + + + + Main Page + + + + +   +
+ + + + + + + + +
+ + +
+
+ +

Examples

+
+
+ +
      Interfaces:
+
+       SALOMEDS::Study
+       SALOMEDS::StudyBuilder
+       SALOMEDS::StudyManager
+       SALOMEDS::SObject
+      SALOMEDS::SComponent
+       SALOMEDS::SComponentIterator
+       SALOMEDS::ChildIterator
+
      SALOMEDS::AttributeComment
+      
+
+
+
+
+ +
      SALOMEDS::Study interface
+
+ +

+
+
+
+
SComponent FindComponent( +in string aComponentName )
+
+ Find GEOMETRY component in the opened study by its name:

+
+     str= os.getenv("TmpDir")
+     if str == None:
+         str = "/tmp"
+     file = str+"/test.hdf"
+
+     openedStudy=batchmode_geompy.myStudyManager.Open(file)
+
+     father = openedStudy.FindComponent("GEOM")
+     if father is None:
+          raise  RuntimeError, "Geom + component is not found!  Wrong study is opened."
+
+
+
+ +
SObject FindObject ( in string +anObjectName )
+
+ Find the SObject of the box by its NameAttribute "box":
+
+ +

+
+ +
box = openedStudy.FindObject("box")
+ if box is None :
+     raise  RuntimeError, "box was not found! Wrong +study is opened."
+
+
+ SObject FindObjectID + ( in ID aObjectID +)
+ #result: "/User data/Case1".
+
Find + the SObject of the box by its ID "0:1:1:2":
+
+
+ +
box =openedStudy.FindObjectID("0:1:1:2")
+
+ +
if box is None :
+     raise  RuntimeError, "box was not found! Wrong +ID is used."
+
+
+ SObject FindObjectIOR + ( in ID  aObjectIOR +)
+
+ Find the SObject of the result on imported MED file +by it's IOR:
+
+ theResult = myVisu.ImportFile(medFile)
+ aSObj = myStudy.FindObjectIOR(theResult.GetID())
+
+
+ SObject + FindObjectByPath ( in string thePath )
+
+ Find SObject by path to it:
+
+ # create new auxiliary componen
t
+ aComponent = myStudyBuilder.NewComponent("Virtual Component")
+
+ # create auxiliary subtree
+ aPath = "/Virtual Component/Case1"
+ myStudyBuilder.AddDirectory(aPath)
+
+ aSObj = myStudy.FindObjectByPath(aPath)
+
+
+ void SetContext ( in string thePath) / + string GetContext ()
+
+ Set context of the study to the created case and get it for printing:
+
+ aComponent = myStudyBuilder.NewComponent("User data")
+ anAttr = aBuilder.FindOrCreateAttribute(aComponent, "AttributeName")
+ anAttrName = anAttr._narrow(SALOMEDS.AttributeName)
+ anAttrName.SetValue("User data")
+
+ #Add a new case 'Case1' to the component 'User data'
+ aBuilder.AddDirectory("/User data/Case1")
+
+ #Set a study context to '/User data/Case1'
+ aStudy.SetContext("/User data/Case1")
+
+ #Print the current study context
+ print aStudy.GetContext()
+
+
#result: "/User data/Case1".

+
+
+ ChildIterator + NewChildIterator ( in SObject aSO )
+
+ Import med file and print all mesh names that this file includes +(mesh is a child of the result of imported file):
+
+ # define file name
+ aFileName = datadir + "fra.med"
+
+ # import file in visu module and get result
+ theVisu = batchmode_visu.myVisu
+ aResult = theVisu.ImportFile(aFileName)
+ if aResult is None : raise RuntimeError, "Error"
+ else : print "OK"
+  
+ # get current study and its' SObject        +
+ myLocalStudy = theVisu.GetCurrentStudy()
+ aSObj = myLocalStudy.FindObjectIOR(aResult.GetID())
+ if aSObj is None : raise RuntimeError, "Error"
+ else : print "OK"
+
+ # create iterator by SObject of the current study
+ aMeshIter = myLocalStudy.NewChildIterator(aSObj);
+
+ # iterating in the current study (with the help of created iterator) +to find all mesh names  
+ while aMeshIter.More() :
+         aMeshSObj = aMeshIter.Value()
+         aMeshIter.Next()
+         anAttr = aMeshSObj.FindAttribute("AttributeName")[1]
+         if anAttr is None :
+             aMeshSObj + = aMeshIter.Value()
+             aMeshIter.Next()
+             anAttr + = aMeshSObj.FindAttribute("AttributeName")[1]
+         anAttr = anAttr._narrow(SALOMEDS.AttributeName);
+         aMeshName = anAttr.Value()
+         print "  ", aMeshName
+
+
+ SComponentIterator +NewComponentIterator ()
+
+ Find the number an names of all components in the study:
+
+ aCompItr = myStudy.NewComponentIterator()
+
+ compNb = 0
+ while aCompItr.More():
+     aComp = aCompItr.Value()
+     aName = aComp.ComponentDataType()
+     print "Component name = ", aName
+     compNb += 1
+     aCompItr.Next()
+
+
+ StudyBuilder +NewBuilder ()
+
+
+
+ Create a new StudyBuilder (uses to add or modify an object in the +study ):
+
+ myBuilder = myStudy.NewBuilder()
+
+
+ AttributeStudyProperties +GetProperties ()
+
+ Get the attribute, which contains the properties of the study, and +change properties of the study by changing it:
+
+ aProperties = myStudy.GetProperties()
+ if aProperties == None :
+     raise  RuntimeError, "Can't create AttributeStudyProperties +attribute"
+ aProperties = aProperties._narrow(SALOMEDS.AttributeStudyProperties)
+
+ A = aProperties
+
+ # print stydy properties
+ print "A.GetUserName()= ", A.GetUserName()
+ res,mm,hh,dd,mnth,yy=A.GetCreationDate()
+ print "A.GetCreationDate() = ", mm,hh,dd,mnth,yy
+ print "A.GetCreationMode() = ", A.GetCreationMode()
+ print "A.IsModified() = ", A.IsModified()
+ print "A.IsLocked() = ", A.IsLocked()
+
+ # change the properties of the study
+ if A.IsLocked() == 0 :
+     A.SetUserName("tester"); print 'A.SetUserName("tester"), +A.GetUserName() = ', A.GetUserName()
+     A.SetCreationDate(11,11,11,11,2002); print 'A.SetCreationDate(11,11,11,11,2002), +A.GetCreationDate() =', A.GetCreationDate()
+     print "A.IsModified() = ", A.IsModified()
+ A.SetLocked(1)
+
+
+ boolean IsModified ()
+
+ Find if study is modified:
+
+ IsModified = myStudy.IsModified()
+
+ if IsModified == 1:
+     print "The study is modified and not saved"
+
+
+ boolean IsEmpty ()
+
+ Find if study is empty:
+
+ IsEmpty = myStudy.IsEmpty()
+
+ if IsEmpty == 1:
+     print "The study is empty"
+
+
+
+
+ +
SALOMEDS::StudyBuilder +interface
+
+
+
+
+ SComponent +NewComponent ( in string ComponentDataType )
+
+ Create Geometry SComponent:
+
+ myBuilder = myStudy.NewBuilder()
+ father = myBuilder.NewComponent("GEOM")
+
+
+ void DefineComponentInstance ( in SComponent aComponent, +in Object ComponentIOR )

+
+ Define the instance to the created geometry component:
+
+ # find geom component
+ myLCC = batchmode_salome.lcc
+ geom = myLCC.FindOrLoadComponent("FactoryServer", "Geometry")
+ geom = geom._narrow(GEOM.GEOM_Gen)
+ geom.GetCurrentStudy(myStudyId)
+
+ myBuilder = myStudy.NewBuilder()
+
+ father = myBuilder.NewComponent("GEOM")
+ myBuilder.DefineComponentInstance(father,geom)
+
+
+ SObject +NewObject ( in SObject theFatherObject +)
+
+ Create box and add it to study:
+
+ from batchmode_geompy import *
+
+ # create a box
+ box = geom.MakeBox(0,0,0,100,100,150)
+
+ ior = orb.object_to_string(box)
+ box._set_Name(ior)     
+
+ # create Geometry SComponent
+ father = myBuilder.NewComponent("GEOM")
+ A1 = myBuilder.FindOrCreateAttribute(father, "AttributeName");
+ FName = A1._narrow(SALOMEDS.AttributeName)
+ FName.SetValue("Geometry")
+ myBuilder.DefineComponentInstance(father,geom)
+
+ # add box to Study
+ myBuilder.NewCommand()
+ newObj = myBuilder.NewObject(father)
+ A1 = myBuilder.FindOrCreateAttribute(newObj, "AttributeIOR");
+ ObjIOR = A1._narrow(SALOMEDS.AttributeIOR)
+ ObjIOR.SetValue(ior)
+ A2 = myBuilder.FindOrCreateAttribute(newObj, "AttributeName");
+ ObjName = A2._narrow(SALOMEDS.AttributeName)
+ ObjName.SetValue("Common_operation")
+ id = newObj.GetID()
+ box._set_StudyShapeId(id)
+ myBuilder.CommitCommand()
+
+
+ void RemoveObject ( in SObject anObject )
+
+ # Remove CutPlanes SObject from the StudyBuilder (delete cutplanes):
+
+ SObj=myStudy.FindObjectIOR(cutplanes.GetID())
+ myBuilder = newStudy.NewBuilder()
+ myBuilder.RemoveObject(SObj)
+
+
+ void LoadWith ( in SComponent sco, in +Driver Engine +) raises (SALOME::SALOME_Exception)

+
+ # Load Visu component:
+
+ myBuilder = openedStudy.NewBuilder()
+ SCom=openedStudy.FindComponent("VISU")
+ myBuilder.LoadWith(SCom ,myVisu)
+
+
+ GenericAttribute +FindOrCreateAttribute ( in SObject anObject,  +in string aTypeOfAttribute)
+
+ Create AttributeName attribute for created component an set value +to it:
+
+ myBuilder = myStudy.NewBuilder()
+ aComponent = myBuilder.NewComponent("User data")
+
+ anAttr = myBuilder.FindOrCreateAttribute(aComponent, "AttributeName")
+
+ anAttrName = anAttr._narrow(SALOMEDS.AttributeName)
+ anAttrName.SetValue("User data")
+
+
+ boolean FindAttribute ( in SObject anObject, out GenericAttribute +anAttribute, in string aTypeOfAttribute )
+
+
Find AttributeName attribute of the field and print the +field name:
+
+ aFieldSObj  = myStudy.FindObject("Head, -")
+
+ myStudyBuilder.FindAttribute( aFieldSObj, anAttr, "AttributeName")
+ if res == 0:
+     raise  RuntimeError, "Error:  Attribute not +found"
+
+ anAttr = anAttr._narrow(SALOMEDS.AttributeName);
+ aFieldName = anAttr.Value()
+ print "      ", aFieldName
+
+
+ void RemoveAttribute ( in SObject anObject, in +string aTypeOfAttribute )
+
+
Remove AttributeSelectable attribute of the field SObject:
+
+
aFieldSObj  = myStudy.FindObject("Head, -")
+
+ myStudyBuilder.RemoveAttribute( aFieldSObj, "AttributeSelectable")
+
+
+
void Addreference ( in  SObject +anObject, in  SObject theReferencedObject +)

+
+ Create a reference between created SObject and the existing field:
+
+ aFieldSObj  = myStudy.FindObject("Head, -")
+ aNewSObj = myBuilder.NewObject(myVisu)
+
+ myBuilder.Addreference(aFieldSObj, aNewSObj)
+
+
+
void +NewCommand ()
+
+
Create new command wich containes actions for changing the +properties of the study:
+
+
A = myStudy.GetProperties()
+ A = aProperties._narrow(SALOMEDS.AttributeStudyProperties)
+
+ myBuilder = myStudy.NewBuilder()
+
+ myBuilder.NewCommand() # creates a new command
+
+ # change the properties of the study
+ if A.IsLocked() == 0 :
+     A.SetUserName("tester"); print 'A.SetUserName("tester"), +A.GetUserName() = ', A.GetUserName()
+     A.SetCreationDate(11,11,11,11,2002); print 'A.SetCreationDate(11,11,11,11,2002), +A.GetCreationDate() =', A.GetCreationDate()
+     print "A.IsModified() = ", A.IsModified()
+ A.SetLocked(1)
+
+
myBuilder.CommitCommand() # commits all actions declared +within the created command
+
+
+ void CommitCommand()
+

+
See the end of the previous example
+
+
+ void AbortCommand ()

+
+ Create new command wich containes actions for changing +the properties of the study, cancel all declared actions:
+
+ A = myStudy.GetProperties()
+ A = aProperties._narrow(SALOMEDS.AttributeStudyProperties)
+
+ myBuilder = myStudy.NewBuilder()
+
+ myBuilder.NewCommand() # creates a new command
+
+ # change the properties of the study
+ if A.IsLocked() == 0 :
+     A.SetUserName("tester"); print 'A.SetUserName("tester"), +A.GetUserName() = ', A.GetUserName()
+     A.SetCreationDate(11,11,11,11,2002); print 'A.SetCreationDate(11,11,11,11,2002), +A.GetCreationDate() =', A.GetCreationDate()
+     print "A.IsModified() = ", A.IsModified()
+ A.SetLocked(1)
+
+
myBuilder.AbortCommand() # abort all actions declared +within the created command
+
+
+ void Undo () raises (LockProtection) +,
+ void Redo () raises (LockProtection)
+
+ Create new command wich containes actions for changing +the properties of the study,
+ cancel all declared actions and then redo it with the help of undo/redo +mechanism:

+
+ A = myStudy.GetProperties()
+ A = aProperties._narrow(SALOMEDS.AttributeStudyProperties)
+
+ myBuilder = myStudy.NewBuilder()
+
+ myBuilder.NewCommand() # creates a new command
+
+ # change the properties of the study
+ if A.IsLocked() == 0 :
+     A.SetUserName("tester"); print 'A.SetUserName("tester"), +A.GetUserName() = ', A.GetUserName()
+     A.SetCreationDate(11,11,11,11,2002); print 'A.SetCreationDate(11,11,11,11,2002), +A.GetCreationDate() =', A.GetCreationDate()
+     print "A.IsModified() = ", A.IsModified()
+ A.SetLocked(1)
+
+
myBuilder.CommitCommand() # commits all actions declared +within the created command
+
+
myBuilder.Undo() # cancels all actions of the command
+
+
myBuilder.Redo() # redoes all actions of the command
+
+
+
+
+
SALOMEDS::StudyManager +interface
+
+
+
+
+
Study +NewStudy ( in string study_name )
+
+ Create the study with the name "Test_Study":

+
+ myNewStudy = myStudyManager.NewStudy("Test_Study")
+
+
+ Study Open +( in URL +aStudyUrl ) raises (SALOME::SALOME_Exception)
+
+ Open the study saved in the HDF file:
+
+ file = 'saved_study.hdf'
+
+ openedStudy=myStudyManager.Open(file)
+
+ if openedStudy == None:
+     raise  RuntimeError, "Can't open saved study!"
+
+
+ void Save (in Study aStudy, in boolean +theMultifile )
+
+
Open study, import med file into it and save with the old +path and filename:
+
+
file = "saved_study.hdf"
+ myMedFile ="medfile.med"
+
+ openedStudy=myStudyManager.Open(file)
+
+ myVisu.SetCurrentStudy(openedStudy)
+ myResult = myVisu.ImportFile(myMedFile)
+
+ myStudyManager.Save(openedStudy, 0)
+
+
+ void SaveAs ( in URL +aUrl, in  Study aStudy, + 
in boolean theMultifile +)
+
+ Open study from the file and resave it in several files (using +Multifile option while saving)
+
+
file = "saved_study.hdf"
+ newfile = "resaved_study.hdf"
+
+ openedStudy=myStudyManager.Open(file)
+ myStudyManager.SaveAs(newfile, openedStudy, 1)
+
+
+ void Close ( in  Study aStudy )

+
+ Close just opened study:
+
+ file = "saved_study.hdf"
+
+ openedStudy=myStudyManager.Open(file)
+ myStudyManager.Close(openedStudy)
+
+
+
+ +
SALOMEDS::SObject interface
+
+
+
+
+ ID GetID ()
+
+ Create new SObject and get its ID:
+
+ mySObj = myBuilder.NewObject(myFather)
+
+ myID =  mySObj.GetID()
+
+
+ SComponent +GetFatherComponent ()
+
+ Get father component of the SObject:
+
+ myFather = mySObj.GetFatherComponent();
+
+
+ boolean FindAttribute ( out GenericAttribute anAttribute, +in string aTypeOfAttribute )
+
+ Find the AttributeName attribute of the field:
+
+ aFieldSObj  = myStudy.FindObject("Head, -")
+
+ res = aFieldSObj.FindAttribute( anAttr, "AttributeName")
+ if res == 0:
+     raise  RuntimeError, "Error:  Attribute not +found"
+
+
+ ListOfAttributes +GetAllAttributes ()
+
+ Get list of all attributes of the SObject, find the number of attributes:
+
+ attrs = mySObj.GetAllAttributes()
+ aLen = len(attrs) # number of attributes
+
+
+
+
+ +
SALOMEDS::SComponent interface
+
+
+
+
+ string ComponentDataType ()
+
+ Print names of all components wich +the study contains:
+
+ aCompItr = myStudy.NewComponentIterator()
+
+ while aCompItr.More():
+     aComp = aCompItr.Value()
+     aName = aComp.ComponentDataType()
+     print "Component name = ", aName
+     aCompItr.Next()
+
+
+ Other methods are inherited.
+
+
+
+
+ +
SALOMEDS::SComponentIterator + interface
+
+
+
+
+ boolean More (), void Next (), SComponent Value +()
+
+ See another +example
+
+   
+
+ +
SALOMEDS::ChildIterator + interface
+
+
+
+
+ boolean More () , void Next (), SObject Value ()
+
+ Print all mesh names of imported MED file with the help of ChildIterator:
+
+ aResult = myVisu.ImportFile("MedFile.med")
+        
+ myStudy = theVisu.GetCurrentStudy()
+ aSObj = myLocalStudy.FindObjectIOR(aResult.GetID())
+
+ aMeshIter = myLocalStudy.NewChildIterator(aSObj);  # creating new +child iterator
+
+ while aMeshIter.More() :               +                      +           # check if one more +child level exists.
+         aMeshSObj = aMeshIter.Value() +                  +         # returns the SObject corresponding +to the current object found by the iterator.  
+         aMeshIter.Next()     +                      +                      +   # passes the iterator to the next level.
+         anAttr = aMeshSObj.FindAttribute("AttributeName")[1]
+         if anAttr is None :
+                 +aMeshSObj = aMeshIter.Value()
+               +  aMeshIter.Next()
+                 +anAttr = aMeshSObj.FindAttribute("AttributeName")[1]
+         anAttr = anAttr._narrow(SALOMEDS.AttributeName);
+         aMeshName = anAttr.Value()
+         print "  ", aMeshName
+
+
+
+ +
SALOMEDS::AttributeComment + interface
+
+
+
+ string Value (),  void SetValue ( in string value )
+
+ Find the AttributeComment attribute of the "Head" field in the study, +print it, then change it to "My Comment" string:
+
+ aFieldSObj  = myStudy.FindObject("Head, -")
+ anAttr = aFieldSObj.FindAttribute("AttributeComment")[1]
+                     +anAttr = anAttr._narrow(SALOMEDS.AttributeComment);
+                     +aFieldComment = anAttr.Value()
+
+ print "AttributeComment", anAttr
+
+ anAttr.SetValue ("My Comment")
+ +

+ 
+ + diff --git a/doc/html/INPUT/sources/static/mapping.html b/doc/html/INPUT/sources/static/mapping.html new file mode 100755 index 000000000..21ead079f --- /dev/null +++ b/doc/html/INPUT/sources/static/mapping.html @@ -0,0 +1,329 @@ + + + + + + Main Page + + + +  +
+ + + + + +
+
+
+ +

+Mapping of IDL definitions to Python language.

+ +

+Introduction

+SALOME is a distributed client/server application using the Common +Object Request Broker Architecture (CORBA). CORBA architecture uses the +Interface Definition Language (IDL), which specifies interfaces between +CORBA objects. So with help of IDL CORBA's language independence is ensured +. Because interfaces described in IDL can be mapped to the most of currently +used programming languages, CORBA applications and components are thus +independent of the language(s) used to implement them. In other words, +a client written in C++ can communicate with a server written in Java, +which in turn can communicate with another server written in COBOL, and +so forth. +

One important thing to remember about IDL is that it is not an implementation +language. That is, applications can't be written in IDL. The sole purpose +of IDL is to define interfaces; providing implementations for these interfaces +is performed using some other language. +

This page contains an abridged reference manual for mapping of IDL definitions +to Python language. It will be useful for Python programmers who are not +familiar with IDL language. All examples are taken from SALOME source +files. The complete version of Python Language Mapping Specification can +be found here. +
  +

CONTENTS: +

+
+ +

+Using Scoped Names

+Python implements a module concept that is similar to the IDL scoping mechanisms, +except that it does not allow for nested modules. In addition, Python requires +each object to be implemented in a module; globally visible objects are +not supported. +

Because of these constraints, scoped names are translated into Python +using the following rules: +

• An IDL module mapped into a Python module. Modules containing modules +are mapped to packages (i.e., directories with an __init__ module +containing all definitions excluding the nested modules). An implementation +can chose to map toplevel definitions (including the module CORBA) to modules +in an implementationdefined package, to allow concurrent installations +of different CORBA runtime libraries. In that case, the implementation +must provide additional modules so that toplevel modules can be used without +importing them from a package. +

• For all other scopes, a Python class is introduced that contains all +the definitions inside this scope. +

• Other global definitions (except modules) appear in a module whose +name is implementation dependent. Implementations are encouraged to use +the name of the IDL file when defining the name of that module. +

For instance, +

+
module SALOMEDS {
+ interface StudyManager {
+  void  Close(in Study aStudy);
+ };
+};
+
+would introduce a module SALOMEDS.py, which contains the following definitions: +
+
# module SALOMEDS.py
+class StudyManager:
+  def _Close(self,aStudy):
+   pass #interfaces are discussed later
+
+To avoid conflicts, IDL names that are also Python identifiers are prefixed +with an underscore (‘_’). +

Back to the contents +

+

+Mapping for Template and Array Types

+Both the bounded and the unbounded string type of IDL are mapped to the +Python string type. Wide strings are represented by an implementation-defined +type with the following properties: +

• For the wide string X and the integer n, X[n] returns the nth character, +which is a wide string of length 1. +

• len(X) returns the number of characters of wide string X. +

• CORBA.wstr(c) returns a wide character with the code point c in an +implementation-defined encoding. +

• X+Y returns the concatenation of wide strings X and Y. +

• CORBA.word(CORBA.wstr(c)) == c +

The sequence template is mapped to sequence objects (e.g., tuples or +lists). Applications should not assume that values of a sequence type are +mutable. Sequences and arrays of octets and characters are mapped to the +string type for efficiency reasons. +

For example, given the IDL definitions +

+
module SALOMEDS {
+  typedef sequence <string> StringSeq;
+   
+   interface AttributeTableOfInteger : GenericAttribute {
+
+    void SetRowTitles(in StringSeq theTitles) raises(IncorrectArgumentLength);
+ };
+};
+
+a client could invoke the operation +
+
print My_AttributeTableOfInteger.SetRowTitles(["X","F"])
+
+Array types are mapped like sequence templates. The application in this +example also expects an IncorrectArgumentLength exception if it passes +sequences that violate the bounds constraint or arrays of wrong size. +

Another example with arrays. The following IDL definition +

+
module SALOMEDS {
+ typedef sequence<GenericAttribute> ListOfAttributes;
+ interface SObject {
+  ListOfAttributes     GetAllAttributes();
+ };
+};
+
+is equal to +
+
import SALOMEDS
+
+attributes=[]
+ 
+attributes = My_SObject.GetAllAttributes()
+
+length = len(attributes)
+
+print "Attributes number = ", length
+print attributes
+
+Back to the contents +

+

+Mapping for Objects and Operations

+A CORBA object reference is represented as a Python object at run-time. +This object provides all the operations that are available on the interface +of the object. Although this specification does not mandate the use of +classes for stub objects, the following discussion uses classes to indicate +the interface. +

The nil object is represented by None. +

If an operation expects parameters of the IDL Object type, any Python +object representing an object reference might be passed as actual argument. +

If an operation expects a parameter of an abstract interface, either +an object implementing that interface, or a value supporting this interface +may be passed as actual argument. The semantics of abstract values then +define whether the argument is passed by value or by reference. +

Operations of an interface map to methods available on the object references. +Parameters with a parameter attribute of in or inout are +passed from left to right tothe method, skipping out parameters. +The return value of a method depends on the number of out parameters +and the return type. If the operation returns a value, this value forms +the first result value. All inout or out parameters +form consecutive result values. The method result depends then on +the number of result values: +

• If there is no result value, the method returns None. +

• If there is exactly one result value, it is returned as a single +value. +

• If there is more than one result value, all of them are packed +into a tuple, and this tuple is returned. +

Assuming the IDL definition +

+
module SALOMEDS{
+ interface StudyBuilder{
+  boolean FindAttribute  ( in SObject anObject, 
+                           out GenericAttribute anAttribute, 
+                           in string aTypeOfAttribute );
+ };
+};
+
+a client could write +
+
from SALOMEDS import StudyBuilder;
+my_StudyBuilder=...
+  
+  res,A=my_StudyBuilder.FindAttribute(Sobj, "AttributeSequenceOfReal")
+
+In this example A corresponds to the return value anAttribute +and res to the boolean return value. +

If an interface defines an attribute name, for example, the attribute +is mapped into an operation _get_name. If the attribute is not readonly, +there is an additional operation _set_name. +

The IDL definition +

+
module SALOMEDS{
+ interface Study{
+  attribute string Name;
+ };
+};
+
+is equal to the following +
+
from SALOMEDS import Study
+My_Study=...
+  Name=My_Study._get_name();
+  Name=My_Study._set_name();
+
+Back to the contents +

+

+Narrowing Object References

+Python objects returned from CORBA operations or pseudo-operations (such +as string_to_object) might have a dynamic type, which is more specific +than the static type as defined in the operation signature. +

Since there is no efficient and reliable way of automatically creating +the most specific type, explicit narrowing is necessary. To narrow an object +reference A to an interface class AttributeSequenceOfReal, +the client can use the following operation +

+
A = A._narrow(SALOMEDS.AttributeSequenceOfReal)
+
+Back to the contents +

+

+Mapping for Exceptions

+An IDL exception is translated into a Python class derived from CORBA.UserException. +System exceptions are derived from CORBA.SystemException. Both base classes +are derived from CORBA.Exception. The parameters of the exception are mapped +in the same way as the fields of a struct definition. When raising an exception, +a new instance of the class is created; the constructor expects the exception +parameters. For example, the definition +
+
module SALOMEDS{
+ interface StudyBuilder{
+  exception LockProtection {};
+  void CommitCommand() raises(LockProtection);
+ };
+};
+
+could be used caught as +
+
from SALOMEDS import StudyBuilder;
+my_StudyBuilder=...
+try:
+  my_StudyBuilder.CommitCommand();
+except StudyBuilder.LockProtection,value:
+  print "Error! Study is locked for modifications"
+
+ +


Back to the contents +

+

+Mapping for Enumeration Types

+An enumeration is mapped into a number of constant objects in the name +space where the enumeration is defined. An application may only test for +equivalence of two enumeration values, and not assume that they behave +like numbers. For example, the definition +
+
module VISU {
+ interface PrsObject{
+ 
+  enum PrsObjType{ TCURVE, TTABLE, TMESH, TCONTAINER,
+                   TSCALARMAP, TISOSURFACE, TDEFORMEDSHAPE,
+                   TCUTPLANES, TVECTORS };
+ };
+};
+
+introduces the objects +
+
from VISU import PrsObject
+VISU.PrsObjType.TCURVE,VISU.PrsObjType.TTABLE,VISU.PrsObjType.TMESH,VISU.PrsObjType.TCONTAINER,
+VISU.PrsObjType.TSCALARMAP,VISU.PrsObjType.TISOSURFACE,VISU.PrsObjType.TDEFORMEDSHAPE,VISU.PrsObjType.TCUTPLANES,
+VISU.PrsObjType.TVECTORS
+
+Back to the contents +

+

+Mapping for Structured Types

+An IDL struct definition is mapped into a Python class or type. For each +field in the struct, there is a corresponding attribute in the class with +the same name as the field. The constructor of the class expects the field +values, from left to right. For example, the IDL definition +
+
struct SDate {
+               short Second;
+               short Minute;
+               short Hour;
+               short Day;
+               short Month;
+               short Year;
+             };
+
+could be used in the Python statements +
+
Date=SDate(30, 12, 15, 26, 1, 79)
+print Date.Second,Date.Minute,Date.Hour,Date.Day,Date.Month,Date.Year
+
+ +
+Back to the contents
+ + + + diff --git a/doc/html/INPUT/sources/static/ns_f3-1.jpg b/doc/html/INPUT/sources/static/ns_f3-1.jpg new file mode 100755 index 0000000000000000000000000000000000000000..fd4f4560240a2a12e80d2e7ab6a942c046e80114 GIT binary patch literal 8650 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 DlLFx% literal 0 HcmV?d00001 diff --git a/doc/html/INPUT/sources/static/overview_Kernel.html b/doc/html/INPUT/sources/static/overview_Kernel.html new file mode 100755 index 000000000..144d3c341 --- /dev/null +++ b/doc/html/INPUT/sources/static/overview_Kernel.html @@ -0,0 +1,191 @@ + + + + + + Main Page + + + +  +
+ + + + + + +
+
+
+ + +

General overview +

+

Table of contents

+ + +
+

1. Introduction

+

The kernel corresponds to the minimal set of services required for the use of SALOME components (Supervisor, IAPP). +The kernel is also used by application software components (solver) and their container. +The kernel is associated to a unique user who can launch only one kernel at once. +The kernel is launched and destroyed by voluntary actions of the user. These functions are realized via the +use of scripts.

+

The list of the kernel services related to communication issues is:

+
    +
  • The Naming service
  • +
  • The Session service
  • +
  • The Life Cycle service
  • +
  • The Registry service
  • +
  • The Notification service
  • +
+

This list is enlarged with CORBA independent services :

+ +
    +
  • The module catalog service
  • +
  • The Data Type Catalog service
  • +
  • The resource catalog service
  • +
+

SALOME kernel module also encapsulates the Engine +Back to the contents +

2. Basic principles

+

The SALOME user's desktop is a process on a machine. This process includes:

+
    +
  • A graphic interface (based on Qt),
  • +
  • A text interface (Python interpreter),
  • +
  • A 3D visualization window shared by components.
  • +
+

SALOME Modules decompose into an interface (widgets GUI, text mode TUI, 3D visualization V3D) and +an engine.

+

The description of a module and its components is obtained by consulting the module catalog.

+

The interface is dynamically loaded in the process of the SALOME user's desktop. The engine is a CORBA +server launched either on the local machine or on the distant machine.

+

The engine (CORBA server) is created by a factory (or container). +This factory is also a CORBA server. Several containers can be present on a machine. +Some containers are specialized for types of components requiring a specific management. +For example, a specific container is required for components performing parallel calculations. +The engine includes at least a dynamically linked library in the container process. +This library is the implementation of the CORBA server associated to the engine. +If the engine is built from a pre-existent executable code, the library is simply a wrapper of the encapsulated code. +It launches the code in a separate process. Wherever possible, the code is included into the dynamic library. +

The container is one of the kernel services. If one needs to create a container on a distant machine, one creates a process resuming a part of the kernel services. The kernel can create other containers on distant machines via the trader (rsh). All the containers and the kernel share the same CORBA naming service with which they register.

+

The user reaches the functions of various SALOME'S components, either in graphic interactive mode (GUI) or in command mode ( TUI), via a Python interpreter.

+Back to the contents + +

3. Services and features of the SALOME kernel module

+

This section gives a brief overview of the services composing the kernel module. + The Life Cycle and Naming + services are described in separate chapters of this reference manual.

+ +

3.1 Session service

+

SALOME session describes the period starting from the kernel creation and + ending with its destruction. During this period the user can connect the session + and disconnect from it without ending this session. One connection log could + be written. A priori, no information resulting from another (past) session can + be used by the current session.

+

Implementation of this service in SALOME application is provided by the class +Session encapsulated in the package +SALOME.

+ +

3.2 Registry service

+

The active component registry should contain:

+ +
    +
  • The list of the active components
  • +
  • The list of the active containers during a SALOME session.
  • +
+

It should allow the state of a session. It also should allow to know if session can be stopped.

+

The API reference for this service is not included in the current version of the reference manual.

+ +

3.3 Notification service

+

The notification service is a kernel function which allows exchanging of events between CORBA objects.

+

In comparison with traditional CORBA event service, SALOME notification service allows to:

+
    +
  • Filter the events,
  • +
  • Structure the events,
  • +
  • Establish quality policies of services,
  • +
  • Subscribe to various event channels.
  • +
+

The API reference for this service is not included in the current version of the reference + manual.

+ +

3.4 Module catalog service

+

There are two module catalogs in SALOME application:

+
    +
  • General module catalog : This first catalog is common to all SALOME users once the the platform is installed (for example for a particular company or a service). This catalog will be managed by the integrator or the administrator of the platform, +
  • Personal module catalog : A specific catalog for every user (possibly empty). This catalog should notably allow the developers to test a new component before integrating it into the general catalog. +
+

The objective of these two module catalogs is to:

+
    +
  • List the available modules; +
  • Allow the addition, the modification and the deletion of a module in catalogs; +
  • Look for a module and\or a service fulfilling some given criteria (in catalogs); +
+

Implementation of this service in SALOME application is provided by two classes +ModuleCatalogand AComponent encapsulated in the package +SALOME_ModuleCatalog.

+ +

3.5 Data type catalog

+ +

The data exchanged between components services have definite types. During description of input, output, and +configuration parameters of components in the module catalog, the +definition of the parameters types is taken from data type catalog. During the editing of execution of +graphs, it is necessary to check that the connections output-input parameters are of compatible +types.

+

The data types correspond to CORBA object classes, including attributes and access methods (defined by their IDL). +These types can be created by specialization of generic data types.

+

The purpose of the data type catalog is to:

+
    +
  • List the available data types in the catalog; +
  • Browse the type hierarchy to check the compatibility of types (specialized output toward generic input); +
  • Allow the addition, the modification and the deletion of a data type in the catalog; +
+

The API reference for this service is not included in the current version of the reference + manual.

+

3.6 Resource catalog

+ +

This catalog describes machines, possible types of container on a machine, resources of machines... This catalog is used by the SALOME LifeCycle service.

+

The API reference for this service is not included in the current version of the reference + manual.

+ +

3.7 Engine

+

The engine represents a shared library which can be dynamically loaded by a container. The container can load this library, +given an interface name and an implementation +name. The container dynamically resolves an extern_C function in the library, +which constructs the CORBA Engine servant object.

+

The SALOME engine in + the current version of the application is implemented + as Engines package of interfaces. It encapsulates two classes: Component, Container.

+

The API refernce for Engines package can be found here. +

+

3.7.1 Component class

+

This class is used for interaction between the container and the component and between the components inside the container. +

+

The API reference for this class can be found here.

+ +

3.7.2 Container class

+

This class provides a set of methods which are necessary for definition of the process of loading and registration of new components in SALOME application.

+

The API reference for this class can be found here.

+ +Back to the contents + + diff --git a/doc/html/INPUT/sources/static/overview_Life_Cycle.html b/doc/html/INPUT/sources/static/overview_Life_Cycle.html new file mode 100755 index 000000000..659c2ab24 --- /dev/null +++ b/doc/html/INPUT/sources/static/overview_Life_Cycle.html @@ -0,0 +1,90 @@ + + + + + + Life Cycle service Description + + + + + + +  +
+ + + + + + +
+
+
+ + +

Life Cycle service Description

+

Introduction

+

The objective of this document is to give the users of SALOME + application a brief overview of the Life Cycle service implemented in SALOME. + A complete version of the LifeCycle service specification edited by the Object Management Group, Inc.(OMG) can be found here. +

+

Table of contents

+ +
+ +

1. Overview

+ +

Life Cycle service defines services and conventions for creating, deleting, copying and moving objects. +Because CORBA-based environments support distributed objects, the Life Cycle service defines conventions that allow clients to perform +life cycle operations on objects in different locations. This overview describes the life cycle problem for distributed object systems.

+
+ + +

2. SALOME Life Cycle service description

+

The SALOME Life Cycle service represents a partial implementation of the CORBA LifeCycle service.

+

From general point of view, the SALOME Life Cycle service allows to find or load with the help of a given container a definte SALOME component with its further +initialization and registration in the Naming service.

+

Container - it's a certain engine realizing the mechanism of loading a SALOME module.

+

Component - it's a certain abstract shell wrapping SALOME modules, performing all operations concerned with their initialization and registration.

+

From the point of view of the service user, the Life Cycle provides a set of functions allowing to :

+
    +
  • Locate a machine (more generally a container) by a logical set of required features (of both container and + machine);
  • +
  • Load components on the obtained containers;
  • +
  • Create a container;
  • +
  • Obtain the container containing a given component;
  • +
  • Treat the list of the active components;
  • +
  • Treat the list of the available containers.
  • +
+ + + +

The SALOME Life Cycle is a CORBA server. This server at its initialization is registered with the naming service.

+

The Life Cycle service is invoked to find a container and use it to load a +component. It supplies, as parameters, the type of container and the machine features required for loading +a given component. +

+

The Life Cycle service then returns a CORBA reference of a launched container.

+

Containers are launched on demand depending on components to be loaded. The Life Cycle service manages loading of containers.

+

When there is no launched container matching the request the Life Cycle service invokes loading of the correct type of container on a correct machine via a rsh type command.

+

The Life Cycle service interrogates containers to have information about the dynamic state of the machine (load). It contains (and update) the state of the active containers.

+

The Life Cycle service can implement a loading strategy for new containers on new machines, depending on the state of the already launched containers.

+

The Life Cycle service can stop containers at the end of session on +demand.

+ +

In SALOME platform the Life Cycle service is implemented in SALOME_Life CycleCORBA class. The API refernce for the methods of this class +can be found here.

+Back to the contents +
+ + +
+ + + diff --git a/doc/html/INPUT/sources/static/overview_Naming.html b/doc/html/INPUT/sources/static/overview_Naming.html new file mode 100755 index 000000000..ae24ab54d --- /dev/null +++ b/doc/html/INPUT/sources/static/overview_Naming.html @@ -0,0 +1,197 @@ + + + + + + Naming Service Description + + + +  +
+ + + + + + +
+
+
+ + +

Naming Service Description

+
+

Introduction

+

This page contains an abridged version of the Naming Service specification + edited by the Object Management Group, Inc.(OMG). The objective of this document is to give the users of SALOME + application a brief overview of the Naming Service implemented in SALOME. + A complete version of this document can be found here. +

+
+

Table of contents

+ + +
+ +

1. Overview

+

This chapter presents the OMG Naming Service and explains how the Naming Service can be used to decouple clients and servers by +providing an external reference exchange mechanism. The chapter also covers how to solve the bootstrapping problem for clients and +servers by controlling their configuration. +

+ +

In practice, copying stringified references from a server to all its clients is clumsy and does not scale. The Naming Service provides a way +for servers to advertise references under a name, and for clients to retrieve them. The advantages are: +

+
    +
  • Clients and servers can use meaningful names instead of having to deal with stringified references.
  • +
  • By changing a reference in the service without changing its name, you can transparently direct clients to a different object.
  • +
  • The Naming Service solves the bootstrapping problem because it provides a fixed point for clients and servers to rendezvous.
  • +
+

The Naming Service is much like a white pages phone book. Given a name, it + returns an object reference.

+ +

The terminology used in description of NamigService is the following:

+ +
    +
  • A name-to-IOR association is called by a name binding.
  • +
  • Each binding identifies exactly one object reference, but an object reference + may be bound more than once (have more than one name).
  • +
  • A naming context is an object that contains name bindings. + The names within a context must be unique. Naming contexts can contain bindings + to other naming contexts, so naming contexts can form graphs. Binding contexts + in other contexts creates a naming graph — a directed graph with nodes + and labeled edges where the nodes are contexts. A naming graph allows more + complex names to reference an object. Given a context in a naming graph, a + sequence of names can reference an object. This sequence of names (called + a compound name) defines a path in the naming graph to navigate the + resolution process. Figure 1-1 shows an example of a naming graph.
  • +
  • Binding a name to a context means to add a name–IOR pair to a context.
  • +
  • Resolving a name means to look for a name in a context and to obtain the + IOR bound under that name.
  • +
+ + +
+

Figure 1-1 A Naming Graph

+ Back to the contents +
+ +

2. SALOME Naming Service

+ +

2.1 Introduction

+

The SALOME Naming Service is a kernel function which supplies a name directory + hierarchy for pointing out CORBA objects. This name directory hierarchy allows, + from symbolic names, to dynamically find the references of distributed SALOME + objects, without information about their location. SALOME objects which can + be reached via the naming service are:

+ +
    +
  • The kernel services
  • +
  • Containers +
  • SALOME components instances +
+

The name directory hierarchy in SALOME represents a graph of directories containing + symbolic associations name-reference on objects. (It has been described in the + previous section)

+ +

2.2 Definitions

+
+
Directory
+
Context of names containing symbolic associations name-reference on objects.


+
"/"
+
Character used in SALOME to separate two names of a directory


+
Access path
+
List of names (separated by "/" character representing the path to be followed + in the graph to reach an association name-reference (the last name in the sequence).
+
+
Note:An object can be referenced by several symbolic names + in one or several directories.
+ +

2.3 Partition of SALOME name directory hierarchy

+

The hierarchical organization of the SALOME name directory is not completely frozen . +Because the framework allows the simultaneous opening of several studies, the following levels are determined:

+
 
+ /Kernel
+ /Container/
+	       /Component	
+
+ +

2.4 SALOME name directory persistence

+

During a SALOME session, stopping a server in charge of the Naming Service + doesn't imply the loss of the contents of the SALOME name directory hierarchy. + A backup file is produced and can be used to restart the Naming Service. So, + one can recover the state of the SALOME name directory hierarchy at restart + time. During such breakdown, every call to any function of the Naming Service + invokes an exception of type Unreachable service.

+ +

2.5 SALOME Naming Service features

+

Usage and administration of the name directory hierarchy is realized by means of the following functions:

+
    +
  • Recording and recovering of the reference of an object
  • +
  • Searching for a symbolic name
  • +
  • Creating of a directory, reading and modifying of the current directory
  • +
  • Destructing of a symbolic name and a diredtory
  • +
+

The access path used in these functions can be defined, either from the root, or from any +directory of SALOME name directory hierarchy.

+ +

In SALOME there is s standard interface of Naming Service, and any user can + use it for binding and finding objects. How to use it, it's possible to find + in any CORBA documentation. However in SALOME there is an additional layer which + hides calls to standard interface.

+

The precise API reference for these functions you can find here.

+

Here is a short list of public methods which are used for working with the SALOME Naming Service:

+
+

Register

+
Method which register object reference in the naming service with given name. It makes assignment between IOR and stringified name. +Then it's possible to get object reference from name using "Resolve" method.
+

+

Resolve

+
Try to obtain object reference from name. It's necessary before publishing + IOR in the Naming Service by Register method.
+

+

Find

+
The purpose of this method is to research a name from the current directory + of the naming service. Then if there is occurrence the naming service changes + directory to go to the directory where last occurrence is found.
+

+

CreateDirectory

+
This method allows to create one or several directories in the current directory
+

+

ChangeDirectory

+
Moves the current directory. The current directory is moved to the root directory if the input parameter Name is "/".
+

+

CurrentDirectory

+
Method allowing to get the current directory.
+

+

list

+
Method allowing to list and print the whole context beginning from the current context.
+

+

list_directory

+
Method to get all contexts contained in the current directory.
+

+

DestroyName

+
Destroys a symbolic name-object reference association.
+

+

DestroyDirectory

+
Destroys an empty directory.
+
+ +Back to the contents +
+ + diff --git a/doc/html/INPUT/sources/static/overview_Study.html b/doc/html/INPUT/sources/static/overview_Study.html new file mode 100755 index 000000000..f4c278363 --- /dev/null +++ b/doc/html/INPUT/sources/static/overview_Study.html @@ -0,0 +1,261 @@ + + + + + + Main Page + + + +  +
+ + + + + + +
+
+
+ + +

General overview +

+
+

Table of contents

+ +

1. Introduction

+

In SALOME application the Study module is used for management (creation, saving + etc.) of studies. In the framework of the platform, a study represents a working + document allowing to manage the data produced by various components which are + integarted into SALOME.
+

+

2. Representation of the study

+

The study represents a set of objects that we will call Study Objects or SObjects. + The study can be represented as a tree, every node of that tree containing a + SObject. SObjects in the study can be values or references towards data of calculation, + graphs of calculation, trees of construction of detail(room), results. Every + SOject of the study is characterised by a unique identifier in the study.

+

The study allows to describe the following relations:

+
    +
  • The link between the transient and persistent values of an SObject.
  • +
  • The relations between the SObjects produced by different components.
  • +
  • The relations between the SObjects produced by the same component.
  • +
  • The link between an object and its user name.
  • +
  • The access to the definition of the component which produce an object of + the study.
  • +
  • The access to instance of the component (if this one exists) which has produced + this SObject of the study.
  • +
+ +

Every SObject in the study contains a set of attributes. These attributes represent + a set of definitions associated to that object, they can contain values or corba + references towards the data contained in the internal data structure of a component.

+

As the structure of the study is tree-like it is possible to associate sub-objects + to objects.

+

As particular object, the study contains Component Data which are labels associated to the component +which produce data in the study. It is to this object that we can associate attributes containing ID which +we shall allow to identify the type of the component and also its instance. Objects produced by a +component will be sub-objects of the coresponding Data Component.

+

For example Component Data GEOM will contain the data produced by the component + Geom.

+ + + + + +
GEOM contains the data produced by the component GEOM. The component MESH + contains a SObject Mesh_1 wich refers to the SObject identified + by ID4 corresponding to Geometrie_1.
+

We distinguish two forms of the study, the study opened in a session SALOME and the study in the +persistent format. These two formats are described in the following sections

+

2.1 Study in transient format

+

The representation of the study in memory will be based on the document OCAF (supplied by OCC). +The document OCAF can be seen as a tree, every node of that tree is identified by a tag representing an integer value.

+

The exploration of the tree from the root to a node supplies a sequence of tags which establishes a +unique identifier ID. ID represents a character string containing the sequence of tags separated by +one ':'.

+

For example 0:1:12:4

+

To every node we can associate a set of attributes.

+

The attributes which the study can contain can be of the following types:

+
    +
  • All standard attributes supplied by OCC (package TdataStd) which allow to define (integers, +real, strings, identifiers, references etc.)
  • +
  • Attributes which contain CORBA references.
  • +
  • Attributes which contain the path HDF to reach the persistent datum. (Cf. the following chapter)
  • +
+

Remark: it is the study which takes care to build the attributes from the values which are passed to it, so +an attribute is always in a study, and it knows the study object to which it is attached.

+

Example of a Study Object as a set of various attributes.

+ +

2.2 Study in persistent format

+

To store a study HDF format is used, this tool allows to represent persistent data in the form of a tree.

+

Under the root of the persistent document, you can find a set of nodes:

+
    +
  • The first node contains the skeleton of the study. The skeleton consists of the identifiers of the +objects, as well as the references among them.
  • +
  • There is also one node for every component which has produced data during this SALOME session. Under each of these +node there are values of the data produced by this component.
  • +
+

2.3 Link between transient and persistent formats

+

It will be possible to complete the definition of one object in the study by associating to it an attribute +HDFPath which will contain the path to the persistent data.

+ +

Back to the contents

+

3. Services and features of the study

+

The Study in SALOME application possess a wide functionality. This functionality is provided by a set of classes which are described +below. +

3.1 Study class

+

The purpose of the Study class is to manage the data produced by various components + of SALOME platform. Most of the Study operations are handled by the StudyManager + and the StudyBuilder. What + is left in the Study class are elementary inquiries. A Study is explored by + a set of tools, mainly iterators , which are described further.

+

Nevertheless, the Study class contains a set of methods providing:

+ +
    +
  • management of study properties +
  • search for SObjects. +
  • search for SComponents +
  • creation of a new StudyBuilder, ComponentIterator, ChildIterator etc. +
+

The API reference for this class can be found here.

+

3.2 StudyBuilder class

+

StudyBuilder supplies basic services to edit the study. The edition of the study is made by the +component. Every component will use the basic services of the StudyBuilder allowing to write and publish objects.

+

StudyBulder provides the following functionality:

+
    +
  • creation, modification or deletetion of SObjects in the study
  • +
  • creation or removal of SComponents
  • +
  • undo/redo functionality. For that purpose it supplies the methods NewCommand, + CommitCommand, AbortCommand.
  • +
+

The API reference for this class can be found here.

+

3.3 StudyManager class

+

The purpose of the Manager is to manipulate Studies. Since SALOME is a multi-document + application during a working session you can operate as many stadies as you + wishes to create.

+

For that purpose StudyManager provides the following functionality:

+
    +
  • creation, opening, closing and saving studies
  • +
  • navigation through a set of studies present in the current working session
  • +
  • copy/paste of the objects in the study functionality.
  • +
+

The API reference for this class can be found here.

+

3.4 SObject class

+

The objects in the study are built by the StudyBuilder. +The SObject class provides methods for elementary inquiries, like getting an object ID or its attribuites.

+

The API reference for this class can be found here.

+

3.5 SComponent class

+

The SComponent class establishes in the study a permanent assocition to the components +integrated into SALOME platform. The SComponent interface is a specialization of the SObject + class. It inherits the most of its methods from the SObject class which are used for management of the SComponents.

+

The API reference for this class can be found here.

+

3.6 ChildIterator class

+

It is one of the tools destined for exploration of the study. This class contains a set of methods allowing to get +the access to all identified objects which are sons of another identifiedobject.

+

The API reference for this class can be found here.

+

3.7 SComponentIterator

+

This is the second tool destined for exploration of the study. This interface contains the methods allowing to iterate over all SComponents in the list. + The search is started from the first SComponent in the list.

+

The API reference for this class can be found here.

+ +

3.8 GenericAttribute class

+

GenericAttribute represents a base class for all attributes which can be assigned to the SObjects created in the study. All attribute classes + derive from this classe and inherit its methods.

+

The API reference for this class can be found here.

+ +

In SALOME application a SObject can possess the following attributes:

+ + + + + +
+ +
+

3.9 UseCaseBuilder class

+

UseCase in the study represents a user-defined subtree, containing all or some of the objects which currently exist +in the study. The UseCaseBuilder class contains a set of methods used for management (creation, deletion etc) of this sub-tree in the study.

+

The API reference for this class can be found here.

+ +

3.10 UseCaseIterator

+

This class represents an exploration tool for the UseCase. It contains a set of methods used for iteration over the objects in the UseCase.

+

The API reference for this class can be found here.

+ +

3.11 Callback class

+

The StudyBuilder can be created with the method NewBuilder. While invocation of this method a new object of the class + Callback is created and this object is assigned to the newly created Builder as callback which should be called + when adding and removing the objects.

+

The API reference for this class can be found here.

+ +

3.12 Driver class

+ +

This class represents a common tool for all components integrated into SALOME + application, that allows them to communicate with the study. It contains a set + of methods which can be called by any component and which provide the following + functionality: +

    +
  • publishing in the study of the objects created by a definite component
  • +
  • saving/loading of the data created by a definite component. These methods + are called by the StudyManager when loading/saving a study containing the + data created by a definite component.
  • +
  • transforming of the transient references into persistant references (or + vice versa) of the SObjects when saving (or loading) a study
  • +
  • copy/paste common functionality. These methods can be called by any component + in order to copy/paste its object created in the study
  • +
+

The API reference for this class can be found here.

+

Back to the contents

+ + diff --git a/doc/html/INPUT/sources/static/page2.html b/doc/html/INPUT/sources/static/page2.html new file mode 100755 index 000000000..40eed1f98 --- /dev/null +++ b/doc/html/INPUT/sources/static/page2.html @@ -0,0 +1,34 @@ + + + + + + Main Page + + + +  +
+ + + + + + +
+
+
+ + + + + +

Mapping of SALOME IDL definitions to Python language. +

+ + diff --git a/doc/html/INPUT/sources/static/tree.js b/doc/html/INPUT/sources/static/tree.js new file mode 100755 index 000000000..5157bc239 --- /dev/null +++ b/doc/html/INPUT/sources/static/tree.js @@ -0,0 +1,200 @@ +foldersTree = gFld("SALOME v.1.2 ", "", "") + insDoc(foldersTree, gLnk("Main Page", "", "main.html")) + +aux1 = insFld(foldersTree, gFld("TUI Reference Guide", "")) + aux2 = insFld(aux1, gFld("Modules", "")) + aux3 = insFld(aux2, gFld("SALOME STUDY module", "")) + insDoc(aux3, gLnk("Overview", "", "overview_Study.html")) + aux4 = insFld(aux3, gFld("Packages", "")) + insDoc(aux4, gLnk("SALOMEDS", "", "namespaceSALOMEDS.html")) + insDoc(aux3, gLnk("Examples", "", "examples_Study.html")) + aux3 = insFld(aux2, gFld("SALOME KERNEL module", "")) + insDoc(aux3, gLnk("Overview", "", "overview_Kernel.html")) + aux4 = insFld(aux3, gFld("Packages", "")) + insDoc(aux4, gLnk("SALOME_ModuleCatalog", "", "namespaceSALOME__ModuleCatalog.html")) + insDoc(aux4, gLnk("SALOME", "", "namespaceSALOME.html")) + insDoc(aux4, gLnk("Engines", "", "namespaceEngines.html")) + insDoc(aux3, gLnk("Examples", "", "examples_Kernel.html")) + + +/*! Data structures +*/ + insDoc(aux1, gLnk("Data Structures", "", "annotated.html")) + +/*! insDoc(aux1, gLnk("SALOME_ModuleCatalog::Acomponent", "", "interfaceSALOME__ModuleCatalog_1_1Acomponent.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeComment", "", "interfaceSALOMEDS_1_1AttributeComment.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeDrawable", "", "interfaceSALOMEDS_1_1AttributeDrawable.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeExpandable", "", "interfaceSALOMEDS_1_1AttributeExpandable.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeInteger", "", "interfaceSALOMEDS_1_1AttributeInteger.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeIOR", "", "interfaceSALOMEDS_1_1AttributeIOR.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeLocalID", "", "interfaceSALOMEDS_1_1AttributeLocalID.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeName", "", "interfaceSALOMEDS_1_1AttributeName.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeOpened", "", "interfaceSALOMEDS_1_1AttributeOpened.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributePersistentRef", "", "interfaceSALOMEDS_1_1AttributePersistentRef.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributePixMap", "", "interfaceSALOMEDS_1_1AttributePixMap.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributePythonObject", "", "interfaceSALOMEDS_1_1AttributePythonObject.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeReal", "", "interfaceSALOMEDS_1_1AttributeReal.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeSelectable", "", "interfaceSALOMEDS_1_1AttributeSelectable.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeSequenceOfInteger", "", "interfaceSALOMEDS_1_1AttributeSequenceOfInteger.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeSequenceOfReal", "", "interfaceSALOMEDS_1_1AttributeSequenceOfReal.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeStudyProperties", "", "interfaceSALOMEDS_1_1AttributeStudyProperties.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeTableOfInteger", "", "interfaceSALOMEDS_1_1AttributeTableOfInteger.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeTableOfInteger::IncorrectArgumentLength", "", "exceptionSALOMEDS_1_1AttributeTableOfInteger_1_1IncorrectArgumentLength.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeTableOfInteger::IncorrectIndex", "", "exceptionSALOMEDS_1_1AttributeTableOfInteger_1_1IncorrectIndex.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeTableOfReal", "", "interfaceSALOMEDS_1_1AttributeTableOfReal.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeTableOfReal::IncorrectArgumentLength", "", "exceptionSALOMEDS_1_1AttributeTableOfReal_1_1IncorrectArgumentLength.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeTableOfReal::IncorrectIndex", "", "exceptionSALOMEDS_1_1AttributeTableOfReal_1_1IncorrectIndex.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeTableOfString", "", "interfaceSALOMEDS_1_1AttributeTableOfString.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeTableOfString::IncorrectArgumentLength", "", "exceptionSALOMEDS_1_1AttributeTableOfString_1_1IncorrectArgumentLength.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeTableOfString::IncorrectIndex", "", "exceptionSALOMEDS_1_1AttributeTableOfString_1_1IncorrectIndex.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeTarget", "", "interfaceSALOMEDS_1_1AttributeTarget.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeTextColor", "", "interfaceSALOMEDS_1_1AttributeTextColor.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeTextHighlightColor", "", "interfaceSALOMEDS_1_1AttributeTextHighlightColor.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeTreeNode", "", "interfaceSALOMEDS_1_1AttributeTreeNode.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeUserID", "", "interfaceSALOMEDS_1_1AttributeUserID.html")) + insDoc(aux1, gLnk("SALOMEDS::Callback", "", "interfaceSALOMEDS_1_1Callback.html")) + insDoc(aux1, gLnk("SALOMEDS::ChildIterator", "", "interfaceSALOMEDS_1_1ChildIterator.html")) + insDoc(aux1, gLnk("SALOMEDS::Color", "", "structSALOMEDS_1_1Color.html")) + insDoc(aux1, gLnk("Engines::Component", "", "interfaceEngines_1_1Component.html")) + insDoc(aux1, gLnk("Engines::Container", "", "interfaceEngines_1_1Container.html")) + insDoc(aux1, gLnk("SALOME_ModuleCatalog::DefinitionInterface", "", "structSALOME__ModuleCatalog_1_1DefinitionInterface.html")) + insDoc(aux1, gLnk("SALOMEDS::Driver", "", "interfaceSALOMEDS_1_1Driver.html")) + insDoc(aux1, gLnk("SALOME::ExceptionStruct", "", "structSALOME_1_1ExceptionStruct.html")) + insDoc(aux1, gLnk("SALOMEDS::GenericAttribute", "", "interfaceSALOMEDS_1_1GenericAttribute.html")) + insDoc(aux1, gLnk("SALOMEDS::GenericAttribute::LockProtection", "", "exceptionSALOMEDS_1_1GenericAttribute_1_1LockProtection.html")) + insDoc(aux1, gLnk("SALOME_ModuleCatalog::IAPP_Affich", "", "structSALOME__ModuleCatalog_1_1IAPP__Affich.html")) + insDoc(aux1, gLnk("SALOME_ModuleCatalog::ModuleCatalog", "", "interfaceSALOME__ModuleCatalog_1_1ModuleCatalog.html")) + insDoc(aux1, gLnk("SALOME_ModuleCatalog::NotFound", "", "exceptionSALOME__ModuleCatalog_1_1NotFound.html")) + insDoc(aux1, gLnk("SALOMEDS::NotImplemented", "", "exceptionSALOMEDS_1_1NotImplemented.html")) + insDoc(aux1, gLnk("SALOME::SALOME_Exception", "", "exceptionSALOME_1_1SALOME__Exception.html")) + insDoc(aux1, gLnk("SALOMEDS::SComponent", "", "interfaceSALOMEDS_1_1SComponent.html")) + insDoc(aux1, gLnk("SALOMEDS::SComponentIterator", "", "interfaceSALOMEDS_1_1SComponentIterator.html")) + insDoc(aux1, gLnk("SALOME_ModuleCatalog::Service", "", "structSALOME__ModuleCatalog_1_1Service.html")) + insDoc(aux1, gLnk("SALOME_ModuleCatalog::ServicesParameter", "", "structSALOME__ModuleCatalog_1_1ServicesParameter.html")) + insDoc(aux1, gLnk("SALOME::Session", "", "interfaceSALOME_1_1Session.html")) + insDoc(aux1, gLnk("SALOME::Session::GUIActive", "", "exceptionSALOME_1_1Session_1_1GUIActive.html")) + insDoc(aux1, gLnk("SALOME::Session::RunningStudies", "", "exceptionSALOME_1_1Session_1_1RunningStudies.html")) + insDoc(aux1, gLnk("SALOMEDS::SObject", "", "interfaceSALOMEDS_1_1SObject.html")) + insDoc(aux1, gLnk("SALOME::StatSession", "", "structSALOME_1_1StatSession.html")) + insDoc(aux1, gLnk("SALOMEDS::Study", "", "interfaceSALOMEDS_1_1Study.html")) + insDoc(aux1, gLnk("SALOMEDS::Study::StudyCommentError", "", "exceptionSALOMEDS_1_1Study_1_1StudyCommentError.html")) + insDoc(aux1, gLnk("SALOMEDS::Study::StudyInvalidComponent", "", "exceptionSALOMEDS_1_1Study_1_1StudyInvalidComponent.html")) + insDoc(aux1, gLnk("SALOMEDS::Study::StudyInvalidContext", "", "exceptionSALOMEDS_1_1Study_1_1StudyInvalidContext.html")) + insDoc(aux1, gLnk("SALOMEDS::Study::StudyInvalidDirectory", "", "exceptionSALOMEDS_1_1Study_1_1StudyInvalidDirectory.html")) + insDoc(aux1, gLnk("SALOMEDS::Study::StudyNameAlreadyUsed", "", "exceptionSALOMEDS_1_1Study_1_1StudyNameAlreadyUsed.html")) + insDoc(aux1, gLnk("SALOMEDS::Study::StudyNameError", "", "exceptionSALOMEDS_1_1Study_1_1StudyNameError.html")) + insDoc(aux1, gLnk("SALOMEDS::Study::StudyObjectAlreadyExists", "", "exceptionSALOMEDS_1_1Study_1_1StudyObjectAlreadyExists.html")) + insDoc(aux1, gLnk("SALOMEDS::StudyBuilder", "", "interfaceSALOMEDS_1_1StudyBuilder.html")) + insDoc(aux1, gLnk("SALOMEDS::StudyBuilder::LockProtection", "", "exceptionSALOMEDS_1_1StudyBuilder_1_1LockProtection.html")) + insDoc(aux1, gLnk("SALOMEDS::StudyManager", "", "interfaceSALOMEDS_1_1StudyManager.html")) + insDoc(aux1, gLnk("SALOMEDS::UseCaseBuilder", "", "interfaceSALOMEDS_1_1UseCaseBuilder.html")) + insDoc(aux1, gLnk("SALOMEDS::UseCaseIterator", "", "interfaceSALOMEDS_1_1UseCaseIterator.html")) +*/ + insDoc(aux1, gLnk("Class Hierarchy", "", "hierarchy.html")) + +/*! insDoc(aux1, gLnk("SALOME_ModuleCatalog::Acomponent", "", "interfaceSALOME__ModuleCatalog_1_1Acomponent.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeTableOfInteger::IncorrectArgumentLength", "", "exceptionSALOMEDS_1_1AttributeTableOfInteger_1_1IncorrectArgumentLength.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeTableOfInteger::IncorrectIndex", "", "exceptionSALOMEDS_1_1AttributeTableOfInteger_1_1IncorrectIndex.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeTableOfReal::IncorrectArgumentLength", "", "exceptionSALOMEDS_1_1AttributeTableOfReal_1_1IncorrectArgumentLength.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeTableOfReal::IncorrectIndex", "", "exceptionSALOMEDS_1_1AttributeTableOfReal_1_1IncorrectIndex.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeTableOfString::IncorrectArgumentLength", "", "exceptionSALOMEDS_1_1AttributeTableOfString_1_1IncorrectArgumentLength.html")) + insDoc(aux1, gLnk("SALOMEDS::AttributeTableOfString::IncorrectIndex", "", "exceptionSALOMEDS_1_1AttributeTableOfString_1_1IncorrectIndex.html")) + insDoc(aux1, gLnk("SALOMEDS::Callback", "", "interfaceSALOMEDS_1_1Callback.html")) + insDoc(aux1, gLnk("SALOMEDS::ChildIterator", "", "interfaceSALOMEDS_1_1ChildIterator.html")) + insDoc(aux1, gLnk("SALOMEDS::Color", "", "structSALOMEDS_1_1Color.html")) + aux2 = insFld(aux1, gFld("Engines::Component", "", "interfaceEngines_1_1Component.html")) + insDoc(aux1, gLnk("Engines::Container", "", "interfaceEngines_1_1Container.html")) + insDoc(aux1, gLnk("SALOME_ModuleCatalog::DefinitionInterface", "", "structSALOME__ModuleCatalog_1_1DefinitionInterface.html")) + aux2 = insFld(aux1, gFld("SALOMEDS::Driver", "", "interfaceSALOMEDS_1_1Driver.html")) + insDoc(aux1, gLnk("SALOME::ExceptionStruct", "", "structSALOME_1_1ExceptionStruct.html")) + aux2 = insFld(aux1, gFld("SALOMEDS::GenericAttribute", "", "interfaceSALOMEDS_1_1GenericAttribute.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributeComment", "", "interfaceSALOMEDS_1_1AttributeComment.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributeDrawable", "", "interfaceSALOMEDS_1_1AttributeDrawable.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributeExpandable", "", "interfaceSALOMEDS_1_1AttributeExpandable.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributeInteger", "", "interfaceSALOMEDS_1_1AttributeInteger.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributeIOR", "", "interfaceSALOMEDS_1_1AttributeIOR.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributeLocalID", "", "interfaceSALOMEDS_1_1AttributeLocalID.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributeName", "", "interfaceSALOMEDS_1_1AttributeName.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributeOpened", "", "interfaceSALOMEDS_1_1AttributeOpened.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributePersistentRef", "", "interfaceSALOMEDS_1_1AttributePersistentRef.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributePixMap", "", "interfaceSALOMEDS_1_1AttributePixMap.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributePythonObject", "", "interfaceSALOMEDS_1_1AttributePythonObject.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributeReal", "", "interfaceSALOMEDS_1_1AttributeReal.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributeSelectable", "", "interfaceSALOMEDS_1_1AttributeSelectable.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributeSequenceOfInteger", "", "interfaceSALOMEDS_1_1AttributeSequenceOfInteger.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributeSequenceOfReal", "", "interfaceSALOMEDS_1_1AttributeSequenceOfReal.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributeStudyProperties", "", "interfaceSALOMEDS_1_1AttributeStudyProperties.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributeTableOfInteger", "", "interfaceSALOMEDS_1_1AttributeTableOfInteger.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributeTableOfReal", "", "interfaceSALOMEDS_1_1AttributeTableOfReal.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributeTableOfString", "", "interfaceSALOMEDS_1_1AttributeTableOfString.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributeTarget", "", "interfaceSALOMEDS_1_1AttributeTarget.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributeTextColor", "", "interfaceSALOMEDS_1_1AttributeTextColor.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributeTextHighlightColor", "", "interfaceSALOMEDS_1_1AttributeTextHighlightColor.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributeTreeNode", "", "interfaceSALOMEDS_1_1AttributeTreeNode.html")) + insDoc(aux2, gLnk("SALOMEDS::AttributeUserID", "", "interfaceSALOMEDS_1_1AttributeUserID.html")) + insDoc(aux1, gLnk("SALOMEDS::GenericAttribute::LockProtection", "", "exceptionSALOMEDS_1_1GenericAttribute_1_1LockProtection.html")) + insDoc(aux1, gLnk("SALOME_ModuleCatalog::IAPP_Affich", "", "structSALOME__ModuleCatalog_1_1IAPP__Affich.html")) + insDoc(aux1, gLnk("SALOME_ModuleCatalog::ModuleCatalog", "", "interfaceSALOME__ModuleCatalog_1_1ModuleCatalog.html")) + insDoc(aux1, gLnk("SALOME_ModuleCatalog::NotFound", "", "exceptionSALOME__ModuleCatalog_1_1NotFound.html")) + insDoc(aux1, gLnk("SALOMEDS::NotImplemented", "", "exceptionSALOMEDS_1_1NotImplemented.html")) + insDoc(aux1, gLnk("SALOME::SALOME_Exception", "", "exceptionSALOME_1_1SALOME__Exception.html")) + insDoc(aux1, gLnk("SALOMEDS::SComponentIterator", "", "interfaceSALOMEDS_1_1SComponentIterator.html")) + insDoc(aux1, gLnk("SALOME_ModuleCatalog::Service", "", "structSALOME__ModuleCatalog_1_1Service.html")) + insDoc(aux1, gLnk("SALOME_ModuleCatalog::ServicesParameter", "", "structSALOME__ModuleCatalog_1_1ServicesParameter.html")) + insDoc(aux1, gLnk("SALOME::Session", "", "interfaceSALOME_1_1Session.html")) + insDoc(aux1, gLnk("SALOME::Session::GUIActive", "", "exceptionSALOME_1_1Session_1_1GUIActive.html")) + insDoc(aux1, gLnk("SALOME::Session::RunningStudies", "", "exceptionSALOME_1_1Session_1_1RunningStudies.html")) + aux2 = insFld(aux1, gFld("SALOMEDS::SObject", "", "interfaceSALOMEDS_1_1SObject.html")) + insDoc(aux2, gLnk("SALOMEDS::SComponent", "", "interfaceSALOMEDS_1_1SComponent.html")) + insDoc(aux1, gLnk("SALOME::StatSession", "", "structSALOME_1_1StatSession.html")) + insDoc(aux1, gLnk("SALOMEDS::Study", "", "interfaceSALOMEDS_1_1Study.html")) + insDoc(aux1, gLnk("SALOMEDS::Study::StudyCommentError", "", "exceptionSALOMEDS_1_1Study_1_1StudyCommentError.html")) + insDoc(aux1, gLnk("SALOMEDS::Study::StudyInvalidComponent", "", "exceptionSALOMEDS_1_1Study_1_1StudyInvalidComponent.html")) + insDoc(aux1, gLnk("SALOMEDS::Study::StudyInvalidContext", "", "exceptionSALOMEDS_1_1Study_1_1StudyInvalidContext.html")) + insDoc(aux1, gLnk("SALOMEDS::Study::StudyInvalidDirectory", "", "exceptionSALOMEDS_1_1Study_1_1StudyInvalidDirectory.html")) + insDoc(aux1, gLnk("SALOMEDS::Study::StudyNameAlreadyUsed", "", "exceptionSALOMEDS_1_1Study_1_1StudyNameAlreadyUsed.html")) + insDoc(aux1, gLnk("SALOMEDS::Study::StudyNameError", "", "exceptionSALOMEDS_1_1Study_1_1StudyNameError.html")) + insDoc(aux1, gLnk("SALOMEDS::Study::StudyObjectAlreadyExists", "", "exceptionSALOMEDS_1_1Study_1_1StudyObjectAlreadyExists.html")) + insDoc(aux1, gLnk("SALOMEDS::StudyBuilder", "", "interfaceSALOMEDS_1_1StudyBuilder.html")) + insDoc(aux1, gLnk("SALOMEDS::StudyBuilder::LockProtection", "", "exceptionSALOMEDS_1_1StudyBuilder_1_1LockProtection.html")) + insDoc(aux1, gLnk("SALOMEDS::StudyManager", "", "interfaceSALOMEDS_1_1StudyManager.html")) + insDoc(aux1, gLnk("SALOMEDS::UseCaseBuilder", "", "interfaceSALOMEDS_1_1UseCaseBuilder.html")) + insDoc(aux1, gLnk("SALOMEDS::UseCaseIterator", "", "interfaceSALOMEDS_1_1UseCaseIterator.html")) +*/ + insDoc(aux1, gLnk("Class methods list", "", "functions.html")) +/*! +aux1 = insFld(foldersTree, gFld("Namespace List", "", "namespaces.html")) + insDoc(aux1, gLnk("Engines", "", "namespaceEngines.html")) + insDoc(aux1, gLnk("SALOME", "", "namespaceSALOME.html")) + insDoc(aux1, gLnk("SALOME_ModuleCatalog", "", "namespaceSALOME__ModuleCatalog.html")) + insDoc(aux1, gLnk("SALOMEDS", "", "namespaceSALOMEDS.html")) +*/ + insDoc(aux1, gLnk("Namespace Members", "", "namespacemembers.html")) + + insDoc(aux1, gLnk("File List", "", "files.html")) + +/*! + insDoc(aux1, gLnk("SALOME_Component.idl", "", "SALOME__Component_8idl.html")) + insDoc(aux1, gLnk("SALOME_Exception.idl", "", "SALOME__Exception_8idl.html")) + insDoc(aux1, gLnk("SALOME_ModuleCatalog.idl", "", "SALOME__ModuleCatalog_8idl.html")) + insDoc(aux1, gLnk("SALOME_Session.idl", "", "SALOME__Session_8idl.html")) + insDoc(aux1, gLnk("SALOMEDS.idl", "", "SALOMEDS_8idl.html")) + insDoc(aux1, gLnk("SALOMEDS_Attributes.idl", "", "SALOMEDS__Attributes_8idl.html")) +*/ + +aux1 = insFld(foldersTree, gFld("IDL/Python mapping", "")) + insDoc(aux1, gLnk("Mapping of IDL definitions to Python language", "", "mapping.html")) + insDoc(aux1, gLnk("Mapping of SALOME IDL definitions to Python language", "", "page2.html")) + +/*! insDoc(foldersTree, gLnk("Graphical Class Hierarchy", "", "inherits.html")) +*/ +aux1 = insFld(foldersTree, gFld("Naming service", "")) + insDoc(aux1, gLnk("Naming Service Description ", "", "overview_Naming.html")) + insDoc(aux1, gLnk("Salome_NamingService Class Reference", "", "classSALOME__NamingService.html")) + insDoc(aux1, gLnk("Examples", "", "examples_Naming.html")) +aux1 = insFld(foldersTree, gFld("Life Cycle", "")) + insDoc(aux1, gLnk("Life Cycle Service Description ", "", "overview_Life_Cycle.html")) + insDoc(aux1, gLnk("Salome_LifeCycleCorba Class Reference", "", "classSALOME__LifeCycleCORBA.html")) + insDoc(aux1, gLnk("Examples", "", "examples_Life_cycle.html")) + + diff --git a/doc/html/INPUT/sources/static/treeview.js b/doc/html/INPUT/sources/static/treeview.js new file mode 100644 index 000000000..55eb43d07 --- /dev/null +++ b/doc/html/INPUT/sources/static/treeview.js @@ -0,0 +1,505 @@ +//**************************************************************** +// You are free to copy the "Folder-Tree" script as long as you +// keep this copyright notice: +// Script found in: http://www.geocities.com/Paris/LeftBank/2178/ +// Author: Marcelino Alves Martins (martins@hks.com) December '97. +//**************************************************************** + +//Log of changes: +// 17 Feb 98 - Fix initialization flashing problem with Netscape +// +// 27 Jan 98 - Root folder starts open; support for USETEXTLINKS; +// make the ftien4 a js file +// +// DvH: Dec 2000 - Made some minor changes to support external +// references + +// Definition of class Folder +// ***************************************************************** + +function Folder(folderDescription, tagName, hreference) //constructor +{ + //constant data + this.desc = folderDescription + this.tagName = tagName + this.hreference = hreference + this.id = -1 + this.navObj = 0 + this.iconImg = 0 + this.nodeImg = 0 + this.isLastNode = 0 + + //dynamic data + this.isOpen = true + this.iconSrc = "ftv2folderopen.png" + this.children = new Array + this.nChildren = 0 + + //methods + this.initialize = initializeFolder + this.setState = setStateFolder + this.addChild = addChild + this.createIndex = createEntryIndex + this.hide = hideFolder + this.display = display + this.renderOb = drawFolder + this.totalHeight = totalHeight + this.subEntries = folderSubEntries + this.outputLink = outputFolderLink +} + +function setStateFolder(isOpen) +{ + var subEntries + var totalHeight + var fIt = 0 + var i=0 + + if (isOpen == this.isOpen) + return + + if (browserVersion == 2) + { + totalHeight = 0 + for (i=0; i < this.nChildren; i++) + totalHeight = totalHeight + this.children[i].navObj.clip.height + subEntries = this.subEntries() + if (this.isOpen) + totalHeight = 0 - totalHeight + for (fIt = this.id + subEntries + 1; fIt < nEntries; fIt++) + indexOfEntries[fIt].navObj.moveBy(0, totalHeight) + } + this.isOpen = isOpen + propagateChangesInState(this) +} + +function propagateChangesInState(folder) +{ + var i=0 + + if (folder.isOpen) + { + if (folder.nodeImg) + if (folder.isLastNode) + folder.nodeImg.src = "ftv2mlastnode.png" + else + folder.nodeImg.src = "ftv2mnode.png" + folder.iconImg.src = "ftv2folderopen.png" + for (i=0; i 0) + auxEv = "" + else + auxEv = "" + + if (level>0) + if (lastNode) //the last 'brother' in the children array + { + this.renderOb(leftSide + auxEv + "") +// leftSide = leftSide + "" + this.isLastNode = 1 + } + else + { + this.renderOb(leftSide + auxEv + "") + leftSide = leftSide + "" + this.isLastNode = 0 + } + else + this.renderOb("") + + if (nc > 0) + { + level = level + 1 + for (i=0 ; i < this.nChildren; i++) + { + if (i == this.nChildren-1) + this.children[i].initialize(level, 1, leftSide) + else + this.children[i].initialize(level, 0, leftSide) + } + } +} + +function drawFolder(leftSide) +{ + if (browserVersion == 2) { + if (!doc.yPos) + doc.yPos=8 + doc.write("") + } + if (browserVersion == 3) + { + doc.write("
") + } + + doc.write("\n") + doc.write("\n\n") + doc.write("\n
") + doc.write(leftSide) + this.outputLink() + doc.write("") + doc.write("") + if (USETEXTLINKS) + { + this.outputLink() + doc.write(this.desc + "") + } + else + doc.write(this.desc) + +/*! + if (this.tagName!="") + { + doc.write(" [external]") + } +*/ + doc.write("
\n") + + if (browserVersion == 2) { + doc.write("") + } + if (browserVersion == 3) { + doc.write("
") + } + + if (browserVersion == 1) { + this.navObj = doc.all["folder"+this.id] + this.iconImg = doc.all["folderIcon"+this.id] + this.nodeImg = doc.all["nodeIcon"+this.id] + } else if (browserVersion == 2) { + this.navObj = doc.layers["folder"+this.id] + this.iconImg = this.navObj.document.images["folderIcon"+this.id] + this.nodeImg = this.navObj.document.images["nodeIcon"+this.id] + doc.yPos=doc.yPos+this.navObj.clip.height + } else if (browserVersion == 3) { + this.navObj = doc.getElementById("folder"+this.id) + this.iconImg = doc.images.namedItem("folderIcon"+this.id) + this.nodeImg = doc.images.namedItem("nodeIcon"+this.id) + } +} + +function outputFolderLink() +{ + if (this.hreference) + { + doc.write(" 0) + doc.write("onClick='javascript:clickOnFolder("+this.id+")'") + doc.write(">") + } + else + doc.write("") +} + +function addChild(childNode) +{ + this.children[this.nChildren] = childNode + this.nChildren++ + return childNode +} + +function folderSubEntries() +{ + var i = 0 + var se = this.nChildren + + for (i=0; i < this.nChildren; i++){ + if (this.children[i].children) //is a folder + se = se + this.children[i].subEntries() + } + + return se +} + + +// Definition of class Item (a document or link inside a Folder) +// ************************************************************* + +function Item(itemDescription, tagName, itemLink) // Constructor +{ + // constant data + this.desc = itemDescription + this.tagName = tagName + this.link = itemLink + this.id = -1 //initialized in initalize() + this.navObj = 0 //initialized in render() + this.iconImg = 0 //initialized in render() + this.iconSrc = "ftv2doc.png" + + // methods + this.initialize = initializeItem + this.createIndex = createEntryIndex + this.hide = hideItem + this.display = display + this.renderOb = drawItem + this.totalHeight = totalHeight +} + +function hideItem() +{ + if (browserVersion == 1 || browserVersion == 3) { + if (this.navObj.style.display == "none") + return + this.navObj.style.display = "none" + } else { + if (this.navObj.visibility == "hidden") + return + this.navObj.visibility = "hidden" + } +} + +function initializeItem(level, lastNode, leftSide) +{ + this.createIndex() + + if (level>0) + if (lastNode) //the last 'brother' in the children array + { + this.renderOb(leftSide + "") + leftSide = leftSide + "" + } + else + { + this.renderOb(leftSide + "") + leftSide = leftSide + "" + } + else + this.renderOb("") +} + +function drawItem(leftSide) +{ + if (browserVersion == 2) + doc.write("") + if (browserVersion == 3) + doc.write("
") + + doc.write("\n\n") + doc.write("\n
") + doc.write(leftSide) + if (this.link!="") + { + doc.write("") + } + doc.write("") + if (this.link!="") + { + doc.write("") + } + doc.write("") + if (USETEXTLINKS && this.link!="") + doc.write("" + this.desc + "") + else + doc.write(this.desc) +/*! + if (this.tagName!="") + { + doc.write(" [external]"); + } +*/ + doc.write("\n
\n") + + if (browserVersion == 2) + doc.write("") + if (browserVersion == 3) + doc.write("
") + + if (browserVersion == 1) { + this.navObj = doc.all["item"+this.id] + this.iconImg = doc.all["itemIcon"+this.id] + } else if (browserVersion == 2) { + this.navObj = doc.layers["item"+this.id] + this.iconImg = this.navObj.document.images["itemIcon"+this.id] + doc.yPos=doc.yPos+this.navObj.clip.height + } else if (browserVersion == 3) { + this.navObj = doc.getElementById("item"+this.id) + this.iconImg = doc.images.namedItem("itemIcon"+this.id) + } +} + + +// Methods common to both objects (pseudo-inheritance) +// ******************************************************** + +function display() +{ + if (browserVersion == 1 || browserVersion == 3) + this.navObj.style.display = "block" + else + this.navObj.visibility = "show" +} + +function createEntryIndex() +{ + this.id = nEntries + indexOfEntries[nEntries] = this + nEntries++ +} + +// total height of subEntries open +function totalHeight() //used with browserVersion == 2 +{ + var h = this.navObj.clip.height + var i = 0 + + if (this.isOpen) //is a folder and _is_ open + for (i=0 ; i < this.nChildren; i++) + h = h + this.children[i].totalHeight() + + return h +} + + +// Events +// ********************************************************* + +function clickOnFolder(folderId) +{ + var clicked = indexOfEntries[folderId] + + if (!clicked.isOpen) + clickOnNode(folderId) + + return + + if (clicked.isSelected) + return +} + +function clickOnNode(folderId) +{ + var clickedFolder = 0 + var state = 0 + + clickedFolder = indexOfEntries[folderId] + state = clickedFolder.isOpen + + clickedFolder.setState(!state) //open<->close +} + +function initializeDocument() +{ + doc = document; + if (doc.all) + browserVersion = 1 //IE4 + else + if (doc.layers) + browserVersion = 2 //NS4 + else if(navigator.userAgent.toLowerCase().indexOf('gecko') != -1) + browserVersion = 3 //mozilla + else + browserVersion = 0 //other + + foldersTree.initialize(0, 1, "") + foldersTree.display() + + if (browserVersion > 0) + { + if(browserVersion != 3) + doc.write(" ") + + // close the whole tree + clickOnNode(0) + // open the root folder + clickOnNode(0) + } +} + +// Auxiliary Functions for Folder-Treee backward compatibility +// ********************************************************* + +function gFld(description, tagName, hreference) +{ + folder = new Folder(description, tagName, hreference) + return folder +} + +function gLnk(description, tagName, linkData) +{ + fullLink = "" + + if (linkData!="") + { + fullLink = "'"+linkData+"' target=\"basefrm\"" + } + + linkItem = new Item(description, tagName, fullLink) + return linkItem +} + +function insFld(parentFolder, childFolder) +{ + return parentFolder.addChild(childFolder) +} + +function insDoc(parentFolder, document) +{ + parentFolder.addChild(document) +} + +// Global variables +// **************** + +USETEXTLINKS = 1 +indexOfEntries = new Array +nEntries = 0 +doc = document +browserVersion = 0 +selectedFolder=0 diff --git a/doc/html/Makefile.in b/doc/html/Makefile.in index f7fe30037..1e8ae14d7 100644 --- a/doc/html/Makefile.in +++ b/doc/html/Makefile.in @@ -9,6 +9,7 @@ top_srcdir=@top_srcdir@ top_builddir=../.. +root_srcdir=@ROOT_SRCDIR@ srcdir=@srcdir@ VPATH=.:@srcdir@ doxygen=@DOXYGEN@ @@ -18,11 +19,11 @@ doxygen=@DOXYGEN@ doc: cp -fr $(srcdir)/INPUT ./; \ cd INPUT; \ - sed 's|../../../share/salome|../$(top_srcdir)|' doxyfile > doxyfile1; \ + sed 's|../../../share/salome|$(root_srcdir)|' ./doxyfile > ./doxyfile1; \ mv -f doxyfile1 doxyfile; \ $(doxygen) ./doxyfile; \ cd ..; \ - cp -f $(srcdir)/INPUT/sources/doxygen.css ./html/doxygen.css + cp -fr $(srcdir)/INPUT/sources/static/*.* ./html/ cp -fr $(srcdir)/INPUT/sources/ html/ cp -fr $(srcdir)/INPUT/exemple/ html/ cp -fr $(srcdir)/INPUT/HTML/ html/ diff --git a/examples/Makefile.in b/examples/Makefile.in new file mode 100644 index 000000000..48f9d936e --- /dev/null +++ b/examples/Makefile.in @@ -0,0 +1,33 @@ +# Copyright (C) 2003 CEA/DEN, EDF R&D +# +# +# +# File : Makefile.in +# Author : Vasily Rusyaev (Open Cascade NN) +# Module : doc +# $Header: + +top_srcdir=@top_srcdir@ +top_builddir=.. +srcdir=@srcdir@ +VPATH=.:@srcdir@ +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/idl/Logger.idl b/idl/Logger.idl index d58070da2..c30b5e22f 100644 --- a/idl/Logger.idl +++ b/idl/Logger.idl @@ -16,6 +16,7 @@ module SALOME_Logger { //put message into one special place for all servers using Logger oneway void putMessage (in string message); + void ping (); }; }; diff --git a/idl/SALOMEDS.idl b/idl/SALOMEDS.idl index 5fcb8c16a..ed5f15d54 100644 --- a/idl/SALOMEDS.idl +++ b/idl/SALOMEDS.idl @@ -9,7 +9,7 @@ // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software @@ -24,347 +24,7 @@ // $Header$ /*! \mainpage - \image html Application-About.png - -*/ -/*! \page page1 Mapping of IDL definitions to Python language. -\section Intro Introduction -%SALOME PRO is a distributed client/server application using the Common Object Request Broker Architecture (CORBA). -CORBA architecture uses the Interface Definition Language (IDL), which specifies interfaces between CORBA objects. So with help of IDL -CORBA's language independence is ensured . Because interfaces described in IDL can be mapped to the most of currently used programming languages, CORBA applications and components are thus -independent of the language(s) used to implement them. In other words, a client written in C++ can communicate with a server written in Java, which in turn can communicate with -another server written in COBOL, and so forth. - -One important thing to remember about IDL is that it is not an implementation language. That is, applications can't be written in IDL. The sole purpose of IDL is to define interfaces; -providing implementations for these interfaces is performed using some other language. - -This page contains an abridged reference manual for mapping of IDL definitions to Python language. It will be useful for Python programmers who are not familiar -with IDL language. All examples are taken from %SALOME PRO source files. -The complete version of Python Language Mapping Specification can be found
here. - -
CONTENTS: -- \ref subsection1 -- \ref subsection2 -- \ref subsection3 -- \ref subsection4 -- \ref subsection5 -- \ref subsection6 -- \ref subsection7 - -\subsection subsection1 Using Scoped Names - -Python implements a module concept that is similar to the IDL scoping mechanisms, -except that it does not allow for nested modules. In addition, Python requires each -object to be implemented in a module; globally visible objects are not supported. - -Because of these constraints, scoped names are translated into Python using the -following rules: - -• An IDL module mapped into a Python module. Modules containing modules are -mapped to packages (i.e., directories with an __init__ module containing all -definitions excluding the nested modules). An implementation can chose to map toplevel -definitions (including the module CORBA) to modules in an implementationdefined -package, to allow concurrent installations of different CORBA runtime -libraries. In that case, the implementation must provide additional modules so that -toplevel modules can be used without importing them from a package. - -• For all other scopes, a Python class is introduced that contains all the definitions -inside this scope. - -• Other global definitions (except modules) appear in a module whose name is -implementation dependent. Implementations are encouraged to use the name of the -IDL file when defining the name of that module. - -For instance, - -\verbatim -module SALOMEDS { - interface StudyManager { - void Close(in Study aStudy); - }; -}; -\endverbatim - -would introduce a module SALOMEDS.py, which contains the following definitions: - -\verbatim -# module SALOMEDS.py -class StudyManager: - def _Close(self,aStudy): - pass #interfaces are discussed later -\endverbatim - -To avoid conflicts, IDL names that are also Python identifiers are prefixed with an underscore (‘_’). - -\subsection subsection2 Mapping for Template and Array Types - -Both the bounded and the unbounded string type of IDL are mapped to the Python -string type. Wide strings are represented by an implementation-defined type with the -following properties: - -• For the wide string X and the integer n, X[n] returns the nth character, which is a -wide string of length 1. - -• len(X) returns the number of characters of wide string X. - -• CORBA.wstr(c) returns a wide character with the code point c in an -implementation-defined encoding. - -• X+Y returns the concatenation of wide strings X and Y. - -• CORBA.word(CORBA.wstr(c)) == c - -The sequence template is mapped to sequence objects (e.g., tuples or lists). -Applications should not assume that values of a sequence type are mutable. Sequences -and arrays of octets and characters are mapped to the string type for efficiency reasons. - -For example, given the IDL definitions - -\verbatim -module SALOMEDS { - typedef sequence StringSeq; - - interface AttributeTableOfInteger : GenericAttribute { - - void SetRowTitles(in StringSeq theTitles) raises(IncorrectArgumentLength); - }; -}; -\endverbatim - -a client could invoke the operation - -\verbatim -print My_AttributeTableOfInteger.SetRowTitles(["X","F"]) -\endverbatim - -Array types are mapped like sequence templates. The application in this example also expects an -IncorrectArgumentLength exception if it passes sequences that violate the bounds constraint or -arrays of wrong size. - -Another example with arrays. The following IDL definition - -\verbatim -module SALOMEDS { - typedef sequence ListOfAttributes; - interface SObject { - ListOfAttributes GetAllAttributes(); - }; -}; -\endverbatim - -is equal to - -\verbatim -import SALOMEDS - -attributes=[] - -attributes = My_SObject.GetAllAttributes() - -length = len(attributes) - -print "Attributes number = ", length -print attributes -\endverbatim - -\subsection subsection3 Mapping for Objects and Operations - -A CORBA object reference is represented as a Python object at run-time. This object -provides all the operations that are available on the interface of the object. Although -this specification does not mandate the use of classes for stub objects, the following -discussion uses classes to indicate the interface. - -The nil object is represented by None. - -If an operation expects parameters of the IDL Object type, any Python object -representing an object reference might be passed as actual argument. - -If an operation expects a parameter of an abstract interface, either an object -implementing that interface, or a value supporting this interface may be passed as -actual argument. The semantics of abstract values then define whether the argument is -passed by value or by reference. - -Operations of an interface map to methods available on the object references. -Parameters with a parameter attribute of in or inout -are passed from left to right tothe method, skipping out parameters. -The return value of a method depends on the number of out parameters -and the return type. If the operation returns a value, this -value forms the first result value. All inout or out -parameters form consecutive result values. The method result depends then on the number -of result values: - -• If there is no result value, the method returns None. - -• If there is exactly one result value, it is returned as a single value. - -• If there is more than one result value, all of them are packed into a tuple, and this -tuple is returned. - -Assuming the IDL definition - -\verbatim -module SALOMEDS{ - interface StudyBuilder{ - boolean FindAttribute ( in SObject anObject, - out GenericAttribute anAttribute, - in string aTypeOfAttribute ); - }; -}; -\endverbatim - -a client could write - -\verbatim -from SALOMEDS import StudyBuilder; -my_StudyBuilder=... - - res,A=my_StudyBuilder.FindAttribute(Sobj, "AttributeSequenceOfReal") -\endverbatim - -In this example A corresponds to the return value anAttribute and -res to the boolean return value. - -If an interface defines an attribute name, for example, the attribute is mapped into an -operation _get_name. If the attribute is not readonly, there is an -additional operation _set_name. - -The IDL definition - -\verbatim -module SALOMEDS{ - interface Study{ - attribute string Name; - }; -}; -\endverbatim - -is equal to the following - -\verbatim -from SALOMEDS import Study -My_Study=... - Name=My_Study._get_name(); - Name=My_Study._set_name(); -\endverbatim - -\subsection subsection4 Narrowing Object References - -Python objects returned from CORBA operations or pseudo-operations (such as -string_to_object) might have a dynamic type, which is more specific than the -static type as defined in the operation signature. - -Since there is no efficient and reliable way of automatically creating the most specific -type, explicit narrowing is necessary. To narrow an object reference A to an interface -class AttributeSequenceOfReal, the client can use the following operation - -\verbatim -A = A._narrow(SALOMEDS.AttributeSequenceOfReal) -\endverbatim - -\subsection subsection5 Mapping for Exceptions - -An IDL exception is translated into a Python class derived from -CORBA.UserException. System exceptions are derived from CORBA.SystemException. -Both base classes are derived from CORBA.Exception. The parameters of the -exception are mapped in the same way as the fields of a struct definition. When -raising an exception, a new instance of the class is created; the constructor -expects the exception parameters. For example, the definition - -\verbatim -module SALOMEDS{ - interface StudyBuilder{ - exception LockProtection {}; - void CommitCommand() raises(LockProtection); - }; -}; -\endverbatim - -could be used caught as - -\verbatim -from SALOMEDS import StudyBuilder; -my_StudyBuilder=... -try: - my_StudyBuilder.CommitCommand(); -except StudyBuilder.LockProtection,value: - print "Error! Study is locked for modifications" -\endverbatim - - -\subsection subsection6 Mapping for Enumeration Types - -An enumeration is mapped into a number of constant objects in the name space where -the enumeration is defined. An application may only test for equivalence of two -enumeration values, and not assume that they behave like numbers. -For example, the definition - -\verbatim -module VISU { - interface PrsObject{ - - enum PrsObjType{ TCURVE, TTABLE, TMESH, TCONTAINER, - TSCALARMAP, TISOSURFACE, TDEFORMEDSHAPE, - TCUTPLANES, TVECTORS }; - }; -}; -\endverbatim - -introduces the objects - -\verbatim -from VISU import PrsObject -VISU.PrsObjType.TCURVE,VISU.PrsObjType.TTABLE,VISU.PrsObjType.TMESH,VISU.PrsObjType.TCONTAINER, -VISU.PrsObjType.TSCALARMAP,VISU.PrsObjType.TISOSURFACE,VISU.PrsObjType.TDEFORMEDSHAPE,VISU.PrsObjType.TCUTPLANES, -VISU.PrsObjType.TVECTORS -\endverbatim - -\subsection subsection7 Mapping for Structured Types - -An IDL struct definition is mapped into a Python class or type. For each field in the -struct, there is a corresponding attribute in the class with the same name as the field. -The constructor of the class expects the field values, from left to right. -For example, the IDL definition - -\verbatim -struct SDate { - short Second; - short Minute; - short Hour; - short Day; - short Month; - short Year; - }; -\endverbatim - -could be used in the Python statements - -\verbatim -Date=SDate(30, 12, 15, 26, 1, 79) -print Date.Second,Date.Minute,Date.Hour,Date.Day,Date.Month,Date.Year -\endverbatim -*/ -/*! \page page2 Mapping of SALOME IDL definitions to Python language. - - - - %SALOME STUDY module - - Mapping of %SALOMEDS functions - - Mapping of SALOMEDS_Attributes functions - - %SAlOME KERNEL module - - Mapping of %Med_Gen functions - - Mapping of %SALOME_Session functions - - Mapping of %SALOME_ModuleCatalog functions - - Mapping of %SALOME_Exception functions - - Mapping of %SALOME_Component functions - - %SALOME MED component - - Mapping of %Med functions - - %SALOME SUPERVISION module - - Mapping of %SUPERV functions - - %SALOME %VISU module - - Mapping of %VISU_Gen functions - -*/ - -/*! \defgroup Study SALOME STUDY module + \image html Application-About.png */ /*! @@ -377,7 +37,7 @@ print Date.Second,Date.Minute,Date.Hour,Date.Day,Date.Month,Date.Year #include "SALOME_Exception.idl" -/*! \ingroup Study +/*! This package contains the interfaces used for creation, managment and modification of the %Study */ @@ -400,7 +60,10 @@ module SALOMEDS /*! IOR of the study in %SALOME application */ typedef string SalomeReference; -/*! List of names of open studies in a %SALOME session + +/*! List of the names of studies which are currently open in this %SALOME session. +Since %SALOME is a multi-study application, it allows to open a lot of studies +during each working session. */ typedef sequence ListOfOpenStudies; /*! List of file names @@ -436,10 +99,12 @@ module SALOMEDS interface UseCaseIterator; interface UseCaseBuilder; interface Callback; + /*! List of attributes */ typedef sequence ListOfAttributes; -/*! Exception indicating that this feature hasn't been implemented + +/*! Exception indicating that this feature hasn't been implemented. */ exception NotImplemented {}; @@ -489,7 +154,7 @@ module SALOMEDS */ typedef sequence ListOfSObject; /*! - Gets a persistent reference to the %Study. + Gets the persistent reference to the %Study. */ PersistentReference GetPersistentReference(); /*! @@ -901,24 +566,35 @@ module SALOMEDS Closes the study. */ void Close(in Study aStudy); -/*! \brief Saving the study +/*! \brief Saving the study in a HDF file (or files). Saves the study. + \param theMultiFile If this parameter is True the study will be saved in several files.
See also an example of this method usage in batchmode of %SALOME application. */ void Save(in Study aStudy, in boolean theMultiFile); +/*! \brief Saving the study in a ASCII file (or files). + Saves the study in a ASCII format. + \param theMultiFile If this parameter is True the study will be saved in several files. +*/ void SaveASCII(in Study aStudy, in boolean theMultiFile); -/*! \brief Saving the study in a file +/*! \brief Saving the study in a specified HDF file (or files). + + Saves the study in a specified file (or files). + \param theMultiFile If this parameter is True the study will be saved in several files. - Saves the study in a specified file.
See also an example of this method usage in batchmode of %SALOME application. */ void SaveAs(in URL aUrl, // if the file already exists in Study aStudy, in boolean theMultiFile); // overwrite (as option) +/*! \brief Saving the study in a specified ASCII file (or files). + Saves the study in a specified ASCII file (or files). + \param theMultiFile If this parameter is True the study will be saved in several files. +*/ void SaveAsASCII(in URL aUrl, // if the file already exists in Study aStudy, in boolean theMultiFile); // overwrite (as option) @@ -1039,8 +715,7 @@ module SALOMEDS //========================================================================== /*! \brief %Generic attribute interface - %Generic attribute is a base interface for all attributes which inherit - its methods. + %Generic attribute is a base interface for all attributes which can be assigned to the SObjects created in the study. */ //========================================================================== interface GenericAttribute @@ -1063,6 +738,7 @@ module SALOMEDS //========================================================================== /*! \brief %SComponent interface + The %SComponent interface establishes in the study a permanent assocition to the Components integrated into %SALOME platform. The %SComponent interface is a specialization of the %SObject interface. It inherits the most of its methods from the %SObject interface. */ @@ -1240,7 +916,7 @@ Activates the %UseCaseIterator. If allLevels is True the Iterator is }; //========================================================================== //========================================================================== -/*! \brief The callback interface +/*! \brief The callback interface The %StudyBuilder can be created with the method NewBuilder. While invocation of this method a new object of the class Callback is created and this object is assigned to the newly created Builder as callback which should be called when adding and removing of the ojects. @@ -1367,5 +1043,5 @@ Activates the %UseCaseIterator. If allLevels is True the Iterator is }; }; - + #endif diff --git a/idl/SALOME_Component.idl b/idl/SALOME_Component.idl index 085bf919b..391112dfd 100644 --- a/idl/SALOME_Component.idl +++ b/idl/SALOME_Component.idl @@ -25,7 +25,7 @@ #ifndef _SALOME_COMPONENT_IDL_ #define _SALOME_COMPONENT_IDL_ -/*! \ingroup Kernel +/*! This is a package of interfaces used for connecting new components to %SALOME application. It also contains a set of interfaces used for management of %MED component in %SALOME application. @@ -37,7 +37,7 @@ module Engines /*! \brief Interface of the %Container This interface defines the process of loading and registration - of new components in SALOME application + of new components in %SALOME application */ interface Container { diff --git a/idl/SALOME_Exception.idl b/idl/SALOME_Exception.idl index 6c559445b..c310e9de4 100644 --- a/idl/SALOME_Exception.idl +++ b/idl/SALOME_Exception.idl @@ -24,25 +24,31 @@ // $Header$ /*! \file SALOME_Exception.idl This file contains the objects defining the main exception used -in %SALOME application. +in %SALOME application. The idl SALOME_Exception provides a generic CORBA exception for SALOME, + with an attribute that gives an exception type,a message, plus optional source file name and line number. +This idl is intended to serve for all user CORBA exceptions raised in SALOME code, as IDL specification +does not support exception inheritance. So, all the user CORBA exceptions from SALOME could be +handled in a single catch. + */ #ifndef _SALOME_EXCEPTION_IDL_ #define _SALOME_EXCEPTION_IDL_ /*! -Module SALOME regroups all idl definitions for SALOME Kernel +Module %SALOME regroups all idl definitions for %SALOME Kernel component */ module SALOME { /*! -This enumeration contains the elements indicating the type of the exception. +This enumeration contains the elements indicating the type of the exception +which can be raised during %SALOME session. */ enum ExceptionType { COMM, /*!< Communication problem */ BAD_PARAM, /*!< Bad User parameters */ - INTERNAL_ERROR /*!< SALOME Bug, irrecoverable */ + INTERNAL_ERROR /*!< Application level problem, irrecoverable */ }; /*! This struct contains a set of fields defining the structure of the exception. diff --git a/idl/SALOME_ModuleCatalog.idl b/idl/SALOME_ModuleCatalog.idl index 3f6bfaefb..d3ac7ecee 100644 --- a/idl/SALOME_ModuleCatalog.idl +++ b/idl/SALOME_ModuleCatalog.idl @@ -27,14 +27,15 @@ creation of the catalog of components in %SALOME application */ -/*! \ingroup Kernel +/*! The main package of interfaces used for creation of the module catalog in %SALOME application. */ module SALOME_ModuleCatalog { // Type Definitions /*! -This enumeration contains a set of definitions of %SALOME modules. +This enumeration contains a set of definitions of the components integrated +into %SALOME application. */ enum ComponentType { GEOM, /*! /dev/null + if test $? = 0 ; then + OCC_VERSION_MAJOR=`grep "define OCC_VERSION_MAJOR" $ff | awk '{i=3 ; print $i}'` + fi + fi fi if test "x$occ_ok" = "xyes"; then @@ -92,7 +101,7 @@ fi if test "x$occ_ok" = xyes ; then - CAS_CPPFLAGS="-DLIN -DLINTEL -DCSFDB -DNO_CXX_EXCEPTION -DNo_exception -I$CASROOT/inc" + CAS_CPPFLAGS="-DOCC_VERSION_MAJOR=$OCC_VERSION_MAJOR -DLIN -DLINTEL -DCSFDB -DNO_CXX_EXCEPTION -DNo_exception -I$CASROOT/inc" CAS_CXXFLAGS="-funsigned-char" AC_MSG_CHECKING(for OpenCascade libraries) @@ -103,7 +112,6 @@ if test "x$occ_ok" = xyes ; then CXXFLAGS="$CXXFLAGS $CAS_CXXFLAGS" LIBS_old="$LIBS" LIBS="$LIBS -L$CASROOT/$casdir/lib -lTKernel" - AC_CACHE_VAL(salome_cv_lib_occ,[ AC_TRY_LINK( #include @@ -125,16 +133,18 @@ if test "x$occ_ok" = xno ; then AC_MSG_WARN(Opencascade libraries not found) else AC_MSG_RESULT(yes) - CAS_KERNEL="-L$CASROOT/$casdir/lib -lTKernel -lTKMath" - CAS_OCAF="-L$CASROOT/$casdir/lib -lPTKernel -lTKCAF -lFWOSPlugin -lTKPShape -lTKPCAF -lTKStdSchema -lTKShapeSchema -lPAppStdPlugin -lTKPAppStd -lTKCDF" + CAS_LDPATH="-L$CASROOT/$casdir/lib " + CAS_KERNEL="$CAS_LDPATH -lTKernel -lTKMath" + CAS_OCAF="$CAS_LDPATH -lPTKernel -lTKCAF -lFWOSPlugin -lTKPShape -lTKPCAF -lTKStdSchema -lTKShapeSchema -lPAppStdPlugin -lTKPAppStd -lTKCDF" dnl CAS_VIEWER="-L$CASROOT/$casdir/lib -lTKOpenGl -lTKV3d -lTKV2d -lTKService" - CAS_VIEWER="-L$CASROOT/$casdir/lib -lTKOpenGl -lTKV3d -lTKService" + CAS_VIEWER="$CAS_LDPATH -lTKOpenGl -lTKV3d -lTKService" # CAS_MODELER="-L$CASROOT/$casdir/lib -lTKG2d -lTKG3d -lTKGeomBase -lTKBRep -lTKGeomAlgo -lTKTopAlgo -lTKPrim -lTKBool -lTKHLR -lTKFillet -lTKFeat -lTKOffset" - CAS_MODELER="-L$CASROOT/$casdir/lib -lTKG2d -lTKG3d -lTKGeomBase -lTKBRep -lTKGeomAlgo -lTKTopAlgo -lTKPrim -lTKBool -lTKHLR -lTKFillet -lTKOffset" + CAS_MODELER="$CAS_LDPATH -lTKG2d -lTKG3d -lTKGeomBase -lTKBRep -lTKGeomAlgo -lTKTopAlgo -lTKPrim -lTKBool -lTKHLR -lTKFillet -lTKOffset" dnl CAS_DATAEXCHANGE="-L$CASROOT/$casdir/lib -lTKXSBase -lTKIGES -lTKSTEP -lTKShHealing -lTKShHealingStd -lTKSTL -lTKVRML " - CAS_DATAEXCHANGE="-L$CASROOT/$casdir/lib -lTKXSBase -lTKIGES -lTKSTEP -lTKShHealing -lTKShHealingStd" - CAS_LDFLAGS="$CAS_KERNEL $CAS_OCAF $CAS_VIEWER $CAS_MODELER $CAS_DATAEXCHANGE" - + CAS_DATAEXCHANGE="$CAS_LDPATH -lTKXSBase -lTKIGES -lTKSTEP -lTKShHealing -lTKShHealingStd" + CAS_LDFLAGS="$CAS_KERNEL $CAS_OCAF $CAS_VIEWER $CAS_MODELER $CAS_DATAEXCHANGE" + + fi AC_LANG_RESTORE diff --git a/salome_adm/unix/make_commence.in b/salome_adm/unix/make_commence.in index d5e8ecc61..ef2a4a944 100644 --- a/salome_adm/unix/make_commence.in +++ b/salome_adm/unix/make_commence.in @@ -100,12 +100,18 @@ MED2_MT_LIBS=@MED2_MT_LIBS@ OCC_INCLUDES=@CAS_CPPFLAGS@ OCC_CXXFLAGS=@CAS_CXXFLAGS@ -OCC_KERNEL_LIBS=@CAS_KERNEL@ -OCC_OCAF_LIBS=@CAS_OCAF@ -OCC_VIEWER_LIBS=@CAS_VIEWER@ -OCC_MODELER_LIBS=@CAS_MODELER@ -OCC_DATAEXCHANGE_LIBS=@CAS_DATAEXCHANGE@ -OCC_LIBS=@CAS_LDFLAGS@ +#OCC_KERNEL_LIBS=@CAS_KERNEL@ +#OCC_OCAF_LIBS=@CAS_OCAF@ +#OCC_VIEWER_LIBS=@CAS_VIEWER@ +#OCC_MODELER_LIBS=@CAS_MODELER@ +#OCC_DATAEXCHANGE_LIBS=@CAS_DATAEXCHANGE@ +#OCC_LIBS=@CAS_LDFLAGS@ +CAS_KERNEL=@CAS_KERNEL@ +CAS_OCAF=@CAS_OCAF@ +CAS_VIEWER=@CAS_VIEWER@ +CAS_MODELER=@CAS_MODELER@ +CAS_DATAEXCHANGE=@CAS_DATAEXCHANGE@ +CAS_LDPATH=@CAS_LDPATH@ # MPICH MPICH_INCLUDES=@MPICH_INCLUDES@ @@ -162,6 +168,8 @@ CXXFLAGS+= $(CORBA_CXXFLAGS) #LDFLAGS+= $(CORBA_LIBS) LIBS+=$(CORBA_LIBS) +DOXYGEN = @DOXYGEN@ + ## Shared libraries LT_STATIC_EXEC=@LT_STATIC_EXEC@ DYNAMIC_DIRS=@DYNAMIC_DIRS@ @@ -200,7 +208,7 @@ docdir=$(datadir)/doc # begin of package rules # -.PHONY: all lib bin inc resources tests install uninstall dep depend depend_idl cleandep mostlyclean clean distclean +.PHONY: all lib bin inc resources data doc tests install uninstall dep depend depend_idl cleandep mostlyclean clean distclean .SUFFIXES: .cxx .cc .c .f .o .lo .idl .py .i .ui .po .qm @@ -211,6 +219,8 @@ all: $(MAKE) lib $(MAKE) bin $(MAKE) resources + $(MAKE) data + $(MAKE) doc # # add target to build administrative files diff --git a/salome_adm/unix/make_module.in b/salome_adm/unix/make_module.in index 315ad68e7..983342227 100644 --- a/salome_adm/unix/make_module.in +++ b/salome_adm/unix/make_module.in @@ -53,6 +53,15 @@ resources: $(RESOURCES_FILES:%=$(top_builddir)/share/salome/resources/%) $(RESOURCES_FILES:%=$(top_builddir)/share/salome/resources/%): $(top_builddir)/share/salome/resources/% : % cp -f $< $@ +data: + @if test "X$(top_builddir)" = "X."; then \ + ((cd examples && $(MAKE) $@) || exit 1); \ + fi; + +doc: + @if test "X$(top_builddir)" = "X."; then \ + ((cd doc && $(MAKE) $@) || exit 1); \ + fi; install: install-resources @@SETX@; for d in $(SUBDIRS); do \ diff --git a/src/Container/Component_i.cxx b/src/Container/Component_i.cxx index 400072d0f..09d463416 100644 --- a/src/Container/Component_i.cxx +++ b/src/Container/Component_i.cxx @@ -35,6 +35,7 @@ using namespace std; #include "utilities.h" extern bool _Sleeping ; +static Engines_Component_i * theEngines_Component ; Engines_Component_i::Engines_Component_i() { @@ -47,8 +48,10 @@ Engines_Component_i::Engines_Component_i(CORBA::ORB_ptr orb, const char *instanceName, const char *interfaceName, bool notif) : - _instanceName(instanceName), _interfaceName(interfaceName), - _myConnexionToRegistry(0), _ThreadId(0) , _graphName("") , _nodeName("") { + _instanceName(instanceName), + _interfaceName(interfaceName), + _myConnexionToRegistry(0), + _ThreadId(0) , _ThreadCpuUsed(0) , _Executed(false) , _graphName("") , _nodeName("") { MESSAGE("Component constructor with instanceName "<< _instanceName); _orb = CORBA::ORB::_duplicate(orb); _poa = PortableServer::POA::_duplicate(poa); @@ -71,8 +74,7 @@ Engines_Component_i::Engines_Component_i(CORBA::ORB_ptr orb, : _instanceName(instanceName), _interfaceName(interfaceName), _myConnexionToRegistry(0), - _ThreadId(0) -{ + _ThreadId(0) , _ThreadCpuUsed(0) , _Executed(false) , _graphName("") , _nodeName("") { // MESSAGE("Component constructor with instanceName "<< _instanceName); _orb = CORBA::ORB::_duplicate(orb); _poa = PortableServer::POA::_duplicate(poa); @@ -134,11 +136,13 @@ PortableServer::ObjectId * Engines_Component_i::getId() void Engines_Component_i::beginService(const char *serviceName) { - MESSAGE("Send BeginService notification for " << serviceName << endl + MESSAGE(pthread_self() << "Send BeginService notification for " << serviceName << endl << "Component instance : " << _instanceName << endl << endl); _ThreadId = pthread_self() ; _StartUsed = 0 ; _StartUsed = CpuUsed_impl() ; + _ThreadCpuUsed = 0 ; + _Executed = true ; _serviceName = serviceName ; if ( pthread_setcanceltype( PTHREAD_CANCEL_ASYNCHRONOUS , NULL ) ) { perror("pthread_setcanceltype ") ; @@ -148,15 +152,17 @@ void Engines_Component_i::beginService(const char *serviceName) perror("pthread_setcancelstate ") ; exit(0) ; } - MESSAGE("Return from BeginService for " << serviceName - << " ThreadId " << _ThreadId - << " _graphName " << _graphName << " _nodeName " << _nodeName ); +// MESSAGE(pthread_self() << " Return from BeginService for " << serviceName +// << " ThreadId " << _ThreadId << " StartUsed " << _StartUsed +// << " _graphName " << _graphName << " _nodeName " << _nodeName ); } void Engines_Component_i::endService(const char *serviceName) { - MESSAGE("Send EndService notification for " << serviceName << endl - << "Component instance : " << _instanceName << endl << endl); + _ThreadCpuUsed = CpuUsed_impl() ; + MESSAGE(pthread_self() << " Send EndService notification for " << serviceName << endl + << " Component instance : " << _instanceName << " StartUsed " << _StartUsed << " _ThreadCpuUsed " + << _ThreadCpuUsed << endl << endl); _ThreadId = 0 ; } @@ -176,7 +182,7 @@ char* Engines_Component_i::nodeName() { return CORBA::string_dup( _nodeName.c_str() ) ; } -bool Killer( int ThreadId , int signum ) { +bool Engines_Component_i::Killer( int ThreadId , int signum ) { if ( ThreadId ) { if ( signum == 0 ) { if ( pthread_cancel( ThreadId ) ) { @@ -184,7 +190,7 @@ bool Killer( int ThreadId , int signum ) { return false ; } else { - MESSAGE("Killer : ThreadId " << ThreadId << " pthread_canceled") ; + MESSAGE(pthread_self() << "Killer : ThreadId " << ThreadId << " pthread_canceled") ; } } else { @@ -193,7 +199,7 @@ bool Killer( int ThreadId , int signum ) { return false ; } else { - MESSAGE("Killer : ThreadId " << ThreadId << " pthread_killed(" + MESSAGE(pthread_self() << "Killer : ThreadId " << ThreadId << " pthread_killed(" << signum << ")") ; } } @@ -202,12 +208,12 @@ bool Killer( int ThreadId , int signum ) { } bool Engines_Component_i::Kill_impl() { - MESSAGE("Engines_Component_i::Kill_i() pthread_t "<< pthread_self() - << " pid " << getpid() << " instanceName " - << _instanceName.c_str() << " interface " << _interfaceName.c_str() - << " machineName " << GetHostname().c_str()<< " _id " << hex << _id - << dec << " _ThreadId " << _ThreadId << " this " << hex << this - << dec ) ; +// MESSAGE("Engines_Component_i::Kill_i() pthread_t "<< pthread_self() +// << " pid " << getpid() << " instanceName " +// << _instanceName.c_str() << " interface " << _interfaceName.c_str() +// << " machineName " << GetHostname().c_str()<< " _id " << hex << _id +// << dec << " _ThreadId " << _ThreadId << " this " << hex << this +// << dec ) ; bool RetVal = false ; if ( _ThreadId > 0 && pthread_self() != _ThreadId ) { RetVal = Killer( _ThreadId , 0 ) ; @@ -268,21 +274,68 @@ bool Engines_Component_i::Resume_impl() { } +void SetCpuUsed() { + theEngines_Component->SetCurCpu() ; +} +void Engines_Component_i::SetCurCpu() { + _ThreadCpuUsed = CpuUsed() ; +// MESSAGE(pthread_self() << " Engines_Component_i::SetCurCpu() _ThreadCpuUsed " << _ThreadCpuUsed) ; +} + #include #include #include -long Engines_Component_i::CpuUsed_impl() { +long Engines_Component_i::CpuUsed() { + long cpu = 0 ; struct rusage usage ; - long cpu ; - if ( getrusage( RUSAGE_SELF , &usage ) == -1 ) { - perror("GraphBase::CpuUsed") ; - return 0 ; + if ( _ThreadId || _Executed ) { + if ( getrusage( RUSAGE_SELF , &usage ) == -1 ) { + perror("Engines_Component_i::CpuUsed") ; + return 0 ; + } + cpu = usage.ru_utime.tv_sec - _StartUsed ; +// cout << pthread_self() << " Engines_Component_i::CpuUsed " << " " << _serviceName +// << usage.ru_utime.tv_sec << " - " << _StartUsed << " = " << cpu << endl ; + } + else { +// cout << pthread_self() << "Engines_Component_i::CpuUsed _ThreadId " << _ThreadId << " " << _serviceName +// << " _StartUsed " << _StartUsed << endl ; + } + return cpu ; +} + +long Engines_Component_i::CpuUsed_impl() { + long cpu = 0 ; + if ( _ThreadId || _Executed ) { + if ( _ThreadId > 0 ) { + if ( pthread_self() != _ThreadId ) { + if ( _Sleeping ) { + } + else { +// Get Cpu in the appropriate thread with that object !... + theEngines_Component = this ; + Killer( _ThreadId ,SIGUSR1 ) ; + } + cpu = _ThreadCpuUsed ; + } + else { + _ThreadCpuUsed = CpuUsed() ; + cpu = _ThreadCpuUsed ; +// cout << pthread_self() << " Engines_Component_i::CpuUsed_impl " << _serviceName << " " << cpu +// << endl ; + } + } + else { + cpu = _ThreadCpuUsed ; +// cout << pthread_self() << " Engines_Component_i::CpuUsed_impl " << _serviceName << " " << cpu +// << endl ; + } + } + else { +// cout << pthread_self() << "Engines_Component_i::CpuUsed_impl _ThreadId " << _ThreadId << " " +// << _serviceName << " _StartUsed " << _StartUsed << endl ; } -// return usage.ru_utime.__time_t tv_sec ; - cout << "CpuUsed " << usage.ru_utime.tv_sec << " " << usage.ru_utime.tv_usec << " " - << usage.ru_stime.tv_sec << " " << usage.ru_stime.tv_usec << endl ; - cpu = usage.ru_utime.tv_sec - _StartUsed ; return cpu ; } diff --git a/src/Container/Container_i.cxx b/src/Container/Container_i.cxx index 9cef646b8..05f7c84f8 100644 --- a/src/Container/Container_i.cxx +++ b/src/Container/Container_i.cxx @@ -296,16 +296,14 @@ Engines::Container_ptr Engines_Container_i::start_impl( return Engines::Container::_nil() ; } -Engines::Component_ptr Engines_Container_i::load_impl - (const char* nameToRegister, - const char* componentName) -{ - BEGIN_OF("Container_i::load_impl"); +Engines::Component_ptr Engines_Container_i::load_impl( const char* nameToRegister, + const char* componentName ) { _numInstanceMutex.lock() ; // lock on the instance number + BEGIN_OF( "Container_i::load_impl " << componentName ) ; _numInstance++ ; char _aNumI[12]; - sprintf(_aNumI,"%d",_numInstance) ; + sprintf( _aNumI , "%d" , _numInstance ) ; string _impl_name = componentName; string _nameToRegister = nameToRegister; @@ -313,17 +311,16 @@ Engines::Component_ptr Engines_Container_i::load_impl //SCRUTE(instanceName); //string absolute_impl_name = _library_path + "lib" + _impl_name + ".so"; - string absolute_impl_name(_impl_name); - // SCRUTE(absolute_impl_name); + string absolute_impl_name( _impl_name ) ; + SCRUTE(absolute_impl_name); void* handle; - handle = dlopen(absolute_impl_name.c_str(), RTLD_LAZY); - if (!handle) - { - INFOS("Can't load shared library : " << absolute_impl_name); - INFOS("error dlopen: " << dlerror()); - _numInstanceMutex.unlock() ; - return Engines::Component::_nil() ; - } + handle = dlopen( absolute_impl_name.c_str() , RTLD_LAZY ) ; + if ( !handle ) { + INFOS("Can't load shared library : " << absolute_impl_name); + INFOS("error dlopen: " << dlerror()); + _numInstanceMutex.unlock() ; + return Engines::Component::_nil() ; + } string factory_name = _nameToRegister + string("Engine_factory"); // SCRUTE(factory_name) ; @@ -334,61 +331,47 @@ Engines::Component_ptr Engines_Container_i::load_impl PortableServer::ObjectId *, const char *, const char *) ; -// typedef PortableServer::ObjectId * (*FACTORY_FUNCTION_SUPERV) -// (CORBA::ORB_ptr, -// PortableServer::POA_ptr, -// PortableServer::ObjectId *, -// const char *, -// const char * , -// int , char ** ) ; - FACTORY_FUNCTION Component_factory = (FACTORY_FUNCTION) dlsym(handle, factory_name.c_str()); -// FACTORY_FUNCTION_SUPERV Component_factory_superv = (FACTORY_FUNCTION_SUPERV) Component_factory ; - -// PortableServer::ObjectId * (*Component_factory) (CORBA::ORB_ptr, -// PortableServer::POA_ptr, -// PortableServer::ObjectId *, -// const char *, -// const char *) = -// (PortableServer::ObjectId * (*) (CORBA::ORB_ptr, -// PortableServer::POA_ptr, -// PortableServer::ObjectId *, -// const char *, -// const char *)) -// dlsym(handle, factory_name.c_str()); char *error ; - if ((error = dlerror()) != NULL) - { + if ( (error = dlerror() ) != NULL) { INFOS("Can't resolve symbol: " + factory_name); SCRUTE(error); _numInstanceMutex.unlock() ; return Engines::Component::_nil() ; } - // Instanciate required CORBA object - PortableServer::ObjectId * id ; -// if ( factory_name == "SupervisionEngine_factory" ) { // for Python ... -// id = (Component_factory_superv) (_orb, _poa, _id, instanceName.c_str(), -// _nameToRegister.c_str(), _argc , _argv ); -// } -// else { - id = (Component_factory) (_orb, _poa, _id, instanceName.c_str(), - _nameToRegister.c_str()); -// } + string component_registerName = _containerName + "/" + _nameToRegister; + Engines::Component_var iobject = Engines::Component::_nil() ; + try { + CORBA::Object_var obj = _NS->Resolve( component_registerName.c_str() ) ; + if ( CORBA::is_nil( obj ) ) { +// Instanciate required CORBA object + PortableServer::ObjectId * id ; + id = (Component_factory) ( _orb, _poa, _id, instanceName.c_str() , + _nameToRegister.c_str() ) ; // get reference from id - CORBA::Object_var o = _poa->id_to_reference(*id); - Engines::Component_var iobject = Engines::Component::_narrow(o) ; + obj = _poa->id_to_reference(*id); + iobject = Engines::Component::_narrow( obj ) ; // _numInstanceMutex.lock() ; // lock on the add on handle_map (necessary ?) // register the engine under the name containerName.dir/nameToRegister.object - string component_registerName = _containerName + "/" + _nameToRegister; - _NS->Register(iobject, component_registerName.c_str()) ; + _NS->Register( iobject , component_registerName.c_str() ) ; + MESSAGE( "Container_i::load_impl " << component_registerName.c_str() << " bound" ) ; + } + else { // JR : No ReBind !!! + MESSAGE( "Container_i::load_impl " << component_registerName.c_str() << " already bound" ) ; + iobject = Engines::Component::_narrow( obj ) ; + } + } + catch (...) { + MESSAGE( "Container_i::load_impl catched" ) ; + } //Jr _numInstanceMutex.lock() ; // lock on the add on handle_map (necessary ?) handle_map[instanceName] = handle; + END_OF("Container_i::load_impl"); _numInstanceMutex.unlock() ; -// END_OF("Container_i::load_impl"); return Engines::Component::_duplicate(iobject); } @@ -435,18 +418,20 @@ void ActSigIntHandler() { struct sigaction SigIntAct ; SigIntAct.sa_sigaction = &SigIntHandler ; SigIntAct.sa_flags = SA_SIGINFO ; - if ( sigaction( SIGINT , &SigIntAct, NULL ) ) { + if ( sigaction( SIGINT | SIGUSR1 , &SigIntAct, NULL ) ) { perror("SALOME_Container main ") ; exit(0) ; } else { - INFOS("SigIntHandler activated") ; + INFOS(pthread_self() << "SigIntHandler activated") ; } } +void SetCpuUsed() ; + void SigIntHandler(int what , siginfo_t * siginfo , void * toto ) { - MESSAGE("SigIntHandler what " << what << endl + MESSAGE(pthread_self() << "SigIntHandler what " << what << endl << " si_signo " << siginfo->si_signo << endl << " si_code " << siginfo->si_code << endl << " si_pid " << siginfo->si_pid) ; @@ -458,16 +443,21 @@ void SigIntHandler(int what , siginfo_t * siginfo , } else { ActSigIntHandler() ; - _Sleeping = true ; - INFOS("SigIntHandler BEGIN sleeping.") - MESSAGE("SigIntHandler BEGIN sleeping.") ; - int count = 0 ; - while( _Sleeping ) { - sleep( 1 ) ; - count += 1 ; + if ( siginfo->si_signo == SIGUSR1 ) { + SetCpuUsed() ; + } + else { + _Sleeping = true ; + INFOS("SigIntHandler BEGIN sleeping.") + MESSAGE("SigIntHandler BEGIN sleeping.") ; + int count = 0 ; + while( _Sleeping ) { + sleep( 1 ) ; + count += 1 ; + } + INFOS("SigIntHandler LEAVE sleeping after " << count << " s.") + MESSAGE("SigIntHandler LEAVE sleeping after " << count << " s.") ; } - INFOS("SigIntHandler LEAVE sleeping after " << count << " s.") - MESSAGE("SigIntHandler LEAVE sleeping after " << count << " s.") ; return ; } } diff --git a/src/Container/SALOME_ComponentPy.py b/src/Container/SALOME_ComponentPy.py index 1ac2e3cfc..004d6eded 100755 --- a/src/Container/SALOME_ComponentPy.py +++ b/src/Container/SALOME_ComponentPy.py @@ -40,6 +40,8 @@ from libNOTIFICATION import * from SALOME_utilities import * +from thread import * + #============================================================================= #define an implementation of the component interface @@ -66,6 +68,8 @@ class SALOME_ComponentPy_i (Engines__POA.Component): self._nodeName = '' self._ThreadId = 0 self._StartUsed = 0 + self._ThreadCpuUsed = 0 + self._Executed = 0 naming_service = SALOME_NamingServicePy_i(self._orb) Component_path = "/Containers/" + os.getenv( "HOSTNAME" ) + "/" + self._containerName + "/" + self._interfaceName @@ -127,15 +131,21 @@ class SALOME_ComponentPy_i (Engines__POA.Component): #------------------------------------------------------------------------- def beginService(self , serviceName ): - MESSAGE( "Send BeginService notification for " + str(serviceName) + "for graph/node" + str(self._graphName) + str(self._nodeName) ) + MESSAGE( "Send BeginService notification for " + str(serviceName) + " for graph/node " + str(self._graphName) + " " + str(self._nodeName) ) MESSAGE( "Component instance : " + str ( self._instanceName ) ) + self._serviceName = str(serviceName) + self._ThreadId = get_ident() self._StartUsed = 0 self._StartUsed = self.CpuUsed_impl() + self._ThreadCpuUsed = 0 + self._Executed = 1 + MESSAGE( "SALOME_ComponentPy_i::beginService _StartUsed " + str( self._ThreadId ) + " " + str( self._StartUsed ) ) + #------------------------------------------------------------------------- def endService(self , serviceName ): - MESSAGE( "Send EndService notification for " + str(serviceName) + "for graph/node" + str(self._graphName) + str(self._nodeName) ) + MESSAGE( "Send EndService notification for " + str( self._ThreadId ) + " " + str(serviceName) + " for graph/node " + str(self._graphName) + " " + str(self._nodeName) + " CpuUsed " + str( self.CpuUsed_impl() ) ) MESSAGE( "Component instance : " + str(self._instanceName) ) #------------------------------------------------------------------------- @@ -183,10 +193,16 @@ class SALOME_ComponentPy_i (Engines__POA.Component): #------------------------------------------------------------------------- def CpuUsed_impl(self): - cpu = time.clock() - cpuL = int(cpu) - self._StartUsed - print "SALOME_ComponentPy_i::CpuUsed_impl ",cpuL,type(cpuL) - return cpuL + if ( self._ThreadId | self._Executed ) : + if self._ThreadId == get_ident() : + cpu = time.clock() + self._ThreadCpuUsed = int(cpu) - self._StartUsed + MESSAGE( "SALOME_ComponentPy_i::CpuUsed_impl " + self._serviceName + " " + str( int(cpu) ) + " - " + str( self._StartUsed ) + " = " + str( self._ThreadCpuUsed ) ) + return self._ThreadCpuUsed + MESSAGE( "SALOME_ComponentPy_i::CpuUsed_impl " + self._serviceName + " " + str( self._ThreadCpuUsed ) ) + return self._ThreadCpuUsed + MESSAGE( "SALOME_ComponentPy_i::CpuUsed_impl self._StartUsed " + self._serviceName + " " + str(self._StartUsed) ) + return 0 #------------------------------------------------------------------------- diff --git a/src/Container/SALOME_Component_i.hxx b/src/Container/SALOME_Component_i.hxx index a5d462b65..fc537d1c8 100644 --- a/src/Container/SALOME_Component_i.hxx +++ b/src/Container/SALOME_Component_i.hxx @@ -79,10 +79,13 @@ public: void Names( const char * graphName , const char * nodeName ) ; char * graphName() ; char * nodeName() ; + bool Killer( int ThreadId , int signum ); bool Kill_impl(); bool Stop_impl(); bool Suspend_impl(); bool Resume_impl(); + void SetCurCpu() ; + long CpuUsed() ; long CpuUsed_impl() ; protected: @@ -102,6 +105,8 @@ protected: private: pthread_t _ThreadId ; long _StartUsed ; + long _ThreadCpuUsed ; + bool _Executed ; }; #endif diff --git a/src/Container/SALOME_Container.cxx b/src/Container/SALOME_Container.cxx index 3914a57f3..ce8c05628 100644 --- a/src/Container/SALOME_Container.cxx +++ b/src/Container/SALOME_Container.cxx @@ -32,7 +32,7 @@ using namespace std; # include "Utils_ORB_INIT.hxx" # include "Utils_SINGLETON.hxx" - +#include "SALOME_NamingService.hxx" #include "SALOME_Container_i.hxx" #include #include @@ -67,21 +67,87 @@ int main(int argc, char* argv[]) CORBA::ORB_var &orb = init( argc , argv ) ; // Obtain a reference to the root POA. - CORBA::Object_var obj = orb->resolve_initial_references("RootPOA"); - PortableServer::POA_var root_poa = PortableServer::POA::_narrow(obj); - // obtain the root poa manager - PortableServer::POAManager_var pman = root_poa->the_POAManager(); - + // + long TIMESleep = 250000000; + int NumberOfTries = 40; + int a; + timespec ts_req; + ts_req.tv_nsec=TIMESleep; + ts_req.tv_sec=0; + timespec ts_rem; + ts_rem.tv_nsec=0; + ts_rem.tv_sec=0; + CosNaming::NamingContext_var inc; + PortableServer::POA_var root_poa; + CORBA::Object_var theObj; + CORBA::Object_var obj; + CORBA::Object_var object; + SALOME_Logger::Logger_var log; + SALOME_NamingService &naming = *SINGLETON_::Instance() ; + int CONTAINER=0; + const char * Env = getenv("USE_LOGGER"); + int EnvL =0; + if ((Env!=NULL) && (strlen(Env))) + EnvL=1; + + CosNaming::Name name; + name.length(1); + name[0].id=CORBA::string_dup("Logger"); + PortableServer::POAManager_var pman; + for (int i = 1; i<=NumberOfTries; i++){ + if (i!=1) + a=nanosleep(&ts_req,&ts_rem); + try{ + obj = orb->resolve_initial_references("RootPOA"); + if(!CORBA::is_nil(obj)) + root_poa = PortableServer::POA::_narrow(obj); + if(!CORBA::is_nil(root_poa)) + pman = root_poa->the_POAManager(); + if(!CORBA::is_nil(orb)) + theObj = orb->resolve_initial_references("NameService"); + if (!CORBA::is_nil(theObj)) + inc = CosNaming::NamingContext::_narrow(theObj); + } + catch( CORBA::COMM_FAILURE& ) + { + MESSAGE( "Container: CORBA::COMM_FAILURE: Unable to contact the Naming Service" ) + } + if(!CORBA::is_nil(inc)) { + MESSAGE( "Container: Naming Service was found" ) + if(EnvL==1){ + for(int j=1; j<=NumberOfTries; j++){ + if (j!=1) + a=nanosleep(&ts_req, &ts_rem); + try{ + object = inc->resolve(name); + } + catch(CosNaming::NamingContext::NotFound){ MESSAGE( "Container: Logger Server wasn't found" ) } + catch(...){ MESSAGE( "Container: Unknown exception" ) } + if (!CORBA::is_nil(object)) + log = SALOME_Logger::Logger::_narrow(object); + if (!CORBA::is_nil(log)){ + MESSAGE( "Container: Logger Server was found" ) + log->ping(); + CONTAINER=1; + break; + } + }} + } + if ((CONTAINER==1)||((EnvL==0)&&(!CORBA::is_nil(inc)))) + break; + } + + // // define policy objects PortableServer::ImplicitActivationPolicy_var implicitActivation = root_poa->create_implicit_activation_policy(PortableServer::NO_IMPLICIT_ACTIVATION) ; - // default = NO_IMPLICIT_ACTIVATION + // default = NO_IMPLICIT_ACTIVATION PortableServer::ThreadPolicy_var threadPolicy = root_poa->create_thread_policy(PortableServer::ORB_CTRL_MODEL) ; - // default = ORB_CTRL_MODEL, other choice SINGLE_THREAD_MODEL - + // default = ORB_CTRL_MODEL, other choice SINGLE_THREAD_MODEL + // create policy list CORBA::PolicyList policyList; policyList.length(2); diff --git a/src/DataTypeCatalog/SALOME_DataTypeCatalog_Server.cxx b/src/DataTypeCatalog/SALOME_DataTypeCatalog_Server.cxx index e9b4de72f..95c4ce6a1 100644 --- a/src/DataTypeCatalog/SALOME_DataTypeCatalog_Server.cxx +++ b/src/DataTypeCatalog/SALOME_DataTypeCatalog_Server.cxx @@ -31,23 +31,86 @@ using namespace std; #include "SALOME_NamingService.hxx" #include "SALOME_DataTypeCatalog_impl.hxx" #include "utilities.h" - +# include "Utils_SINGLETON.hxx" int main(int argc,char **argv) { try { CosNaming::NamingContext_var _rootContext, catalogContext; - // initialize the ORB - CORBA::ORB_ptr orb = CORBA::ORB_init (argc, argv); - // initialize POA + // + long TIMESleep = 250000000; + int NumberOfTries = 40; + int a; + timespec ts_req; + ts_req.tv_nsec=TIMESleep; + ts_req.tv_sec=0; + timespec ts_rem; + ts_rem.tv_nsec=0; + ts_rem.tv_sec=0; + CosNaming::NamingContext_var inc; + PortableServer::POA_var poa; + CORBA::Object_var theObj; + CORBA::Object_var obj; + CORBA::Object_var object; + SALOME_Logger::Logger_var log; + int DATA_TYPE_CATALOG=0; + const char * Env = getenv("USE_LOGGER"); + int EnvL =0; + if ((Env!=NULL) && (strlen(Env))) + EnvL=1; + CosNaming::Name name; + name.length(1); + name[0].id=CORBA::string_dup("Logger"); + PortableServer::POAManager_var mgr; + + for (int i = 1; i<=NumberOfTries; i++){ + if (i!=1) + a=nanosleep(&ts_req,&ts_rem); + try{ + obj = orb->resolve_initial_references("RootPOA"); + if(!CORBA::is_nil(obj)) + poa = PortableServer::POA::_narrow(obj); + if(!CORBA::is_nil(poa)) + mgr = poa->the_POAManager(); + if(!CORBA::is_nil(orb)) + theObj = orb->resolve_initial_references("NameService"); + if (!CORBA::is_nil(theObj)) + inc = CosNaming::NamingContext::_narrow(theObj);} + catch( CORBA::COMM_FAILURE& ) + { + MESSAGE( "Data Type Catalog: CORBA::COMM_FAILURE: Unable to contact the Naming Service" ) + } + if(!CORBA::is_nil(inc)) { + MESSAGE( "Data Type Catalog: Naming Service was found" ) + if(EnvL==1){ + CORBA::ORB_var orb1 = CORBA::ORB_init(argc,argv) ; + SALOME_NamingService &NS = *SINGLETON_::Instance() ; + NS.init_orb( orb1 ) ; + for(int j=1; j<=NumberOfTries; j++){ + if (j!=1) + a=nanosleep(&ts_req, &ts_rem); + try{ + object = inc->resolve(name);} + catch(CosNaming::NamingContext::NotFound){ MESSAGE( "Data Type Catalog: Logger Server wasn't found" ) } + catch(...){ MESSAGE( "Data Type Catalog: Unknown exception" ) } + if (!CORBA::is_nil(object)) + log = SALOME_Logger::Logger::_narrow(object); + if (!CORBA::is_nil(log)){ + MESSAGE( "Data Type Catalog: Logger Server was found" ) + log->ping(); + DATA_TYPE_CATALOG=1; + break; + } + + }} + } + if ((DATA_TYPE_CATALOG==1)||((EnvL==0)&&(!CORBA::is_nil(inc)))) + break; + } - CORBA::Object_var poaobj = orb->resolve_initial_references ("RootPOA"); - - PortableServer::POA_var poa = PortableServer::POA::_narrow (poaobj); - PortableServer::POAManager_var mgr = poa->the_POAManager(); - + // // Active catalog SALOME_DataTypeCatalogImpl* Catalogue_i = new SALOME_DataTypeCatalogImpl(argc, argv); @@ -70,7 +133,7 @@ int main(int argc,char **argv) poa->destroy(1,1); - } + } catch(CORBA::SystemException&) { INFOS("Caught CORBA::SystemException.") } diff --git a/src/HDFPersist/HDFattrCreate.c b/src/HDFPersist/HDFattrCreate.c index 9d4b3dc54..e3e176b66 100644 --- a/src/HDFPersist/HDFattrCreate.c +++ b/src/HDFPersist/HDFattrCreate.c @@ -55,7 +55,11 @@ hdf_idt HDFattrCreate(hdf_idt pid,char *name,hdf_type type, size_t size) break; case HDF_INT32 : +#ifdef PCLINUX + type_hdf = H5T_STD_I32BE; +#else type_hdf = H5T_NATIVE_INT; +#endif break; case HDF_INT64 : diff --git a/src/HDFPersist/HDFattrRead.c b/src/HDFPersist/HDFattrRead.c index 464e9c2a9..25474b9a7 100644 --- a/src/HDFPersist/HDFattrRead.c +++ b/src/HDFPersist/HDFattrRead.c @@ -42,8 +42,12 @@ hdf_err HDFattrRead(hdf_idt id,void *val) { hdf_err ret = -1; hdf_idt type_hdf; - + if ((type_hdf = H5Aget_type(id)) >= 0) { +#ifdef PCLINUX + if ((H5Tget_class(type_hdf) == H5T_INTEGER) && (H5Tget_size(type_hdf) == 4)) + type_hdf = H5T_NATIVE_INT; +#endif ret = H5Aread(id, type_hdf, val); } diff --git a/src/HDFPersist/HDFattrWrite.c b/src/HDFPersist/HDFattrWrite.c index b1dbea588..61d378427 100644 --- a/src/HDFPersist/HDFattrWrite.c +++ b/src/HDFPersist/HDFattrWrite.c @@ -41,15 +41,30 @@ Module : SALOME hdf_err HDFattrWrite(hdf_idt id, void *val) { hdf_idt type_id; - hdf_type type; - hdf_class_type hdf_type; int ret = 0; +#ifdef PCLINUX + int isI32BE = 0; +#endif if ((type_id = H5Aget_type(id)) < 0) return -1; +#ifdef PCLINUX + if((H5Tget_class(type_id) == H5T_INTEGER) && (H5Tget_size(type_id) == 4)) { + isI32BE = 1; /* See HDFattrCreate */ + if (H5Tconvert(H5T_NATIVE_INT,H5T_STD_I32BE,1,(void *)val,NULL,NULL) < 0) + return -1; + } +#endif + ret = H5Awrite(id,type_id, val); + +#ifdef PCLINUX + if (isI32BE && (H5Tconvert(H5T_STD_I32BE,H5T_NATIVE_INT,1,(void *)val,NULL,NULL) < 0)) + return -1; +#endif + H5Tclose(type_id); return ret; diff --git a/src/HDFPersist/HDFdatasetCreate.c b/src/HDFPersist/HDFdatasetCreate.c index dd4772525..70e8ddd50 100644 --- a/src/HDFPersist/HDFdatasetCreate.c +++ b/src/HDFPersist/HDFdatasetCreate.c @@ -59,7 +59,11 @@ hdf_idt HDFdatasetCreate(hdf_idt pid,char *name,hdf_type type, break; case HDF_INT32 : +#ifdef PCLINUX + type_hdf = H5T_STD_I32BE; +#else type_hdf = H5T_NATIVE_INT; +#endif break; case HDF_INT64 : diff --git a/src/HDFPersist/HDFdatasetGetType.c b/src/HDFPersist/HDFdatasetGetType.c index 9cc4bbd6a..722849d1a 100644 --- a/src/HDFPersist/HDFdatasetGetType.c +++ b/src/HDFPersist/HDFdatasetGetType.c @@ -34,14 +34,12 @@ HDFdatasetGetType(hdf_idt id) { hdf_idt type_id; hdf_type type; - hdf_class_type hdf_type; hdf_size_type size; if ((type_id = H5Dget_type(id)) < 0) return HDF_NONE; - hdf_type = H5Tget_class(type_id); - switch (hdf_type) + switch (H5Tget_class(type_id)) { case H5T_INTEGER : size = H5Tget_size(type_id); diff --git a/src/HDFPersist/HDFdatasetRead.c b/src/HDFPersist/HDFdatasetRead.c index 7cb951b8d..0c89c3902 100644 --- a/src/HDFPersist/HDFdatasetRead.c +++ b/src/HDFPersist/HDFdatasetRead.c @@ -46,8 +46,12 @@ hdf_err HDFdatasetRead(hdf_idt id, void *val) if ((datatype = H5Dget_type(id)) < 0) return -1; - if ((ret = H5Dread(id,datatype,H5S_ALL,H5S_ALL, - H5P_DEFAULT, val)) < 0) +#ifdef PCLINUX + if ((H5Tget_class(datatype) == H5T_INTEGER) && (H5Tget_size(datatype) == 4)) + datatype = H5T_NATIVE_INT; +#endif + + if ((ret = H5Dread(id,datatype,H5S_ALL,H5S_ALL,H5P_DEFAULT, val)) < 0) return -1; return 0; diff --git a/src/HDFPersist/HDFdatasetWrite.c b/src/HDFPersist/HDFdatasetWrite.c index f48c6a27c..07dbefdd9 100644 --- a/src/HDFPersist/HDFdatasetWrite.c +++ b/src/HDFPersist/HDFdatasetWrite.c @@ -42,13 +42,32 @@ hdf_err HDFdatasetWrite(hdf_idt id, void *val) { hdf_idt datatype; hdf_err ret; +#ifdef PCLINUX + int isI32BE = 0; + int size; +#endif if ((datatype = H5Dget_type(id)) < 0) return -1; - if ((ret = H5Dwrite(id,datatype,H5S_ALL,H5S_ALL, - H5P_DEFAULT, val)) < 0) +#ifdef PCLINUX + if((H5Tget_class(datatype) == H5T_INTEGER) && (H5Tget_size(datatype) == 4)) { + isI32BE = 1; /* See HDFdatasetCreate */ + size = (int)HDFdatasetGetSize(id) / 4; + if(size == 0) + return -1; + if(H5Tconvert(H5T_NATIVE_INT, H5T_STD_I32BE, size, (void *)val, NULL, NULL) < 0) + return -1; + } +#endif + + if ((ret = H5Dwrite(id, datatype, H5S_ALL, H5S_ALL, H5P_DEFAULT, val)) < 0) + return -1; + +#ifdef PCLINUX + if (isI32BE && (H5Tconvert(H5T_STD_I32BE, H5T_NATIVE_INT, size, (void *)val, NULL, NULL) < 0)) return -1; +#endif return 0; } diff --git a/src/HDFPersist/Makefile.in b/src/HDFPersist/Makefile.in index 3baa03bd9..6fe8916d2 100644 --- a/src/HDFPersist/Makefile.in +++ b/src/HDFPersist/Makefile.in @@ -96,7 +96,7 @@ LIB_SRC = \ #BIN = test9 test8 CPPFLAGS+=$(OCC_INCLUDES) $(HDF5_INCLUDES) -DPCLINUX -LDFLAGS+= $(OCC_LIBS) $(HDF5_LIBS) +LDFLAGS+= $(CAS_LDPATH) -lTKernel $(HDF5_LIBS) @CONCLUDE@ diff --git a/src/Loader/InquireServersQThread.cxx b/src/Loader/InquireServersQThread.cxx index 4fa67e651..b80547c9d 100644 --- a/src/Loader/InquireServersQThread.cxx +++ b/src/Loader/InquireServersQThread.cxx @@ -547,7 +547,7 @@ QString findFile( QString filename ) QString dir; char* cenv; - // Try ${SALOME_ROOT_DIR}/share/salome/resources directory + // Try ${KERNEL_ROOT_DIR}/share/salome/resources directory cenv = getenv( "KERNEL_ROOT_DIR" ); if ( cenv ) { dir.sprintf( "%s", cenv ); @@ -592,40 +592,6 @@ QString findFile( QString filename ) return fileInfo.filePath(); } } - // Try ${SALOME_SITE_DIR}/share/salome/resources directory - cenv = getenv( "SALOME_SITE_DIR" ); - if ( cenv ) { - dir.sprintf( "%s", cenv ); - if ( !dir.isEmpty() ) { - dir = addSlash(dir) ; - dir = dir + "share" ; - dir = addSlash(dir) ; - dir = dir + "salome" ; - dir = addSlash(dir) ; - dir = dir + "resources" ; - dir = addSlash(dir) ; - QFileInfo fileInfo( dir + filename ); - if ( fileInfo.isFile() && fileInfo.exists() ) - return fileInfo.filePath(); - } - } - // Try ${SALOME_ROOT_DIR}/share/salome/resources directory - cenv = getenv( "SALOME_ROOT_DIR" ); - if ( cenv ) { - dir.sprintf( "%s", cenv ); - if ( !dir.isEmpty() ) { - dir = addSlash(dir) ; - dir = dir + "share" ; - dir = addSlash(dir) ; - dir = dir + "salome" ; - dir = addSlash(dir) ; - dir = dir + "resources" ; - dir = addSlash(dir) ; - QFileInfo fileInfo( dir + filename ); - if ( fileInfo.isFile() && fileInfo.exists() ) - return fileInfo.filePath(); - } - } return filename; } QString addSlash( const QString& path ) diff --git a/src/Logger/SALOME_Logger_Server.cxx b/src/Logger/SALOME_Logger_Server.cxx index 3d40b45f7..c3f7acce1 100644 --- a/src/Logger/SALOME_Logger_Server.cxx +++ b/src/Logger/SALOME_Logger_Server.cxx @@ -11,7 +11,9 @@ using namespace std; #include #include "SALOME_Logger_Server.hxx" - +#include +#include +#include omni_mutex Logger::myLock; ///////////////////////////////////////////////////////////////////// @@ -49,6 +51,11 @@ void Logger::putMessage(const char* message) myLock.unlock(); } +void Logger::ping() +{ + cout<<" Logger::ping() pid "<< getpid()< 2) @@ -59,51 +66,73 @@ int main(int argc, char **argv) try { //Initialize the ORB - CORBA::ORB_var orb = CORBA::ORB_init(argc,argv) ; - - CORBA::Object_var obj = orb->resolve_initial_references("RootPOA") ; - PortableServer::POA_var poa = PortableServer::POA::_narrow(obj) ; - - // NB. You can activate the POA before or after - // activating objects in that POA. - PortableServer::POAManager_var pman = poa->the_POAManager(); - pman->activate(); - + long TIMESleep = 250000000; + int NumberOfTries = 40; + int a; + timespec ts_req; + ts_req.tv_nsec=TIMESleep; + ts_req.tv_sec=0; + timespec ts_rem; + ts_rem.tv_nsec=0; + ts_rem.tv_sec=0; + CosNaming::NamingContext_var inc; + CORBA::ORB_var orb; + SALOME_Logger::Logger_var myLoggerRef; + CORBA::Object_var theObj; Logger* myLogger; + CORBA::Object_var obj; + PortableServer::POA_var poa; + PortableServer::POAManager_var pman; + orb = CORBA::ORB_init(argc,argv) ; + for (int i = 1; i<=NumberOfTries; i++){ + if (i!=1) + a=nanosleep(&ts_req,&ts_rem); + obj = orb->resolve_initial_references("RootPOA") ; + if(!CORBA::is_nil(obj)) + poa = PortableServer::POA::_narrow(obj) ; + pman = poa->the_POAManager(); + // NB. You can activate the POA before or after + // activating objects in that POA. + + // This activates the object in the root POA (by default), and + // returns a reference to it. + //NB. You can't use SALOME_NamingService class because it uses MESSAGE macro + //Otherwise, you will get segmentation fault. + //Get initial naming context + try{ + if(!CORBA::is_nil(orb)) + theObj = orb->resolve_initial_references("NameService"); + //Narrow to NamingContext + if (!CORBA::is_nil(theObj)){ + inc = CosNaming::NamingContext::_narrow(theObj); + } + }catch(CORBA::COMM_FAILURE&) + { + cout<<"Logger Server: CORBA::COMM_FAILURE: Unable to contact the Naming Service"<_this(); - - //NB. You can't use SALOME_NamingService class because it uses MESSAGE macro - //Otherwise, you will get segmentation fault. - - //Get initial naming context - CORBA::Object_var theObj = orb->resolve_initial_references("NameService"); - //Narrow to NamingContext - CosNaming::NamingContext_var inc = CosNaming::NamingContext::_narrow(theObj); - + myLoggerRef = myLogger->_this(); CosNaming::Name name; name.length(1); name[0].id = CORBA::string_dup("Logger"); - inc->bind(name,myLoggerRef); - myLogger->_remove_ref(); - + pman->activate(); orb->run() ; - orb->destroy() ; } catch(CORBA::COMM_FAILURE& ex) { cerr << "Caught system exception COMM_FAILURE -- unable to contact the " - << "object." << endl; + << "object." << endl; } catch(CORBA::SystemException&) { diff --git a/src/Logger/SALOME_Logger_Server.hxx b/src/Logger/SALOME_Logger_Server.hxx index 4b000c50c..4b1441bd1 100644 --- a/src/Logger/SALOME_Logger_Server.hxx +++ b/src/Logger/SALOME_Logger_Server.hxx @@ -29,6 +29,7 @@ public: virtual ~Logger(); //put message into one special place for all servers void putMessage(const char* message); + void ping(); private: //if m_putIntoFile is true all messages will be put into special //otherwise all messages will be put into terminal via cout diff --git a/src/Logger/SALOME_Trace.cxx b/src/Logger/SALOME_Trace.cxx index ab5abd2b2..e3185daf6 100644 --- a/src/Logger/SALOME_Trace.cxx +++ b/src/Logger/SALOME_Trace.cxx @@ -34,28 +34,54 @@ SALOME_Trace::SALOME_Trace() //Initialize the ORB CORBA::ORB_var orb = CORBA::ORB_init(argc,argv) ; - //Get initial naming context - CORBA::Object_var theObj = orb->resolve_initial_references("NameService"); - //Narrow to NamingContext - CosNaming::NamingContext_var inc = CosNaming::NamingContext::_narrow(theObj); - + long TIMESleep = 250000000; + int NumberOfTries = 40; + int a; + timespec ts_req; + ts_req.tv_nsec=TIMESleep; + ts_req.tv_sec=0; + timespec ts_rem; + ts_rem.tv_nsec=0; + ts_rem.tv_sec=0; + CosNaming::NamingContext_var inc; + CORBA::Object_var theObj; + CORBA::Object_var obj; CosNaming::Name name; name.length(1); name[0].id = CORBA::string_dup("Logger"); - - CORBA::Object_var obj; - obj = inc->resolve(name); - - m_pInterfaceLogger = SALOME_Logger::Logger::_narrow(obj) ; - + for (int i = 1; i<=NumberOfTries; i++){ + if (i!=1) + a=nanosleep(&ts_req,&ts_rem); + try{ + if(!CORBA::is_nil(orb)) + theObj = orb->resolve_initial_references("NameService"); + if (!CORBA::is_nil(theObj)) + inc = CosNaming::NamingContext::_narrow(theObj); + } + catch( CORBA::COMM_FAILURE& ) + { + cout<<"SALOME_TRACE: CORBA::COMM_FAILURE: Unable to contact the Naming Service" <resolve(name); + m_pInterfaceLogger = SALOME_Logger::Logger::_narrow(obj); + if (!CORBA::is_nil(m_pInterfaceLogger)) + cout<<"SALOME_TRACE: Logger Server was found"< +#endif //#define CHECKTIME #ifdef CHECKTIME @@ -46,12 +52,77 @@ int main(int argc,char **argv) CORBA::ORB_ptr orb = CORBA::ORB_init (argc, argv); // initialize POA - - CORBA::Object_var poaobj = orb->resolve_initial_references ("RootPOA"); - - PortableServer::POA_var poa = PortableServer::POA::_narrow (poaobj); - PortableServer::POAManager_var mgr = poa->the_POAManager(); - + // + long TIMESleep = 250000000; + int NumberOfTries = 40; + int a; + timespec ts_req; + ts_req.tv_nsec=TIMESleep; + ts_req.tv_sec=0; + timespec ts_rem; + ts_rem.tv_nsec=0; + ts_rem.tv_sec=0; + CosNaming::NamingContext_var inc; + PortableServer::POA_var poa; + CORBA::Object_var theObj; + CORBA::Object_var obj; + CORBA::Object_var object; + SALOME_Logger::Logger_var log; + int MODULE_CATALOG=0; + const char * Env = getenv("USE_LOGGER"); + int EnvL =0; + if ((Env!=NULL) && (strlen(Env))) + EnvL=1; + CosNaming::Name name; + name.length(1); + name[0].id=CORBA::string_dup("Logger"); + PortableServer::POAManager_var mgr; + for (int i = 1; i<=NumberOfTries; i++){ + if (i!=1) + a=nanosleep(&ts_req,&ts_rem); + try{ + obj = orb->resolve_initial_references("RootPOA"); + if(!CORBA::is_nil(obj)) + poa = PortableServer::POA::_narrow(obj); + if(!CORBA::is_nil(poa)) + mgr = poa->the_POAManager(); + if(!CORBA::is_nil(orb)) + theObj = orb->resolve_initial_references("NameService"); + } + catch( CORBA::COMM_FAILURE& ) + { + MESSAGE( "Module Catalog Server: CORBA::COMM_FAILURE: Unable to contact the Naming Service" ) + } + if (!CORBA::is_nil(theObj)){ + inc = CosNaming::NamingContext::_narrow(theObj); + if(!CORBA::is_nil(inc)) { + MESSAGE( "Module Catalog Server: Naming Service was found" ) + if(EnvL==1){ + CORBA::ORB_var orb1 = CORBA::ORB_init(argc,argv) ; + SALOME_NamingService &NS = *SINGLETON_::Instance() ; + NS.init_orb( orb1 ) ; + for(int j=1; j<=NumberOfTries; j++){ + if (j!=1) + a=nanosleep(&ts_req, &ts_rem); + try{ + object = inc->resolve(name);} + catch(CosNaming::NamingContext::NotFound){ MESSAGE( "Logger Server wasn't found" ) } + catch(...){ MESSAGE( "Module Catalog Server: Unknown exception" ) } + if (!CORBA::is_nil(object)) + log = SALOME_Logger::Logger::_narrow(object); + if (!CORBA::is_nil(log)){ + MESSAGE( "Module Catalog Server: Logger Server was found" ) + log->ping(); + MODULE_CATALOG=1; + break; + } + }} + }} + if ((MODULE_CATALOG==1)||((EnvL==0)&&(!CORBA::is_nil(inc)))) + break; + } + + // // Active catalog SALOME_ModuleCatalogImpl* Catalogue_i = new SALOME_ModuleCatalogImpl(argc, argv); diff --git a/src/NamingService/SALOME_NamingServicePy.py b/src/NamingService/SALOME_NamingServicePy.py index db2d75633..8b41f25be 100644 --- a/src/NamingService/SALOME_NamingServicePy.py +++ b/src/NamingService/SALOME_NamingServicePy.py @@ -29,6 +29,7 @@ # $Header$ import sys +import time from omniORB import CORBA import CosNaming from string import * @@ -48,15 +49,28 @@ class SALOME_NamingServicePy_i: MESSAGE ( "SALOME_NamingServicePy_i::__init__" ) self._orb = orb # initialize root context and current context - obj =self._orb.resolve_initial_references("NameService") - self._root_context =obj._narrow(CosNaming.NamingContext) - self._current_context = self._root_context + ok = 0 + steps = 40 + while steps > 0 and ok == 0: + try: + obj =self._orb.resolve_initial_references("NameService") + self._root_context =obj._narrow(CosNaming.NamingContext) + self._current_context = self._root_context - if self._root_context is None : - MESSAGE ( "Name Service Reference is invalid" ) - sys.exit(1) - + if self._root_context is None : + #MESSAGE ( "Name Service Reference is invalid" ) + #sys.exit(1) + MESSAGE(" Name service not found") + else: + ok = 1 + except CORBA.COMM_FAILURE, ex: + MESSAGE(" Name service not found") + time.sleep(0.25) + steps = steps - 1 + if steps == 0: + MESSAGE ( "Name Service Reference is invalid" ) + sys.exit(1) #------------------------------------------------------------------------- def Register(self,ObjRef, Path): MESSAGE ( "SALOME_NamingServicePy_i::Register" ) diff --git a/src/OBJECT/Makefile.in b/src/OBJECT/Makefile.in index 301ade4e1..4bb0d399b 100644 --- a/src/OBJECT/Makefile.in +++ b/src/OBJECT/Makefile.in @@ -10,7 +10,6 @@ VPATH=.:@srcdir@:@top_srcdir@/idl EXPORT_HEADERS = SALOME_InteractiveObject.hxx \ Handle_SALOME_InteractiveObject.hxx \ SALOME_Actor.h \ - SALOME_Transform.h \ SALOME_AISShape.hxx \ Handle_SALOME_AISShape.hxx \ SALOME_AISObject.hxx \ @@ -23,7 +22,6 @@ EXPORT_HEADERS = SALOME_InteractiveObject.hxx \ LIB = libSalomeObject.la LIB_SRC = SALOME_InteractiveObject.cxx \ SALOME_Actor.cxx \ - SALOME_Transform.cxx \ SALOME_AISShape.cxx\ SALOME_AISObject.cxx @@ -34,7 +32,7 @@ BIN = BIN_SRC = CPPFLAGS+=$(PYTHON_INCLUDES) $(OCC_INCLUDES) $(VTK_INCLUDES) $(OGL_INCLUDES) -LDFLAGS+=$(OCC_KERNEL_LIBS) $(OCC_VIEWER_LIBS) $(VTK_LIBS) $(OGL_LIBS) $(PYTHON_LIBS) +LDFLAGS+= $(VTK_LIBS) $(OGL_LIBS) $(PYTHON_LIBS) $(CAS_LDPATH) -lTKV3d -lSalomeVTKFilter @CONCLUDE@ diff --git a/src/OBJECT/SALOME_Actor.cxx b/src/OBJECT/SALOME_Actor.cxx index bf761ec7d..8029335eb 100644 --- a/src/OBJECT/SALOME_Actor.cxx +++ b/src/OBJECT/SALOME_Actor.cxx @@ -26,13 +26,16 @@ // Module : SALOME // $Header$ -using namespace std; /*! \class SALOME_Actor SALOME_Actor.h \brief Abstract class of SALOME Objects in VTK. */ #include "SALOME_Actor.h" +#include "SALOME_Transform.h" +#include "SALOME_TransformFilter.h" +#include "SALOME_PassThroughFilter.h" +#include "SALOME_GeometryFilter.h" // SALOME Includes #include "utilities.h" @@ -41,9 +44,12 @@ using namespace std; #include #include #include -#include #include +using namespace std; + +int SALOME_POINT_SIZE = 3; + void SALOME_Actor::Render(vtkRenderer *ren, vtkMapper *Mapper ) { if (this->Mapper == NULL) { @@ -122,14 +128,15 @@ void SALOME_Actor::ReleaseGraphicsResources(vtkWindow *renWin) this->Mapper->ReleaseGraphicsResources(renWin); } + void SALOME_Actor::AddToRender(vtkRenderer* theRenderer){ theRenderer->AddActor(this); } - void SALOME_Actor::RemoveFromRender(vtkRenderer* theRenderer){ theRenderer->RemoveActor(this); } + vtkPolyData* SALOME_Actor::GetPolyDataInput(){ return myPassFilter[3]->GetPolyDataOutput(); } @@ -137,16 +144,12 @@ vtkPolyData* SALOME_Actor::GetPolyDataInput(){ void SALOME_Actor::SetMapper(vtkMapper* theMapper){ if(theMapper){ myPassFilter[0]->SetInput(theMapper->GetInput()); - // myPassFilter[0]->Update(); -------- This and other three lines must be comment or removed to fix the regression in SMESH myPassFilter[1]->SetInput(myPassFilter[0]->GetPolyDataOutput()); - // myPassFilter[1]->Update(); myTransformFilter->SetInput(myPassFilter[1]->GetPolyDataOutput()); myPassFilter[2]->SetInput(myTransformFilter->GetOutput()); - // myPassFilter[2]->Update(); myPassFilter[3]->SetInput(myPassFilter[2]->GetPolyDataOutput()); - // myPassFilter[3]->Update(); if(vtkDataSetMapper* aMapper = dynamic_cast(theMapper)) - aMapper->SetInput(myPassFilter[3]->GetOutput()); + aMapper->SetInput(myPassFilter[3]->GetPolyDataOutput()); else if(vtkPolyDataMapper* aMapper = dynamic_cast(theMapper)) aMapper->SetInput(myPassFilter[3]->GetPolyDataOutput()); } @@ -158,8 +161,29 @@ void SALOME_Actor::SetTransform(SALOME_Transform* theTransform){ myTransformFilter->Modified(); } + +void SALOME_Actor::SetRepresentation(int theMode) { + myRepresentation = theMode; + switch(theMode){ + case 3 : + myPassFilter[0]->SetInside(true); + GetProperty()->SetRepresentation(1); + break; + case 0 : + GetProperty()->SetPointSize(SALOME_POINT_SIZE); + default : + GetProperty()->SetRepresentation(myRepresentation); + myPassFilter[0]->SetInside(false); + } +} +int SALOME_Actor::GetRepresentation(){ + return myRepresentation; +} + + SALOME_Actor::SALOME_Actor(){ PreviewProperty = NULL; + myRepresentation = 2; myTransformFilter = SALOME_TransformFilter::New(); myPassFilter.push_back(SALOME_PassThroughFilter::New()); myPassFilter.push_back(SALOME_PassThroughFilter::New()); @@ -168,6 +192,7 @@ SALOME_Actor::SALOME_Actor(){ } SALOME_Actor::~SALOME_Actor(){ + myTransformFilter->Delete(); SetPreviewProperty(NULL); for(int i = 0, iEnd = myPassFilter.size(); i < iEnd; i++) if(myPassFilter[i] != NULL) diff --git a/src/OBJECT/SALOME_Actor.h b/src/OBJECT/SALOME_Actor.h index 0a994e616..ea35d47ef 100644 --- a/src/OBJECT/SALOME_Actor.h +++ b/src/OBJECT/SALOME_Actor.h @@ -30,17 +30,20 @@ #define SALOME_ACTOR_H // SALOME Includes -#include "SALOME_Transform.h" +#include "VTKViewer_Common.h" #include "SALOME_InteractiveObject.hxx" #ifndef _Handle_SALOME_InteractiveObject_HeaderFile #include "Handle_SALOME_InteractiveObject.hxx" #endif - #include -#include "VTKViewer_Common.h" -class SALOME_Actor : public vtkLODActor -{ +class SALOME_Transform; +class SALOME_TransformFilter; +class SALOME_PassThroughFilter; + +extern int SALOME_POINT_SIZE; + +class SALOME_Actor : public vtkLODActor{ protected: //constructor should be protected due to first implementation of this class //it was abstract class @@ -102,6 +105,9 @@ class SALOME_Actor : public vtkLODActor virtual void SetMapper(vtkMapper* theMapper); virtual void SetTransform(SALOME_Transform* theTransform); + virtual void SetRepresentation(int theMode); + virtual int GetRepresentation(); + protected: vtkProperty *PreviewProperty; Standard_Boolean ispreselected; @@ -116,5 +122,7 @@ class SALOME_Actor : public vtkLODActor SALOME_Transform *myTransform; std::vector myPassFilter; SALOME_TransformFilter *myTransformFilter; + int myRepresentation; }; + #endif // SALOME_ACTOR_H diff --git a/src/OBJECT/SALOME_Transform.cxx b/src/OBJECT/SALOME_Transform.cxx deleted file mode 100644 index d55c5fb79..000000000 --- a/src/OBJECT/SALOME_Transform.cxx +++ /dev/null @@ -1,123 +0,0 @@ -// File: SALOME_Transform.cxx -// Created: Wed Jun 4 09:46:59 2003 -// Author: Alexey PETROV -// - - -#include "SALOME_Transform.h" -#include "VTKViewer_Common.h" -#include -#include -#include -using namespace std; - -//======================================================================= - -SALOME_Transform* SALOME_Transform::New(){ - vtkObject* ret = vtkObjectFactory::CreateInstance("SALOME_Transform"); - if(ret) return (SALOME_Transform*)ret; - return new SALOME_Transform; -} - -void SALOME_Transform::SetScale(float theScaleX, float theScaleY, float theScaleZ){ - double aMatrix[16] = {theScaleX,0,0,0, - 0,theScaleY,0,0, - 0,0,theScaleZ,0, - 0,0,0,1.0000000}; - vtkTransform::SetMatrix(aMatrix); - //vtkTransform::Pop(); - //vtkTransform::Scale(theScale); -} - -int SALOME_Transform::IsIdentity(){ - float* aScale = GetScale(); - return (aScale[0] == 1.0 && aScale[1] == 1.0 && aScale[2] == 1.0); -} - -//======================================================================= - -SALOME_TransformFilter* SALOME_TransformFilter::New(){ - vtkObject* ret = vtkObjectFactory::CreateInstance("SALOME_TransformFilter"); - if(ret) return (SALOME_TransformFilter*)ret; - return new SALOME_TransformFilter; -} - -void SALOME_TransformFilter::Execute(){ - vtkPoints *inPts; - vtkPoints *newPts; - int numPts, numCells; - vtkPointSet *input = this->GetInput(); - vtkPointSet *output = this->GetOutput(); - vtkPointData *pd=input->GetPointData(), *outPD=output->GetPointData(); - vtkCellData *cd=input->GetCellData(), *outCD=output->GetCellData(); - output->CopyStructure( input ); - int anIdentity = 0; - if(SALOME_Transform* aTransform = dynamic_cast(this->Transform)) - anIdentity = aTransform->IsIdentity(); - if(!anIdentity && this->Transform != NULL){ - inPts = input->GetPoints(); - if(!inPts){ - vtkErrorMacro(<<"No input data"); - return; - } - numPts = inPts->GetNumberOfPoints(); - numCells = input->GetNumberOfCells(); - newPts = vtkPoints::New(); - newPts->Allocate(numPts); - this->UpdateProgress(.2); - this->Transform->TransformPoints(inPts,newPts); - this->UpdateProgress(.8); - output->SetPoints(newPts); - newPts->Delete(); - } - outPD->PassData(pd); - outCD->PassData(cd); -} - -//======================================================================= - -SALOME_PassThroughFilter* SALOME_PassThroughFilter::New(){ - vtkObject* ret = vtkObjectFactory::CreateInstance("SALOME_PassThroughFilter"); - if(ret) return (SALOME_PassThroughFilter*)ret; - return new SALOME_PassThroughFilter; -} - -SALOME_PassThroughFilter::SALOME_PassThroughFilter(){ - myGeomFilter = vtkGeometryFilter::New(); -} - -SALOME_PassThroughFilter::~SALOME_PassThroughFilter(){ - myGeomFilter->Delete(); -} - -void SALOME_PassThroughFilter::Execute(){ - vtkDataSet *input = static_cast(this->GetInput()); - vtkDataSet *output = static_cast(this->GetOutput()); - output->CopyStructure( input ); - output->GetPointData()->PassData( input->GetPointData() ); - output->GetCellData()->PassData( input->GetCellData() ); -} - -void SALOME_PassThroughFilter::SetInput(vtkDataSet *input){ - myGeomFilter->SetInput(input); - vtkDataSet *oldInput = this->GetInput(); - if(oldInput != NULL) - if(input == NULL || oldInput->GetDataObjectType() != input->GetDataObjectType()){ - vtkWarningMacro("Changing input type. Deleting output"); - this->SetOutput(NULL); - } - if (input != NULL && this->vtkSource::GetOutput(0) == NULL){ - this->vtkSource::SetNthOutput(0, input->NewInstance()); - this->Outputs[0]->ReleaseData(); - this->Outputs[0]->Delete(); - } - this->vtkProcessObject::SetNthInput(0, input); -} - -vtkPolyData *SALOME_PassThroughFilter::GetPolyDataOutput() { - vtkDataSet *ds = this->GetOutput(); - if(!ds) return NULL; - if(ds->GetDataObjectType() == VTK_POLY_DATA) return (vtkPolyData *)ds; - myGeomFilter->SetInput(this->GetOutput()); - return myGeomFilter->GetOutput(); -} diff --git a/src/OBJECT/SALOME_Transform.h b/src/OBJECT/SALOME_Transform.h deleted file mode 100644 index 65fa0b4b1..000000000 --- a/src/OBJECT/SALOME_Transform.h +++ /dev/null @@ -1,66 +0,0 @@ -// File: SALOME_Transformation.hxx -// Created: Wed Jun 4 09:39:09 2003 -// Author: Alexey PETROV -// - - -#ifndef SALOME_Transform_HeaderFile -#define SALOME_Transform_HeaderFile - -#include - -#include -#include -#include -class vtkGeometryFilter; - -//======================================================================= - -class VTK_EXPORT SALOME_Transform : public vtkTransform{ - public: - static SALOME_Transform *New(); - vtkTypeMacro(SALOME_Transform,vtkTransform); - void SetScale(float theScaleX, float theScaleY, float theScaleZ); - int IsIdentity(); -protected: - SALOME_Transform() {} - ~SALOME_Transform() {} - SALOME_Transform(const SALOME_Transform&) {} - void operator=(const SALOME_Transform&) {} -}; - -//======================================================================= - -class VTK_EXPORT SALOME_TransformFilter : public vtkTransformFilter{ - public: - static SALOME_TransformFilter *New(); - vtkTypeMacro(SALOME_TransformFilter,vtkTransformFilter); -protected: - SALOME_TransformFilter() {} - ~SALOME_TransformFilter() {} - SALOME_TransformFilter(const SALOME_TransformFilter&) {} - void operator=(const SALOME_TransformFilter&) {} - void Execute(); -}; - -//======================================================================= - -class SALOME_PassThroughFilter : public vtkDataSetToDataSetFilter{ - public: - vtkTypeMacro(SALOME_PassThroughFilter,vtkDataSetToDataSetFilter); - static SALOME_PassThroughFilter *New(); - void SetInput(vtkDataSet *input); - vtkPolyData *GetPolyDataOutput(); - protected: - SALOME_PassThroughFilter(); - virtual ~SALOME_PassThroughFilter(); - void Execute(); - vtkGeometryFilter* myGeomFilter; - private: - SALOME_PassThroughFilter(const SALOME_PassThroughFilter&); // Not implemented. - void operator=(const SALOME_PassThroughFilter&); // Not implemented. -}; - -//======================================================================= - -#endif diff --git a/src/OCCViewer/Makefile.in b/src/OCCViewer/Makefile.in index df92be72a..5f466d4af 100644 --- a/src/OCCViewer/Makefile.in +++ b/src/OCCViewer/Makefile.in @@ -44,7 +44,7 @@ LIB_CLIENT_IDL = SALOMEDS.idl \ CPPFLAGS+=$(QT_INCLUDES) $(OCC_INCLUDES) $(OGL_INCLUDES) $(PYTHON_INCLUDES) -LDFLAGS+=$(QT_MT_LIBS) $(OCC_KERNEL_LIBS) $(OCC_VIEWER_LIBS) $(OGL_LIBS) +LDFLAGS+=$(QT_MT_LIBS) $(OGL_LIBS) -lSalomeGUI @CONCLUDE@ diff --git a/src/Plot2d/Makefile.in b/src/Plot2d/Makefile.in index 23079dfd4..580beb445 100644 --- a/src/Plot2d/Makefile.in +++ b/src/Plot2d/Makefile.in @@ -44,7 +44,7 @@ LIB_CLIENT_IDL = SALOMEDS.idl \ SALOME_Exception.idl CPPFLAGS+=$(QT_INCLUDES) $(OCC_INCLUDES) $(OGL_INCLUDES) $(PYTHON_INCLUDES) $(QWT_INCLUDES) -LDFLAGS+=$(QT_MT_LIBS) $(OGL_LIBS) $(QWT_LIBS) +LDFLAGS+=$(QT_MT_LIBS) $(OGL_LIBS) $(QWT_LIBS) -lSalomeGUI @CONCLUDE@ diff --git a/src/Plot2d/Plot2d_ViewFrame.cxx b/src/Plot2d/Plot2d_ViewFrame.cxx index 2c9c8d748..b5d094b9f 100644 --- a/src/Plot2d/Plot2d_ViewFrame.cxx +++ b/src/Plot2d/Plot2d_ViewFrame.cxx @@ -299,7 +299,17 @@ void Plot2d_ViewFrame::rename( const Handle(SALOME_InteractiveObject)& IObject, */ bool Plot2d_ViewFrame::isInViewer( const Handle(SALOME_InteractiveObject)& IObject ) { - return ( getCurveByIO( IObject ) != NULL ); + if( getCurveByIO( IObject ) != NULL ) + return 1; + else{ + if(!IObject.IsNull()){ + QIntDictIterator it(myCurves); + for(; it.current();++it){ + if(it.current()->hasIO() && it.current()->getTableIO()->isSame(IObject)) + return 1; + }} + } + return 0; } /*! Returns true if interactive object is presented in the viewer and displayed diff --git a/src/Registry/SALOME_Registry_Server.cxx b/src/Registry/SALOME_Registry_Server.cxx index 6cba1c7d8..e4aee0f7d 100644 --- a/src/Registry/SALOME_Registry_Server.cxx +++ b/src/Registry/SALOME_Registry_Server.cxx @@ -74,76 +74,133 @@ int main( int argc , char **argv ) ASSERT(ptrSessionName) ; ASSERT(strlen( ptrSessionName )>0) ; const char *registryName = "Registry" ; - - - try - { - ORB_INIT &init = *SINGLETON_::Instance() ; - CORBA::ORB_var &orb = init( argc , argv ) ; - - - SALOME_NamingService &naming = *SINGLETON_::Instance() ; - naming.init_orb( orb ) ; - - RegistryService *ptrRegistry = SINGLETON_::Instance() ; - ptrRegistry->SessionName( ptrSessionName ) ; - Registry::Components_var varComponents = ptrRegistry->_this() ; - - // The RegistryService must not already exist. - - try - { - CORBA::Object_var pipo = naming.Resolve( registryName ) ; - if (CORBA::is_nil(pipo) ) throw ServiceUnreachable() ; - MESSAGE("RegistryService servant already existing" ) ; - exit( EXIT_FAILURE ) ; - } - catch( const ServiceUnreachable &ex ) - { + ORB_INIT &init = *SINGLETON_::Instance() ; + CORBA::ORB_var &orb = init( argc , argv ) ; + // + long TIMESleep = 250000000; + int NumberOfTries = 40; + int a; + timespec ts_req; + ts_req.tv_nsec=TIMESleep; + ts_req.tv_sec=0; + timespec ts_rem; + ts_rem.tv_nsec=0; + ts_rem.tv_sec=0; + CosNaming::NamingContext_var inc; + PortableServer::POA_var poa; + CORBA::Object_var theObj; + CORBA::Object_var obj; + CORBA::Object_var object; + SALOME_Logger::Logger_var log; + SALOME_NamingService &naming = *SINGLETON_::Instance() ; + Registry::Components_var varComponents; + int REGISTRY=0; + const char * Env = getenv("USE_LOGGER"); + int EnvL =0; + if ((Env!=NULL) && (strlen(Env))) + EnvL=1; + CosNaming::Name name; + name.length(1); + name[0].id=CORBA::string_dup("Logger"); + PortableServer::POAManager_var manager; + for (int i = 1; i<=NumberOfTries; i++){ + if (i!=1) + a=nanosleep(&ts_req,&ts_rem); + try{ + obj = orb->resolve_initial_references("RootPOA"); + if(!CORBA::is_nil(obj)) + poa = PortableServer::POA::_narrow(obj); + if(!CORBA::is_nil(poa)) + manager = poa->the_POAManager(); + if(!CORBA::is_nil(orb)) + theObj = orb->resolve_initial_references("NameService"); + if (!CORBA::is_nil(theObj)) + inc = CosNaming::NamingContext::_narrow(theObj); + } + catch( CORBA::COMM_FAILURE& ) + { + MESSAGE( "Registry Server: CORBA::COMM_FAILURE: Unable to contact the Naming Service" ) } - catch( const CORBA::Exception &exx ) - { - } - string absoluteName = string("/") + registryName; - naming.Register( varComponents , absoluteName.c_str() ) ; - - - CORBA::Object_var poaObj = orb->resolve_initial_references( "RootPOA" ) ; - PortableServer::POA_var poa = PortableServer::POA::_narrow(poaObj) ; - PortableServer::POAManager_var manager = poa->the_POAManager() ; - - - MESSAGE("On attend les requetes des clients") ; - try - { - // Activation du POA - MESSAGE("Activation du POA") ; - manager->activate() ; - - // Lancement de l'ORB - MESSAGE("Lancement de l'ORB") ; + if(!CORBA::is_nil(inc)) { + MESSAGE( "Registry Server: Naming Service was found" ) + if(EnvL==1){ + for(int j=1; j<=NumberOfTries; j++){ + if (j!=1) + a=nanosleep(&ts_req, &ts_rem); + try{ + object = inc->resolve(name); + } + catch(CosNaming::NamingContext::NotFound){ MESSAGE( "Registry Server: Logger Server wasn't found" ) } + catch(...){ MESSAGE( "Registry Server: Unknown exception" ) } + + if (!CORBA::is_nil(object)) + log = SALOME_Logger::Logger::_narrow(object); + if (!CORBA::is_nil(log)){ + MESSAGE( "Registry Server: Logger Server was found" ) + log->ping(); + REGISTRY=1; + break; + } + }} + } + if ((REGISTRY==1)||((EnvL==0)&&(!CORBA::is_nil(inc)))) + break; + } + // + try + { + naming.init_orb( orb ) ; + RegistryService *ptrRegistry = SINGLETON_::Instance() ; + ptrRegistry->SessionName( ptrSessionName ) ; + varComponents = ptrRegistry->_this() ; + // The RegistryService must not already exist. + + try + { + CORBA::Object_var pipo = naming.Resolve( registryName ) ; + if (CORBA::is_nil(pipo) ) throw ServiceUnreachable() ; + MESSAGE("RegistryService servant already existing" ) ; + exit( EXIT_FAILURE ) ; + } + catch( const ServiceUnreachable &ex ) + { + } + catch( const CORBA::Exception &exx ) + { + } + string absoluteName = string("/") + registryName; + naming.Register( varComponents , absoluteName.c_str() ) ; + MESSAGE("On attend les requetes des clients") ; + try + { + // Activation du POA + MESSAGE("Activation du POA") ; + manager->activate() ; + + // Lancement de l'ORB + MESSAGE("Lancement de l'ORB") ; #ifdef CHECKTIME - Utils_Timer timer; - timer.Start(); - timer.Stop(); - MESSAGE("SALOME_Registry_Server.cxx - orb->run()"); - timer.ShowAbsolute(); + Utils_Timer timer; + timer.Start(); + timer.Stop(); + MESSAGE("SALOME_Registry_Server.cxx - orb->run()"); + timer.ShowAbsolute(); #endif - orb->run() ; - } - catch( const CORBA::Exception &ex ) - { - MESSAGE("Erreur systeme") ; - return EXIT_FAILURE ; - } - - } - catch( const SALOME_Exception &ex ) - { - MESSAGE( "Communication Error : " << ex.what() ) + orb->run() ; + } + catch( const CORBA::Exception &ex ) + { + MESSAGE("Erreur systeme") ; return EXIT_FAILURE ; - } - + } + + } + catch( const SALOME_Exception &ex ) + { + MESSAGE( "Communication Error : " << ex.what() ) + return EXIT_FAILURE ; + } + END_OF( argv[0] ) ; return 0 ; } diff --git a/src/RessourcesCatalog/SALOME_RessourcesCatalog_Server.cxx b/src/RessourcesCatalog/SALOME_RessourcesCatalog_Server.cxx index 519f0b845..827efd482 100644 --- a/src/RessourcesCatalog/SALOME_RessourcesCatalog_Server.cxx +++ b/src/RessourcesCatalog/SALOME_RessourcesCatalog_Server.cxx @@ -31,7 +31,7 @@ using namespace std; #include "SALOME_NamingService.hxx" #include "SALOME_RessourcesCatalog_impl.hxx" #include "utilities.h" - +# include "Utils_SINGLETON.hxx" int main(int argc,char **argv) { try { @@ -42,20 +42,80 @@ int main(int argc,char **argv) CORBA::ORB_ptr orb = CORBA::ORB_init (argc, argv); // initialize POA - - CORBA::Object_var poaobj = orb->resolve_initial_references ("RootPOA"); - - PortableServer::POA_var poa = PortableServer::POA::_narrow (poaobj); - PortableServer::POAManager_var mgr = poa->the_POAManager(); - + // + long TIMESleep = 250000000; + int NumberOfTries = 40; + int a; + timespec ts_req; + ts_req.tv_nsec=TIMESleep; + ts_req.tv_sec=0; + timespec ts_rem; + ts_rem.tv_nsec=0; + ts_rem.tv_sec=0; + CosNaming::NamingContext_var inc; + PortableServer::POA_var poa; + CORBA::Object_var theObj; + CORBA::Object_var obj; + CORBA::Object_var object; + SALOME_Logger::Logger_var log; + SALOME_NamingService &naming = *SINGLETON_::Instance() ; + int RESSOURCES_CATALOG=0; + const char * Env = getenv("USE_LOGGER"); + int EnvL =0; + if ((Env!=NULL) && (strlen(Env))) + EnvL=1; + CosNaming::Name name; + name.length(1); + name[0].id=CORBA::string_dup("Logger"); + PortableServer::POAManager_var mgr; + for (int i = 1; i<=NumberOfTries; i++){ + if (i!=1) + a=nanosleep(&ts_req,&ts_rem); + try{ + obj = orb->resolve_initial_references("RootPOA"); + if(!CORBA::is_nil(obj)) + poa = PortableServer::POA::_narrow(obj); + if(!CORBA::is_nil(poa)) + mgr = poa->the_POAManager(); + if(!CORBA::is_nil(orb)) + theObj = orb->resolve_initial_references("NameService"); + if (!CORBA::is_nil(theObj)) + inc = CosNaming::NamingContext::_narrow(theObj); + } + catch( CORBA::COMM_FAILURE& ) + { + MESSAGE( "Ressources Catalog: CORBA::COMM_FAILURE: Unable to contact the Naming Service" ) + } + if(!CORBA::is_nil(inc)) { + MESSAGE( "Ressources Catalog: Naming Service was found" ) + if(EnvL==1){ + for(int j=1; j<=NumberOfTries; j++){ + if (j!=1) + a=nanosleep(&ts_req, &ts_rem); + try{ + object = inc->resolve(name); + } + catch(CosNaming::NamingContext::NotFound){ MESSAGE( "Ressources Catalog: Logger Server wasn't found" ) } + catch(...){ MESSAGE( "Ressources Catalog: Unknown exception" ) } + if (!CORBA::is_nil(object)) + log = SALOME_Logger::Logger::_narrow(object); + if (!CORBA::is_nil(log)){ + MESSAGE( "Ressources Catalog: Loger Server was found" ) + log->ping(); + RESSOURCES_CATALOG=1; + break; + } + }} + } + if ((RESSOURCES_CATALOG==1)||((EnvL==0)&&(!CORBA::is_nil(inc)))) + break; + } + // // Active catalog - + SALOME_RessourcesCatalogImpl* Catalogue_i = new SALOME_RessourcesCatalogImpl(argc, argv); poa->activate_object (Catalogue_i); - mgr->activate(); - - CORBA::Object_ptr myCata = Catalogue_i->_this(); // initialise Naming Service diff --git a/src/SALOMEDS/Makefile.in b/src/SALOMEDS/Makefile.in index dcb0778c0..873929b80 100644 --- a/src/SALOMEDS/Makefile.in +++ b/src/SALOMEDS/Makefile.in @@ -107,7 +107,7 @@ BIN_CLIENT_IDL = CPPFLAGS+=$(OCC_INCLUDES) $(HDF5_INCLUDES) CXXFLAGS+=$(OCC_CXXFLAGS) -LDFLAGS+=$(OCC_KERNEL_LIBS) $(OCC_OCAF_LIBS) $(OCC_VIEWER_LIBS) $(OCC_MODELER_LIBS) $(HDF5_LIBS) -lTOOLSDS -lSalomeNS -lSalomeHDFPersist -lOpUtil -lSalomeLoggerServer +LDFLAGS+= $(HDF5_LIBS) -lTOOLSDS -lSalomeNS -lSalomeHDFPersist -lOpUtil -lSalomeLoggerServer $(CAS_LDPATH) -lTKCAF @CONCLUDE@ diff --git a/src/SALOMEDS/SALOMEDS_Server.cxx b/src/SALOMEDS/SALOMEDS_Server.cxx index 087ef8ff5..238dd2450 100644 --- a/src/SALOMEDS/SALOMEDS_Server.cxx +++ b/src/SALOMEDS/SALOMEDS_Server.cxx @@ -31,7 +31,8 @@ using namespace std; #include CORBA_SERVER_HEADER(SALOMEDS) #include "SALOMEDS_StudyManager_i.hxx" #include "utilities.h" - +# include "Utils_SINGLETON.hxx" +#include "SALOME_NamingService.hxx" //#define CHECKTIME #ifdef CHECKTIME #include @@ -53,12 +54,80 @@ int main(int argc, char** argv) // Initialise the ORB. CORBA::ORB_var orb = CORBA::ORB_init(argc, argv, "omniORB3"); omniORB::MaxMessageSize(100 * 1024 * 1024); - // Obtain a reference to the root POA. - CORBA::Object_var obj = orb->resolve_initial_references("RootPOA"); - PortableServer::POA_var poa = PortableServer::POA::_narrow(obj); - - + // + long TIMESleep = 250000000; + int NumberOfTries = 40; + int a; + timespec ts_req; + ts_req.tv_nsec=TIMESleep; + ts_req.tv_sec=0; + timespec ts_rem; + ts_rem.tv_nsec=0; + ts_rem.tv_sec=0; + CosNaming::NamingContext_var inc; + PortableServer::POA_var poa; + CORBA::Object_var theObj; + CORBA::Object_var obj; + CORBA::Object_var object; + SALOME_Logger::Logger_var log; + int SALOMEDS=0; + const char * Env = getenv("USE_LOGGER"); + int EnvL =0; + if ((Env!=NULL) && (strlen(Env))) + EnvL=1; + CosNaming::Name name; + name.length(1); + name[0].id=CORBA::string_dup("Logger"); + PortableServer::POAManager_var pman; + for (int i = 1; i<=NumberOfTries; i++){ + if (i!=1) + a=nanosleep(&ts_req,&ts_rem); + try{ + obj = orb->resolve_initial_references("RootPOA"); + if(!CORBA::is_nil(obj)) + poa = PortableServer::POA::_narrow(obj); + if(!CORBA::is_nil(poa)) + pman = poa->the_POAManager(); + if(!CORBA::is_nil(orb)) + theObj = orb->resolve_initial_references("NameService"); + if (!CORBA::is_nil(theObj)){ + inc = CosNaming::NamingContext::_narrow(theObj); + if(!CORBA::is_nil(inc)) { + MESSAGE( "SalomeDS Server: Naming Service was found" ) + if(EnvL==1){ + CORBA::ORB_var orb1 = CORBA::ORB_init(argc,argv) ; + SALOME_NamingService &NS = *SINGLETON_::Instance() ; + NS.init_orb( orb1 ) ; + for(int j=1; j<=NumberOfTries; j++){ + if (j!=1) + a=nanosleep(&ts_req, &ts_rem); + try{ + object = inc->resolve(name);} + catch(CosNaming::NamingContext::NotFound){ MESSAGE( "SalomeDS Server: Logger Server wasn't found" ) } + catch(...){ MESSAGE( "SalomeDS Server: Unknown exception" ) } + if (!CORBA::is_nil(object)) + log = SALOME_Logger::Logger::_narrow(object); + if (!CORBA::is_nil(log)){ + MESSAGE( "SalomeDS Server: Logger Server was found" ) + log->ping(); + SALOMEDS=1; + break; + } + }} + }} + + } + catch( const SALOME_Exception &ex ) + { + MESSAGE( "Communication Error : " << ex.what() ) + return EXIT_FAILURE ; + } + if ((SALOMEDS==1)||((EnvL==0)&&(!CORBA::is_nil(inc)))) + break; + } + // + // We allocate the objects on the heap. Since these are reference // counted objects, they will be deleted by the POA when they are no // longer needed. @@ -71,7 +140,7 @@ int main(int argc, char** argv) // Obtain a POAManager, and tell the POA to start accepting // requests on its objects. - PortableServer::POAManager_var pman = poa->the_POAManager(); + pman = poa->the_POAManager(); pman->activate(); #ifdef CHECKTIME diff --git a/src/SALOMEGUI/CLIENT_msg_en.po b/src/SALOMEGUI/CLIENT_msg_en.po index 1cdf343b7..cb8f094c5 100644 --- a/src/SALOMEGUI/CLIENT_msg_en.po +++ b/src/SALOMEGUI/CLIENT_msg_en.po @@ -20,7 +20,7 @@ msgstr "" #--------------- msgid "INF_VERSION" -msgstr "Version 1.2" +msgstr "Version 1.2c" msgid "INF_COPYRIGHT" msgstr " " diff --git a/src/SALOMEGUI/Makefile.in b/src/SALOMEGUI/Makefile.in index 2067c607f..08d0682d3 100644 --- a/src/SALOMEGUI/Makefile.in +++ b/src/SALOMEGUI/Makefile.in @@ -43,7 +43,6 @@ EXPORT_HEADERS = \ QAD_FileDlg.h \ QAD_FileValidator.h \ QAD_Help.h \ - QAD_HelpWindow.h \ QAD_PyInterp.h \ QAD_LeftFrame.h \ QAD_ListMenuIdAction.h \ @@ -99,7 +98,7 @@ EXPORT_HEADERS = \ SALOMEGUI_SetValueDlg.h \ SALOMEGUI_SetupCurveDlg.h \ SALOMEGUI_CloseDlg.h - + # .po files to transform in .qm PO_FILES = \ @@ -124,7 +123,6 @@ LIB_SRC = \ QAD_FileDlg.cxx \ QAD_FileValidator.cxx \ QAD_Help.cxx \ - QAD_HelpWindow.cxx \ PyInterp_base.cxx \ QAD_PyInterp.cxx \ QAD_PyInterp_mono.cxx \ @@ -175,13 +173,14 @@ LIB_SRC = \ SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_0.cxx \ SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger_0.cxx \ SALOMEGUI_TrihedronSizeDlg.cxx \ + SALOMEGUI_ExternalBrowserDlg.cxx \ SALOMEGUI_LoadStudiesDlg.cxx \ SALOMEGUI_TableDlg.cxx \ SALOMEGUI_NameDlg.cxx \ SALOMEGUI_SetValueDlg.cxx \ SALOMEGUI_SetupCurveDlg.cxx \ - SALOMEGUI_CloseDlg.cxx - + SALOMEGUI_CloseDlg.cxx \ + SALOMEGUI_ActivateComponentDlg.cxx LIB_MOC = \ SALOMEGUI_Application.h \ SALOMEGUI_Desktop.h \ @@ -190,7 +189,6 @@ LIB_MOC = \ QAD_Desktop.h \ QAD_DirListDlg.h \ QAD_FileDlg.h \ - QAD_HelpWindow.h \ QAD_ListView.h \ QAD_ObjectBrowser.h \ QAD_Operation.h \ @@ -204,22 +202,23 @@ LIB_MOC = \ SALOMEGUI_OpenWith.h \ SALOMEGUI_StudyPropertiesDlg.h \ SALOMEGUI_TrihedronSizeDlg.h \ + SALOMEGUI_ExternalBrowserDlg.h \ SALOME_Selection.h \ SALOMEGUI_LoadStudiesDlg.h \ SALOMEGUI_ViewChoiceDlg.h \ SALOMEGUI_TableDlg.h \ SALOMEGUI_NameDlg.h \ SALOMEGUI_SetupCurveDlg.h \ - SALOMEGUI_CloseDlg.h - + SALOMEGUI_CloseDlg.h \ + SALOMEGUI_ActivateComponentDlg.h LIB_CLIENT_IDL = SALOMEDS.idl \ SALOMEDS_Attributes.idl \ SALOME_ModuleCatalog.idl \ SALOME_Component.idl \ SALOME_Exception.idl -CPPFLAGS+=$(QT_INCLUDES) $(PYTHON_INCLUDES) $(OCC_INCLUDES) $(VTK_INCLUDES) $(QWT_INCLUDES) -LDFLAGS+=$(QT_MT_LIBS) $(OCC_KERNEL_LIBS) $(VTK_LIBS) $(QWT_LIBS) -lSalomeNS -lqsplitterP -lSalomeLifeCycleCORBA -lOpUtil -lSalomeObject +CPPFLAGS+=$(QT_INCLUDES) $(PYTHON_INCLUDES) $(OCC_INCLUDES) +LDFLAGS+=$(QT_MT_LIBS) -lSalomeNS -lqsplitterP -lSalomeLifeCycleCORBA -lOpUtil -lSalomeObject LIBS+= $(PYTHON_LIBS) diff --git a/src/SALOMEGUI/QAD_Application.cxx b/src/SALOMEGUI/QAD_Application.cxx index 935f2c4e7..a0b08aa45 100644 --- a/src/SALOMEGUI/QAD_Application.cxx +++ b/src/SALOMEGUI/QAD_Application.cxx @@ -464,7 +464,7 @@ void QAD_Application::helpAbout() void QAD_Application::helpSearch() { /* just calls QAD_Desktop::helpSearch() but can have own implementation */ - getDesktop()->helpSearch(); + // getDesktop()->helpSearch(); } /*! @@ -473,7 +473,7 @@ void QAD_Application::helpSearch() void QAD_Application::helpContents() { /* just calls QAD_Desktop::helpContents() but can have own implementation */ - getDesktop()->helpContents(); + // getDesktop()->helpContents(); } /*! diff --git a/src/SALOMEGUI/QAD_Desktop.cxx b/src/SALOMEGUI/QAD_Desktop.cxx index 189665a8e..89a1bf2b8 100644 --- a/src/SALOMEGUI/QAD_Desktop.cxx +++ b/src/SALOMEGUI/QAD_Desktop.cxx @@ -35,6 +35,8 @@ using namespace std; # include "Utils_SINGLETON.hxx" #define INCLUDE_MENUITEM_DEF +#define DEFAULT_BROWSER "mozilla" + #include "QAD.h" #include "QAD_Help.h" @@ -51,12 +53,13 @@ using namespace std; #include "QAD_ObjectBrowser.h" #include "QAD_Resource.h" #include "QAD_FileDlg.h" -#include "QAD_HelpWindow.h" +//NRI#include "QAD_HelpWindow.h" #include "QAD_DirListDlg.h" #include "QAD_WaitCursor.h" #include "SALOMEGUI_OpenWith.h" #include "SALOMEGUI_StudyPropertiesDlg.h" #include "SALOMEGUI_TrihedronSizeDlg.h" +#include "SALOMEGUI_ExternalBrowserDlg.h" #include "SALOMEGUI_LoadStudiesDlg.h" #include "SALOME_Selection.h" #include "SALOME_InteractiveObject.hxx" @@ -66,6 +69,7 @@ using namespace std; #include "utilities.h" #include "SALOMEGUI_CloseDlg.h" +#include "SALOMEGUI_ActivateComponentDlg.h" // QT Includes #include @@ -87,6 +91,7 @@ using namespace std; #include #include #include +#include #if QT_VERSION > 300 #include @@ -174,7 +179,7 @@ myStatusBar(0), myActiveApp(0), myActiveStudy(0), myCntUntitled(0), -myHelpWindow(0), +//NRImyHelpWindow(0), myDefaultTitle( tr("DESK_DEFAULTTITLE") ), myQueryClose( true ) { @@ -342,8 +347,8 @@ QAD_Desktop::~QAD_Desktop () myToolBarAction.clear(); myApps.clear(); delete resourceMgr; - if (myHelpWindow) - myHelpWindow->close(); +//NRI if (myHelpWindow) +// myHelpWindow->close(); resourceMgr = 0; QAD_Application::desktop = 0; } @@ -364,9 +369,17 @@ const int IdSelectAll = 1004; */ bool QAD_Desktop::eventFilter( QObject* o, QEvent* e ) { - if ( e->type() == QEvent::ContextMenu ) { - QContextMenuEvent* ce = (QContextMenuEvent*)e; - if ( o->inherits("QRenameEdit") ) { + if (e->type() == 2000 ) { + QMessageBox::information (this, tr ( "Help Information" ), tr ( "Can't run choosen browser.\nRunning default browser (Mozilla). ")); + return TRUE; + } + else if (e->type() == 2001 ) { + QMessageBox::critical(this, tr ( "Help Error" ), tr ( "Can't run the default browser.") ); + return TRUE; + } + else if ( e->type() == QEvent::ContextMenu ) { + QContextMenuEvent* ce = (QContextMenuEvent*)e; + if ( o->inherits("QRenameEdit") ) { return TRUE; } else if ( o->inherits("QLineEdit") ) { @@ -444,7 +457,7 @@ void QAD_Desktop::createActions() myMainMenu->insertItem ( tr("MEN_DESK_VIEW"), &myViewPopup, 2 ); /* add popup VIEW */ myMainMenu->insertItem ( tr("MEN_DESK_TOOLS"), &myToolsPopup, 5 ); /* add popup TOOLS */ myMainMenu->insertItem ( tr("MEN_DESK_PREF"), &myPrefPopup, 4 ); /* add popup PREF */ - myMainMenu->insertItem ( tr("MEN_DESK_WINDOW"), &myWindowPopup, 6 ); /* add popup WINDOW */ + myMainMenu->insertItem ( tr("MEN_DESK_WINDOW"), &myWindowPopup, 6 );/* add popup WINDOW */ myMainMenu->insertItem ( tr("MEN_DESK_HELP"), &myHelpPopup, 7 ); /* add popup HELP */ /* Applications will insert their items after 'File' 'Edit' and 'View' @@ -745,6 +758,13 @@ void QAD_Desktop::createActions() myPrefPopup.insertSeparator(); + /* External Browser */ + QActionP* externalBrowserAction = new QActionP( "", tr("MEN_DESK_PREF_EXTERNAL_BROWSER"), 0, this ); + QAD_ASSERT(connect( externalBrowserAction, SIGNAL(activated()), this, SLOT(onExternalBrowser() ))); + externalBrowserAction->addTo( &myPrefPopup ); + myStdActions.insert( PrefExternalBrowserId, externalBrowserAction ); + + myPrefPopup.insertSeparator(); /* BrowserPopup */ myPrefPopup.insertItem( tr("MEN_DESK_PREF_OBJECTBROWSER"), &myObjBrowserPopup ); @@ -871,6 +891,26 @@ void QAD_Desktop::createActions() this, SLOT( onHelpContents() ))); helpContentsAction->addTo( &myHelpPopup ); myStdActions.insert( HelpContentsId , helpContentsAction ); + + id = myHelpPopup.insertSeparator(); + + /* GUI contents */ + // NRI : Temporary commented + +// QActionP* helpContentsActionGUI = new QActionP( "", tr("MEN_DESK_HELP_GUICONTENTS"), 0, this ); +// helpContentsActionGUI->setStatusTip ( tr("PRP_DESK_HELP_GUICONTENTS") ); +// QAD_ASSERT(connect( helpContentsActionGUI, SIGNAL(activated()), +// this, SLOT( onHelpContentsGUI() ))); +// helpContentsActionGUI->addTo( &myHelpPopup ); +// myStdActions.insert( HelpContentsId , helpContentsActionGUI ); + + /* TUI contents */ + QActionP* helpContentsActionTUI = new QActionP( "", tr("MEN_DESK_HELP_TUICONTENTS"), 0, this ); + helpContentsActionTUI->setStatusTip ( tr("PRP_DESK_HELP_TUICONTENTS") ); + QAD_ASSERT(connect( helpContentsActionTUI, SIGNAL(activated()), + this, SLOT( onHelpContentsTUI() ))); + helpContentsActionTUI->addTo( &myHelpPopup ); + myStdActions.insert( HelpContentsId , helpContentsActionTUI ); /* search */ // QActionP* helpSearchAction = new QActionP( "", tr("MEN_DESK_HELP_SEARCH"), 0, this ); @@ -1001,6 +1041,7 @@ void QAD_Desktop::updateCaption( UpdateCommand cmd ) else { /* default icon and title */ setIcon( myDefaultIcon ); + qApp->processEvents(); setCaption( myDefaultTitle ); } } @@ -1181,48 +1222,48 @@ QString QAD_Desktop::getComponentUserName(const char *componentName) return ""; } -/*! - gets application Help Window (and creates if necessary) -*/ -QAD_HelpWindow* QAD_Desktop::getHelpWindow() -{ - if (!myHelpWindow) { - myHelpWindow = new QAD_HelpWindow(); +// /*! +// gets application Help Window (and creates if necessary) +// */ +// QAD_HelpWindow* QAD_Desktop::getHelpWindow() +// { +// if (!myHelpWindow) { +// myHelpWindow = new QAD_HelpWindow(); - QMap::Iterator it; - for( it = mapComponentName.begin(); it != mapComponentName.end(); ++it ) { - QCString dir; - QString root; +// QMap::Iterator it; +// for( it = mapComponentName.begin(); it != mapComponentName.end(); ++it ) { +// QCString dir; +// QString root; - // look for index.html and set homeDir - // 1. $(MODULE_ROOT_DIR)/doc/index.html - // 2. $(MODULE_ROOT_DIR)/doc/html/index.html - // 3. $(MODULE_ROOT_DIR)/doc/html/html/index.html - - if (dir = getenv( QString( it.data() + "_ROOT_DIR")) ) { - root = QAD_Tools::addSlash( QAD_Tools::addSlash(dir) + QAD_Tools::addSlash("share") + QAD_Tools::addSlash("salome") + "doc" ); - if ( QFileInfo( root + "index.html" ).exists() ) { - helpContext( root + "index.html", "" ); - } - else { - root = QAD_Tools::addSlash( root + "html" ); - if ( QFileInfo( root + "index.html" ).exists() ) { - helpContext( root + "index.html", "" ); - } - else { - root = QAD_Tools::addSlash( root + "html" ); - if ( QFileInfo( root + "index.html" ).exists() ) { - helpContext( root + "index.html", "" ); - } - } - } - } - } +// // look for index.html and set homeDir +// // 1. $(MODULE_ROOT_DIR)/doc/index.html +// // 2. $(MODULE_ROOT_DIR)/doc/html/index.html +// // 3. $(MODULE_ROOT_DIR)/doc/html/html/index.html + +// if (dir = getenv( QString( it.data() + "_ROOT_DIR")) ) { +// root = QAD_Tools::addSlash( QAD_Tools::addSlash(dir) + QAD_Tools::addSlash("share") + QAD_Tools::addSlash("salome") + "doc" ); +// if ( QFileInfo( root + "index.html" ).exists() ) { +// helpContext( root + "index.html", "" ); +// } +// else { +// root = QAD_Tools::addSlash( root + "html" ); +// if ( QFileInfo( root + "index.html" ).exists() ) { +// helpContext( root + "index.html", "" ); +// } +// else { +// root = QAD_Tools::addSlash( root + "html" ); +// if ( QFileInfo( root + "index.html" ).exists() ) { +// helpContext( root + "index.html", "" ); +// } +// } +// } +// } +// } - connect(myHelpWindow, SIGNAL(helpWindowClosed()), this, SLOT(onHelpWindowClosed())); - } - return myHelpWindow; -} +// connect(myHelpWindow, SIGNAL(helpWindowClosed()), this, SLOT(onHelpWindowClosed())); +// } +// return myHelpWindow; +// } /*! Called when desktop is closing @@ -1807,13 +1848,13 @@ void QAD_Desktop::onCascade() it.current()->resize((int)(0.8*w), (int)(0.8*h)); } -/*! - called when help window closed -*/ -void QAD_Desktop::onHelpWindowClosed() -{ - myHelpWindow = 0; -} +// /*! +// called when help window closed +// */ +// void QAD_Desktop::onHelpWindowClosed() +// { +// myHelpWindow = 0; +// } /*! Called when 'view status bar' option @@ -1984,28 +2025,157 @@ void QAD_Desktop::onNewWindow3d() //NRI : SAL2214 } +// Helps to execute command +class RunBrowser: public QThread { +public: + + RunBrowser(QString theApp, QString theParams, QString theHelpFile): + myApp(theApp), myParams(theParams), myHelpFile(theHelpFile), myStatus(0) {}; + + virtual void run() + { + QString aCommand; + + if ( !myApp.isEmpty()) + { + aCommand.sprintf("%s %s %s",myApp.latin1(),myParams.latin1(),myHelpFile.latin1()); + myStatus = system(aCommand); + if(myStatus != 0) + { + QCustomEvent* ce2000 = new QCustomEvent (2000); + postEvent (qApp, ce2000); + } + } + + if( myStatus != 0 || myApp.isEmpty()) + { + myParams = ""; + aCommand.sprintf("%s %s %s", QString(DEFAULT_BROWSER).latin1(),myParams.latin1(), myHelpFile.latin1()); + myStatus = system(aCommand); + if(myStatus != 0) + { + QCustomEvent* ce2001 = new QCustomEvent (2001); + postEvent (qApp, ce2001); + } + } + } + +private: + QString myApp; + QString myParams; + QString myHelpFile; + int myStatus; + +}; + /*! Called on 'help\contents' */ void QAD_Desktop::onHelpContents() +{ if (myActiveComp == "") + myActiveComp = getComponentUserName( "KERNEL" ); //NRI "Salome"; + + QCString dir; + QString root; + QString homeDir; + if (dir = getenv( getComponentName( myActiveComp ) + "_ROOT_DIR")) { + root = QAD_Tools::addSlash( QAD_Tools::addSlash(dir) + QAD_Tools::addSlash("share") + QAD_Tools::addSlash("salome") + QAD_Tools::addSlash("doc") + "html" ); + if ( QFileInfo( root + "index.html" ).exists() ) { + homeDir = root; + } else { + QMessageBox::warning( this, tr("WRN_WARNING"), + QString( "%1index.html doesn't exist." ).arg(root), tr ("BUT_OK") ); + return; + } + } + + QString helpFile = QFileInfo( homeDir + "index.html" ).absFilePath(); + + QString anApp = QAD_CONFIG->getSetting("ExternalBrowser:Application"); + QString aParams = QAD_CONFIG->getSetting("ExternalBrowser:Parameters"); + + RunBrowser* rs = new RunBrowser(anApp, aParams, helpFile); + rs->start(); +} + +/*! + Called on 'help\GUI Reference' +*/ +void QAD_Desktop::onHelpContentsGUI() { - if (myActiveApp) - myActiveApp->helpContents(); - else - helpContents(); + +// QCString dir; +// QString root; +// QString homeDir; + +// if ( (dir = getenv("KERNEL_ROOT_DIR")) ) { +// root = QAD_Tools::addSlash( QAD_Tools::addSlash(dir) + "doc" ); +// root = QAD_Tools::addSlash( root + "guihtml" ); +// root = QAD_Tools::addSlash( root + "guihtml" ); +// if ( QFileInfo( root + "salomedoc.html" ).exists() ) { +// homeDir = root; +// } +// } +// if ( root.isEmpty() ) { +// if ( QFileInfo( "/usr/local/doc/guihtml/salomedoc.html" ).exists() ) { +// homeDir = "/usr/local/doc/guihtml/"; +// } +// } +// if ( root.isEmpty() ) +// root = "./doc/"; + +// QString helpFile = QFileInfo( homeDir + "salomedoc.html" ).absFilePath(); + +// QString anApp = QAD_CONFIG->getSetting("ExternalBrowser:Application"); +// QString aParams = QAD_CONFIG->getSetting("ExternalBrowser:Parameters"); + +// RunBrowser* rs = new RunBrowser(anApp, aParams, helpFile); +// rs->start(); + } /*! - Called on 'help\search' + Called on 'help\TUI Reference' */ -void QAD_Desktop::onHelpSearch() +void QAD_Desktop::onHelpContentsTUI() { - if (myActiveApp) - myActiveApp->helpSearch(); - else - helpSearch(); + if (myActiveComp == "") + myActiveComp = getComponentUserName( "KERNEL" ); //NRI "Salome"; + + QCString dir; + QString root; + QString homeDir; + if (dir = getenv( getComponentName( myActiveComp ) + "_ROOT_DIR")) { + root = QAD_Tools::addSlash( QAD_Tools::addSlash(dir) + QAD_Tools::addSlash("share") + QAD_Tools::addSlash("salome") + QAD_Tools::addSlash("doc") + "html" ); + if ( QFileInfo( root + "index.html" ).exists() ) { + homeDir = root; + } else { + QMessageBox::warning( this, tr("WRN_WARNING"), + QString( "%1index.html doesn't exist." ).arg(root), tr ("BUT_OK") ); + return; + } + } + + QString helpFile = QFileInfo( homeDir + "index.html" ).absFilePath(); + + QString anApp = QAD_CONFIG->getSetting("ExternalBrowser:Application"); + QString aParams = QAD_CONFIG->getSetting("ExternalBrowser:Parameters"); + + RunBrowser* rs = new RunBrowser(anApp, aParams, helpFile); + rs->start(); } +// /*! +// Called on 'help\search' +// */ +// void QAD_Desktop::onHelpSearch() +// { +// if (myActiveApp) +// myActiveApp->helpSearch(); +// else +// helpSearch(); +// } + /*! Called on 'help\about' */ @@ -2572,45 +2742,6 @@ void QAD_Desktop::onDispatchTools(int id) bool libToolsGUI = true; if( QAD_XmlHandler::_bibmap[ id ].isEmpty() ) { - - if ( dir = getenv("SALOME_SITE_DIR")) { - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "lib" ; - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "salome" ; - dir = QAD_Tools::addSlash(dir) ; -#ifdef WNT - dir = dir + "libToolsGUI.dll" ; -#else - dir = dir + "libToolsGUI.so" ; -#endif - MESSAGE ( " GUI library = " << dir ); - fileInfo.setFile(dir) ; - if (fileInfo.exists()) { - ToolsLib = fileInfo.fileName() ; - found = true; - } - } - - if ( (dir = getenv("SALOME_ROOT_DIR")) && !found ) { - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "lib" ; - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "salome" ; - dir = QAD_Tools::addSlash(dir) ; -#ifdef WNT - dir = dir + "libToolsGUI.dll" ; -#else - dir = dir + "libToolsGUI.so" ; -#endif - MESSAGE ( " GUI library = " << dir ); - fileInfo.setFile(dir) ; - if (fileInfo.exists()) { - ToolsLib = fileInfo.fileName() ; - found = true; - } - } - if ( (dir = getenv("KERNEL_ROOT_DIR")) && !found ) { dir = QAD_Tools::addSlash(dir) ; dir = dir + "lib" ; @@ -2633,36 +2764,6 @@ void QAD_Desktop::onDispatchTools(int id) else { libToolsGUI = false; SCRUTE( QAD_XmlHandler::_bibmap[ id ] ) ; - if ( dir = getenv("SALOME_SITE_DIR")) { - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "lib" ; - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "salome" ; - dir = QAD_Tools::addSlash(dir) ; - dir = dir + QAD_XmlHandler::_bibmap[ id ].latin1() ; - MESSAGE ( " GUI library = " << dir ); - fileInfo.setFile(dir) ; - if (fileInfo.exists()) { - ToolsLib = fileInfo.fileName() ; - found = true; - } - } - - if ( (dir = getenv("SALOME_ROOT_DIR")) && !found ) { - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "lib" ; - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "salome" ; - dir = QAD_Tools::addSlash(dir) ; - dir = dir + QAD_XmlHandler::_bibmap[ id ].latin1() ; - MESSAGE ( " GUI library = " << dir ); - fileInfo.setFile(dir) ; - if (fileInfo.exists()) { - ToolsLib = fileInfo.fileName() ; - found = true; - } - } - if ( (dir = getenv("KERNEL_ROOT_DIR")) && !found ) { dir = QAD_Tools::addSlash(dir) ; dir = dir + "lib" ; @@ -2796,15 +2897,35 @@ void QAD_Desktop::onComboActiveComponent( const QString & component, bool isLoad aButton->setOn(true); } } - } else { - QMessageBox::critical( 0, - tr( "ERR_ERROR" ), - tr( "WRN_LOAD_COMPONENT" ) ); - myCombo->setCurrentItem (0); - for ( QToolButton* aButton=myComponentButton.first(); aButton; aButton=myComponentButton.next() ) { - aButton->setOn(false); - } - } + } else if (component.compare(QString("Salome"))!= 0) { + + SALOMEGUI_ActivateComponentDlg aDlg( this ); + int res = aDlg.exec(); + + switch ( res ) + { + case 1: + onNewStudy(); + onComboActiveComponent(component,true); + break; + case 2: + onOpenStudy(); + onComboActiveComponent(component,true); + break; + case 3: + onLoadStudy(); + onComboActiveComponent(component,true);; + break; + case 0: + default: + putInfo( tr("INF_CANCELLED") ); + myCombo->setCurrentItem (0); + for ( QToolButton* aButton=myComponentButton.first(); aButton; aButton=myComponentButton.next() ) { + aButton->setOn(false); + // return; + } + } + } } /*! @@ -3151,6 +3272,33 @@ void QAD_Desktop::onViewerTrihedron() } } +void QAD_Desktop::onExternalBrowser() +{ + + QString theApp = QAD_CONFIG->getSetting("ExternalBrowser:Application"); + QString theParams = QAD_CONFIG->getSetting("ExternalBrowser:Parameters"); + + SALOMEGUI_ExternalBrowserDlg *Dlg = new SALOMEGUI_ExternalBrowserDlg(this); + + if (!theApp.isEmpty()) + { + QString theParams = QAD_CONFIG->getSetting("ExternalBrowser:Parameters"); + Dlg->setSettings(theApp, theParams); + } + int r = Dlg->exec(); + QString theAppFromDialog = Dlg->getApp(); + QString theParamsFromDialog = Dlg->getParams(); + delete Dlg; + + if (r == QDialog::Accepted) + { + QAD_CONFIG->addSetting("ExternalBrowser:Application", theAppFromDialog ); + QAD_CONFIG->addSetting("ExternalBrowser:Parameters", theParamsFromDialog ); + } + +} + + void QAD_Desktop::onDirList() { // getting dir list from settings @@ -3366,52 +3514,52 @@ void QAD_Desktop::helpAbout() delete About; } -/* Help Search */ -void QAD_Desktop::helpSearch() -{ -} - -/* Help Contents */ -void QAD_Desktop::helpContents() -{ - if (myActiveComp == "") - myActiveComp = getComponentUserName( "KERNEL" ); //NRI "Salome"; - - QCString dir; - QString root; - if (dir = getenv( getComponentName( myActiveComp ) + "_ROOT_DIR")) { - root = QAD_Tools::addSlash( QAD_Tools::addSlash(dir) + QAD_Tools::addSlash("share") + QAD_Tools::addSlash("salome") + "doc" ); - if ( QFileInfo( root + "index.html" ).exists() ) { - helpContext( root + "index.html", "" ); - } - else { - root = QAD_Tools::addSlash( root + "html" ); - if ( QFileInfo( root + "index.html" ).exists() ) { - helpContext( root + "index.html", "" ); - } - else { - root = QAD_Tools::addSlash( root + "html" ); - if ( QFileInfo( root + "index.html" ).exists() ) { - helpContext( root + "index.html", "" ); - } - } - } - } +// /* Help Search */ +// void QAD_Desktop::helpSearch() +// { +// } + +// /* Help Contents */ +// void QAD_Desktop::helpContents() +// { +// if (myActiveComp == "") +// myActiveComp = getComponentUserName( "KERNEL" ); //NRI "Salome"; + +// QCString dir; +// QString root; +// if (dir = getenv( getComponentName( myActiveComp ) + "_ROOT_DIR")) { +// root = QAD_Tools::addSlash( QAD_Tools::addSlash(dir) + QAD_Tools::addSlash("share") + QAD_Tools::addSlash("salome") + "doc" ); +// if ( QFileInfo( root + "index.html" ).exists() ) { +// helpContext( root + "index.html", "" ); +// } +// else { +// root = QAD_Tools::addSlash( root + "html" ); +// if ( QFileInfo( root + "index.html" ).exists() ) { +// helpContext( root + "index.html", "" ); +// } +// else { +// root = QAD_Tools::addSlash( root + "html" ); +// if ( QFileInfo( root + "index.html" ).exists() ) { +// helpContext( root + "index.html", "" ); +// } +// } +// } +// } - //NRI getHelpWindow()->contents(); - getHelpWindow()->show(); - getHelpWindow()->raise(); - getHelpWindow()->setActiveWindow(); -} +// // //NRI getHelpWindow()->contents(); +// // getHelpWindow()->show(); +// // getHelpWindow()->raise(); +// // getHelpWindow()->setActiveWindow(); +// } /* Help Context */ -void QAD_Desktop::helpContext(const QString& source, const QString& context) -{ - getHelpWindow()->context(source, context); - getHelpWindow()->show(); - getHelpWindow()->raise(); - getHelpWindow()->setActiveWindow(); -} +// void QAD_Desktop::helpContext(const QString& source, const QString& context) +// { +// // getHelpWindow()->context(source, context); +// // getHelpWindow()->show(); +// // getHelpWindow()->raise(); +// // getHelpWindow()->setActiveWindow(); +// } /* Preferences/MultiFile Save */ void QAD_Desktop::onMultiFileSave() diff --git a/src/SALOMEGUI/QAD_Desktop.h b/src/SALOMEGUI/QAD_Desktop.h index 065837548..c8743a3c2 100644 --- a/src/SALOMEGUI/QAD_Desktop.h +++ b/src/SALOMEGUI/QAD_Desktop.h @@ -34,7 +34,7 @@ #include "QAD_Application.h" #include "QAD_OperatorMenus.h" #include "QAD_Menus.h" -#include "QAD_HelpWindow.h" +//NRI #include "QAD_HelpWindow.h" #include "QAD_Action.h" #include "SALOME_NamingService.hxx" @@ -80,7 +80,7 @@ protected: //VRV: T2.5 - add default viewer PrefViewerTrihedronId, PrefConsoleFontId, PrefObjectBrowserEntryId, PrefObjectBrowserIAPPId, PrefObjectBrowserValueId, PrefObjectBrowserCHRONO_SORTId, - PrefDirsId, PrefMultiFileSave, PrefASCIISave, PrefSaveId, + PrefDirsId, PrefMultiFileSave, PrefASCIISave, PrefExternalBrowserId, PrefSaveId, //NRI : SAL2214 WindowNew3dId, ViewOCCId, ViewVTKId, ViewPlot2dId, //NRI : SAL2214 @@ -147,9 +147,9 @@ public: /* help actions */ virtual void helpAbout(); - virtual void helpSearch(); - virtual void helpContents(); - virtual void helpContext(const QString& path, const QString& dir = QString::null); +/* virtual void helpSearch(); */ +/* virtual void helpContents(); */ +/* virtual void helpContext(const QString& path, const QString& dir = QString::null); */ bool loadComponent(QString); void activateComponent(const QString& theName, bool isLoadData = true); @@ -171,7 +171,7 @@ public: QString getComponentName(const char *componentUserName); QString getComponentUserName(const char *componentName); - QAD_HelpWindow* getHelpWindow(); + //NRI QAD_HelpWindow* getHelpWindow(); void onMouseMove(QMouseEvent*); bool onMousePress(QMouseEvent*); @@ -236,12 +236,15 @@ protected slots: void onObjectBrowser(); void onMultiFileSave(); void onASCIISave(); + void onExternalBrowser(); void onActivateApp(QAD_Application* app); void onDeactivateApp(QAD_Application* app); void onHelpContents(); - void onHelpSearch(); + void onHelpContentsGUI(); + void onHelpContentsTUI(); +/* void onHelpSearch(); */ void onHelpAbout(); void onNewWindow3d(); @@ -257,7 +260,7 @@ protected slots: void onComboActiveComponent( const QString & , bool isLoadData); void onCascade(); - void onHelpWindowClosed(); + //NRI void onHelpWindowClosed(); protected: QMenuBar* myMainMenu; /* the main menu bar */ @@ -305,7 +308,7 @@ protected: QList myMenusList; QAD_Menus* myActiveMenus; - QAD_HelpWindow* myHelpWindow; + //NRI QAD_HelpWindow* myHelpWindow; QList myComponentButton; diff --git a/src/SALOMEGUI/QAD_Message.cxx b/src/SALOMEGUI/QAD_Message.cxx index a932028e2..4730b1ee8 100644 --- a/src/SALOMEGUI/QAD_Message.cxx +++ b/src/SALOMEGUI/QAD_Message.cxx @@ -111,9 +111,9 @@ void QAD_Message::mousePressEvent(QMouseEvent* event) id = popup->insertItem( tr( "EDIT_SELECTALL_CMD" ) ); idMap.insert(IdSelectAll, id); popup->setItemEnabled( idMap[ IdCopy ], hasMarkedText() ); - popup->setItemEnabled( idMap[ IdSelectAll ], - (bool)text().length() && !allSelected ); - + popup->setItemEnabled( idMap[ IdSelectAll ], !allSelected ); + popup->setItemEnabled( idMap[ IdClear ], textLine(1)!=myPrompt ); + int r = popup->exec( event->globalPos() ); delete popup; diff --git a/src/SALOMEGUI/QAD_ObjectBrowser.cxx b/src/SALOMEGUI/QAD_ObjectBrowser.cxx index 35bcde863..7bea424c0 100644 --- a/src/SALOMEGUI/QAD_ObjectBrowser.cxx +++ b/src/SALOMEGUI/QAD_ObjectBrowser.cxx @@ -712,6 +712,9 @@ void QAD_ObjectBrowser::Update( SALOMEDS::SObject_ptr SO, */ void QAD_ObjectBrowser::Update() { + int x = myListView->contentsX(); + int y = myListView->contentsY(); + myListView->clear(); myListViewMap.clear(); @@ -844,6 +847,8 @@ void QAD_ObjectBrowser::Update() } /* Updating UseCase Browser ============================================= */ UpdateUseCaseBrowser(); + + myListView->setContentsPos(x,y); } /*! diff --git a/src/SALOMEGUI/QAD_PyEditor.cxx b/src/SALOMEGUI/QAD_PyEditor.cxx index 58407f6a0..4dd3aa333 100644 --- a/src/SALOMEGUI/QAD_PyEditor.cxx +++ b/src/SALOMEGUI/QAD_PyEditor.cxx @@ -278,9 +278,17 @@ void QAD_PyEditor::keyPressEvent( QKeyEvent *e ) } case Key_Up: { - // if Cntr+Key_Up event then scroll the commands stack up + // if Cntr+Key_Up event then move cursor up if (ctrlPressed) { - QString histLine = _currentPrompt; + QMultiLineEdit::cursorUp( ); + } + // if Shift+Key_Up event then move cursor up and select the text + else if ( shftPressed && curLine > 0 ){ + setCursorPosition(curLine-1, curCol, true); + } + // scroll the commands stack up + else { + QString histLine = _currentPrompt; if (! _isInHistory) { _isInHistory = true; @@ -297,19 +305,21 @@ void QAD_PyEditor::keyPressEvent( QKeyEvent *e ) endLine = numLines() -1; setCursorPosition(endLine, lineLength(endLine)); } - // if Shift+Key_Up event then move cursor up and select the text - else if ( shftPressed && curLine > 0 ){ - setCursorPosition(curLine-1, curCol, true); - } - // move cursor up - else { QMultiLineEdit::keyPressEvent( e ); } break; } case Key_Down: { - // if Cntr+Key_Down event then scroll the commands stack down + // if Cntr+Key_Down event then move cursor down if (ctrlPressed) { - QString histLine = _currentPrompt; + QMultiLineEdit::cursorDown( ); + } + // if Shift+Key_Down event then move cursor down and select the text + else if ( shftPressed && curLine < endLine ) { + setCursorPosition(curLine+1, curCol, true); + } + // scroll the commands stack down + else { + QString histLine = _currentPrompt; QString nextCommand = _interp->getNext(); if (nextCommand.compare(TOP_HISTORY_PY) != 0) { @@ -328,13 +338,6 @@ void QAD_PyEditor::keyPressEvent( QKeyEvent *e ) endLine = numLines() -1; setCursorPosition(endLine, lineLength(endLine)); } - // if Shift+Key_Down event then move cursor down and select the text - else if ( shftPressed && curLine < endLine ) { - setCursorPosition(curLine+1, curCol, true); - } - //move cursor down - else { QMultiLineEdit::keyPressEvent( e ); } - break; } case Key_Left: diff --git a/src/SALOMEGUI/QAD_ResourceMgr.cxx b/src/SALOMEGUI/QAD_ResourceMgr.cxx index bb52c0aee..d116c7b33 100644 --- a/src/SALOMEGUI/QAD_ResourceMgr.cxx +++ b/src/SALOMEGUI/QAD_ResourceMgr.cxx @@ -240,11 +240,10 @@ QString QAD_ResourceMgr::resources( const char* prefix ) const Collects list of directories, separated by ';' where resources for module 'prefix' can be situated The order is following : + - _ROOT_DIR/share/salome/resources directory - CSF_Resources env.var directory ( or directory list ) - - CSF_ResourcesDefaults env.var directory ( or directory list ) - ${HOME}/.salome/resources directory - - ${SALOME_SITE_DIR}/share/salome/resources directory - - ${SALOME_ROOT_DIR}/share/salome/resources directory + - KERNEL_ROOT_DIR/share/salome/resources directory */ QString QAD_ResourceMgr::collectDirs( const QString& prefix ) const { @@ -281,13 +280,6 @@ QString QAD_ResourceMgr::collectDirs( const QString& prefix ) const dirList.append( dirList.isEmpty() ? dir : ( QString( SEPARATOR ) + dir ) ); } } - // Try CSF_ResourcesDefaults env.var directory ( or directory list ) - cenv = getenv( "CSF_ResourcesDefaults" ); - if ( cenv ) { - dir.sprintf( "%s", cenv ); - if ( !dir.isEmpty() ) - dirList.append( dirList.isEmpty() ? dir : ( QString( SEPARATOR ) + dir ) ); - } // Try ${HOME}/.salome/resources directory cenv = getenv( "HOME" ); if ( cenv ) { @@ -301,36 +293,6 @@ QString QAD_ResourceMgr::collectDirs( const QString& prefix ) const dirList.append( dirList.isEmpty() ? dir : ( QString( SEPARATOR ) + dir ) ); } } - // Try ${SALOME_SITE_DIR}/share/salome/resources directory - cenv = getenv( "SALOME_SITE_DIR" ); - if ( cenv ) { - dir.sprintf( "%s", cenv ); - if ( !dir.isEmpty() ) { - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "share" ; - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "salome" ; - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "resources" ; - dir = QAD_Tools::addSlash(dir) ; - dirList.append( dirList.isEmpty() ? dir : ( QString( SEPARATOR ) + dir ) ); - } - } - // Try ${SALOME_ROOT_DIR}/share/salome/resources directory - cenv = getenv( "SALOME_ROOT_DIR" ); - if ( cenv ) { - dir.sprintf( "%s", cenv ); - if ( !dir.isEmpty() ) { - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "share" ; - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "salome" ; - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "resources" ; - dir = QAD_Tools::addSlash(dir) ; - dirList.append( dirList.isEmpty() ? dir : ( QString( SEPARATOR ) + dir ) ); - } - } // Try ${KERNEL_ROOT_DIR}/share/salome/resources directory cenv = getenv( "KERNEL_ROOT_DIR" ); diff --git a/src/SALOMEGUI/QAD_RightFrame.cxx b/src/SALOMEGUI/QAD_RightFrame.cxx index 200ecc5cb..806a1503c 100644 --- a/src/SALOMEGUI/QAD_RightFrame.cxx +++ b/src/SALOMEGUI/QAD_RightFrame.cxx @@ -69,49 +69,7 @@ QAD_RightFrame::QAD_RightFrame(QWidget *parent, const char *name, QCString dir; QFileInfo fileInfo ; bool found = false; - if (myViewType == VIEW_OCC) { - if ( dir = getenv("SALOME_SITE_DIR")) { - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "lib" ; - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "salome" ; - dir = QAD_Tools::addSlash(dir) ; -#ifdef WNT - dir = dir + "libOCCViewer.dll" ; -#else - dir = dir + "libOCCViewer.so" ; -#endif - MESSAGE ( " GUI library = " << dir ) - fileInfo.setFile(dir) ; - if (fileInfo.exists()) { - ComponentLib = fileInfo.fileName(); - found = true; - MESSAGE (" Found ") - } else - MESSAGE (" Not found ") - } - - if ( (dir = getenv("SALOME_ROOT_DIR")) && !found ) { - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "lib" ; - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "salome" ; - dir = QAD_Tools::addSlash(dir) ; -#ifdef WNT - dir = dir + "libOCCViewer.dll" ; -#else - dir = dir + "libOCCViewer.so" ; -#endif - MESSAGE ( " GUI library = " << dir ) - fileInfo.setFile(dir) ; - if (fileInfo.exists()) { - ComponentLib = fileInfo.fileName(); - found = true; - MESSAGE (" Found ") - } else - MESSAGE (" Not found ") - } - + if (myViewType == VIEW_OCC) { if ( (dir = getenv("KERNEL_ROOT_DIR")) && !found ) { dir = QAD_Tools::addSlash(dir) ; dir = dir + "lib" ; @@ -133,49 +91,6 @@ QAD_RightFrame::QAD_RightFrame(QWidget *parent, const char *name, MESSAGE (" Not found ") } } else if (myViewType == VIEW_VTK) { - - if ( dir = getenv("SALOME_SITE_DIR")) { - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "lib" ; - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "salome" ; - dir = QAD_Tools::addSlash(dir) ; -#ifdef WNT - dir = dir + "libVTKViewer.dll" ; -#else - dir = dir + "libVTKViewer.so" ; -#endif - MESSAGE ( " GUI library = " << dir ); - fileInfo.setFile(dir) ; - if (fileInfo.exists()) { - ComponentLib = fileInfo.fileName(); - found = true; - MESSAGE (" Found "); - } else - MESSAGE (" Not found "); - } - - if ( (dir = getenv("SALOME_ROOT_DIR")) && !found ) { - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "lib" ; - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "salome" ; - dir = QAD_Tools::addSlash(dir) ; -#ifdef WNT - dir = dir + "libVTKViewer.dll" ; -#else - dir = dir + "libVTKViewer.so" ; -#endif - MESSAGE ( " GUI library = " << dir ); - fileInfo.setFile(dir) ; - if (fileInfo.exists()) { - ComponentLib = fileInfo.fileName(); - found = true; - MESSAGE (" Found "); - } else - MESSAGE (" Not found "); - } - if ( (dir = getenv("KERNEL_ROOT_DIR")) && !found ) { dir = QAD_Tools::addSlash(dir) ; dir = dir + "lib" ; @@ -197,48 +112,6 @@ QAD_RightFrame::QAD_RightFrame(QWidget *parent, const char *name, MESSAGE (" Not found "); } } else if (myViewType == VIEW_GRAPHSUPERV) { - if ( dir = getenv("SALOME_SITE_DIR")){ - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "lib" ; - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "salome" ; - dir = QAD_Tools::addSlash(dir) ; -#ifdef WNT - dir = dir + "libSUPERVGraph.dll" ; -#else - dir = dir + "libSUPERVGraph.so" ; -#endif - MESSAGE ( " GUI library = " << dir ) - fileInfo.setFile(dir) ; - if (fileInfo.exists()) { - ComponentLib = fileInfo.fileName() ; - found = true; - MESSAGE (" Found ") - } else - MESSAGE (" Not found ") - } - - if ( (dir = getenv("SALOME_ROOT_DIR")) && !found ) { - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "lib" ; - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "salome" ; - dir = QAD_Tools::addSlash(dir) ; -#ifdef WNT - dir = dir + "libSUPERVGraph.dll" ; -#else - dir = dir + "libSUPERVGraph.so" ; -#endif - MESSAGE ( " GUI library = " << dir ) - fileInfo.setFile(dir) ; - if (fileInfo.exists()) { - ComponentLib = fileInfo.fileName() ; - found = true; - MESSAGE (" Found ") - } else - MESSAGE (" Not found ") - } - if ( (dir = getenv("KERNEL_ROOT_DIR")) && !found ) { dir = QAD_Tools::addSlash(dir) ; dir = dir + "lib" ; @@ -260,48 +133,6 @@ QAD_RightFrame::QAD_RightFrame(QWidget *parent, const char *name, MESSAGE (" Not found ") } } else if (myViewType == VIEW_PLOT2D) { - if ( dir = getenv("SALOME_SITE_DIR")){ - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "lib" ; - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "salome" ; - dir = QAD_Tools::addSlash(dir) ; -#ifdef WNT - dir = dir + "libPlot2d.dll" ; -#else - dir = dir + "libPlot2d.so" ; -#endif - MESSAGE ( " GUI library = " << dir ) - fileInfo.setFile(dir) ; - if (fileInfo.exists()) { - ComponentLib = fileInfo.fileName() ; - found = true; - MESSAGE (" Found ") - } else - MESSAGE (" Not found ") - } - - if ( (dir = getenv("SALOME_ROOT_DIR")) && !found ) { - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "lib" ; - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "salome" ; - dir = QAD_Tools::addSlash(dir) ; -#ifdef WNT - dir = dir + "libPlot2d.dll" ; -#else - dir = dir + "libPlot2d.so" ; -#endif - MESSAGE ( " GUI library = " << dir ) - fileInfo.setFile(dir) ; - if (fileInfo.exists()) { - ComponentLib = fileInfo.fileName() ; - found = true; - MESSAGE (" Found ") - } else - MESSAGE (" Not found ") - } - if ( (dir = getenv("KERNEL_ROOT_DIR")) && !found ) { dir = QAD_Tools::addSlash(dir) ; dir = dir + "lib" ; diff --git a/src/SALOMEGUI/QAD_icons.po b/src/SALOMEGUI/QAD_icons.po index 5b1e636f7..f30ce6918 100644 --- a/src/SALOMEGUI/QAD_icons.po +++ b/src/SALOMEGUI/QAD_icons.po @@ -68,15 +68,6 @@ msgstr "close.png" msgid "ICON_HELP" msgstr "help.png" -msgid "QAD_HelpWindow::ICON_APP_HELP_BACK" -msgstr "back.xpm" - -msgid "QAD_HelpWindow::ICON_APP_HELP_FORWARD" -msgstr "forward.xpm" - -msgid "QAD_HelpWindow::ICON_APP_HELP_HOME" -msgstr "home.xpm" - #-------------- # VIEW #-------------- diff --git a/src/SALOMEGUI/QAD_msg_en.po b/src/SALOMEGUI/QAD_msg_en.po index f31e12f8d..39dededad 100644 --- a/src/SALOMEGUI/QAD_msg_en.po +++ b/src/SALOMEGUI/QAD_msg_en.po @@ -175,6 +175,14 @@ msgstr "&About ..." msgid "QAD_Desktop::MEN_DESK_HELP_CONTENTS" msgstr "&Contents" +#: QAD_Desktop.cxx:265 +msgid "QAD_Desktop::MEN_DESK_HELP_GUICONTENTS" +msgstr "&GUI Reference" + +#: QAD_Desktop.cxx:265 +msgid "QAD_Desktop::MEN_DESK_HELP_TUICONTENTS" +msgstr "&TUI Reference" + #: QAD_Desktop.cxx:273 msgid "QAD_Desktop::MEN_DESK_HELP_SEARCH" msgstr "&Search ..." @@ -203,6 +211,10 @@ msgstr "Viewer background" msgid "MEN_DESK_PREF_VIEWER_TRIHEDRON" msgstr "Trihedron size" +#: QAD_Desktop.cxx:747 +msgid "MEN_DESK_PREF_EXTERNAL_BROWSER" +msgstr "External browser" + msgid "MEN_DESK_PREF_DEFAULT_VIEWER" msgstr "Default viewer" @@ -364,6 +376,14 @@ msgstr "Shows \'About\' dialog" msgid "QAD_Desktop::PRP_DESK_HELP_CONTENTS" msgstr "Shows the whole help contents" +#: QAD_Desktop.cxx:266 +msgid "QAD_Desktop::PRP_DESK_HELP_GUICONTENTS" +msgstr "Shows the GUI help contents" + +#: QAD_Desktop.cxx:266 +msgid "QAD_Desktop::PRP_DESK_HELP_TUICONTENTS" +msgstr "Shows the TUI help contents" + #: QAD_Desktop.cxx:274 msgid "QAD_Desktop::PRP_DESK_HELP_SEARCH" msgstr "Searches help for a topic" @@ -415,21 +435,6 @@ msgstr "Sketch a rectangular area to fit the view" # TOOL TIP #--------------- -#: QAD_HelpWindow.cxx:57 -msgid "QAD_HelpWindow::TOT_HELPWINDOW_BACKWARD" -msgstr "Backward" - -#: QAD_HelpWindow.cxx:60 -msgid "QAD_HelpWindow::TOT_HELPWINDOW_FORWARD" -msgstr "Forward" - -#: QAD_HelpWindow.cxx:63 -msgid "QAD_HelpWindow::TOT_HELPWINDOW_HOME" -msgstr "Home" - -msgid "QAD_HelpWindow::QAD_HELP_CONTENTS" -msgstr "Contents" - #: QAD_Application.cxx:173 msgid "QAD_Application::TOT_APP_EDIT_REDO" msgstr "Redo last operation" @@ -544,10 +549,6 @@ msgstr "The study %1 is not saved.\nDo you want to save it ?" msgid "WRN_WARNING" msgstr "Warning" -#: QAD_Desktop.cxx:1072 -msgid "QAD_Desktop::WRN_LOAD_COMPONENT" -msgstr "Creates or opens before a study" - msgid "WRN_STUDY_LOCKED" msgstr "This study is locked and therefore cannot be modified" diff --git a/src/SALOMEGUI/QAD_msg_fr.po b/src/SALOMEGUI/QAD_msg_fr.po index 8027e10fc..dec15cf79 100644 --- a/src/SALOMEGUI/QAD_msg_fr.po +++ b/src/SALOMEGUI/QAD_msg_fr.po @@ -398,18 +398,6 @@ msgstr "S # TOOL TIP #--------------- -#: QAD_HelpWindow.cxx:57 -msgid "QAD_HelpWindow::TOT_HELPWINDOW_BACKWARD" -msgstr "Avant" - -#: QAD_HelpWindow.cxx:60 -msgid "QAD_HelpWindow::TOT_HELPWINDOW_FORWARD" -msgstr "Apres" - -#: QAD_HelpWindow.cxx:63 -msgid "QAD_HelpWindow::TOT_HELPWINDOW_HOME" -msgstr "Home" - #: QAD_Application.cxx:173 msgid "QAD_Application::TOT_APP_EDIT_REDO" msgstr "Répéter l'opération" diff --git a/src/SALOMEGUI/SALOMEGUI_ActivateComponentDlg.cxx b/src/SALOMEGUI/SALOMEGUI_ActivateComponentDlg.cxx new file mode 100644 index 000000000..7e326d083 --- /dev/null +++ b/src/SALOMEGUI/SALOMEGUI_ActivateComponentDlg.cxx @@ -0,0 +1,79 @@ +// SALOME SALOMEGUI : implementation of desktop and GUI kernel +// +// Copyright (C) 2003 CEA/DEN, EDF R&D +// +// +// +// File : SALOMEGUI_ActivateComponentDlg.cxx +// Author : Michael Zorin (mzn) +// Module : SALOME + +using namespace std; +#include "SALOMEGUI_ActivateComponentDlg.h" + +#include +#include +#include +#include +#include + + +SALOMEGUI_ActivateComponentDlg::SALOMEGUI_ActivateComponentDlg ( QWidget * parent, const char * name, bool modal, WFlags f ) + : QDialog ( parent, "", TRUE, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ) +{ + setSizeGripEnabled ( TRUE ) ; + setCaption( tr( "CAPTION" ) ); + + QVBoxLayout* m_vbL = new QVBoxLayout( this ); + m_vbL->setMargin( 11 ); m_vbL->setSpacing( 6 ); + + QLabel* m_lIcon = new QLabel (this, "m_lDescr"); + QPixmap pm = QMessageBox::standardIcon( QMessageBox::Information ); + m_lIcon->setPixmap( pm ); + m_lIcon->setScaledContents( false ); + m_lIcon->setAlignment( Qt::AlignCenter ); + + QLabel* m_lDescr = new QLabel (this, "m_lDescr"); + m_lDescr->setText ( tr ("ActivateComponent_DESCRIPTION") ); + m_lDescr->setAlignment( Qt::AlignCenter ); + m_lDescr->setMinimumHeight( m_lDescr->sizeHint().height()*5 ); + m_lDescr->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) ); + + QHBoxLayout* m_hl1 = new QHBoxLayout(); + m_hl1->setMargin( 0 ); m_hl1->setSpacing( 6 ); + m_hl1->addWidget( m_lIcon ); + m_hl1->addWidget( m_lDescr ); + + m_pb1 = new QPushButton( tr ("NEW"), this ); + m_pb2 = new QPushButton( tr ("OPEN"), this ); + m_pb3 = new QPushButton( tr ("LOAD"), this ); + m_pb4 = new QPushButton( tr ("CANCEL"), this ); + + QGridLayout* m_hl2 = new QGridLayout(); + m_hl2->setMargin( 0 ); m_hl2->setSpacing( 6 ); + m_hl2->addWidget( m_pb1, 0, 0 ); + m_hl2->addWidget( m_pb2, 0, 1 ); + m_hl2->addWidget( m_pb3, 0, 2 ); + m_hl2->addColSpacing( 3, 10 ); + m_hl2->setColStretch( 3, 5 ); + m_hl2->addWidget( m_pb4, 0, 4 ); + + m_vbL->addLayout( m_hl1 ); + m_vbL->addLayout( m_hl2 ); + + connect( m_pb1, SIGNAL( clicked() ), this, SLOT( onButtonClicked() ) ); + connect( m_pb2, SIGNAL( clicked() ), this, SLOT( onButtonClicked() ) ); + connect( m_pb3, SIGNAL( clicked() ), this, SLOT( onButtonClicked() ) ); + connect( m_pb4, SIGNAL( clicked() ), this, SLOT( reject() ) ); +} + +void SALOMEGUI_ActivateComponentDlg::onButtonClicked() +{ + QPushButton* btn = ( QPushButton* )sender(); + if ( btn == m_pb1 ) + done( 1 ); + if ( btn == m_pb2 ) + done( 2 ); + if ( btn == m_pb3 ) + done( 3 ); +} diff --git a/src/SALOMEGUI/SALOMEGUI_ActivateComponentDlg.h b/src/SALOMEGUI/SALOMEGUI_ActivateComponentDlg.h new file mode 100644 index 000000000..17544d0a2 --- /dev/null +++ b/src/SALOMEGUI/SALOMEGUI_ActivateComponentDlg.h @@ -0,0 +1,35 @@ +// SALOME SALOMEGUI : implementation of desktop and GUI kernel +// +// Copyright (C) 2003 CEA/DEN, EDF R&D +// +// +// +// File : SALOMEGUI_ActivateComponentDlg.h +// Author : Michael ZORIN (mzn) +// Module : SALOME + +#ifndef SALOMEGUI_ActivateComponentDlg_H +#define SALOMEGUI_ActivateComponentDlg_H + +#include + +class SALOMEGUI_ActivateComponentDlg: public QDialog +{ + Q_OBJECT + +public: + SALOMEGUI_ActivateComponentDlg ( QWidget * parent = 0, const char * name = 0, bool modal = FALSE, WFlags f = 0 ) ; + ~SALOMEGUI_ActivateComponentDlg ( ) { }; + +private slots: + void onButtonClicked(); + +private: + QPushButton* m_pb1; + QPushButton *m_pb2; + QPushButton *m_pb3; + QPushButton *m_pb4; +}; + +#endif + diff --git a/src/SALOMEGUI/SALOMEGUI_Application.cxx b/src/SALOMEGUI/SALOMEGUI_Application.cxx index 61556f22f..d9b5ad9b1 100644 --- a/src/SALOMEGUI/SALOMEGUI_Application.cxx +++ b/src/SALOMEGUI/SALOMEGUI_Application.cxx @@ -458,49 +458,7 @@ void SALOMEGUI_Application::onDisplay(int id) QCString dir; QFileInfo fileInfo ; bool found = false; - if ( getenv("SALOME_SITE_DIR") ) { - dir.fill('\0'); - dir.sprintf("%s",getenv("SALOME_SITE_DIR")); - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "lib" ; - dir = QAD_Tools::addSlash(dir) ; -#ifdef WNT - dir = dir + "lib" + parentComp.latin1() + "GUI.dll" ; -#else - dir = dir + "lib" + parentComp.latin1() + "GUI.so" ; -#endif - MESSAGE ( " GUI library = " << dir ) - fileInfo.setFile(dir) ; - if (fileInfo.exists()) { - ComponentLib = fileInfo.fileName(); - found = true; - MESSAGE ( " found " ) - } else { - MESSAGE ( " Not found " ) - } - } - if ( !found && getenv("SALOME_ROOT_DIR") ) { - dir.fill('\0'); - dir.sprintf("%s", getenv("SALOME_ROOT_DIR")); - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "lib" ; - dir = QAD_Tools::addSlash(dir) ; -#ifdef WNT - dir = dir + "lib" + parentComp.latin1() + "GUI.dll" ; -#else - dir = dir + "lib" + parentComp.latin1() + "GUI.so" ; -#endif - MESSAGE ( " GUI library = " << dir ) - fileInfo.setFile(dir) ; - if (fileInfo.exists()) { - ComponentLib = fileInfo.fileName() ; - found = true; - MESSAGE ( " found " ) - } else { - MESSAGE ( " Not found " ) - } - } - if ( !found && getenv( QAD_Application::getDesktop()->getComponentName(parentComp) + "_ROOT_DIR") ) { + if ( getenv( QAD_Application::getDesktop()->getComponentName(parentComp) + "_ROOT_DIR") ) { dir.fill('\0'); dir.sprintf("%s", getenv( QAD_Application::getDesktop()->getComponentName(parentComp) + "_ROOT_DIR")); dir = QAD_Tools::addSlash(dir) ; diff --git a/src/SALOMEGUI/SALOMEGUI_ExternalBrowserDlg.cxx b/src/SALOMEGUI/SALOMEGUI_ExternalBrowserDlg.cxx new file mode 100644 index 000000000..9ad17ddc1 --- /dev/null +++ b/src/SALOMEGUI/SALOMEGUI_ExternalBrowserDlg.cxx @@ -0,0 +1,134 @@ +// File : SALOMEGUI_ExternalBrowserDlg.cxx +// Author : Nichael ZORIN +// Module : SALOME +// $Header: /dn05/salome/CVS/SALOME_ROOT/SALOME/src/SALOMEGUI/SALOMEGUI_ExternalBrowserDlg.cxx + +using namespace std; +#include "SALOMEGUI_ExternalBrowserDlg.h" + +#include +#include +#include +#include +#include + +#include "QAD_FileDlg.h" +#include "QAD_Tools.h" + +/* + * Constructs a modal SALOMEGUI_ExternalBowserDlg which is a child of 'parent' + * + */ + +SALOMEGUI_ExternalBrowserDlg::SALOMEGUI_ExternalBrowserDlg( QWidget* parent ) + : QDialog( parent, "SALOMEGUI_ExternalBrowserDlg", true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ) +{ + setCaption( tr( "MEN_EXTERNAL_BROWSER" ) ); + setSizeGripEnabled( true ); + + QGridLayout* TopLayout = new QGridLayout( this ); + TopLayout->setSpacing( 6 ); + TopLayout->setMargin( 11 ); + + QGroupBox* TopGroup = new QGroupBox( this, "TopGroup" ); + TopGroup->setColumnLayout(0, Qt::Vertical ); + TopGroup->layout()->setSpacing( 0 ); + TopGroup->layout()->setMargin( 0 ); + QGridLayout* TopGroupLayout = new QGridLayout( TopGroup->layout() ); + TopGroupLayout->setAlignment( Qt::AlignTop ); + TopGroupLayout->setSpacing( 6 ); + TopGroupLayout->setMargin( 11 ); + + QLabel* LabelApp = new QLabel( tr( "MEN_EXTERNAL_BROWSER_APP" ), TopGroup, "LabelApp" ); + TopGroupLayout->addWidget( LabelApp, 0, 0 ); + ApplicationLine = new QLineEdit( TopGroup ); + ApplicationLine->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + ApplicationLine->setMinimumSize( 250, 0 ); + LabelApp->setBuddy(ApplicationLine); + TopGroupLayout->addWidget( ApplicationLine, 0, 1 ); + + QLabel* LabelParams = new QLabel( tr( "MEN_EXTERNAL_BROWSER_PARAMS" ), TopGroup, "LabelParams" ); + TopGroupLayout->addWidget( LabelParams, 1, 0 ); + ParametersLine = new QLineEdit( TopGroup ); + ParametersLine->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + ParametersLine->setMinimumSize( 250, 0 ); + LabelParams->setBuddy(ParametersLine); + TopGroupLayout->addWidget( ParametersLine, 1, 1 ); + + browseButton = new QPushButton( tr( "MEN_EXTERNAL_BROWSER_BROWSE" ) , TopGroup, "browseButton" ); + TopGroupLayout->addWidget( browseButton, 0, 2 ); + + QGroupBox* GroupButtons = new QGroupBox( this, "GroupButtons" ); + GroupButtons->setGeometry( QRect( 10, 10, 381, 48 ) ); + GroupButtons->setColumnLayout(0, Qt::Vertical ); + GroupButtons->layout()->setSpacing( 0 ); + GroupButtons->layout()->setMargin( 0 ); + QGridLayout* GroupButtonsLayout = new QGridLayout( GroupButtons->layout() ); + GroupButtonsLayout->setAlignment( Qt::AlignTop ); + GroupButtonsLayout->setSpacing( 6 ); + GroupButtonsLayout->setMargin( 11 ); + + QPushButton* buttonOk = new QPushButton( tr( "BUT_OK" ), GroupButtons, "buttonOk" ); + buttonOk->setAutoDefault( TRUE ); + buttonOk->setDefault( TRUE ); + GroupButtonsLayout->addWidget( buttonOk, 0, 0 ); + GroupButtonsLayout->addItem( new QSpacerItem( 5, 5, QSizePolicy::Expanding, QSizePolicy::Minimum ), 0, 1 ); + QPushButton* buttonCancel = new QPushButton( tr( "BUT_CANCEL" ) , GroupButtons, "buttonCancel" ); + buttonCancel->setAutoDefault( TRUE ); + GroupButtonsLayout->addWidget( buttonCancel, 0, 2 ); + + TopLayout->addWidget( TopGroup, 0, 0 ); + TopLayout->addWidget( GroupButtons, 1, 0 ); + + // signals and slots connections + connect( browseButton, SIGNAL( clicked() ), this, SLOT( onButtonClicked() ) ); + connect( buttonOk, SIGNAL( clicked() ), this, SLOT( accept() ) ); + connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) ); + +} + +void SALOMEGUI_ExternalBrowserDlg::onButtonClicked() +{ + QStringList flt; + flt.append( "ALL Files(*)" ); + QString aDir = QAD_Tools::getDirFromPath ( ApplicationLine->text() ); + QFileInfo aFileInfo = QAD_FileDlg::getFileName (this, aDir, flt, tr( "MEN_EXTERNAL_BROWSER_CHOOSEAPP" ), true); + if(aFileInfo.exists()) + ApplicationLine->setText(aFileInfo.filePath()); +} + +void SALOMEGUI_ExternalBrowserDlg::setSettings(const QString& AppString, const QString& ParamsString) +{ + ApplicationLine->setText(AppString); + ParametersLine->setText(ParamsString); +} + +QString SALOMEGUI_ExternalBrowserDlg::getApp() +{ + return ApplicationLine->text(); +} + +QString SALOMEGUI_ExternalBrowserDlg::getParams() +{ + return ParametersLine->text(); +} + +void SALOMEGUI_ExternalBrowserDlg::accept() { + + QFileInfo aFile = QFileInfo(ApplicationLine->text()); + + if (aFile.isFile() && !aFile.isExecutable()) + QMessageBox::warning ( this, tr( "Error" ) , tr ( "MEN_EXTERNAL_BROWSER_NOTEXECUTABLE" )); + else + QDialog::accept(); +} + +/* + * Destroys the object and frees any allocated resources + */ +SALOMEGUI_ExternalBrowserDlg::~SALOMEGUI_ExternalBrowserDlg() +{ + // no need to delete child widgets, Qt does it all for us +} + + diff --git a/src/SALOMEGUI/SALOMEGUI_ExternalBrowserDlg.h b/src/SALOMEGUI/SALOMEGUI_ExternalBrowserDlg.h new file mode 100644 index 000000000..95156994b --- /dev/null +++ b/src/SALOMEGUI/SALOMEGUI_ExternalBrowserDlg.h @@ -0,0 +1,36 @@ +// File : SALOMEGUI_ExternalBrowserDlg.h +// Author : Michael Zorin +// Module : SALOME +// $Header: /dn05/salome/CVS/SALOME_ROOT/SALOME/src/SALOMEGUI/SALOMEGUI_ExternalBrowserDlg.h + +#ifndef SALOMEGUI_EXTERNAL_BROWSER_DLG_H +#define SALOMEGUI_EXTERNAL_BROWSER_DLG_H + +#include +#include + +class SALOMEGUI_ExternalBrowserDlg : public QDialog +{ + Q_OBJECT + + public: + + SALOMEGUI_ExternalBrowserDlg( QWidget* parent = 0 ); + ~SALOMEGUI_ExternalBrowserDlg(); + void setSettings(const QString& AppString, const QString& ParamsString); + QString getApp(); + QString getParams(); + + private slots: + + void onButtonClicked(); + void accept(); + + private: + + QPushButton* browseButton; + QLineEdit* ApplicationLine; + QLineEdit* ParametersLine; +}; + +#endif // SALOMEGUI_EXTERNAL_BROWSER_DLG_H diff --git a/src/SALOMEGUI/SALOMEGUI_msg_en.po b/src/SALOMEGUI/SALOMEGUI_msg_en.po index bcdf3d4c6..af0785398 100644 --- a/src/SALOMEGUI/SALOMEGUI_msg_en.po +++ b/src/SALOMEGUI/SALOMEGUI_msg_en.po @@ -73,6 +73,32 @@ msgstr "Size :" msgid "SALOMEGUI_TrihedronSizeDlg::MEN_TRIHEDRON" msgstr "Trihedron" +#: SALOMEGUI_ExternalBrowserDlg.cxx:26 +msgid "SALOMEGUI_ExternalBrowserDlg::MEN_EXTERNAL_BROWSER" +msgstr "Choose external browser" + +#: SALOMEGUI_ExternalBrowserDlg.cxx:42 +msgid "SALOMEGUI_ExternalBrowserDlg::MEN_EXTERNAL_BROWSER_APP" +msgstr "Application:" + +#: SALOMEGUI_ExternalBrowserDlg.cxx:50 +msgid "SALOMEGUI_ExternalBrowserDlg::MEN_EXTERNAL_BROWSER_PARAMS" +msgstr "Parameters:" + +#: SALOMEGUI_ExternalBrowserDlg.cxx:58 +msgid "SALOMEGUI_ExternalBrowserDlg::MEN_EXTERNAL_BROWSER_BROWSE" +msgstr "&Browse" + +#: SALOMEGUI_ExternalBrowserDlg.cxx:95 +msgid "SALOMEGUI_ExternalBrowserDlg::MEN_EXTERNAL_BROWSER_CHOOSEAPP" +msgstr "Choose application" + +#: SALOMEGUI_ExternalBrowserDlg.cxx:126 +msgid "SALOMEGUI_ExternalBrowserDlg::MEN_EXTERNAL_BROWSER_NOTEXECUTABLE" +msgstr "The file is not executable!" + + + #: SALOMEGUI_OpenWith.cxx:37 msgid "SALOMEGUI_OpenWith::MEN_COMPONENT_CHOICE1" msgstr "Always use this component to open this type of object" @@ -652,6 +678,24 @@ msgstr "&Cancel" msgid "SALOMEGUI_CloseDlg::CLOSE_DESCRIPTION" msgstr "Do you want to close or only unload the study ?" +msgid "SALOMEGUI_ActivateComponentDlg::CAPTION" +msgstr "Activate module" + +msgid "SALOMEGUI_ActivateComponentDlg::NEW" +msgstr "&New" + +msgid "SALOMEGUI_ActivateComponentDlg::OPEN" +msgstr "&Open" + +msgid "SALOMEGUI_ActivateComponentDlg::LOAD" +msgstr "&Load" + +msgid "SALOMEGUI_ActivateComponentDlg::CANCEL" +msgstr "&Cancel" + +msgid "SALOMEGUI_ActivateComponentDlg::ActivateComponent_DESCRIPTION" +msgstr "You need to create, open or load study before." + msgid "SALOMEGUI_HELP_TITLE" msgstr "SALOME Help" diff --git a/src/SALOME_PY/Makefile.in b/src/SALOME_PY/Makefile.in index 08fac84a5..f99d2e4ed 100644 --- a/src/SALOME_PY/Makefile.in +++ b/src/SALOME_PY/Makefile.in @@ -44,7 +44,7 @@ LIB_CLIENT_IDL = SALOMEDS.idl \ SALOME_Exception.idl CPPFLAGS+=$(QT_INCLUDES) $(PYTHON_INCLUDES) $(VTK_INCLUDES) $(OGL_INCLUDES) $(OCC_INCLUDES) -DHAVE_CONFIG_H -LDFLAGS+= $(PYTHON_LIBS) $(QT_MT_LIBS) $(OCC_LIBS) $(VTK_LIBS) $(OGL_LIBS) -lSalomeGUI -lvtkCommonPython -lvtkGraphicsPython -lvtkImagingPython -lVTKViewer +LDFLAGS+= $(PYTHON_LIBS) $(QT_MT_LIBS) $(VTK_LIBS) $(OGL_LIBS) -lSalomeGUI -lvtkCommonPython -lvtkGraphicsPython -lvtkImagingPython -lVTKViewer @CONCLUDE@ diff --git a/src/SALOME_PYQT/Makefile.in b/src/SALOME_PYQT/Makefile.in index 525764d5d..146f123c1 100644 --- a/src/SALOME_PYQT/Makefile.in +++ b/src/SALOME_PYQT/Makefile.in @@ -49,7 +49,7 @@ EXPORT_SHAREDPYSCRIPTS = SalomePyQt.py LIB_CLIENT_IDL = SALOME_Exception.idl CPPFLAGS+=$(QT_INCLUDES) $(PYTHON_INCLUDES) $(SIP_INCLUDES) $(OCC_INCLUDES) $(VTK_INCLUDES) $(OGL_INCLUDES) -LIBS+= $(PYTHON_LIBS) $(SIP_LIBS) $(PYQT_LIBS) $(OCC_LIBS) $(VTK_LIBS) $(OGL_LIBS) +LIBS+= $(PYTHON_LIBS) $(SIP_LIBS) $(PYQT_LIBS) $(VTK_LIBS) $(OGL_LIBS) LDFLAGS+= -lSalomeGUI -lqtcmodule diff --git a/src/SALOME_SWIG/batchmode_salome.py b/src/SALOME_SWIG/batchmode_salome.py index f3a61bc76..463aff9be 100644 --- a/src/SALOME_SWIG/batchmode_salome.py +++ b/src/SALOME_SWIG/batchmode_salome.py @@ -68,8 +68,133 @@ def IDToObject(id): def IDToSObject(id): mySO = myStudy.FindObjectID(id); return mySO + + #-------------------------------------------------------------------------- + +def PersistentPresentation(theStudy, theSO, theWithID): + # put the sobject's content (with subchildren) to the string + aResult = "" + attrs = theSO.GetAllAttributes() + aLen = len(attrs) + anUncopied = 0 + for a in range(0,aLen): + attr = attrs[a] + if isinstance(attr,SALOMEDS._objref_AttributeTreeNode): + anUncopied += 1 + elif isinstance(attr,SALOMEDS._objref_AttributeTarget): + anUncopied += 1 + elif isinstance(attr,SALOMEDS._objref_AttributeReal) or \ + isinstance(attr,SALOMEDS._objref_AttributeInteger) or \ + isinstance(attr,SALOMEDS._objref_AttributeName) or \ + isinstance(attr,SALOMEDS._objref_AttributeComment) or \ + isinstance(attr,SALOMEDS._objref_AttributePersistentRef) or \ + isinstance(attr,SALOMEDS._objref_AttributeLocalID) or \ + isinstance(attr,SALOMEDS._objref_AttributeUserID): + aResult += " attribute value: " + str(attr.Value()) + elif isinstance(attr,SALOMEDS._objref_AttributeIOR): + aResult += " attribute: IOR" + elif isinstance(attr,SALOMEDS._objref_AttributeSequenceOfReal) or \ + isinstance(attr,SALOMEDS._objref_AttributeSequenceOfInteger): + aResult += " Sequence: " + str(attr.CorbaSequence()) + elif isinstance(attr,SALOMEDS._objref_AttributeDrawable): + aResult += " Drawable: " + str(attr.IsDrawable()) + elif isinstance(attr,SALOMEDS._objref_AttributeSelectable): + aResult += " Selectable: " + str(attr.IsSelectable()) + elif isinstance(attr,SALOMEDS._objref_AttributeExpandable): + aResult += " Expandable: " + str(attr.IsExpandable()) + elif isinstance(attr,SALOMEDS._objref_AttributeOpened): + aResult += " Opened: " + str(attr.IsOpened()) + elif isinstance(attr,SALOMEDS._objref_AttributeTextColor): + aResult += " TextColor: " + str(attr.TextColor()) + elif isinstance(attr,SALOMEDS._objref_AttributeTextHighlightColor): + aResult += " TextHighlightColor: " + str(attr.TextHighlightColor()) + elif isinstance(attr,SALOMEDS._objref_AttributePixMap): + aResult += " PixMap: " + str(attr.GetPixMap()) + elif isinstance(attr,SALOMEDS._objref_AttributeTableOfInteger) or \ + isinstance(attr,SALOMEDS._objref_AttributeTableOfReal): + aResult += " Table with title: " + attr.GetTitle() + elif isinstance(attr,SALOMEDS._objref_AttributePythonObject): + aResult += " PythonObject: " + attr.GetObject() + + if theWithID: + aResult = "sobject: " + theSO.GetID() + " nbattrs: " + str(aLen - anUncopied) + aResult + '\n' + else: + aResult = " nbattrs: " + str(aLen - anUncopied) + aResult + '\n' + anIter = theStudy.NewChildIterator(theSO) + while anIter.More(): + aResult += PersistentPresentation(theStudy, anIter.Value(), theWithID) + anIter.Next() + return aResult + #-------------------------------------------------------------------------- +def GetTree(theSO): + # returns the document list tree (as list) + aResult = [theSO.GetID()] + anIter = myStudy.NewChildIterator(theSO) + while anIter.More(): + aResult += GetTree(anIter.Value()) + anIter.Next() + return aResult + + #-------------------------------------------------------------------------- + +def CheckCopyPaste(theSO, theInfo ,theComponentPaste): + aRoot = theSO + while aRoot.GetID() != "0:": + aRoot = aRoot.GetFather() + aTree = GetTree(aRoot) + aStudyPersist = PersistentPresentation(myStudy, aRoot, 1) + + if not myStudyManager.CanCopy(theSO): + raise RuntimeError, " for "+theInfo+" returns false" + + if not myStudyManager.Copy(theSO): + raise RuntimeError, " for "+theInfo+" returns false" + + + if not myStudyManager.CanPaste(theSO): + raise RuntimeError, " for "+theInfo+" returns false" + + # check: before paste study is not changed check + if aStudyPersist != PersistentPresentation(myStudy, aRoot, 1): + raise RuntimeError, "Study is changed before Paste calling for "+theInfo + + aSObj = theSO + if theComponentPaste: + aSObj = theSO.GetFatherComponent() + theInfo = theInfo + "(paste for component)" + if not myStudyManager.Paste(aSObj): + raise RuntimeError, " for "+theInfo+" returns false" + aNewTree = GetTree(aRoot) + aLen = len(aTree) + for a in range(0,aLen): + if aTree[a] != aNewTree[a]: + return myStudy.FindObjectID(aNewTree[a]) + + if aLen < len(aNewTree): + return myStudy.FindObjectID(aNewTree[aLen]) + + raise RuntimeError, "After Copy calling the tree is not changed" + + #-------------------------------------------------------------------------- +def FindFileInDataDir(filename): + import os + datadir = os.getenv("DATA_DIR") + if datadir is not None: + import string + dirs = string.split(datadir, ":") + for dir in dirs: + file = dir + "/" + filename + if os.path.exists(file): + return file; + datadir = os.getenv("KERNEL_ROOT_DIR") + "/examples/" + file = datadir + filename + if os.path.exists(file): + return file; + + return None + #-------------------------------------------------------------------------- # initialise the ORB orb = CORBA.ORB_init([''], CORBA.ORB_ID) diff --git a/src/SALOME_SWIG/salome_test.py b/src/SALOME_SWIG/salome_test.py index 8550a196a..49d165b46 100644 --- a/src/SALOME_SWIG/salome_test.py +++ b/src/SALOME_SWIG/salome_test.py @@ -15,10 +15,22 @@ from salome import sg import SALOMEDS import os +import SALOME_ModuleCatalog + +print "======================================================================" +print " Get Catalog " +print "======================================================================" +obj = salome.naming_service.Resolve('Kernel/ModulCatalog') +catalog = obj._narrow(SALOME_ModuleCatalog.ModuleCatalog) + print "======================================================================" print " Create Study " print "======================================================================" +comp = catalog.GetComponent("GEOM") +if comp is None: + raise RuntimeError,"Component GEOM not found in Module Catalog." + import geompy print "=================================" @@ -47,10 +59,18 @@ print print "============= Test SMESH =============================" print +comp = catalog.GetComponent("SMESH") +if comp is None: + raise RuntimeError,"Component SMESH not found in Module Catalog." + +comp = catalog.GetComponent("MED") +if comp is None: + raise RuntimeError,"Component MED not found in Module Catalog." + import SMESH import smeshpy -geom = salome.lcc.FindOrLoadComponent("FactoryServer", "Geometry") +geom = salome.lcc.FindOrLoadComponent("FactoryServer", "GEOM") myBuilder = salome.myStudy.NewBuilder() smeshgui = salome.ImportComponentGUI("SMESH") @@ -231,12 +251,16 @@ print print "============= Test Supervisor =============================" print +comp = catalog.GetComponent("SUPERV") +if comp is None: + raise RuntimeError,"Component SUPERV not found in Module Catalog." + from SuperV import * import SALOMEDS myStudy = salome.myStudy myBuilder = myStudy.NewBuilder() -SuperVision = lcc.FindOrLoadComponent("SuperVisionContainer","Supervision") +SuperVision = lcc.FindOrLoadComponent("SuperVisionContainer","SUPERV") father = myStudy.FindComponent("SUPERV") if father is None: father = myBuilder.NewComponent("SUPERV") @@ -277,10 +301,10 @@ def addStudy(ior): anIOR.SetValue(dataflow.getIOR()) import os -dir= os.getenv("SALOME_ROOT_DIR") +dir= os.getenv("SUPERV_ROOT_DIR") if dir == None: - raise RuntimeError, "SALOME_ROOT_DIR is not defined" -xmlfile = dir +"/../SALOME_ROOT/SuperVisionTest/resources/GraphEssai.xml" + raise RuntimeError, "SUPERV_ROOT_DIR is not defined" +xmlfile = dir +"/examples/GraphEssai.xml" print "Load dataflow from the file : " print xmlfile print @@ -409,6 +433,11 @@ sg.updateObjBrowser(1); print print "============= Test VISU and MED =============================" print + +comp = catalog.GetComponent("VISU") +if comp is None: + raise RuntimeError,"Component VISU not found in Module Catalog." + import sys import SALOMEDS import SALOME @@ -418,13 +447,13 @@ import VISU import visu_gui medFile = "pointe.med" -medFile = os.getenv('SALOME_ROOT_DIR') + '/../SALOME_ROOT/data/' + medFile +medFile = os.getenv('KERNEL_ROOT_DIR') + '/examples/' + medFile print "Load ", medFile studyCurrent = salome.myStudyName -med_comp = salome.lcc.FindOrLoadComponent("FactoryServer", "Med") -myVisu = salome.lcc.FindOrLoadComponent("FactoryServer", "Visu") +med_comp = salome.lcc.FindOrLoadComponent("FactoryServer", "MED") +myVisu = salome.lcc.FindOrLoadComponent("FactoryServer", "VISU") try: if os.access(medFile, os.R_OK) : @@ -433,28 +462,23 @@ try: med_obj = visu_gui.visu.getMedObjectFromStudy() print "med_obj - ", med_obj - myField = visu_gui.visu.getFieldObjectFromStudy(2,1) - aMeshName = "FILED_DOUBLE_MESH" + myField1 = visu_gui.visu.getFieldObjectFromStudy(2,1) + aMeshName = "maa1" anEntity = VISU.NODE - aTimeStampId = 0 - - myResult1 = myVisu.ImportMedField(myField) + aTimeStampId = -1 + + myResult1 = myVisu.ImportMedField(myField1) aMesh1 = myVisu.MeshOnEntity(myResult1, aMeshName, anEntity); - aScalarMap1= myVisu.ScalarMapOnField(myResult1, aMeshName, anEntity, myField.getName(), aTimeStampId) - if(myField.getNumberOfComponents() > 1) : - aVectors = myVisu.VectorsOnField(myResult1, aMeshName, anEntity, myField.getName(), aTimeStampId) - - myResult2 = myVisu.ImportFile(medFile) - aMeshName = "maa1" - anEntity = VISU.NODE - aMesh2 = myVisu.MeshOnEntity(myResult2, aMeshName, anEntity) - - aScalarMap2 = myVisu.ScalarMapOnField(myResult2, aMeshName, anEntity, myField.getName(), aTimeStampId) - if(myField.getNumberOfComponents() > 1) : - aCutPlanes = myVisu.CutPlanesOnField(myResult2, aMeshName, anEntity, myField.getName(), aTimeStampId) - - sg.updateObjBrowser(0) + aScalarMap1= myVisu.ScalarMapOnField(myResult1, aMeshName, anEntity, myField1.getName(), aTimeStampId) + + myResult2 = myVisu.ImportFile(medFile); + aMesh2 = myVisu.MeshOnEntity(myResult2, aMeshName, anEntity); + + aTimeStampId = 3 + aScalarMap2= myVisu.ScalarMapOnField(myResult2, aMeshName, anEntity, myField1.getName(), aTimeStampId) + + sg.updateObjBrowser(0) else : print "We have no permission to rewrite medFile, so readStructFileWithFieldType can't open this file"; else : print "We have no permission to read medFile, it will not be opened"; diff --git a/src/Session/Makefile.in b/src/Session/Makefile.in index cfeaf5945..9e95d0c62 100644 --- a/src/Session/Makefile.in +++ b/src/Session/Makefile.in @@ -51,7 +51,7 @@ BIN_CLIENT_IDL = SALOMEDS.idl SALOMEDS_Attributes.idl SALOME_Component.idl SALOM CPPFLAGS+=$(QT_MT_INCLUDES) $(OCC_INCLUDES) $(PYTHON_INCLUDES) CXXFLAGS+=$(OCC_CXXFLAGS) -LDFLAGS+=$(QT_MT_LIBS) $(OCC_KERNEL_LIBS) $(OCC_OCAF_LIBS) $(OCC_VIEWER_LIBS) $(OCC_MODELER_LIBS) -lSalomeNS -lSalomeGUI -lSalomeObject -lSalomeLifeCycleCORBA -lqsplitterP -lOpUtil -lSalomeLoggerServer -lPlot2d +LDFLAGS+=$(QT_MT_LIBS) -lSalomeNS -lSalomeGUI -lSalomeObject -lSalomeLifeCycleCORBA -lqsplitterP -lOpUtil -lSalomeLoggerServer -lPlot2d -lSalomeVTKFilter @CONCLUDE@ diff --git a/src/Session/SALOME_Session_Server.cxx b/src/Session/SALOME_Session_Server.cxx index a53193848..99482aa36 100644 --- a/src/Session/SALOME_Session_Server.cxx +++ b/src/Session/SALOME_Session_Server.cxx @@ -28,7 +28,7 @@ # include "Utils_ORB_INIT.hxx" # include "Utils_SINGLETON.hxx" - +# include "SALOME_NamingService.hxx" #include #include using namespace std; @@ -61,9 +61,76 @@ int main(int argc, char **argv) ASSERT(SINGLETON_::IsAlreadyExisting()) ; CORBA::ORB_var &orb = init( argc , argv ) ; - CORBA::Object_var obj =orb->resolve_initial_references("RootPOA") ; - PortableServer::POA_var poa = PortableServer::POA::_narrow(obj) ; - + // + long TIMESleep = 250000000; + int NumberOfTries = 40; + int a; + timespec ts_req; + ts_req.tv_nsec=TIMESleep; + ts_req.tv_sec=0; + timespec ts_rem; + ts_rem.tv_nsec=0; + ts_rem.tv_sec=0; + CosNaming::NamingContext_var inc; + PortableServer::POA_var poa; + CORBA::Object_var theObj; + CORBA::Object_var obj; + CORBA::Object_var object; + SALOME_Logger::Logger_var log; + SALOME_NamingService &naming = *SINGLETON_::Instance() ; + int SESSION=0; + const char * Env = getenv("USE_LOGGER"); + int EnvL =0; + if ((Env!=NULL) && (strlen(Env))) + EnvL=1; + CosNaming::Name name; + name.length(1); + name[0].id=CORBA::string_dup("Logger"); + PortableServer::POAManager_var pman; + for (int i = 1; i<=NumberOfTries; i++){ + if (i!=1) + a=nanosleep(&ts_req,&ts_rem); + try{ + obj = orb->resolve_initial_references("RootPOA"); + if(!CORBA::is_nil(obj)) + poa = PortableServer::POA::_narrow(obj); + if(!CORBA::is_nil(poa)) + pman = poa->the_POAManager(); + if(!CORBA::is_nil(orb)) + theObj = orb->resolve_initial_references("NameService"); + if (!CORBA::is_nil(theObj)) + inc = CosNaming::NamingContext::_narrow(theObj); + } + catch( CORBA::COMM_FAILURE& ) + { + MESSAGE( "Session Server: CORBA::COMM_FAILURE: Unable to contact the Naming Service" ) + } + if(!CORBA::is_nil(inc)) { + MESSAGE( "Session Server: Naming Service was found" ) + if(EnvL==1){ + for(int j=1; j<=NumberOfTries; j++){ + if (j!=1) + a=nanosleep(&ts_req, &ts_rem); + try{ + object = inc->resolve(name); + } + catch(CosNaming::NamingContext::NotFound){ MESSAGE( "Session Server: Logger Server wasn't found" ) } + catch(...){ MESSAGE( "Session Server: Unknown exception" ) } + if (!CORBA::is_nil(object)) + log = SALOME_Logger::Logger::_narrow(object); + if (!CORBA::is_nil(log)){ + MESSAGE( "Session Server: Loger Server was found" ) + log->ping(); + SESSION=1; + break; + } + }} + } + if ((SESSION==1)||((EnvL==0)&&(!CORBA::is_nil(inc)))) + break; + } + // + // servant SALOME_Session_i * mySALOME_Session = new SALOME_Session_i(argc, argv, orb, poa) ; PortableServer::ObjectId_var mySALOME_Sessionid = poa->activate_object(mySALOME_Session) ; @@ -76,7 +143,7 @@ int main(int argc, char **argv) mySALOME_Session->_remove_ref() ; - PortableServer::POAManager_var pman = poa->the_POAManager() ; + //DECOMMENT PortableServer::POAManager_var pman = poa->the_POAManager() ; pman->activate() ; MESSAGE("pman->activate()") diff --git a/src/TOOLSDS/Makefile.in b/src/TOOLSDS/Makefile.in index 666688ba9..41f346ded 100644 --- a/src/TOOLSDS/Makefile.in +++ b/src/TOOLSDS/Makefile.in @@ -29,7 +29,7 @@ BIN_CLIENT_IDL = CPPFLAGS+=$(OCC_INCLUDES) $(HDF5_INCLUDES) CXXFLAGS+=$(OCC_CXXFLAGS) -LDFLAGS+=$(OCC_KERNEL_LIBS) -lOpUtil -lSalomeLoggerServer +LDFLAGS+= -lOpUtil -lSalomeLoggerServer $(CAS_LDPATH) -lTKernel @CONCLUDE@ diff --git a/src/TOOLSGUI/Makefile.in b/src/TOOLSGUI/Makefile.in index a51debd21..03a986861 100644 --- a/src/TOOLSGUI/Makefile.in +++ b/src/TOOLSGUI/Makefile.in @@ -58,7 +58,7 @@ LIB_CLIENT_IDL = SALOME_Exception.idl CPPFLAGS += $(QT_INCLUDES) $(OCC_INCLUDES) $(PYTHON_INCLUDES) CXXFLAGS += $(OCC_CXXFLAGS) -LDFLAGS += -lSalomeGUI +LDFLAGS += -lSalomeGUI @CONCLUDE@ diff --git a/src/TOOLSGUI/ToolsGUI_CatalogGeneratorDlg.cxx b/src/TOOLSGUI/ToolsGUI_CatalogGeneratorDlg.cxx index 1147a6e37..f117c1b60 100644 --- a/src/TOOLSGUI/ToolsGUI_CatalogGeneratorDlg.cxx +++ b/src/TOOLSGUI/ToolsGUI_CatalogGeneratorDlg.cxx @@ -344,14 +344,12 @@ void ToolsGUI_CatalogGeneratorDlg::onApply() } else { QString command = ""; - if ( getenv("SALOME_ROOT_DIR") ) - command = QString( getenv( "SALOME_ROOT_DIR" ) ) + "/bin/runIDLparser -Wbcatalog=" + XmlFile; - else if ( getenv("KERNEL_ROOT_DIR") ) + if ( getenv("KERNEL_ROOT_DIR") ) command = QString( getenv( "KERNEL_ROOT_DIR" ) ) + "/bin/runIDLparser -Wbcatalog=" + XmlFile; else { QAD_MessageBox::error1( this, tr("TOOLS_ERR_ERROR"), - tr("SALOME_ROOT_DIR or KERNEL_ROOT_DIR variables are not defined"), + tr("KERNEL_ROOT_DIR variable is not defined"), tr("TOOLS_BUT_OK") ); } if (!Author.isEmpty()) command += ",author=" + Author; diff --git a/src/TestContainer/TestContainer.cxx b/src/TestContainer/TestContainer.cxx index 14de77051..9849ce584 100644 --- a/src/TestContainer/TestContainer.cxx +++ b/src/TestContainer/TestContainer.cxx @@ -36,7 +36,10 @@ using namespace std; #include "SALOME_NamingService.hxx" #include "OpUtil.hxx" - +# include "Utils_ORB_INIT.hxx" +# include "Utils_SINGLETON.hxx" +# include "Utils_SALOME_Exception.hxx" +# include "Utils_CommException.hxx" int main (int argc, char * argv[]) { @@ -51,9 +54,75 @@ int main (int argc, char * argv[]) //Engines::Container_var iGenFact = Engines::Container::_narrow(obj); // Obtain a reference to the root POA - CORBA::Object_var obj = orb->resolve_initial_references("RootPOA") ; - PortableServer::POA_var poa = PortableServer::POA::_narrow(obj) ; - + // + long TIMESleep = 250000000; + int NumberOfTries = 40; + int a; + timespec ts_req; + ts_req.tv_nsec=TIMESleep; + ts_req.tv_sec=0; + timespec ts_rem; + ts_rem.tv_nsec=0; + ts_rem.tv_sec=0; + CosNaming::NamingContext_var inc; + PortableServer::POA_var poa; + CORBA::Object_var theObj; + CORBA::Object_var obj; + CORBA::Object_var object; + SALOME_Logger::Logger_var log; + SALOME_NamingService &naming = *SINGLETON_::Instance() ; + int TEST_CONTAINER=0; + const char * Env = getenv("USE_LOGGER"); + int EnvL =0; + if ((Env!=NULL) && (strlen(Env))) + EnvL=1; + CosNaming::Name name; + name.length(1); + name[0].id=CORBA::string_dup("Logger"); + PortableServer::POAManager_var manager; + for (int i = 1; i<=NumberOfTries; i++){ + if (i!=1) + a=nanosleep(&ts_req,&ts_rem); + try{ + obj = orb->resolve_initial_references("RootPOA"); + if(!CORBA::is_nil(obj)) + poa = PortableServer::POA::_narrow(obj); + if(!CORBA::is_nil(poa)) + manager = poa->the_POAManager(); + if(!CORBA::is_nil(orb)) + theObj = orb->resolve_initial_references("NameService"); + if (!CORBA::is_nil(theObj)) + inc = CosNaming::NamingContext::_narrow(theObj); + } + catch( CORBA::COMM_FAILURE& ) + { + MESSAGE( "Test Container: CORBA::COMM_FAILURE: Unable to contact the Naming Service" ) + } + if(!CORBA::is_nil(inc)) { + MESSAGE( "Test Container: Naming Service was found" ) + if(EnvL==1){ + for(int j=1; j<=NumberOfTries; j++){ + if (j!=1) + a=nanosleep(&ts_req, &ts_rem); + try{ + object = inc->resolve(name); + } + catch(CosNaming::NamingContext::NotFound){ MESSAGE( "Test Container: Logger Server wasn't found" ) } + catch(...){ MESSAGE( "Test Container: Unknown exception" ) } + if (!CORBA::is_nil(object)) + log = SALOME_Logger::Logger::_narrow(object); + if (!CORBA::is_nil(log)){ + MESSAGE( "Test Container: Loger Server was found" ) + log->ping(); + TEST_CONTAINER=1; + break; + } + }} + } + if ((TEST_CONTAINER==1)||((EnvL==0)&&(!CORBA::is_nil(inc)))) + break; + } + // // Use Name Service to find container SALOME_NamingService _NS(orb) ; string containerName = "/Containers/" ; diff --git a/src/VTKViewer/Makefile.in b/src/VTKViewer/Makefile.in index 15e620896..3d562442d 100644 --- a/src/VTKViewer/Makefile.in +++ b/src/VTKViewer/Makefile.in @@ -38,23 +38,23 @@ VPATH=.:@srcdir@:$(top_builddir)/inc:$(top_builddir)/idl EXPORT_HEADERS= VTKViewer_RenderWindow.h \ VTKViewer_ViewFrame.h \ VTKViewer_RenderWindowInteractor.h \ - VTKViewer_InteractorStyleSALOME.h - + VTKViewer_InteractorStyleSALOME.h + # Libraries targets LIB = libVTKViewer.la LIB_SRC= VTKViewer.cxx \ VTKViewer_ViewFrame.cxx \ VTKViewer_RenderWindow.cxx \ VTKViewer_RenderWindowInteractor.cxx \ - VTKViewer_InteractorStyleSALOME.cxx + VTKViewer_InteractorStyleSALOME.cxx \ + VTKViewer_VectorText.cxx LIB_MOC = \ VTKViewer.h \ VTKViewer_ViewFrame.h \ VTKViewer_RenderWindowInteractor.h \ VTKViewer_RenderWindow.h - - + LIB_CLIENT_IDL = SALOMEDS.idl \ SALOME_ModuleCatalog.idl \ SALOME_Component.idl \ @@ -62,7 +62,7 @@ LIB_CLIENT_IDL = SALOMEDS.idl \ CPPFLAGS+=$(QT_INCLUDES) $(OGL_INCLUDES) $(VTK_INCLUDES) $(OCC_INCLUDES) $(PYTHON_INCLUDES) CXXFLAGS+= -LDFLAGS+=$(VTK_LIBS) $(OGL_LIBS) $(QT_MT_LIBS) +LDFLAGS+=$(VTK_LIBS) $(OGL_LIBS) $(QT_MT_LIBS) -lSalomeGUI @CONCLUDE@ diff --git a/src/VTKViewer/VTKViewer_InteractorStyleSALOME.cxx b/src/VTKViewer/VTKViewer_InteractorStyleSALOME.cxx index d9eb3a75c..b0cfe0abb 100644 --- a/src/VTKViewer/VTKViewer_InteractorStyleSALOME.cxx +++ b/src/VTKViewer/VTKViewer_InteractorStyleSALOME.cxx @@ -31,6 +31,7 @@ using namespace std; #include "VTKViewer_RenderWindow.h" #include +#include "QAD_Config.h" #include "QAD_Application.h" #include "QAD_Desktop.h" @@ -51,6 +52,7 @@ using namespace std; #include #include #include +#include //VRV: porting on Qt 3.0.5 @@ -144,6 +146,71 @@ void VTKViewer_InteractorStyleSALOME::PanXY(int x, int y, int oldX, int oldY) this->Interactor->Render(); } +//---------------------------------------------------------------------------- +void VTKViewer_InteractorStyleSALOME::ControlLblSize(double aOldScale, double aNewScale) { + m_Triedron->InitTraversal(); + vtkActor *ac = m_Triedron->GetNextActor(); + bool IsConeActor = true; + while(!(ac==NULL)) { + float aMaxXRange; + float aMaxYRange; + float aMaxZRange; + if(ac->IsA("vtkFollower")) { + float aScale[3]; + ac->GetScale(aScale); + + float aPosition[3]; + ac->GetPosition(aPosition); + + float aPercent = (aOldScale-aNewScale)/aOldScale; + ac->SetScale(aScale[0]*(1-aPercent),aScale[1]*(1-aPercent),aScale[2]*(1-aPercent)); + + //Set new position + float aLength = ac->GetLength(); + if (aPosition[0]!=0) { + //x + aPosition[0] = aMaxXRange; + } else if (aPosition[1]!=0) { + //y + aPosition[1] = aMaxYRange; + } else if (aPosition[2]!=0) { + //z + aPosition[2] = aMaxZRange; + } + ac->SetPosition(aPosition); + + IsConeActor = true; + } + else { + if (IsConeActor) { + //coneActor is the first in the list (see m_Triedron->AddItem(...) in VTKViewer_ViewFrame::AddVector(...)) + IsConeActor = false; + + float aPosition[3]; + ac->GetPosition(aPosition); + + if (aPosition[0]!=0) { + //x + float* aXRange = ac->GetXRange(); + if (aXRange[0] < aXRange[1]) aMaxXRange = aXRange[1]; + else aMaxXRange = aXRange[0]; + } else if (aPosition[1]!=0) { + //y + float* aYRange = ac->GetYRange(); + if (aYRange[0] < aYRange[1]) aMaxYRange = aYRange[1]; + else aMaxYRange = aYRange[0]; + } else if (aPosition[2]!=0) { + //z + float* aZRange = ac->GetZRange(); + if (aZRange[0] < aZRange[1]) aMaxZRange = aZRange[1]; + else aMaxZRange = aZRange[0]; + } + } + } + ac = m_Triedron->GetNextActor(); + } +} + //---------------------------------------------------------------------------- void VTKViewer_InteractorStyleSALOME::DollyXY(int dx, int dy) { @@ -161,9 +228,14 @@ void VTKViewer_InteractorStyleSALOME::DollyXY(int dx, int dy) cam = this->CurrentRenderer->GetActiveCamera(); if (cam->GetParallelProjection()) { + double aOldScale = cam->GetParallelScale(); cam->SetParallelScale(cam->GetParallelScale()/zoomFactor); + double aNewScale = cam->GetParallelScale(); + + // for controlling label size + ControlLblSize(aOldScale,aNewScale); } - else + else { cam->Dolly(zoomFactor); this->CurrentRenderer->ResetCameraClippingRange(); @@ -1318,6 +1390,7 @@ void VTKViewer_InteractorStyleSALOME::Place(const int theX, const int theY) }*/ //VTKViewer_RenderWindow* aRW = dynamic_cast(this->Interactor->GetRenderWindow()); if (myGUIWindow) myGUIWindow->update(); + } diff --git a/src/VTKViewer/VTKViewer_InteractorStyleSALOME.h b/src/VTKViewer/VTKViewer_InteractorStyleSALOME.h index 510224997..a8a9aa206 100644 --- a/src/VTKViewer/VTKViewer_InteractorStyleSALOME.h +++ b/src/VTKViewer/VTKViewer_InteractorStyleSALOME.h @@ -99,6 +99,7 @@ class VTKViewer_InteractorStyleSALOME : public QObject, public vtkInteractorStyl public: bool eventFilter(QObject* object, QEvent* event); + void ControlLblSize(double aOldScale, double aNewScale); void startZoom(); void startPan(); void startGlobalPan(); diff --git a/src/VTKViewer/VTKViewer_RenderWindow.cxx b/src/VTKViewer/VTKViewer_RenderWindow.cxx index 3ae42c55b..6072e344b 100644 --- a/src/VTKViewer/VTKViewer_RenderWindow.cxx +++ b/src/VTKViewer/VTKViewer_RenderWindow.cxx @@ -67,7 +67,8 @@ VTKViewer_RenderWindow::VTKViewer_RenderWindow(QWidget *parent, const char *name } VTKViewer_RenderWindow::~VTKViewer_RenderWindow() { - //myRW->Delete(); //BUG SAL2954, Commented by SRN, to avoid problems when using rlogin + myRW->Delete(); //BUG SAL2954, Commented by SRN, to avoid problems when using rlogin + // Uncommented because of bug SAL3913 } void VTKViewer_RenderWindow::paintEvent(QPaintEvent* theEvent) { diff --git a/src/VTKViewer/VTKViewer_RenderWindowInteractor.cxx b/src/VTKViewer/VTKViewer_RenderWindowInteractor.cxx index 6d049b67e..4099a3fcd 100644 --- a/src/VTKViewer/VTKViewer_RenderWindowInteractor.cxx +++ b/src/VTKViewer/VTKViewer_RenderWindowInteractor.cxx @@ -156,14 +156,14 @@ void VTKViewer_RenderWindowInteractor::Initialize() { Edge_Actor = vtkActor::New(); Edge_Actor->PickableOff(); Edge_Actor->GetProperty()->SetColor(1,0,0); - Edge_Actor->GetProperty()->SetRepresentationToSurface(); Edge_Actor->GetProperty()->SetLineWidth(5); + Edge_Actor->GetProperty()->SetRepresentationToWireframe(); Point_Actor = vtkActor::New(); Point_Actor->PickableOff(); Point_Actor->GetProperty()->SetColor(1,1,0); - Point_Actor->GetProperty()->SetRepresentationToSurface(); Point_Actor->GetProperty()->SetPointSize(5); + Point_Actor->GetProperty()->SetRepresentationToPoints(); return ; } @@ -912,12 +912,12 @@ QColor VTKViewer_RenderWindowInteractor::GetColor(const Handle(SALOME_Interactiv // GEOM actor float r,g,b; anActor->GetColor(r,g,b); - return QColor(r*255,g*255,b*255); + return QColor(int(r*255),int(g*255),int(b*255)); } else { float color[3]; anActor->GetProperty()->GetColor(color); - return QColor(color[0]*255,color[1]*255,color[2]*255); + return QColor(int(color[0]*255),int(color[1]*255),int(color[2]*255)); } } } @@ -1063,7 +1063,12 @@ static void CellCreateMapper(vtkPolyData *theSourcePolyData, vtkPolyDataMapper* int aPartId = ite.Key(); if(0 > aPartId || aPartId >= aNbOfParts) break; theSourcePolyData->GetCellPoints(aPartId,ptIds); - aPolyData->InsertNextCell(theSourcePolyData->GetCellType(aPartId),ptIds); + vtkCell* aCell = theSourcePolyData->GetCell(aPartId); + aPolyData->InsertNextCell(aCell->GetCellType(),ptIds); + for (int i = 0, iEnd = aCell->GetNumberOfEdges(); i < iEnd; i++){ + vtkCell* anEdgeCell = aCell->GetEdge(i); + aPolyData->InsertNextCell(VTK_LINE,anEdgeCell->GetPointIds()); + } } ptIds->Delete(); theMapper->SetInput(aPolyData); diff --git a/src/VTKViewer/VTKViewer_VectorText.cxx b/src/VTKViewer/VTKViewer_VectorText.cxx new file mode 100644 index 000000000..ae19d948d --- /dev/null +++ b/src/VTKViewer/VTKViewer_VectorText.cxx @@ -0,0 +1,1747 @@ +/*========================================================================= + + Program: Visualization Toolkit + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + + Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen + All rights reserved. + See Copyright.txt or http://www.kitware.com/Copyright.htm for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notice for more information. + +=========================================================================*/ +// VTKViewer_VectorText.cxx is a copy of vtkVectorText.cxx file. +// Purpose of copying: to remove linking to libHybrid.so VTK library + +#include "VTKViewer_VectorText.h" + +#include "vtkCellArray.h" +#include "vtkObjectFactory.h" +#include "vtkPoints.h" +#include "vtkPolyData.h" + +vtkCxxRevisionMacro(VTKViewer_VectorText, "$Revision$"); +vtkStandardNewMacro(VTKViewer_VectorText); + +char *VTK_VECTOR_TEXT_33 = (char *) "11 0.438482 " +"0.28000 -0.07186 0.43164 -0.07143 0.27689 0.07714 0.43472 0.07714 0.32000 0.20134 " +"0.40000 0.20243 0.31429 0.20550 0.27277 0.76857 0.43848 0.76857 0.27693 1.02571 " +"0.43429 1.02615 7 2 1 3 2 0 1 7 6 5 6 4 5 8 " +"7 5 7 8 9 10 9 8 " +; + +char *VTK_VECTOR_TEXT_34 = (char *) "21 0.615625 " +"0.25714 0.63563 0.32571 0.63563 0.50286 0.63642 0.25143 0.63946 0.33143 0.63840 " +"0.33462 0.64286 0.49673 0.64286 0.57714 0.63757 0.58093 0.64286 0.21335 0.84286 " +"0.36680 0.84286 0.46177 0.84286 0.61522 0.84286 0.21295 1.02000 0.46134 1.02000 " +"0.61563 1.02000 0.36571 1.02307 0.46550 1.02571 0.21714 1.02615 0.36000 1.02723 " +"0.61143 1.02615 17 3 5 9 7 6 2 4 5 1 6 8 12 0 1 5 6 " +"12 11 3 0 5 7 8 6 11 12 14 13 9 10 10 9 5 15 14 12 19 " +"18 10 18 13 10 17 14 20 14 15 20 16 19 10 " +; + +char *VTK_VECTOR_TEXT_35 = (char *) "43 0.974539 " +"0.22286 -0.09100 0.32571 -0.09236 0.56832 -0.08857 0.67429 -0.09201 0.28193 0.22000 " +"0.39470 0.22000 0.63009 0.22000 0.15385 0.23143 0.27429 0.22723 0.40571 0.22723 " +"0.62286 0.22723 0.74857 0.22680 0.97454 0.23143 0.15385 0.33429 0.97454 0.33429 " +"0.30344 0.34000 0.65201 0.34000 0.77084 0.34000 0.42286 0.34010 0.42034 0.34571 " +"0.36041 0.60286 0.70748 0.60286 0.82034 0.60286 0.47429 0.60626 0.15385 0.61429 " +"0.35429 0.61009 0.70286 0.60951 0.82857 0.61009 0.97454 0.61429 0.15385 0.71714 " +"0.37714 0.72134 0.50286 0.72191 0.72571 0.72134 0.85143 0.72156 0.97143 0.72025 " +"0.38605 0.72857 0.49823 0.72857 0.73335 0.72857 0.84613 0.72857 0.45143 1.04160 " +"0.55735 1.04286 0.80000 1.04243 0.90521 1.04286 43 6 2 3 5 0 1 0 5 4 18 " +"9 10 11 6 3 4 9 8 13 8 15 17 6 11 9 4 5 13 7 8 17 " +"12 14 8 9 15 15 19 20 16 6 17 12 17 11 18 10 16 10 6 16 21 " +"16 17 18 19 9 15 9 19 20 30 25 23 20 19 34 33 28 29 24 25 29 " +"25 30 27 21 22 33 21 27 20 23 30 22 21 17 33 27 28 31 26 32 35 " +"30 23 32 38 37 31 35 23 21 32 26 26 31 23 32 21 38 41 37 38 36 " +"35 31 38 21 33 40 39 36 42 41 38 39 35 36 " +; + +char *VTK_VECTOR_TEXT_36 = (char *) "73 0.921518 " +"0.52571 -0.22882 0.59429 -0.22991 0.52000 -0.09942 0.60571 -0.09385 0.40571 -0.07057 " +"0.72730 -0.06571 0.33143 -0.03465 0.80571 -0.01813 0.51429 0.01891 0.52152 0.02571 " +"0.60571 0.02014 0.84571 0.02168 0.25669 0.04286 0.66857 0.03800 0.44571 0.04535 " +"0.70984 0.06571 0.74535 0.10571 0.74857 0.11079 0.74902 0.11143 0.37057 0.12857 " +"0.90538 0.12857 0.20823 0.15143 0.35748 0.16286 0.77395 0.16857 0.35429 0.17310 " +"0.35177 0.18000 0.78134 0.21429 0.92152 0.21429 0.19580 0.22571 0.33480 0.25429 " +"0.77395 0.29429 0.91177 0.32286 0.76000 0.32921 0.72571 0.36972 0.89355 0.37429 " +"0.64690 0.40857 0.65143 0.40706 0.64000 0.41109 0.60571 0.41986 0.52109 0.43714 " +"0.85714 0.43270 0.38857 0.49216 0.79429 0.48902 0.72571 0.52437 0.30454 0.54571 " +"0.60260 0.56286 0.52043 0.58571 0.26286 0.59570 0.46857 0.59800 0.39429 0.65095 " +"0.22857 0.67295 0.36823 0.70000 0.75429 0.77624 0.21907 0.78571 0.35891 0.78571 " +"0.89184 0.79714 0.37714 0.85001 0.72571 0.86144 0.87470 0.86571 0.24571 0.89016 " +"0.68571 0.90956 0.44000 0.92036 0.60571 0.94469 0.83179 0.94571 0.28000 0.94629 " +"0.51429 0.94891 0.34286 1.00607 0.75429 1.01579 0.38286 1.02784 0.52043 1.06571 " +"0.60260 1.06571 0.52260 1.12286 0.60043 1.12286 75 3 8 2 2 8 4 19 12 6 13 11 15 9 8 10 3 2 1 8 " +"3 10 5 13 10 15 11 16 7 13 5 4 14 6 2 0 1 5 10 3 12 " +"22 21 14 4 8 13 7 11 11 18 16 20 23 18 18 17 16 20 18 11 19 " +"6 14 28 21 29 26 23 20 12 19 22 25 22 24 21 22 25 21 25 29 26 " +"27 30 27 26 20 31 32 30 31 30 27 40 33 32 37 43 38 34 32 31 38 " +"39 9 40 32 34 38 9 10 43 33 42 37 36 43 39 38 43 42 33 40 35 " +"36 37 33 43 36 39 45 46 48 41 39 45 39 43 41 48 44 47 51 50 46 " +"62 65 48 39 46 44 49 47 49 44 48 54 53 50 51 47 49 53 56 59 53 " +"54 56 66 64 56 55 58 52 58 57 52 54 50 51 59 56 64 67 60 63 60 " +"57 63 66 61 68 61 66 56 68 65 69 65 62 69 62 46 45 63 57 58 62 " +"60 67 68 61 65 71 70 72 70 62 67 62 70 69 71 69 70 " +; + +char *VTK_VECTOR_TEXT_37 = (char *) "81 1.409911 " +"0.46713 -0.11143 0.57143 -0.11215 1.19429 -0.11252 1.10286 -0.10252 1.26444 -0.09429 " +"1.05143 -0.07759 1.31429 -0.06384 1.14857 -0.01538 1.18857 -0.01807 0.98857 -0.01364 " +"1.22286 -0.00771 1.36784 -0.00286 1.11302 0.00286 1.26436 0.03143 1.07787 0.04857 " +"0.95748 0.05429 1.39681 0.06571 1.28680 0.09429 1.05866 0.14000 1.40991 0.14571 " +"0.94134 0.15143 0.94134 0.21429 1.29295 0.21429 1.06134 0.23714 1.40723 0.23714 " +"0.95748 0.30000 1.39387 0.30000 1.07787 0.30571 1.27429 0.30371 1.09561 0.33429 " +"1.23429 0.35465 1.36616 0.36286 1.13143 0.36327 1.16571 0.37277 1.20571 0.36899 " +"1.00045 0.38571 1.32000 0.41543 1.06857 0.44498 1.24571 0.45681 0.48000 0.46420 " +"1.15429 0.46723 0.38857 0.47462 0.55016 0.48286 0.60000 0.51330 0.30286 0.52704 " +"0.43429 0.56177 0.47429 0.55907 0.26857 0.57284 0.50857 0.56943 0.65355 0.57429 " +"0.39873 0.58000 0.55007 0.60857 0.24530 0.62571 0.36359 0.62571 0.68252 0.64286 " +"0.56680 0.64857 0.23050 0.69429 0.34437 0.71714 0.57866 0.72286 0.69563 0.72286 " +"0.22705 0.79143 0.34705 0.81429 0.69295 0.81429 0.56891 0.85429 0.67959 0.87714 " +"0.24530 0.88286 0.36359 0.88286 0.38132 0.91143 0.54286 0.90975 0.52000 0.93179 " +"0.65465 0.93429 0.41714 0.94041 0.47429 0.94950 0.29143 0.96914 0.60571 0.99258 " +"0.32000 0.99868 0.38286 1.03395 0.53714 1.03184 1.06857 1.04249 1.17287 1.04286 " +"0.48000 1.04395 79 0 1 78 10 4 6 2 8 3 9 14 15 4 " +"10 8 3 7 5 7 3 8 10 6 13 12 5 7 5 12 9 4 8 2 13 " +"16 17 17 19 22 14 9 12 15 18 20 11 13 6 13 11 16 17 16 19 18 " +"15 14 21 20 18 21 23 25 22 26 28 23 21 18 24 22 19 25 27 35 35 " +"29 37 22 24 26 28 31 30 27 25 23 31 28 26 27 29 35 36 30 31 38 " +"34 30 38 33 34 37 32 40 32 33 40 38 30 36 32 37 29 40 33 38 42 " +"46 39 47 53 52 48 43 51 39 46 41 41 50 44 56 57 60 45 41 46 42 " +"48 46 48 42 43 50 41 45 53 47 44 51 49 55 54 55 49 53 44 50 49 " +"51 43 55 54 58 59 58 54 57 56 52 57 52 53 60 61 65 58 62 63 57 " +"61 60 62 64 63 65 66 73 66 65 61 73 66 75 58 59 62 63 64 68 70 " +"69 68 67 75 66 70 68 64 76 71 72 75 67 76 74 69 70 71 76 67 69 " +"77 72 72 77 80 77 69 74 76 72 80 79 78 1 " +; + +char *VTK_VECTOR_TEXT_38 = (char *) "76 1.126291 " +"0.58857 -0.08966 1.03429 -0.09235 0.48000 -0.08395 0.66286 -0.07673 0.40000 -0.05914 " +"0.72000 -0.05641 0.98286 -0.05473 0.35429 -0.03393 0.78857 -0.01678 1.12629 0.00857 " +"0.29143 0.02168 0.52571 0.02991 0.57714 0.02764 0.62286 0.03756 0.46857 0.04645 " +"0.87429 0.05495 0.69714 0.07393 0.42132 0.08286 1.04571 0.07868 0.24486 0.08857 " +"0.75011 0.11714 0.22327 0.14000 0.37927 0.14571 0.78349 0.16286 0.96893 0.16286 " +"0.96571 0.16717 0.96457 0.16857 0.95937 0.18000 0.35580 0.22571 0.20991 0.25429 " +"0.36319 0.28857 0.86286 0.29600 1.02437 0.31143 0.22645 0.32857 0.40418 0.36286 " +"0.40571 0.36454 0.41330 0.37429 1.05421 0.40857 0.28418 0.42571 0.92000 0.44119 " +"0.53714 0.46770 0.37143 0.50250 0.66758 0.54000 0.46406 0.55714 0.78704 0.62571 " +"0.59429 0.63146 0.37714 0.68444 0.69296 0.70000 0.85355 0.71714 0.35681 0.73429 " +"0.50200 0.75143 0.49756 0.76286 0.49502 0.76857 0.72891 0.76857 0.86966 0.76857 " +"0.34748 0.82000 0.73295 0.82000 0.48764 0.82571 0.87236 0.83143 0.49714 0.86089 " +"0.35849 0.87143 0.71429 0.87650 0.52000 0.89555 0.69714 0.89846 0.37964 0.91714 " +"0.84657 0.91714 0.55429 0.92073 0.65714 0.92498 0.60000 0.93277 0.81868 0.95714 " +"0.42857 0.97582 0.76571 1.00436 0.51429 1.02723 0.72000 1.02723 0.59429 1.04437 " +"0.64571 1.04395 78 7 17 10 3 13 0 " +"2 14 4 6 18 15 17 7 4 9 18 " +"6 9 6 1 8 16 5 0 12 2 " +"17 4 14 2 11 14 12 0 13 13 5 " +"16 15 24 20 16 8 20 13 3 5 " +"2 12 11 10 17 19 21 28 29 15 20 " +"8 20 24 23 40 23 31 24 25 26 " +"19 22 21 31 23 27 22 19 17 18 24 " +"15 28 21 22 29 30 33 31 32 39 " +"23 24 26 30 29 28 23 26 27 33 30 " +"38 32 31 27 38 36 41 38 34 36 " +"34 38 30 36 34 35 39 32 37 42 40 " +"31 40 41 36 42 44 47 45 43 40 " +"40 43 41 50 46 43 50 49 46 45 40 " +"42 48 53 47 45 42 47 49 52 55 " +"53 48 56 50 43 45 57 60 55 52 50 " +"51 49 50 52 48 47 44 54 56 48 " +"56 65 61 60 59 64 59 60 57 65 56 " +"58 52 57 55 64 59 70 58 56 54 " +"59 62 70 68 74 72 65 69 61 70 66 " +"72 63 71 67 63 61 69 70 62 66 " +"67 73 68 71 63 69 73 67 71 68 72 " +"66 74 68 75 75 68 73 " +; + +char *VTK_VECTOR_TEXT_39 = (char *) "10 0.364197 " +"0.25143 0.63563 0.24571 0.63946 0.32571 0.63757 0.32950 0.64286 0.21034 0.83714 " +"0.36379 0.83714 0.20991 1.02000 0.36420 1.02000 0.21408 1.02571 0.36000 1.02615 8 1 0 3 " +"2 3 0 1 3 4 7 6 4 5 4 " +"3 7 4 5 8 6 9 6 7 9 " +; + +char *VTK_VECTOR_TEXT_40 = (char *) "19 0.595731 " +"0.50857 -0.39522 0.59429 -0.39447 0.44000 -0.30784 0.51787 -0.24857 0.32530 -0.09429 " +"0.43748 -0.05429 0.26899 0.06571 0.38134 0.20286 0.23580 0.27714 0.37605 0.38000 " +"0.23848 0.41429 0.39320 0.53429 0.27177 0.59714 0.43748 0.71143 0.47216 0.80286 " +"0.36086 0.82000 0.45714 0.97936 0.59573 1.04286 0.50857 1.04395 17 2 3 4 0 3 2 3 " +"0 1 6 4 5 3 5 4 6 7 8 7 6 5 9 10 8 9 8 7 10 " +"11 12 10 9 11 12 13 15 12 11 13 14 15 13 16 15 14 17 18 16 17 " +"16 14 " +; + +char *VTK_VECTOR_TEXT_41 = (char *) "19 0.598482 " +"0.24000 -0.39447 0.33143 -0.39258 0.40616 -0.28857 0.31641 -0.24857 0.48784 -0.14000 " +"0.39681 -0.05429 0.55538 0.03143 0.45295 0.20286 0.59580 0.23714 0.59848 0.37429 " +"0.45823 0.38000 0.44723 0.49429 0.56252 0.59714 0.41714 0.64134 0.47343 0.82000 " +"0.34857 0.83301 0.37714 0.97936 0.23855 1.04286 0.32571 1.04395 17 0 1 3 2 3 1 3 " +"4 5 3 2 4 5 6 7 6 5 4 7 8 10 8 9 10 11 10 9 8 " +"7 6 11 12 13 13 14 15 12 11 9 14 13 12 15 16 17 16 15 14 16 " +"18 17 " +; + +char *VTK_VECTOR_TEXT_42 = (char *) "34 0.685300 " +"0.33143 0.58250 0.33714 0.58223 0.53714 0.58250 0.54286 0.58194 0.36213 0.61429 " +"0.25587 0.63714 0.25266 0.64286 0.62655 0.64286 0.25393 0.64857 0.43429 0.73293 " +"0.44000 0.73049 0.36715 0.78000 0.50714 0.78000 0.35429 0.78613 0.63429 0.80816 " +"0.19309 0.82571 0.68389 0.82571 0.19177 0.83143 0.68530 0.83143 0.38857 0.86213 " +"0.39523 0.86571 0.48000 0.86242 0.47660 0.86571 0.34657 0.88286 0.58857 0.90823 " +"0.22286 0.92522 0.22857 0.92848 0.64571 0.92816 0.65143 0.92675 0.49295 1.02000 " +"0.38134 1.03714 0.38550 1.04286 0.49143 1.04021 0.48571 1.04437 32 2 12 10 8 4 11 " +"8 5 4 8 6 5 4 0 1 2 3 " +"12 0 4 5 12 9 10 9 11 4 " +"19 11 21 14 24 12 26 25 17 16 18 " +"14 13 23 15 19 21 20 11 19 13 " +"33 31 30 24 21 12 12 21 9 21 11 " +"9 26 17 23 12 3 7 27 24 18 " +"13 19 23 23 17 15 20 21 22 18 24 " +"14 28 27 18 33 30 20 29 20 22 " +"29 33 20 32 33 29 " +; + +char *VTK_VECTOR_TEXT_43 = (char *) "20 0.952768 " +"0.52836 0.10571 0.64878 0.10571 0.52420 0.11143 0.65295 0.11143 0.52420 0.39714 " +"0.65295 0.39714 0.22857 0.40546 0.52000 0.40329 0.66286 0.40437 0.95168 0.40857 " +"0.22437 0.52286 0.95277 0.52286 0.22857 0.52900 0.52311 0.53429 0.65403 0.53429 " +"0.94857 0.52900 0.52528 0.82571 0.65186 0.82571 0.53143 0.82991 0.64571 0.82991 18 1 2 0 1 3 2 " +"4 2 3 5 4 3 12 6 7 14 4 " +"8 9 15 8 8 4 5 9 11 15 " +"12 7 13 6 12 10 7 4 13 14 8 " +"15 17 19 18 14 13 4 17 18 16 " +"17 16 13 17 13 14 " +; + +char *VTK_VECTOR_TEXT_44 = (char *) "23 0.432768 " +"0.30286 -0.28607 0.30857 -0.28726 0.33714 -0.27355 0.36571 -0.25275 0.27329 -0.23714 " +"0.38670 -0.23143 0.30286 -0.21582 0.39914 -0.21429 0.32115 -0.19714 0.41355 -0.18571 " +"0.33800 -0.16857 0.42327 -0.15714 0.34605 -0.14571 0.43277 -0.10000 0.35580 -0.08286 " +"0.35472 -0.07714 0.28571 -0.07295 0.34857 -0.07295 0.28000 -0.06878 0.27957 0.07714 " +"0.43168 0.07714 0.28571 0.08134 0.42857 0.08025 21 0 6 4 0 " +"1 2 0 2 6 3 6 2 8 5 10 5 7 10 6 5 8 5 6 3 10 " +"7 12 9 12 7 12 13 14 11 12 9 12 11 13 18 17 19 17 21 19 15 " +"14 13 15 13 17 21 17 22 17 20 22 18 16 17 20 17 13 " +; + +char *VTK_VECTOR_TEXT_45 = (char *) "8 0.606146 " +"0.19118 0.26000 0.19429 0.25689 0.60000 0.25580 0.60615 0.26000 0.19118 0.38571 " +"0.60615 0.38571 0.19429 0.38882 0.60000 0.38991 6 6 1 2 6 0 " +"1 6 2 7 6 4 0 7 2 3 " +"5 7 3 " +; + +char *VTK_VECTOR_TEXT_46 = (char *) "13 0.432768 " +"0.28571 -0.07295 0.42286 -0.07295 0.42857 -0.07186 0.27848 -0.06571 0.28000 -0.06878 " +"0.43277 -0.06571 0.27848 0.07143 0.43277 0.07143 0.27957 0.07714 0.43168 0.07714 " +"0.28571 0.08134 0.42286 0.08134 0.42857 0.08025 11 0 " +"3 4 3 0 1 8 6 10 5 1 2 3 1 5 6 3 5 6 7 11 6 " +"5 7 10 6 11 9 12 11 9 11 7 " +; + +char *VTK_VECTOR_TEXT_47 = (char *) "5 0.562348 " +"0.14389 -0.08857 0.14857 -0.09256 0.25004 -0.08857 0.56235 1.04286 0.46286 1.04358 3 2 0 1 4 0 2 3 " +"4 2 " +; + +char *VTK_VECTOR_TEXT_48 = (char *) "53 0.926804 " +"0.53714 -0.09009 0.59429 -0.09009 0.66857 -0.07673 0.43429 -0.06723 0.73143 -0.05070 " +"0.34286 -0.00972 0.80571 0.01025 0.54857 0.02152 0.61714 0.02891 0.30241 0.03714 " +"0.65714 0.04645 0.46857 0.05007 0.42473 0.08857 0.70286 0.08454 0.26645 0.10000 " +"0.86943 0.11143 0.39955 0.12286 0.73800 0.13429 0.23748 0.18000 0.37034 0.19714 " +"0.76252 0.20286 0.91236 0.26000 0.21866 0.26571 0.35621 0.26571 0.77823 0.28857 " +"0.34437 0.40286 0.92680 0.40286 0.20420 0.40857 0.78705 0.54000 0.20723 0.58000 " +"0.92420 0.58571 0.35277 0.64286 0.22177 0.69429 0.76571 0.72437 0.89966 0.74000 " +"0.37756 0.76286 0.74498 0.79143 0.26073 0.82571 0.85927 0.84857 0.42473 0.85429 " +"0.70439 0.85429 0.46286 0.88902 0.66286 0.89007 0.30241 0.90000 0.51009 0.91143 " +"0.58286 0.91823 0.80725 0.92857 0.77714 0.95829 0.38350 0.98000 0.71429 0.99927 " +"0.46286 1.01681 0.65714 1.01959 0.53714 1.02991 53 2 8 1 0 7 3 5 16 9 2 10 8 0 " +"1 8 7 0 8 12 16 5 11 3 7 3 12 5 15 20 17 11 12 3 13 " +"6 17 6 13 4 9 16 14 10 4 13 14 19 18 4 10 2 15 17 6 19 " +"14 16 21 24 20 23 18 19 22 25 27 24 26 28 23 22 18 21 20 15 26 " +"24 21 22 23 25 29 27 25 29 31 32 28 30 33 31 29 25 30 28 26 32 " +"35 37 46 40 36 30 34 33 32 31 35 43 39 48 43 37 35 38 36 33 38 " +"33 34 42 40 49 48 41 50 39 43 35 47 40 46 46 36 38 41 44 50 45 " +"52 44 42 51 45 41 48 39 49 40 47 50 44 52 52 45 51 42 49 51 " +; + +char *VTK_VECTOR_TEXT_49 = (char *) "11 0.708571 " +"0.58286 -0.07186 0.70857 -0.07186 0.30857 0.62908 0.31429 0.62657 0.38286 0.65641 " +"0.30785 0.75143 0.57714 0.77731 0.47429 0.85616 0.56384 0.94000 0.62857 1.02915 " +"0.70857 1.02882 9 6 0 1 2 4 5 7 5 4 2 3 4 6 " +"8 7 6 7 4 10 8 6 10 6 1 10 9 8 " +; + +char *VTK_VECTOR_TEXT_50 = (char *) "43 0.914286 " +"0.18857 -0.06878 0.91429 -0.06878 0.18748 -0.04286 0.19849 0.00857 0.91429 0.05164 " +"0.38142 0.06000 0.22943 0.07714 0.46286 0.15868 0.30286 0.17832 0.38286 0.25813 " +"0.58413 0.43143 0.78286 0.44454 0.67543 0.52286 0.85355 0.53429 0.72045 0.58000 " +"0.89756 0.62571 0.75470 0.64286 0.35168 0.70000 0.91236 0.70000 0.77295 0.71143 " +"0.21403 0.71714 0.77295 0.74571 0.22605 0.79143 0.37143 0.79804 0.90244 0.80857 " +"0.75429 0.81228 0.38902 0.83143 0.24359 0.84286 0.73143 0.84689 0.42454 0.87143 " +"0.86607 0.88857 0.68000 0.89070 0.28000 0.90629 0.49143 0.90823 0.58857 0.91866 " +"0.82857 0.93555 0.31597 0.94571 0.37714 0.98784 0.76000 0.98657 0.44571 1.01470 " +"0.69143 1.01470 0.53714 1.02991 0.62857 1.02723 41 3 2 0 3 5 6 1 5 0 5 " +"3 0 1 4 5 6 5 8 7 8 5 9 8 7 9 7 10 11 10 7 10 " +"11 12 12 11 14 16 15 18 16 18 19 13 14 11 14 13 16 21 24 25 15 " +"16 13 21 19 18 23 27 22 17 23 22 24 21 18 27 23 32 17 22 20 31 " +"42 34 30 28 25 26 32 23 40 31 38 35 28 30 36 32 26 29 36 26 34 " +"41 33 33 37 29 36 29 37 33 39 37 30 25 24 28 38 31 38 28 35 39 " +"33 41 31 40 42 41 34 42 " +; + +char *VTK_VECTOR_TEXT_51 = (char *) "68 0.927232 " +"0.52571 -0.09009 0.63429 -0.08395 0.45143 -0.07756 0.37143 -0.04498 0.74286 -0.04771 " +"0.30857 0.00132 0.81714 0.00439 0.54286 0.02152 0.60000 0.02420 0.64661 0.03714 " +"0.27429 0.03952 0.46857 0.04073 0.42857 0.06759 0.70857 0.07561 0.88213 0.08286 " +"0.23429 0.10772 0.38812 0.11714 0.74535 0.11714 0.91109 0.14571 0.77823 0.19143 " +"0.20764 0.20857 0.92723 0.22571 0.34286 0.23215 0.78437 0.27143 0.92723 0.27714 " +"0.75429 0.36430 0.89927 0.38571 0.72571 0.40132 0.86857 0.43270 0.67429 0.43927 " +"0.48000 0.45284 0.48571 0.44966 0.54857 0.46152 0.60000 0.46109 0.83429 0.46686 " +"0.72693 0.52286 0.49034 0.55714 0.49714 0.56395 0.78857 0.56473 0.58286 0.57109 " +"0.82857 0.60921 0.67429 0.61616 0.70400 0.64857 0.85294 0.65429 0.72680 0.70571 " +"0.87009 0.72286 0.35429 0.72298 0.22175 0.74571 0.72991 0.76286 0.72151 0.80286 " +"0.86244 0.80857 0.38857 0.82064 0.69143 0.85832 0.84571 0.85587 0.26241 0.87143 " +"0.43429 0.87829 0.64571 0.89641 0.48571 0.90723 0.29330 0.91714 0.60571 0.91252 " +"0.53143 0.91823 0.80384 0.92286 0.36000 0.97750 0.73143 0.98213 0.44571 1.01681 " +"0.65714 1.01470 0.52000 1.02991 0.60000 1.02723 66 3 11 " +"5 9 8 1 1 8 0 4 9 1 " +"9 4 13 7 0 8 6 13 4 17 13 " +"6 2 11 3 2 0 7 5 16 10 " +"12 5 11 10 16 15 11 2 7 16 5 " +"12 17 14 19 14 17 6 20 15 22 " +"19 18 23 22 15 16 14 18 19 21 23 " +"18 23 26 25 23 21 24 26 28 25 " +"30 32 36 25 34 27 35 32 33 35 29 " +"27 25 28 34 29 35 33 26 23 24 " +"37 36 32 39 32 35 35 27 34 37 32 " +"39 30 31 32 39 35 41 38 41 35 " +"38 42 41 40 42 38 42 40 44 40 43 " +"44 44 43 48 45 48 43 47 46 54 " +"49 48 50 50 48 45 49 53 52 63 52 " +"61 53 49 50 46 51 54 58 54 51 " +"58 55 62 62 55 64 66 57 60 61 52 " +"53 55 58 51 59 67 60 52 63 56 " +"56 65 59 55 57 64 64 57 66 65 56 " +"63 67 66 60 67 59 65 " +; + +char *VTK_VECTOR_TEXT_52 = (char *) "18 0.920000 " +"0.64571 -0.07295 0.64000 -0.06878 0.77143 -0.06878 0.77403 0.18571 0.16265 0.19143 " +"0.63429 0.18882 0.92000 0.19408 0.15891 0.31143 0.91735 0.31143 0.29653 0.31714 " +"0.63740 0.31714 0.77714 0.31403 0.16571 0.32228 0.16616 0.32286 0.63429 0.79380 " +"0.77186 1.02000 0.66857 1.02282 0.76571 1.02420 18 2 1 0 1 3 5 1 2 " +"3 3 10 5 9 4 5 4 9 7 " +"6 11 3 8 11 6 7 9 13 15 16 " +"14 9 5 10 7 13 12 13 14 16 " +"11 10 3 14 13 9 14 10 11 15 17 " +"16 15 14 11 " +; + +char *VTK_VECTOR_TEXT_53 = (char *) "54 0.932946 " +"0.52571 -0.09009 0.61714 -0.08665 0.44571 -0.07673 0.73143 -0.05179 0.35429 -0.03759 " +"0.78914 -0.01429 0.30286 0.00241 0.53714 0.02152 0.62857 0.03184 0.84115 0.03714 " +"0.46857 0.03927 0.66286 0.04645 0.26286 0.04921 0.42286 0.06759 0.71429 0.08439 " +"0.88045 0.09429 0.23343 0.10000 0.38812 0.10571 0.74535 0.12286 0.35748 0.16857 " +"0.77294 0.18000 0.91681 0.18000 0.20420 0.20857 0.34286 0.22376 0.78705 0.23714 " +"0.93295 0.27143 0.79009 0.31714 0.93252 0.33429 0.77714 0.38420 0.91681 0.42000 " +"0.34857 0.43034 0.75641 0.43143 0.23088 0.44857 0.72000 0.47868 0.40000 0.48400 " +"0.68000 0.50784 0.86902 0.51714 0.46857 0.52437 0.53143 0.53848 0.57714 0.53848 " +"0.58857 0.53621 0.60000 0.53580 0.82286 0.56972 0.38494 0.59714 0.77714 0.60535 " +"0.48571 0.64244 0.69714 0.64327 0.56571 0.65848 0.61714 0.65848 0.43891 0.87714 " +"0.44571 0.88395 0.88043 0.88857 0.88043 1.00857 0.33714 1.01182 52 7 1 " +"8 7 0 1 7 2 0 2 10 4 " +"6 13 12 3 8 1 3 11 8 10 2 " +"7 4 13 6 11 3 14 19 16 12 " +"3 5 14 9 14 5 10 13 4 22 19 " +"23 18 15 20 17 12 13 15 14 9 " +"14 15 18 19 12 17 25 26 24 20 21 " +"24 21 20 15 22 16 19 25 24 21 " +"26 25 27 29 28 26 29 26 27 43 37 " +"45 36 31 29 34 32 30 31 36 33 " +"31 28 29 32 34 43 48 47 41 45 38 " +"47 42 33 36 41 39 40 38 39 47 " +"37 38 45 47 39 41 44 33 42 43 34 " +"37 46 33 44 35 46 41 33 46 35 " +"46 48 41 32 43 53 43 49 53 49 50 " +"53 53 50 52 50 51 52 " +; + +char *VTK_VECTOR_TEXT_54 = (char *) "70 0.927232 " +"0.55429 -0.09009 0.66857 -0.08034 0.43429 -0.06213 0.75429 -0.04607 0.34857 -0.00972 " +"0.81143 -0.00439 0.59429 0.02152 0.51339 0.03143 0.85188 0.04286 0.67429 0.04645 " +"0.46286 0.05579 0.27384 0.07714 0.41714 0.09597 0.73143 0.09597 0.89355 0.11714 " +"0.38771 0.14000 0.91177 0.16857 0.77294 0.17429 0.22816 0.18571 0.36530 0.19714 " +"0.78705 0.24857 0.92680 0.25429 0.35320 0.26000 0.78665 0.30571 0.20420 0.31143 " +"0.35320 0.31143 0.92723 0.31714 0.36657 0.37429 0.77395 0.37429 0.75429 0.41841 " +"0.39179 0.42571 0.89756 0.44286 0.72000 0.46418 0.43429 0.47258 0.19891 0.50571 " +"0.33714 0.50495 0.48000 0.50213 0.66857 0.50086 0.86241 0.50571 0.55429 0.52134 " +"0.61143 0.51866 0.80403 0.56857 0.42286 0.58821 0.74286 0.60943 0.34134 0.63143 " +"0.50857 0.62823 0.68000 0.63252 0.57714 0.64134 0.21563 0.66000 0.77714 0.74697 " +"0.37502 0.75714 0.90966 0.76286 0.25673 0.80286 0.41901 0.83143 0.73143 0.85191 " +"0.45143 0.86686 0.87343 0.87714 0.30036 0.88286 0.68000 0.89514 0.50286 0.90086 " +"0.51429 0.90530 0.52000 0.90784 0.60571 0.91866 0.83846 0.92857 0.35429 0.94384 " +"0.40571 0.98150 0.76000 0.99229 0.49143 1.01748 0.68571 1.02041 0.56571 1.02991 70 " +"2 10 4 6 1 9 3 5 13 0 7 " +"2 3 9 1 1 6 0 9 3 13 " +"7 0 6 10 2 7 20 26 23 4 12 " +"11 13 8 17 4 10 12 11 19 18 " +"17 21 20 15 11 12 11 15 19 16 17 " +"14 18 22 24 8 14 17 8 13 5 " +"24 35 34 22 18 19 20 21 26 28 23 " +"26 21 17 16 24 27 35 24 22 25 " +"28 31 29 31 28 26 24 25 27 32 41 " +"37 30 35 27 34 44 48 35 33 42 " +"43 37 41 46 39 40 32 29 38 38 29 " +"31 33 35 30 33 36 42 42 36 45 " +"45 39 47 36 39 45 37 46 40 41 32 " +"38 46 37 43 47 39 46 44 34 35 " +"48 50 52 48 44 50 49 56 54 57 53 " +"64 57 52 50 54 66 58 51 56 49 " +"62 69 61 53 57 50 61 59 60 59 65 " +"55 65 64 55 58 68 62 55 64 53 " +"66 54 63 63 54 56 65 59 67 69 62 " +"68 67 59 61 69 67 61 68 58 66 " +; + +char *VTK_VECTOR_TEXT_55 = (char *) "17 0.923788 " +"0.37143 -0.07186 0.50286 -0.07186 0.36723 -0.06571 0.37335 0.02000 0.52991 0.11143 " +"0.40379 0.18571 0.59787 0.35143 0.47387 0.41429 0.66857 0.51873 0.53355 0.55143 " +"0.63384 0.72857 0.80893 0.76286 0.74359 0.88286 0.21714 0.88546 0.92379 0.91143 " +"0.21403 1.00857 0.92311 1.00857 15 3 0 1 2 0 3 3 4 5 4 3 1 6 7 5 6 5 4 9 " +"7 6 10 9 8 8 9 6 10 11 12 11 10 8 15 13 12 12 14 16 15 " +"12 16 11 14 12 " +; + +char *VTK_VECTOR_TEXT_56 = (char *) "83 0.926804 " +"0.53143 -0.08966 0.62857 -0.08665 0.45143 -0.07605 0.73714 -0.05641 0.38857 -0.05343 " +"0.34286 -0.02616 0.79429 -0.02250 0.28571 0.02445 0.58857 0.02152 0.50857 0.02823 " +"0.85258 0.03143 0.66937 0.04286 0.45143 0.05070 0.71429 0.07296 0.41143 0.07868 " +"0.24000 0.09016 0.89927 0.10571 0.37669 0.12286 0.76613 0.14000 0.21462 0.15714 " +"0.35849 0.16286 0.92109 0.17429 0.78705 0.22000 0.34437 0.22571 0.20420 0.27143 " +"0.92680 0.27143 0.78437 0.28286 0.34748 0.28857 0.77143 0.32947 0.91470 0.33429 " +"0.21714 0.34118 0.37502 0.36286 0.73296 0.39143 0.89057 0.39143 0.24359 0.40286 " +"0.41883 0.41429 0.69143 0.42722 0.27275 0.44286 0.85714 0.43841 0.46286 0.44371 " +"0.50286 0.45748 0.63429 0.45470 0.58286 0.46420 0.80507 0.48286 0.33143 0.49007 " +"0.40456 0.52286 0.72693 0.52286 0.32000 0.57616 0.54857 0.57580 0.62286 0.58319 " +"0.82082 0.58571 0.49714 0.58657 0.66286 0.60073 0.28527 0.61429 0.44571 0.61582 " +"0.70439 0.63714 0.85759 0.63714 0.25756 0.67143 0.72657 0.67143 0.39849 0.68286 " +"0.87470 0.68286 0.74134 0.72857 0.38705 0.73429 0.88109 0.76857 0.24764 0.77429 " +"0.73395 0.79714 0.39470 0.80286 0.87177 0.82000 0.71641 0.83714 0.27216 0.86571 " +"0.44000 0.87296 0.84486 0.88286 0.66286 0.89179 0.48000 0.90086 0.61714 0.91184 " +"0.54286 0.91823 0.31846 0.93429 0.80571 0.93555 0.38286 0.98616 0.72000 0.99800 " +"0.43429 1.01008 0.53143 1.02991 0.61714 1.02723 85 0 " +"9 2 12 4 2 1 8 0 6 11 3 5 14 7 9 0 8 8 1 11 4 " +"12 5 13 11 6 1 3 11 12 2 9 5 12 14 13 10 18 7 17 15 10 " +"13 6 15 20 19 7 14 17 18 16 22 16 18 10 20 15 17 19 23 24 16 " +"21 22 22 25 26 23 19 20 24 27 30 25 22 21 27 24 23 31 34 30 31 " +"37 34 29 28 26 31 30 27 29 26 25 33 28 29 28 33 32 36 32 43 37 " +"31 44 40 45 39 44 39 45 43 32 38 35 44 31 42 48 40 44 35 39 41 " +"46 42 36 46 41 32 33 38 48 42 49 46 36 43 48 45 40 42 46 49 51 " +"45 48 49 46 52 47 54 53 52 46 55 53 59 57 45 54 47 45 51 54 50 " +"55 46 59 53 54 50 58 55 58 50 61 57 62 64 61 63 65 56 61 50 57 " +"59 62 60 61 56 64 66 69 63 67 65 64 62 66 63 61 60 71 68 65 76 " +"69 66 72 68 77 71 65 67 76 70 78 70 76 66 74 82 75 80 78 70 79 " +"72 77 74 72 79 80 73 75 80 75 81 68 71 77 73 80 70 82 81 75 82 " +"74 79 " +; + +char *VTK_VECTOR_TEXT_57 = (char *) "72 0.927232 " +"0.50286 -0.09009 0.56000 -0.09009 0.42857 -0.07673 0.64571 -0.07395 0.36000 -0.04771 " +"0.74286 -0.02616 0.28759 0.01429 0.51429 0.02152 0.57143 0.02420 0.80115 0.02571 " +"0.47429 0.02891 0.42857 0.05007 0.64000 0.04943 0.24930 0.07714 0.39314 0.08286 " +"0.85229 0.10000 0.70902 0.11143 0.37057 0.12286 0.22177 0.17429 0.34857 0.18947 " +"0.75109 0.19714 0.89395 0.20286 0.75429 0.20739 0.75681 0.21429 0.90966 0.27143 " +"0.50286 0.30152 0.42857 0.31605 0.61714 0.31462 0.37714 0.33787 0.70286 0.35759 " +"0.78705 0.37429 0.32000 0.37846 0.58286 0.42152 0.50286 0.42891 0.63429 0.43184 " +"0.78286 0.43630 0.92723 0.43714 0.26286 0.44350 0.45143 0.45107 0.68571 0.45750 " +"0.41587 0.47714 0.23787 0.48857 0.74498 0.52286 0.36359 0.55143 0.21522 0.55714 " +"0.92680 0.56286 0.76571 0.57009 0.34437 0.63143 0.77823 0.63714 0.20462 0.69429 " +"0.77866 0.69429 0.91236 0.70000 0.35429 0.74118 0.76571 0.76404 0.21756 0.77429 " +"0.38286 0.80921 0.87343 0.82571 0.40759 0.84286 0.72571 0.84118 0.24527 0.84857 " +"0.69143 0.87527 0.84000 0.88221 0.47429 0.89641 0.28571 0.90975 0.63429 0.90784 " +"0.54857 0.91866 0.33143 0.95527 0.76000 0.96331 0.39629 0.99714 0.68571 1.00437 " +"0.49714 1.02723 0.57714 1.02991 72 3 8 1 2 11 4 0 7 2 " +"8 3 12 4 14 6 0 1 8 6 17 " +"13 10 2 7 7 0 8 5 12 3 " +"12 5 16 2 10 11 4 11 14 5 9 " +"16 18 13 19 16 15 20 15 23 20 " +"6 14 17 13 17 19 21 23 15 22 20 " +"23 23 24 30 16 9 15 23 21 24 " +"25 32 26 27 32 25 38 28 26 43 41 " +"37 34 29 39 33 26 32 29 34 27 " +"30 36 35 34 32 27 36 30 24 28 38 " +"31 31 38 37 35 39 29 38 26 33 " +"39 35 42 42 35 36 40 37 38 44 41 " +"43 42 36 46 44 47 49 43 37 40 " +"48 46 45 36 45 46 51 50 48 52 54 " +"49 47 44 43 50 51 53 51 48 45 " +"59 54 52 59 55 63 52 49 47 53 61 " +"58 56 53 51 55 59 52 53 56 61 " +"66 63 57 55 57 63 62 68 57 58 67 " +"60 67 58 61 68 66 57 60 69 64 " +"68 62 70 60 67 69 64 71 65 65 70 " +"62 70 65 71 64 69 71 " +; + +char *VTK_VECTOR_TEXT_58 = (char *) "14 0.432768 " +"0.28571 -0.07295 0.42857 -0.07186 0.28000 -0.06878 0.43277 -0.06571 0.27957 0.07714 " +"0.28571 0.08134 0.42857 0.08025 0.27957 0.57429 0.28571 0.57009 0.43168 0.57429 " +"0.27848 0.71714 0.43277 0.71714 0.28265 0.72286 0.42857 0.72329 10 " +"2 5 4 2 0 5 0 3 5 6 5 " +"3 0 1 3 7 8 10 10 11 13 " +"9 10 8 12 10 13 11 10 9 " +; + +char *VTK_VECTOR_TEXT_59 = (char *) "18 0.432768 " +"0.30857 -0.28726 0.36571 -0.25275 0.27323 -0.23714 0.39543 -0.22000 0.32384 -0.19143 " +"0.33756 -0.16857 0.42327 -0.15714 0.43277 -0.10000 0.35472 -0.07714 0.28571 -0.07295 " +"0.34857 -0.07295 0.28000 -0.06878 0.27957 0.07714 0.43168 0.07714 0.27957 0.57429 " +"0.43168 0.57429 0.28265 0.72286 0.42857 0.72329 14 2 1 4 5 4 3 0 1 " +"2 5 6 8 3 4 1 6 5 3 " +"6 7 8 11 10 12 12 10 13 8 7 " +"10 11 9 10 13 10 7 17 16 15 " +"15 16 14 " +; + +char *VTK_VECTOR_TEXT_60 = (char *) "11 0.952690 " +"0.94857 0.09939 0.95269 0.10571 0.95236 0.22571 0.22894 0.40857 0.38919 0.46571 " +"0.38919 0.47143 0.22748 0.52857 0.23192 0.53429 0.95098 0.70571 0.95216 0.83143 " +"0.94857 0.83523 9 4 0 2 5 7 6 4 3 0 0 1 2 7 " +"8 10 4 5 3 5 6 3 8 9 10 7 5 8 " +; + +char *VTK_VECTOR_TEXT_61 = (char *) "12 0.952768 " +"0.22857 0.23975 0.94857 0.23975 0.22437 0.35714 0.95277 0.35714 0.22857 0.36329 " +"0.94857 0.36329 0.22857 0.57385 0.94857 0.57385 0.22437 0.58000 0.95277 0.58000 " +"0.22857 0.69740 0.94857 0.69740 8 0 4 " +"2 0 1 5 4 0 5 3 5 1 " +"11 7 9 10 6 7 10 7 11 8 6 " +"10 " +; + +char *VTK_VECTOR_TEXT_62 = (char *) "11 0.952360 " +"0.23429 0.09914 0.22857 0.10169 0.22748 0.22571 0.23192 0.23143 0.95116 0.40857 " +"0.79073 0.46571 0.79073 0.47143 0.95236 0.52857 0.22897 0.70571 0.22857 0.83287 " +"0.23429 0.83563 9 1 0 2 3 2 0 3 0 5 4 7 5 4 " +"5 0 6 5 7 6 10 8 8 10 9 10 6 7 " +; + +char *VTK_VECTOR_TEXT_63 = (char *) "45 0.918074 " +"0.47429 -0.07186 0.62021 -0.07143 0.47118 0.07714 0.62329 0.07714 0.49979 0.19714 " +"0.62021 0.19714 0.49563 0.20286 0.49563 0.27714 0.63681 0.31714 0.50816 0.34571 " +"0.65714 0.36350 0.53669 0.41429 0.70857 0.42384 0.57868 0.47143 0.82857 0.53597 " +"0.86902 0.58571 0.73258 0.62000 0.90437 0.65429 0.76086 0.66000 0.77522 0.70000 " +"0.91580 0.70000 0.34857 0.71338 0.21034 0.73429 0.77866 0.75143 0.91807 0.76857 " +"0.22605 0.80857 0.76571 0.80375 0.38286 0.82144 0.73714 0.85191 0.25098 0.87143 " +"0.89143 0.86730 0.43597 0.88857 0.86812 0.90571 0.67429 0.90616 0.48571 0.91800 " +"0.62857 0.92538 0.29296 0.93429 0.54857 0.93277 0.81143 0.96670 0.35429 0.98821 " +"0.76571 0.99800 0.44571 1.02891 0.69714 1.02680 0.53143 1.04395 0.60000 1.04437 41 2 1 3 2 0 1 7 6 4 7 4 5 8 9 7 11 10 13 8 " +"7 5 8 10 11 9 8 11 13 12 16 12 13 10 14 16 12 14 15 16 16 " +"15 18 17 18 15 17 23 19 17 19 18 20 23 17 29 27 36 26 32 28 21 " +"25 22 26 23 24 27 29 25 24 23 20 36 31 39 28 40 33 30 26 24 35 " +"44 37 31 36 27 27 25 21 31 34 41 42 33 40 28 38 40 39 31 41 38 " +"28 32 26 30 32 42 35 33 41 34 43 43 37 44 34 37 43 44 35 42 " +; + +char *VTK_VECTOR_TEXT_64 = (char *) "114 1.632597 " +"0.92571 -0.39563 1.16571 -0.38109 0.74857 -0.37236 0.65143 -0.34613 1.33143 -0.33070 " +"0.54286 -0.29914 0.86286 -0.27866 1.06286 -0.28134 1.45650 -0.26000 0.73714 -0.25387 " +"1.21143 -0.25387 0.43429 -0.22384 0.62286 -0.21216 1.32144 -0.20857 1.55582 -0.17429 " +"0.53714 -0.16099 0.52571 -0.15258 0.53143 -0.15669 0.33714 -0.11650 1.45143 -0.11561 " +"0.46286 -0.09260 0.80000 -0.07295 1.20571 -0.07252 1.09714 -0.06891 0.71429 -0.06252 " +"1.49714 -0.06187 1.63260 -0.06000 0.29629 -0.04857 1.29714 -0.04498 0.90857 -0.03629 " +"1.03384 -0.02571 0.62857 -0.01582 0.40486 -0.00857 0.59429 0.01873 1.41143 0.03296 " +"0.82857 0.03907 0.77714 0.04327 1.01143 0.04414 1.20000 0.05050 1.16989 0.06571 " +"1.25143 0.06086 0.90857 0.06821 0.72000 0.07561 0.54771 0.09429 1.15580 0.09429 " +"0.24420 0.10000 0.35748 0.11143 0.96000 0.10725 0.68527 0.11714 1.33841 0.11714 " +"1.51579 0.15714 0.66177 0.17429 1.41355 0.20286 1.03514 0.20857 0.65295 0.23143 " +"0.22437 0.23714 0.51277 0.23714 0.33563 0.24857 1.45355 0.27714 1.07177 0.31143 " +"1.58478 0.31143 0.65966 0.32857 1.48319 0.36857 0.53184 0.39714 0.23277 0.40286 " +"0.34478 0.40857 1.60420 0.42571 1.08420 0.44286 0.71514 0.48857 0.25184 0.49429 " +"1.49295 0.49429 0.57229 0.50000 1.60109 0.52857 1.05714 0.54144 0.75846 0.55143 " +"0.38645 0.55714 1.47681 0.58571 1.01143 0.59527 0.81714 0.60331 1.58605 0.60857 " +"1.12878 0.61429 0.65714 0.62418 0.86286 0.62319 0.96571 0.62151 0.92571 0.62991 " +"0.42857 0.64350 1.44571 0.66730 0.32359 0.67714 1.06048 0.68286 0.74857 0.69641 " +"1.15429 0.71588 1.28235 0.71714 1.00571 0.71800 0.82857 0.73109 0.92000 0.74152 " +"1.52657 0.75143 0.51275 0.75714 0.37669 0.76286 1.38286 0.76132 0.59493 0.82571 " +"1.30857 0.82821 1.45561 0.84857 0.47429 0.87296 0.73143 0.89681 1.18286 0.89580 " +"1.08571 0.92395 1.37143 0.92400 0.92000 0.93580 0.58286 0.95188 1.30857 0.96371 " +"0.71429 1.00899 1.18286 1.01470 0.92000 1.04437 1.01143 1.04395 114 0 6 2 1 7 0 6 0 7 " +"7 1 10 2 9 3 3 12 5 9 2 " +"6 10 4 13 4 10 1 15 5 12 " +"5 15 11 13 8 19 12 3 9 8 13 " +"4 11 20 18 11 15 16 17 16 15 " +"14 19 8 26 25 14 20 11 16 22 38 " +"23 25 19 14 23 39 30 30 39 37 " +"27 46 45 18 32 27 32 18 20 21 36 " +"24 35 29 41 24 42 31 29 35 21 " +"22 28 40 38 22 40 34 49 40 33 31 " +"48 36 21 35 37 47 41 33 48 43 " +"43 51 56 44 37 39 34 40 28 47 37 " +"53 50 52 34 38 39 23 52 49 34 " +"37 44 53 27 32 46 42 24 36 48 31 " +"42 37 41 29 45 57 55 53 44 59 " +"51 54 56 52 50 58 58 60 62 43 48 " +"51 45 46 57 56 61 63 64 55 57 " +"91 80 44 60 58 50 62 66 70 56 54 " +"61 44 80 67 59 44 67 71 63 61 " +"64 65 69 67 80 73 65 64 57 66 62 " +"60 68 71 61 71 68 81 69 75 87 " +"72 70 66 74 81 68 77 73 80 70 79 " +"76 75 69 65 83 77 88 87 85 97 " +"81 74 89 89 78 93 86 76 79 70 72 " +"79 74 78 89 88 77 80 75 85 87 " +"82 84 94 91 90 80 86 95 98 78 82 " +"93 92 83 88 93 82 94 84 83 92 " +"94 84 92 97 96 102 95 86 79 102 99 " +"108 95 101 98 96 97 85 96 99 102 " +"98 101 100 103 108 99 100 109 104 106 100 " +"101 108 103 110 105 113 107 100 106 109 " +"104 111 105 107 112 110 111 104 109 113 105 " +"111 112 107 113 107 110 103 " +; + +char *VTK_VECTOR_TEXT_65 = (char *) "13 1.155731 " +"0.14455 -0.07143 1.00000 -0.07252 1.15573 -0.07143 0.29143 -0.07103 0.40981 0.25429 " +"0.86857 0.25754 0.45714 0.37713 0.82478 0.38000 0.45462 0.38571 0.58538 0.73429 " +"0.63429 0.90068 0.56000 1.02454 0.71429 1.02644 13 5 " +"1 2 0 8 11 6 4 5 12 10 7 0 3 4 0 4 8 6 5 7 6 " +"8 4 7 5 2 8 9 11 9 10 11 12 7 2 11 10 12 " +; + +char *VTK_VECTOR_TEXT_66 = (char *) "48 1.081090 " +"0.25714 -0.07186 0.78286 -0.06723 0.86857 -0.04899 0.93714 -0.02045 1.00725 0.03714 " +"0.39957 0.06000 0.73143 0.05621 0.80571 0.06891 1.04213 0.08857 0.87555 0.10571 " +"1.06437 0.14000 0.91070 0.15143 1.08109 0.22000 0.93295 0.22571 0.93252 0.26571 " +"1.07177 0.32286 0.90857 0.34064 1.04616 0.38571 0.86857 0.38686 0.79429 0.42252 " +"0.39957 0.43143 1.01296 0.43143 0.69714 0.43563 0.97143 0.46686 0.88197 0.51143 " +"0.40571 0.56437 0.72000 0.56705 0.39848 0.57429 0.96956 0.58571 0.80571 0.58930 " +"0.84686 0.62000 0.99641 0.62571 0.86943 0.65429 1.02437 0.70571 0.88420 0.71143 " +"1.02665 0.76857 0.87429 0.79232 1.01673 0.82000 0.84000 0.84984 0.77714 0.88538 " +"0.98607 0.88857 0.39957 0.89429 0.71429 0.89580 0.93143 0.95296 0.85714 0.99756 " +"0.80000 1.01470 0.25714 1.02615 0.70857 1.02680 50 1 6 0 2 7 1 " +"0 20 46 7 2 9 1 7 6 20 27 " +"46 9 4 11 4 9 3 2 3 9 " +"11 10 13 8 11 4 10 11 8 12 13 " +"10 14 17 16 14 15 17 16 21 18 " +"14 13 12 15 14 12 23 18 21 5 0 " +"6 19 26 22 18 24 19 16 17 21 " +"24 18 23 26 19 29 19 24 29 25 22 " +"26 22 25 20 30 29 24 32 28 31 " +"28 32 30 32 31 34 0 5 20 34 35 " +"36 33 34 31 28 30 24 36 40 38 " +"38 44 39 35 37 36 34 33 35 25 27 " +"20 27 41 46 40 36 37 43 38 40 " +"39 45 42 42 47 41 38 43 44 45 39 " +"44 47 46 41 47 42 45 " +; + +char *VTK_VECTOR_TEXT_67 = (char *) "56 1.186046 " +"0.69143 -0.08966 0.80000 -0.08705 0.60000 -0.07823 0.50857 -0.05070 0.93143 -0.05216 " +"0.45714 -0.02486 1.00000 -0.01473 0.39597 0.02000 0.69714 0.03563 0.74857 0.03563 " +"0.62286 0.04899 0.82286 0.04899 1.08000 0.05597 0.57143 0.06784 0.88000 0.07229 " +"0.32571 0.10064 0.93143 0.10759 0.49143 0.11901 1.13800 0.14000 0.45600 0.15714 " +"0.28930 0.16286 0.99641 0.18571 0.41502 0.22571 1.18605 0.27714 0.24319 0.28857 " +"1.04571 0.31105 0.38244 0.32857 0.22748 0.36286 0.36723 0.44286 0.21866 0.52857 " +"0.36991 0.55714 0.22705 0.60857 1.02857 0.69469 0.40657 0.71143 1.16694 0.72857 " +"0.26286 0.74089 0.44187 0.78000 1.13927 0.80857 0.97143 0.80914 0.48000 0.82725 " +"0.31750 0.84286 0.93714 0.85011 0.53143 0.86784 0.89143 0.88331 1.07582 0.90571 " +"0.64000 0.91252 0.64571 0.91335 0.65714 0.91563 0.38286 0.91868 0.78857 0.91823 " +"1.00571 0.96902 0.50286 0.99756 0.93143 1.01070 0.58286 1.02680 0.70286 1.04705 " +"0.80000 1.04437 54 " +"1 9 0 0 8 2 14 6 16 4 14 " +"11 24 20 22 7 17 15 2 10 3 " +"8 10 2 9 1 11 0 9 8 4 11 " +"1 3 13 5 12 16 6 10 13 3 " +"5 13 7 7 13 17 22 20 15 16 12 " +"21 14 4 6 19 15 17 23 25 18 " +"22 15 19 25 21 18 18 21 12 27 28 " +"29 27 24 26 26 24 22 28 27 26 " +"29 30 31 30 29 28 33 35 31 35 33 " +"40 33 31 30 34 37 32 48 42 51 " +"36 40 33 40 36 48 38 44 41 44 38 " +"37 32 37 38 48 39 42 36 39 48 " +"54 53 47 45 51 42 49 43 52 50 41 " +"44 47 45 46 41 50 43 45 53 51 " +"49 54 47 53 45 47 49 55 54 55 49 " +"52 52 43 50 " +; + +char *VTK_VECTOR_TEXT_68 = (char *) "34 1.167232 " +"0.26286 -0.07186 0.70286 -0.07252 0.80000 -0.06109 0.89714 -0.03355 0.99555 0.02571 " +"0.40528 0.06000 0.72571 0.05891 1.03582 0.06571 0.79547 0.07143 0.88000 0.10893 " +"1.08150 0.12857 0.92115 0.14571 0.96657 0.21429 1.13966 0.26571 0.99470 0.28857 " +"1.16420 0.39714 1.01823 0.43714 1.16723 0.52857 1.01823 0.53429 1.15277 0.64286 " +"1.00000 0.65848 0.97714 0.72375 1.11216 0.77429 0.94286 0.78057 0.87429 0.84902 " +"1.06607 0.85429 0.81714 0.87865 0.40528 0.89429 0.69143 0.89807 0.97714 0.94616 " +"0.90857 0.98657 0.81143 1.01580 0.26286 1.02615 0.70286 1.02680 34 2 6 1 5 0 1 " +"8 3 9 3 8 2 0 27 32 6 2 " +"8 5 1 6 4 7 11 4 9 3 " +"9 4 11 11 10 12 11 7 10 13 14 " +"12 14 15 16 13 12 10 16 17 18 " +"14 13 15 18 19 20 17 16 15 18 17 " +"19 22 21 20 21 22 23 29 24 23 " +"22 20 19 26 24 30 0 5 27 25 23 " +"22 29 23 25 30 24 29 26 31 28 " +"31 26 30 33 32 27 28 33 27 33 28 " +"31 " +; + +char *VTK_VECTOR_TEXT_69 = (char *) "15 1.080000 " +"0.26857 -0.07186 1.08000 -0.06878 1.08000 0.05164 0.41100 0.06000 0.41100 0.42571 " +"1.01143 0.43100 1.01563 0.55143 0.41714 0.55866 1.01143 0.55757 0.40991 0.56857 " +"0.41100 0.89429 1.05143 0.89957 1.05563 1.02000 0.26857 1.02615 1.05143 1.02615 13 0 4 13 1 3 0 1 2 3 0 " +"3 4 7 5 8 5 7 4 6 8 5 4 9 13 7 9 4 9 10 13 11 " +"14 10 14 13 10 12 14 11 " +; + +char *VTK_VECTOR_TEXT_70 = (char *) "12 1.005714 " +"0.26857 -0.07186 0.40571 -0.07186 0.40991 0.42000 0.41714 0.42723 0.92615 0.43143 " +"0.92615 0.55143 0.41714 0.55563 0.40991 0.56286 0.41100 0.89429 1.00571 0.90265 " +"1.00571 1.02307 0.26857 1.02615 10 0 2 " +"11 2 7 11 2 0 1 6 4 5 " +"4 6 3 3 6 2 7 2 6 7 8 " +"11 11 8 10 8 9 10 " +; + +char *VTK_VECTOR_TEXT_71 = (char *) "60 1.234286 " +"0.82286 -0.08966 0.65714 -0.07866 0.93143 -0.07335 0.56571 -0.05387 1.05143 -0.03355 " +"0.48000 -0.01514 1.12000 0.00073 0.74286 0.03866 0.83429 0.04177 0.38857 0.05044 " +"0.65143 0.05470 0.92571 0.06319 1.23260 0.07714 0.34857 0.09302 0.54286 0.10150 " +"1.03429 0.11229 0.50286 0.13044 1.09252 0.15714 0.44421 0.19714 0.27429 0.21629 " +"0.24252 0.31143 0.39320 0.31143 0.77714 0.36243 1.09143 0.35773 0.22748 0.39714 " +"0.37605 0.40286 0.77295 0.48286 0.77714 0.48900 1.23429 0.48900 0.22437 0.51143 " +"0.37295 0.51714 0.23320 0.59143 0.39748 0.65429 1.09143 0.68617 1.08571 0.69099 " +"0.42073 0.71714 1.21977 0.72286 0.27387 0.73429 1.06286 0.75301 0.30645 0.80286 " +"0.47616 0.80286 1.02286 0.82127 1.18498 0.82571 0.54286 0.86150 0.34857 0.86629 " +"0.94286 0.88371 1.14857 0.88793 0.61143 0.89580 0.86286 0.91184 0.40168 0.92286 " +"0.70857 0.91866 0.80000 0.92134 1.09714 0.94384 0.45714 0.96436 0.53714 1.00498 " +"1.00000 1.00371 0.93714 1.02613 0.62857 1.03252 0.73714 1.04705 0.84571 1.04395 58 0 7 1 14 5 3 5 14 " +"9 2 8 0 1 10 3 0 8 7 " +"8 2 11 18 13 9 17 6 12 10 1 " +"7 4 11 2 13 18 19 23 17 12 " +"15 6 17 4 6 15 16 9 14 11 4 " +"15 14 3 10 19 21 20 18 9 16 " +"30 31 29 23 27 22 25 24 20 22 27 " +"26 21 19 18 25 20 21 23 28 27 " +"28 23 12 29 24 25 30 29 25 31 32 " +"37 38 33 36 37 32 39 32 31 30 " +"35 39 32 34 33 38 39 40 44 38 46 " +"41 38 42 46 40 39 35 44 40 49 " +"53 43 54 43 49 40 42 38 36 43 47 " +"54 52 41 46 41 52 45 43 53 49 " +"54 47 57 50 57 47 45 56 48 55 45 " +"52 48 59 51 57 50 58 50 51 58 " +"56 45 55 58 51 59 59 48 56 " +; + +char *VTK_VECTOR_TEXT_72 = (char *) "16 1.125714 " +"0.26857 -0.07186 0.40571 -0.07186 0.98857 -0.07295 0.98286 -0.06878 1.12571 -0.06878 " +"0.40991 0.43714 0.41714 0.44437 0.97714 0.44329 0.41714 0.57277 0.97714 0.57385 " +"0.40991 0.58000 0.98550 1.02571 1.12571 1.02307 0.26857 1.02615 0.40571 1.02615 " +"1.12000 1.02723 14 4 9 7 0 5 13 5 10 13 " +"5 0 1 8 7 9 9 4 11 10 5 " +"8 6 8 5 4 3 2 7 8 6 " +"14 13 10 12 15 11 3 4 7 4 12 " +"11 " +; + +char *VTK_VECTOR_TEXT_73 = (char *) "4 0.428571 " +"0.42592 -0.07143 0.28571 -0.06878 0.28836 1.02571 0.42857 1.02307 2 1 3 2 3 1 0 " +; + +char *VTK_VECTOR_TEXT_74 = (char *) "27 0.790089 " +"0.45143 -0.09009 0.50857 -0.09009 0.37714 -0.07756 0.58404 -0.07714 0.33143 -0.06086 " +"0.64000 -0.05641 0.26489 -0.01429 0.71429 -0.00117 0.46286 0.03866 0.53714 0.04706 " +"0.74902 0.04857 0.41714 0.04899 0.57772 0.06571 0.21143 0.06772 0.37016 0.07714 " +"0.34498 0.11143 0.77252 0.11143 0.62371 0.11714 0.18705 0.16286 0.32462 0.17429 " +"0.64420 0.22571 0.79009 0.23143 0.18546 0.23714 0.31472 0.25429 0.64836 1.02571 " +"0.78857 1.02307 0.78286 1.02723 25 10 " +"12 7 4 2 11 0 1 8 3 8 1 11 2 8 0 8 2 8 3 9 9 " +"3 12 4 14 6 7 12 5 3 5 12 6 15 13 12 10 17 14 4 11 13 " +"19 18 6 14 15 22 19 23 17 16 20 13 15 19 16 17 10 22 18 19 21 " +"20 16 20 21 24 25 26 24 21 25 24 " +; + +char *VTK_VECTOR_TEXT_75 = (char *) "17 1.155019 " +"0.25714 -0.07186 0.39429 -0.07186 1.15502 -0.07143 0.97143 -0.07140 0.89527 0.28857 " +"0.89143 0.29371 0.89098 0.29429 0.39848 0.30000 0.57714 0.47913 0.40000 0.49126 " +"0.68956 0.56857 0.68571 0.57371 0.68527 0.57429 1.13216 1.02571 0.25714 1.02615 " +"0.39429 1.02615 0.94857 1.02680 15 0 9 14 0 7 9 3 10 8 3 6 10 9 8 16 4 5 6 7 " +"0 1 3 4 6 16 8 12 10 11 12 4 3 2 8 10 12 9 7 8 13 " +"16 12 15 14 9 " +; + +char *VTK_VECTOR_TEXT_76 = (char *) "7 0.941339 " +"0.25714 -0.07186 0.93714 -0.07186 0.94134 0.04857 0.39957 0.06000 0.93714 0.05472 " +"0.25714 1.02615 0.39429 1.02615 5 3 0 1 0 3 5 2 4 1 3 1 4 6 5 3 " +; + +char *VTK_VECTOR_TEXT_77 = (char *) "19 1.302857 " +"0.39164 -0.07143 0.71429 -0.07186 1.17143 -0.07295 0.25714 -0.06878 0.84000 -0.06947 " +"1.16571 -0.06878 1.30286 -0.06878 0.78286 0.09751 0.78857 0.09751 1.16000 0.83018 " +"0.40000 0.84467 0.52151 0.88286 0.52000 0.88739 0.51748 0.89429 0.47580 1.02000 " +"0.25979 1.02571 1.11429 1.02285 1.30286 1.02307 0.46857 1.02680 17 3 10 15 5 6 9 6 " +"5 2 1 11 10 4 8 1 1 7 11 9 16 8 1 8 7 9 8 4 10 " +"18 15 13 11 12 10 3 0 10 13 18 16 9 17 10 11 13 13 14 18 6 " +"17 9 " +; + +char *VTK_VECTOR_TEXT_78 = (char *) "14 1.125714 " +"0.26286 -0.07186 0.39429 -0.07186 0.98286 -0.07295 1.12571 -0.06878 0.98286 0.17231 " +"0.72045 0.31143 0.71678 0.31714 0.72000 0.31207 0.40000 0.78092 0.99122 1.02571 " +"1.12571 1.02307 0.26286 1.02615 0.40571 1.02644 1.12000 1.02723 12 " +"0 8 11 8 0 1 4 3 9 3 4 " +"2 4 5 2 6 7 5 12 6 4 " +"4 6 5 6 12 8 10 13 9 8 12 " +"11 3 10 9 " +; + +char *VTK_VECTOR_TEXT_79 = (char *) "63 1.267054 " +"0.70286 -0.08966 0.77714 -0.08966 0.61143 -0.07605 0.89714 -0.06823 0.97143 -0.04073 " +"0.49143 -0.03229 1.05650 0.00857 0.42286 0.01107 0.70857 0.03605 0.77143 0.03605 " +"0.63429 0.04899 0.84571 0.04899 1.12725 0.07143 0.35044 0.07714 0.92716 0.08286 " +"0.54857 0.08535 0.49143 0.12704 1.17465 0.13429 1.01296 0.15143 0.28571 0.17016 " +"0.43955 0.18571 1.21184 0.20286 0.40784 0.23714 1.08086 0.26000 1.24613 0.30000 " +"0.23109 0.31143 1.10665 0.34571 0.36764 0.36857 0.21295 0.43143 1.11848 0.43714 " +"1.26705 0.43714 0.36193 0.51143 1.11848 0.51714 0.21563 0.54571 0.36991 0.59143 " +"1.25522 0.61429 1.09966 0.63714 0.23236 0.64857 1.23681 0.68857 1.07070 0.71714 " +"0.41143 0.73016 0.26645 0.75143 1.20486 0.76857 0.45561 0.79714 1.02286 0.79270 " +"0.98857 0.82956 0.31429 0.83650 1.16045 0.84286 0.53143 0.86150 0.92000 0.87800 " +"0.35582 0.88857 0.63429 0.90764 0.85143 0.90613 1.10286 0.90956 0.71429 0.92134 " +"0.79429 0.91866 0.43493 0.95714 1.04000 0.95964 0.52000 1.00498 0.96000 1.00327 " +"0.89714 1.02613 0.63429 1.03866 0.77714 1.04705 63 0 8 2 1 9 0 8 10 2 2 10 5 9 1 11 5 " +"16 7 11 3 14 3 11 1 3 4 14 6 14 4 7 16 13 10 15 5 0 " +"9 8 16 5 15 14 6 18 13 20 19 12 18 6 18 17 23 17 21 23 20 " +"22 19 18 12 17 23 21 26 25 19 22 13 16 20 25 27 28 27 25 22 21 " +"24 26 30 29 26 32 35 36 30 26 24 33 34 37 32 29 30 28 31 33 31 " +"28 27 34 33 31 36 38 39 35 32 30 41 37 34 38 42 39 41 40 46 35 " +"38 36 39 47 44 40 43 46 53 45 44 46 43 50 45 57 49 40 41 34 56 " +"50 43 49 59 52 48 56 43 57 45 53 53 44 47 56 48 58 39 42 47 58 " +"51 61 59 49 57 51 58 48 55 52 60 62 54 55 59 60 52 61 54 62 54 " +"61 51 62 55 60 " +; + +char *VTK_VECTOR_TEXT_80 = (char *) "31 1.098661 " +"0.26286 -0.07186 0.40000 -0.07186 0.40420 0.36857 0.41143 0.37580 0.73714 0.37621 " +"0.88571 0.40034 0.98343 0.44857 0.41143 0.50420 0.72571 0.50420 0.40420 0.51143 " +"1.04045 0.51143 0.82947 0.52286 0.88571 0.55296 0.91678 0.58571 1.08252 0.59714 " +"0.93966 0.63143 1.09866 0.68286 0.94966 0.72857 0.93355 0.79143 1.08530 0.80857 " +"0.90857 0.83270 0.86857 0.86893 1.05927 0.87143 0.40528 0.89429 0.82286 0.88899 " +"0.74857 0.89807 1.02439 0.92286 0.96000 0.97641 0.89143 1.00538 0.26286 1.02615 " +"0.74286 1.02680 31 0 9 29 0 2 9 2 7 9 7 3 8 12 11 5 5 11 4 4 " +"8 3 3 7 2 2 0 1 11 8 4 13 12 6 10 13 6 6 12 5 14 " +"15 10 15 14 17 13 10 15 16 17 14 17 19 18 19 17 16 18 19 20 20 " +"27 21 22 20 19 9 23 29 30 25 24 25 30 23 27 20 26 20 22 26 28 " +"24 21 28 21 27 30 29 23 30 24 28 " +; + +char *VTK_VECTOR_TEXT_81 = (char *) "66 1.276398 " +"1.23429 -0.15444 1.13714 -0.11188 0.76571 -0.09009 0.64571 -0.08437 0.84000 -0.08034 " +"0.58286 -0.07034 1.27640 -0.06000 0.93143 -0.05470 0.46857 -0.02322 1.00000 -0.02293 " +"0.38857 0.03330 0.76000 0.03563 0.68000 0.03866 0.83547 0.04857 1.09814 0.04857 " +"0.61714 0.05177 0.87591 0.06571 0.55429 0.07800 0.80000 0.10784 0.49143 0.12132 " +"0.30857 0.12350 0.74115 0.12857 0.98286 0.13189 1.17355 0.14571 0.42857 0.19207 " +"0.86857 0.19927 0.26286 0.20486 1.05355 0.22000 0.77714 0.23134 0.39277 0.26000 " +"1.23177 0.27714 0.23387 0.28286 1.08823 0.30571 0.36420 0.36286 0.20991 0.40286 " +"0.35580 0.43714 1.25866 0.43714 1.11009 0.44286 0.20723 0.51714 1.25252 0.58000 " +"0.36420 0.59714 1.09823 0.60857 0.23470 0.67714 0.38857 0.68947 1.21184 0.73429 " +"1.05143 0.73841 0.42902 0.76857 0.28821 0.80286 1.00571 0.80413 1.17188 0.81429 " +"0.96000 0.84670 0.51429 0.85473 0.34473 0.88286 1.12000 0.88413 0.57714 0.89070 " +"0.88571 0.89070 0.64571 0.91252 0.76571 0.92093 0.42857 0.95759 1.03429 0.95864 " +"0.50286 0.99927 0.96571 0.99800 0.60000 1.03252 0.86857 1.03184 0.69714 1.04705 " +"0.77143 1.04665 66 0 6 1 " +"13 7 16 14 9 1 9 16 7 3 15 " +"5 16 9 14 11 4 13 11 2 4 " +"7 13 4 12 3 11 2 11 3 15 3 " +"12 5 17 8 8 19 10 10 19 20 " +"14 1 6 5 15 17 20 29 26 19 8 " +"17 21 18 28 22 16 14 16 25 18 " +"22 14 27 24 20 19 16 22 25 26 29 " +"31 18 25 28 14 23 27 27 30 32 " +"30 27 23 31 33 34 20 24 29 37 32 " +"30 33 31 29 34 33 38 36 37 30 " +"35 38 33 37 39 41 38 40 42 37 36 " +"39 41 44 45 40 38 35 42 43 47 " +"44 41 39 46 47 43 43 42 40 47 46 " +"52 45 49 48 59 50 48 52 51 58 " +"53 48 49 61 50 59 50 61 55 58 51 " +"60 51 52 46 49 45 44 59 48 53 " +"57 64 56 60 54 62 55 63 57 51 54 " +"60 54 56 62 62 56 64 63 55 61 " +"63 65 57 57 65 64 " +; + +char *VTK_VECTOR_TEXT_82 = (char *) "46 1.225355 " +"0.26857 -0.07186 0.40571 -0.07186 1.05143 -0.07215 1.22359 -0.07143 1.22535 -0.06571 " +"1.17465 0.01429 1.17143 0.01936 1.17098 0.02000 0.84571 0.24343 1.00571 0.27650 " +"0.76571 0.34698 0.91832 0.37429 0.73143 0.37678 0.40991 0.40857 0.68000 0.40437 " +"0.41714 0.41580 0.62286 0.41538 0.84226 0.42571 0.92571 0.44706 0.99429 0.47502 " +"1.07582 0.54000 0.41714 0.54420 0.40991 0.55143 0.80000 0.54764 0.88000 0.56538 " +"1.11641 0.60286 0.94286 0.60439 0.96784 0.63714 1.13823 0.67714 0.98966 0.69429 " +"0.99277 0.74571 1.14134 0.75143 0.97143 0.81493 1.12823 0.82000 0.93143 0.86115 " +"1.10498 0.87714 0.89143 0.88498 0.40991 0.90000 0.41714 0.90723 0.78857 0.90723 " +"1.07011 0.92857 1.01714 0.97579 0.97143 0.99865 0.87429 1.02109 0.26857 1.02615 " +"0.80571 1.02723 46 2 9 8 3 5 2 0 37 " +"44 5 7 2 5 6 7 3 4 5 " +"2 7 9 18 23 17 11 8 9 8 11 " +"10 0 22 37 11 17 10 21 16 23 " +"21 15 16 23 10 17 19 24 18 23 18 " +"24 23 12 10 15 21 13 0 21 22 " +"16 14 23 23 14 12 20 26 19 26 20 " +"27 24 19 26 27 25 29 28 30 29 " +"31 30 28 25 27 20 30 33 32 28 29 " +"25 33 30 31 32 40 34 35 32 33 " +"0 1 13 0 13 21 41 34 40 43 36 " +"42 38 39 45 32 35 40 42 34 41 " +"34 42 36 36 43 39 44 38 45 43 45 " +"39 37 38 44 " +; + +char *VTK_VECTOR_TEXT_83 = (char *) "69 1.081090 " +"0.71429 -0.08966 0.53714 -0.07866 0.82286 -0.07101 0.46286 -0.05959 0.38857 -0.02616 " +"0.94286 -0.01678 0.33714 0.01044 0.64000 0.03866 0.73143 0.04177 1.00571 0.03883 " +"0.56000 0.05177 0.28527 0.06571 0.50857 0.06930 0.83587 0.07143 1.04086 0.08857 " +"0.88127 0.10000 0.43429 0.11330 0.24486 0.13429 0.92613 0.15714 1.07177 0.16286 " +"0.38771 0.16857 0.94134 0.21429 0.36319 0.22571 0.21563 0.23714 1.08109 0.26571 " +"0.21403 0.27714 0.93294 0.27714 0.34857 0.28916 0.91011 0.31714 1.06816 0.32857 " +"0.84000 0.36943 1.04486 0.38000 0.76571 0.39673 0.98286 0.45241 0.53143 0.45748 " +"0.42857 0.49343 0.92571 0.49070 0.37143 0.52535 0.82857 0.53109 0.31044 0.58000 " +"0.53143 0.60899 0.43429 0.65616 0.26244 0.67143 0.39891 0.71143 0.90857 0.71084 " +"0.25295 0.72286 1.04615 0.72286 0.39320 0.76857 0.40359 0.80857 1.03109 0.81429 " +"0.26327 0.82000 0.87429 0.81493 0.45143 0.86956 0.82286 0.87258 0.28930 0.88286 " +"0.98812 0.90000 0.50857 0.90041 0.76571 0.90151 0.57714 0.91563 0.67429 0.91866 " +"0.95443 0.94000 0.35429 0.96099 0.89143 0.98784 0.40000 0.99188 0.83429 1.01470 " +"0.50286 1.03184 0.74857 1.03823 0.57143 1.04437 0.67429 1.04705 67 2 " +"8 0 0 7 1 6 4 16 6 16 11 0 8 7 7 10 1 8 2 13 5 " +"15 13 1 10 3 10 12 3 9 15 5 4 3 12 15 14 18 5 13 2 14 " +"15 9 16 4 12 21 24 26 18 19 21 11 20 17 20 11 16 17 22 23 19 " +"18 14 22 17 20 25 23 27 23 22 27 24 21 19 26 31 28 28 33 30 24 " +"29 26 30 38 32 26 29 31 34 32 38 33 28 31 34 40 35 33 36 30 39 " +"43 42 38 30 36 41 37 35 40 34 38 37 41 39 41 35 40 50 48 54 39 " +"41 43 44 46 49 45 42 43 45 47 50 48 50 47 60 51 55 47 45 43 51 " +"60 53 54 48 61 44 49 51 55 51 49 48 52 61 56 63 52 57 66 59 61 " +"52 63 63 56 65 62 53 60 53 64 57 53 62 64 59 66 58 65 58 67 58 " +"65 56 66 57 64 67 58 68 68 58 66 " +; + +char *VTK_VECTOR_TEXT_84 = (char *) "8 1.045714 " +"0.54286 -0.07186 0.68000 -0.07186 0.53757 0.89429 0.68528 0.89429 0.17714 0.90265 " +"1.04571 0.90265 0.17979 1.02571 1.04571 1.02307 6 0 3 2 3 0 " +"1 6 4 2 6 3 7 6 2 3 " +"3 5 7 " +; + +char *VTK_VECTOR_TEXT_85 = (char *) "32 1.126804 " +"0.65714 -0.09009 0.77143 -0.08705 0.53143 -0.07034 0.85714 -0.07101 0.47429 -0.05070 " +"0.94286 -0.03629 0.38286 0.00704 1.02286 0.02445 0.65714 0.04437 0.78857 0.05320 " +"0.33669 0.06000 0.58286 0.05748 0.84000 0.06823 0.52000 0.08535 1.07070 0.08857 " +"0.89714 0.10154 0.46857 0.13025 1.09966 0.15714 0.29143 0.15866 0.94899 0.17429 " +"0.43177 0.19714 0.27320 0.24286 0.97252 0.26000 1.12680 0.33429 0.26437 0.34000 " +"0.40991 0.34000 0.98134 0.34571 0.98550 1.02571 1.12571 1.02307 0.26857 1.02615 " +"0.40571 1.02615 1.12000 1.02723 30 3 9 1 10 20 18 8 0 " +"1 0 11 2 7 15 5 0 8 11 " +"8 1 9 9 3 12 13 4 2 5 12 " +"3 15 7 19 16 10 6 12 5 15 " +"4 13 6 13 2 11 21 18 20 13 16 " +"6 19 17 22 17 19 14 7 14 19 " +"10 16 20 25 24 21 23 26 22 23 22 " +"17 25 21 20 24 25 29 30 29 25 " +"28 31 27 26 23 27 23 28 27 " +; + +char *VTK_VECTOR_TEXT_86 = (char *) "8 1.148571 " +"0.57714 -0.07025 0.72571 -0.06947 0.64571 0.06079 0.65143 0.06062 0.15429 1.02560 " +"0.30286 1.02531 1.00571 1.02531 1.14857 1.02560 6 0 2 4 3 2 " +"0 3 7 6 1 3 0 3 1 7 " +"2 5 4 " +; + +char *VTK_VECTOR_TEXT_87 = (char *) "14 1.568063 " +"0.45143 -0.07186 0.60000 -0.07017 1.13143 -0.06912 1.27429 -0.06912 0.52571 0.09707 " +"1.20000 0.09787 1.13673 0.38000 0.86857 0.88103 0.16571 1.02562 0.78286 1.02446 " +"1.42857 1.02446 1.56806 1.02571 0.30857 1.02615 0.95429 1.02615 12 " +"2 6 7 6 2 5 1 4 0 7 9 " +"4 11 10 5 3 5 2 8 0 4 " +"13 7 6 9 7 13 7 4 1 11 5 " +"3 12 8 4 " +; + +char *VTK_VECTOR_TEXT_88 = (char *) "14 1.141168 " +"0.15194 -0.07143 1.14117 -0.07143 0.32000 -0.07106 0.97143 -0.07140 0.65143 0.37795 " +"0.74607 0.49429 0.56517 0.50000 0.74286 0.49909 0.74219 0.50000 0.65714 0.61727 " +"0.20016 1.02571 0.96000 1.02568 1.11260 1.02571 0.36571 1.02644 12 " +"0 2 6 3 5 4 5 6 4 5 8 " +"6 5 3 1 5 7 8 4 6 2 " +"9 6 8 12 11 8 6 13 10 13 6 " +"9 11 9 8 " +; + +char *VTK_VECTOR_TEXT_89 = (char *) "12 1.145205 " +"0.71164 -0.07143 0.57143 -0.06878 0.56891 0.39143 0.71787 0.39714 0.65143 0.51441 " +"0.43179 0.85429 0.42857 0.85936 0.42812 0.86000 0.15284 1.02571 0.32000 1.02535 " +"0.98286 1.02464 1.14521 1.02571 10 3 2 " +"1 3 1 0 4 2 3 2 9 8 " +"11 10 4 5 2 4 5 6 7 2 7 " +"9 2 5 7 11 4 3 " +; + +char *VTK_VECTOR_TEXT_90 = (char *) "11 1.040000 " +"0.17714 -0.07186 1.04000 -0.06878 1.04000 0.05164 0.17395 0.06000 0.34602 0.06000 " +"0.84777 0.89429 0.24000 0.89957 1.02395 0.90000 0.23580 1.02000 1.02286 1.02307 " +"0.24000 1.02615 9 0 4 3 1 4 0 1 2 4 3 4 5 5 " +"7 9 4 7 5 5 10 6 10 5 9 6 10 8 " +; + +char *VTK_VECTOR_TEXT_91 = (char *) "8 0.541339 " +"0.24528 -0.37429 0.54025 -0.37429 0.54025 -0.27143 0.38227 -0.26571 0.38286 0.91454 " +"0.54134 0.92286 0.24836 1.02571 0.53714 1.02615 6 0 4 6 3 1 " +"2 1 3 0 0 3 4 5 7 4 " +"6 4 7 " +; + +char *VTK_VECTOR_TEXT_92 = (char *) "5 0.564685 " +"0.46286 -0.09182 0.56000 -0.09256 0.56469 -0.08857 0.14713 1.04286 0.24571 1.04358 3 0 4 3 0 2 4 0 " +"1 2 " +; + +char *VTK_VECTOR_TEXT_93 = (char *) "9 0.465968 " +"0.17100 -0.37429 0.46597 -0.37429 0.17100 -0.27143 0.32571 -0.26723 0.33295 -0.26000 " +"0.33143 0.91201 0.17143 0.91979 0.16991 1.02000 0.46286 1.02615 7 2 0 3 1 " +"3 0 1 4 3 5 4 1 7 6 8 5 8 6 8 5 1 " +; + +char *VTK_VECTOR_TEXT_94 = (char *) "11 0.817005 " +"0.18389 0.44857 0.18857 0.44458 0.32000 0.44686 0.68571 0.44746 0.81143 0.44445 " +"0.81700 0.44857 0.49714 0.88224 0.50286 0.88224 0.44571 1.04090 0.55429 1.04168 " +"0.45143 1.04437 9 0 2 6 0 6 8 7 3 5 4 5 3 2 " +"0 1 10 7 9 10 8 6 10 6 7 9 7 5 " +; + +char *VTK_VECTOR_TEXT_95 = (char *) "4 1.011860 " +"0.11957 -0.37429 1.01186 -0.37429 0.11957 -0.28857 1.01186 -0.28857 2 2 1 3 2 0 1 " +; + +char *VTK_VECTOR_TEXT_96 = (char *) "11 0.486571 " +"0.38857 0.82420 0.48000 0.82420 0.48403 0.82571 0.37714 0.82989 0.38286 0.82575 " +"0.48657 0.83143 0.21296 1.02571 0.38771 1.02571 0.21412 1.03143 0.38286 1.03106 " +"0.37714 1.03295 9 5 1 2 0 3 4 3 10 6 0 1 5 7 " +"3 0 8 6 10 7 0 5 3 7 10 10 7 9 " +; + +char *VTK_VECTOR_TEXT_97 = (char *) "70 0.929303 " +"0.44000 -0.09009 0.50286 -0.08966 0.36571 -0.07756 0.57143 -0.07907 0.92716 -0.07143 " +"0.79429 -0.07106 0.92930 -0.06571 0.62857 -0.06151 0.30857 -0.05514 0.27429 -0.03258 " +"0.68000 -0.03629 0.90748 -0.00857 0.48000 0.01580 0.53143 0.01621 0.42768 0.02571 " +"0.76571 0.02129 0.22073 0.03143 0.61804 0.03714 0.89866 0.03714 0.37130 0.06000 " +"0.20613 0.06571 0.68000 0.07330 0.34538 0.10000 0.71429 0.10809 0.19580 0.11714 " +"0.89295 0.13429 0.33907 0.15714 0.74538 0.16857 0.20319 0.19714 0.36000 0.20914 " +"0.75580 0.22000 0.40000 0.24371 0.22812 0.25429 0.44571 0.26041 0.66286 0.29891 " +"0.28000 0.31258 0.75848 0.31714 0.75429 0.32399 0.33714 0.34657 0.38857 0.36538 " +"0.68571 0.41320 0.75772 0.43714 0.35289 0.48286 0.22093 0.50000 0.22857 0.49470 " +"0.89252 0.50571 0.75580 0.51143 0.22857 0.53547 0.37800 0.54571 0.74286 0.55301 " +"0.88680 0.56286 0.71429 0.58893 0.41714 0.59330 0.42228 0.59714 0.25800 0.60286 " +"0.42286 0.59759 0.65143 0.61959 0.48000 0.62193 0.86498 0.62571 0.53143 0.62950 " +"0.59429 0.62950 0.28187 0.63714 0.84571 0.65486 0.33714 0.68436 0.80571 0.69007 " +"0.37915 0.70571 0.72571 0.72538 0.45714 0.72966 0.54286 0.74152 0.62286 0.74152 70 " +"3 13 1 5 4 15 4 11 15 19 8 " +"2 13 3 7 13 0 1 14 0 12 " +"20 22 24 0 14 2 12 0 13 13 7 " +"17 11 4 6 19 2 14 17 10 21 " +"7 10 17 11 18 15 16 22 20 8 19 " +"9 15 23 21 15 21 10 23 25 27 " +"9 19 16 19 22 16 23 15 25 24 26 " +"28 27 25 30 25 15 18 30 25 36 " +"32 28 26 26 24 22 29 32 26 39 38 " +"31 38 35 29 32 29 35 31 38 29 " +"39 34 40 33 39 31 39 33 34 36 41 " +"37 40 37 41 37 40 34 41 36 25 " +"41 45 46 43 44 47 47 48 54 48 47 " +"44 50 49 46 41 25 45 50 46 45 " +"42 48 44 49 64 51 52 53 55 52 65 " +"63 65 52 55 52 61 48 52 63 61 " +"58 49 50 49 58 62 69 60 56 49 62 " +"64 54 48 61 57 67 65 57 65 55 " +"51 66 56 69 59 60 66 51 64 68 67 " +"57 59 69 57 69 68 57 69 56 66 " +; + +char *VTK_VECTOR_TEXT_98 = (char *) "49 0.932518 " +"0.61143 -0.09009 0.50286 -0.07823 0.36000 -0.07186 0.24000 -0.06878 0.72000 -0.06213 " +"0.45714 -0.05914 0.77143 -0.03188 0.36571 0.01806 0.59429 0.02193 0.83543 0.02571 " +"0.52000 0.02823 0.66857 0.04645 0.46857 0.05179 0.42704 0.08857 0.72956 0.10000 " +"0.88784 0.10571 0.39216 0.14000 0.75641 0.14000 0.91470 0.18000 0.37462 0.19143 " +"0.78665 0.23714 0.36152 0.28857 0.93252 0.29429 0.79236 0.36857 0.93252 0.37429 " +"0.36420 0.38000 0.77294 0.47714 0.39216 0.50000 0.90899 0.50000 0.42473 0.55143 " +"0.73143 0.55546 0.88657 0.55714 0.45883 0.58571 0.67429 0.60498 0.50857 0.61641 " +"0.63429 0.62252 0.56571 0.62991 0.37714 0.64118 0.83429 0.63841 0.37315 0.64857 " +"0.80571 0.66686 0.74286 0.70784 0.46857 0.71355 0.68571 0.72899 0.56571 0.74109 " +"0.61714 0.74152 0.24265 1.02571 0.37143 1.02307 0.36571 1.02723 49 3 25 46 5 1 10 5 12 7 8 0 4 11 6 14 11 " +"4 6 0 8 1 2 7 3 8 4 11 10 1 8 21 3 19 12 13 7 12 " +"5 10 14 9 17 9 14 6 17 15 20 16 7 13 15 18 20 15 17 9 3 " +"7 19 22 20 18 20 22 23 28 26 23 22 24 23 25 3 21 30 43 33 39 " +"46 25 28 23 24 27 39 25 26 31 30 7 16 19 31 26 28 37 32 42 39 " +"27 37 40 30 38 29 37 27 38 30 31 35 33 43 32 34 42 35 45 36 37 " +"29 32 42 34 36 45 35 43 43 30 41 41 30 40 36 45 44 42 36 44 47 " +"48 46 39 47 46 " +; + +char *VTK_VECTOR_TEXT_99 = (char *) "58 0.894057 " +"0.53143 -0.08966 0.59429 -0.08966 0.45714 -0.07673 0.68000 -0.07294 0.72571 -0.05343 " +"0.37714 -0.04331 0.33714 -0.01543 0.78857 -0.01011 0.58286 0.02152 0.29143 0.03016 " +"0.49625 0.03143 0.62857 0.03034 0.83107 0.03714 0.45714 0.04943 0.69270 0.06571 " +"0.26241 0.07143 0.85714 0.07873 0.40457 0.09429 0.72722 0.10571 0.37629 0.14000 " +"0.74437 0.14000 0.22899 0.14571 0.37184 0.15143 0.36930 0.15714 0.88571 0.15295 " +"0.89406 0.19714 0.76571 0.21540 0.21034 0.22571 0.34705 0.25429 0.20420 0.36286 " +"0.34478 0.36857 0.21673 0.45429 0.36252 0.47143 0.75429 0.47269 0.88058 0.48857 " +"0.88319 0.49429 0.38371 0.52286 0.23849 0.52857 0.72000 0.55200 0.86437 0.55714 " +"0.43025 0.58000 0.69714 0.58127 0.28527 0.61429 0.47429 0.60943 0.48571 0.61387 " +"0.83473 0.61429 0.49143 0.61641 0.63429 0.62041 0.54857 0.62950 0.58857 0.62991 " +"0.81296 0.64286 0.32168 0.65429 0.35429 0.67964 0.76571 0.68535 0.44571 0.72327 " +"0.67429 0.72816 0.53714 0.74109 0.60000 0.74109 56 2 13 5 0 8 2 11 4 14 " +"1 8 0 3 11 1 15 23 21 2 10 " +"13 11 8 1 11 3 4 7 14 4 " +"10 2 8 14 7 18 17 6 13 6 5 " +"13 17 15 9 18 12 20 7 12 18 " +"17 9 6 16 20 12 24 20 16 19 15 " +"17 15 19 23 23 19 22 27 28 29 " +"26 20 24 26 24 25 21 28 27 28 21 " +"23 29 30 31 28 30 29 31 32 37 " +"39 38 33 34 39 33 32 31 30 37 32 " +"36 55 49 47 37 36 42 51 42 36 " +"34 35 39 45 41 38 52 40 43 46 43 " +"44 50 41 45 56 49 57 40 51 36 " +"51 40 52 45 38 39 52 43 54 47 41 " +"53 54 46 48 56 48 49 53 41 50 " +"54 48 56 54 43 46 57 49 55 55 47 " +"53 " +; + +char *VTK_VECTOR_TEXT_100 = (char *) "48 0.885714 " +"0.51429 -0.09009 0.56571 -0.08966 0.62857 -0.07673 0.76571 -0.07186 0.88571 -0.06878 " +"0.41143 -0.06486 0.67429 -0.05641 0.36000 -0.03669 0.30286 0.01025 0.76000 0.01806 " +"0.53714 0.02152 0.49714 0.02891 0.60571 0.02891 0.68127 0.07143 0.41714 0.07561 " +"0.23787 0.10571 0.71579 0.11143 0.38241 0.11714 0.74135 0.16286 0.21395 0.16857 " +"0.74286 0.16739 0.74538 0.17429 0.34605 0.20286 0.76420 0.27714 0.19277 0.28857 " +"0.33295 0.28857 0.19277 0.36286 0.76152 0.38571 0.33563 0.39714 0.73355 0.50000 " +"0.22135 0.51143 0.36784 0.51714 0.69714 0.55841 0.42286 0.58686 0.26857 0.60793 " +"0.63429 0.60943 0.48571 0.62151 0.56571 0.62950 0.74857 0.64048 0.75269 0.64857 " +"0.30857 0.65582 0.65714 0.71355 0.40571 0.71756 0.50286 0.74109 0.55429 0.74152 " +"0.75693 1.02571 0.88571 1.02307 0.88000 1.02723 48 0 11 5 12 6 13 " +"1 2 12 7 14 8 10 0 1 14 7 " +"5 10 1 12 6 12 2 0 10 11 " +"8 17 15 9 16 13 14 5 11 4 9 " +"3 6 9 13 9 4 18 16 9 18 " +"15 22 19 17 8 14 22 15 17 20 18 " +"21 21 18 4 19 25 24 21 4 23 " +"25 19 22 26 24 25 26 28 30 39 27 " +"4 26 25 28 39 38 29 29 38 32 " +"27 39 29 30 31 34 32 38 35 31 30 " +"28 40 34 31 36 42 33 23 4 27 " +"35 41 37 33 40 31 40 33 42 41 35 " +"38 42 36 43 37 43 36 44 37 41 " +"37 44 43 46 47 45 39 4 45 4 46 " +"45 " +; + +char *VTK_VECTOR_TEXT_101 = (char *) "65 0.934539 " +"0.54857 -0.09009 0.61143 -0.09009 0.45714 -0.07462 0.71429 -0.07101 0.40571 -0.05641 " +"0.77714 -0.04331 0.33714 -0.01543 0.82857 -0.00670 0.29714 0.02154 0.56000 0.02152 " +"0.60571 0.02193 0.49714 0.03563 0.68159 0.04286 0.88150 0.05429 0.45714 0.05514 " +"0.26286 0.06636 0.72000 0.06759 0.40457 0.10000 0.91216 0.11143 0.77229 0.13429 " +"0.37057 0.15143 0.22034 0.15714 0.36613 0.16286 0.92834 0.16286 0.36359 0.16857 " +"0.91429 0.16966 0.79429 0.18111 0.35177 0.20286 0.20462 0.22571 0.33866 0.28286 " +"0.34286 0.28900 0.93454 0.29429 0.19848 0.35714 0.93295 0.39714 0.34857 0.40134 " +"0.78857 0.40134 0.34134 0.40857 0.79580 0.40857 0.20462 0.41429 0.35429 0.47261 " +"0.22327 0.49429 0.91429 0.48975 0.77143 0.50661 0.38857 0.54057 0.74857 0.54629 " +"0.40725 0.56286 0.25714 0.57001 0.71429 0.58154 0.87070 0.58571 0.45143 0.59759 " +"0.68000 0.60498 0.29296 0.62000 0.49143 0.61681 0.63429 0.62252 0.54857 0.62950 " +"0.59429 0.62991 0.33311 0.66000 0.81143 0.65543 0.77143 0.68607 0.41143 0.70930 " +"0.72000 0.71355 0.45714 0.72605 0.66857 0.73050 0.54286 0.74152 0.60000 0.74152 65 0 9 11 10 " +"1 3 10 3 12 5 12 3 17 8 6 10 0 1 0 11 2 4 14 6 0 " +"10 9 7 16 5 5 16 12 14 2 11 16 7 19 14 4 2 15 8 17 26 " +"18 25 17 6 14 15 27 21 7 13 19 23 25 18 20 15 17 26 19 18 18 " +"19 13 24 20 22 15 20 24 15 24 27 21 27 28 28 29 32 33 37 35 29 " +"28 27 32 29 38 35 34 30 40 39 46 33 35 30 31 33 30 36 38 29 36 " +"29 34 37 41 42 40 38 36 30 34 29 39 40 36 41 37 33 46 43 51 51 " +"49 56 42 48 44 48 42 41 44 48 47 49 51 45 43 46 39 56 49 59 50 " +"62 53 57 47 48 64 55 53 45 51 43 55 63 54 58 47 57 62 50 60 59 " +"52 61 59 49 52 47 60 50 61 54 63 60 47 58 61 52 54 64 53 62 55 " +"64 63 " +; + +char *VTK_VECTOR_TEXT_102 = (char *) "24 0.617143 " +"0.28000 -0.07186 0.40571 -0.07186 0.27472 0.61429 0.41100 0.61429 0.16571 0.61957 " +"0.56000 0.61957 0.56420 0.71714 0.16571 0.72329 0.27472 0.72857 0.41100 0.72857 " +"0.56000 0.72329 0.41034 0.83143 0.27580 0.86000 0.43429 0.89555 0.28613 0.91714 " +"0.46286 0.91294 0.50286 0.92134 0.60000 0.91830 0.31107 0.96857 0.34286 1.00099 " +"0.38857 1.02784 0.61714 1.03086 0.46286 1.04395 0.52571 1.04437 22 0 3 2 " +"3 0 1 4 8 7 9 3 5 2 3 " +"8 5 6 10 4 2 8 9 8 3 " +"8 11 12 11 8 9 12 11 14 9 5 " +"10 13 19 18 13 18 14 13 14 11 " +"23 15 16 15 23 22 21 23 17 15 20 " +"13 19 13 20 20 15 22 23 16 17 " +; + +char *VTK_VECTOR_TEXT_103 = (char *) "71 0.892518 " +"0.46857 -0.39295 0.56571 -0.39563 0.66286 -0.37959 0.35429 -0.36200 0.74286 -0.34616 " +"0.28571 -0.31868 0.80368 -0.30000 0.50857 -0.28437 0.62286 -0.27395 0.44571 -0.27101 " +"0.23387 -0.24286 0.84657 -0.24286 0.69200 -0.23714 0.38171 -0.23143 0.72150 -0.20286 " +"0.87177 -0.18000 0.34916 -0.15714 0.74899 -0.14000 0.22286 -0.13957 0.50857 -0.07295 " +"0.56000 -0.07295 0.43429 -0.05959 0.65143 -0.05070 0.37143 -0.03355 0.69714 -0.02527 " +"0.89252 -0.00857 0.74857 0.01873 0.75042 0.02000 0.75756 0.02000 0.75429 0.02333 " +"0.29143 0.03381 0.53143 0.03866 0.57143 0.03907 0.47429 0.05216 0.64000 0.05787 " +"0.41714 0.08704 0.68000 0.08439 0.23216 0.12857 0.38036 0.12857 0.72784 0.14000 " +"0.35277 0.18571 0.20530 0.20857 0.75538 0.20857 0.19320 0.28286 0.33295 0.29429 " +"0.76991 0.35714 0.19277 0.37429 0.33563 0.40857 0.75109 0.47143 0.35109 0.47714 " +"0.21143 0.47832 0.72784 0.52286 0.23787 0.55143 0.39044 0.55143 0.69868 0.56286 " +"0.66286 0.59393 0.27107 0.60857 0.45143 0.60498 0.48571 0.62041 0.56571 0.62991 " +"0.57714 0.62764 0.58286 0.62723 0.76571 0.63477 0.32000 0.66384 0.68571 0.70213 " +"0.39429 0.71229 0.77408 0.72286 0.88878 0.72286 0.62857 0.72816 0.46857 0.73580 " +"0.56000 0.74152 71 1 7 0 8 4 12 2 8 1 0 " +"9 3 7 1 8 5 13 10 9 0 7 13 5 3 8 2 4 6 14 12 6 " +"12 4 11 15 17 11 14 6 13 3 9 14 11 17 10 16 18 16 10 13 17 " +"25 28 23 21 33 22 32 20 32 19 20 35 23 33 19 31 21 23 35 30 31 " +"19 32 32 22 34 26 29 36 17 15 25 33 21 31 26 36 24 24 34 22 26 " +"27 29 36 34 24 36 29 39 30 38 37 39 28 25 39 29 28 37 40 41 38 " +"40 37 30 35 38 39 25 42 44 46 43 44 43 41 44 41 40 42 25 45 67 " +"51 48 46 47 50 67 48 45 47 46 44 50 49 52 49 50 47 67 62 51 62 " +"54 51 56 52 49 54 62 55 55 64 61 60 61 59 53 56 49 56 53 63 63 " +"57 65 65 58 69 65 57 58 70 59 61 59 69 58 64 55 62 67 45 25 67 " +"66 62 63 53 57 68 70 61 59 70 69 64 68 61 " +; + +char *VTK_VECTOR_TEXT_104 = (char *) "27 0.889502 " +"0.24571 -0.07186 0.37143 -0.07186 0.76000 -0.07186 0.88571 -0.07186 0.37605 0.40286 " +"0.37756 0.40857 0.75538 0.46000 0.88950 0.47714 0.38899 0.48286 0.74538 0.51714 " +"0.88152 0.54571 0.42439 0.55143 0.72000 0.56914 0.47429 0.59355 0.68000 0.60331 " +"0.85996 0.61429 0.53143 0.61748 0.61143 0.62379 0.37714 0.63983 0.81714 0.67296 " +"0.45714 0.70045 0.77714 0.70213 0.50857 0.72437 0.68571 0.73538 0.58857 0.74152 " +"0.24571 1.02615 0.37143 1.02615 25 0 " +"4 25 4 18 25 6 2 3 9 6 7 7 6 3 18 8 11 18 11 13 9 " +"15 12 12 19 14 10 9 7 18 13 20 8 4 5 15 9 10 4 0 1 18 " +"4 8 17 24 16 19 21 14 14 23 17 20 16 22 16 20 13 19 12 15 17 " +"23 24 23 14 21 24 22 16 18 26 25 " +; + +char *VTK_VECTOR_TEXT_105 = (char *) "8 0.377143 " +"0.25143 -0.07186 0.37714 -0.07186 0.25143 0.72329 0.37714 0.72329 0.25143 0.87403 " +"0.37714 0.87403 0.25143 1.02615 0.37714 1.02615 4 3 2 0 3 0 " +"1 4 5 6 7 6 5 " +; + +char *VTK_VECTOR_TEXT_106 = (char *) "18 0.375625 " +"0.14857 -0.39563 0.22286 -0.39252 0.07383 -0.38000 0.26857 -0.37914 0.31429 -0.34989 " +"0.34036 -0.31714 0.18857 -0.27462 0.10286 -0.26950 0.36109 -0.26571 0.22331 -0.24857 " +"0.37563 -0.16857 0.24152 -0.16286 0.24571 0.72329 0.37143 0.72329 0.24571 0.87403 " +"0.37143 0.87403 0.24571 1.02615 0.37143 1.02615 14 1 6 0 3 6 1 4 6 " +"3 9 10 11 7 0 6 7 2 0 " +"9 5 8 5 9 4 6 4 9 9 8 " +"10 11 10 12 13 12 10 14 15 16 " +"17 16 15 " +; + +char *VTK_VECTOR_TEXT_107 = (char *) "15 0.897876 " +"0.37450 -0.07143 0.89788 -0.07143 0.24571 -0.06878 0.73714 -0.07035 0.38004 0.24286 " +"0.68421 0.25429 0.68045 0.26000 0.68000 0.26064 0.46857 0.32924 0.38286 0.40888 " +"0.57152 0.42571 0.69714 0.72283 0.86359 0.72286 0.24836 1.02571 0.37714 1.02307 13 2 9 13 4 2 0 5 8 3 5 " +"3 1 5 6 7 9 14 13 11 9 10 5 7 8 7 10 8 8 9 4 12 " +"11 10 9 8 10 2 4 9 " +; + +char *VTK_VECTOR_TEXT_108 = (char *) "4 0.371429 " +"0.36878 -0.07143 0.24000 -0.06878 0.24265 1.02571 0.37143 1.02307 2 1 3 2 3 1 0 " +; + +char *VTK_VECTOR_TEXT_109 = (char *) "45 1.318074 " +"0.24571 -0.07186 0.37143 -0.07186 0.72000 -0.07295 1.18857 -0.07186 1.31429 -0.07186 " +"0.71429 -0.06878 0.84571 -0.06878 0.37866 0.37429 0.84723 0.40286 0.85335 0.46000 " +"0.39109 0.48286 0.71277 0.48286 1.18437 0.48286 1.31807 0.52286 0.87787 0.53429 " +"0.41143 0.53493 1.17395 0.54000 0.43582 0.56857 0.68784 0.56857 1.14857 0.58403 " +"0.93143 0.59188 0.66286 0.59829 0.82857 0.60801 0.51009 0.61429 0.36571 0.61924 " +"0.63429 0.61470 1.09714 0.61580 1.29355 0.62000 0.56000 0.62420 1.00571 0.62152 " +"1.06286 0.62379 0.41311 0.67143 0.78857 0.66975 1.25561 0.67714 0.90857 0.68902 " +"0.74286 0.70784 1.20571 0.71355 0.35735 0.72286 0.24571 0.72329 0.50286 0.72498 " +"0.99429 0.73109 1.16000 0.73109 0.67429 0.73470 0.57714 0.74109 1.05143 0.74152 43 6 5 2 0 7 38 8 11 5 7 0 1 8 5 6 12 3 4 12 " +"13 16 9 11 8 15 17 24 11 22 18 22 20 34 11 9 22 14 22 9 13 " +"12 4 24 17 31 7 10 38 10 15 24 16 27 19 32 21 18 24 37 38 20 " +"22 14 10 24 38 27 16 13 31 23 39 26 41 30 30 40 29 32 18 22 41 " +"19 36 34 29 40 19 41 26 36 19 33 23 31 17 35 21 32 29 34 20 39 " +"28 43 33 19 27 43 28 42 25 42 28 28 39 23 42 25 21 42 21 35 44 " +"30 41 30 44 40 " +; + +char *VTK_VECTOR_TEXT_110 = (char *) "38 0.889911 " +"0.24571 -0.07186 0.37143 -0.07186 0.75429 -0.07186 0.88571 -0.07186 0.24152 -0.06571 " +"0.37563 -0.06571 0.75009 -0.06571 0.88991 -0.06571 0.37605 0.40286 0.37866 0.41429 " +"0.38134 0.44857 0.74665 0.48286 0.88950 0.48286 0.39849 0.51143 0.73229 0.54000 " +"0.88420 0.54000 0.43011 0.56286 0.46286 0.58893 0.69714 0.58725 0.87008 0.59143 " +"0.51580 0.61429 0.65143 0.61343 0.36571 0.62031 0.56571 0.62420 0.60571 0.62379 " +"0.61714 0.62152 0.62286 0.62109 0.83955 0.64857 0.40725 0.66571 0.79429 0.69179 " +"0.45714 0.70213 0.24152 0.71714 0.75429 0.71355 0.35735 0.72286 0.24571 0.72329 " +"0.52571 0.73050 0.68571 0.73538 0.58857 0.74152 36 1 4 0 " +"3 6 2 1 5 4 3 7 6 6 12 " +"11 11 15 14 6 7 12 22 16 28 " +"10 8 9 13 22 10 10 22 8 8 4 " +"5 15 11 12 8 22 4 14 15 19 " +"14 19 18 25 26 24 16 22 13 16 17 " +"28 30 28 17 27 18 19 32 23 24 " +"29 18 27 30 20 35 18 32 21 31 4 " +"22 20 30 17 32 26 21 32 24 26 " +"32 18 29 34 31 33 33 31 22 35 23 " +"37 23 35 20 36 23 32 37 23 36 " +; + +char *VTK_VECTOR_TEXT_111 = (char *) "65 0.938661 " +"0.53143 -0.08966 0.59429 -0.09009 0.69143 -0.07101 0.41143 -0.06213 0.76571 -0.03759 " +"0.34857 -0.02821 0.81714 -0.00099 0.29143 0.02154 0.54286 0.02193 0.60571 0.02420 " +"0.50857 0.02823 0.64571 0.03563 0.86331 0.04857 0.45143 0.05216 0.25714 0.06636 " +"0.70857 0.07330 0.89229 0.09429 0.40000 0.09597 0.22771 0.12286 0.38036 0.12286 " +"0.37714 0.12793 0.37669 0.12857 0.75473 0.12857 0.76657 0.15143 0.77101 0.16286 " +"0.77355 0.16857 0.92319 0.18000 0.20764 0.18571 0.34816 0.19714 0.78605 0.20857 " +"0.33563 0.26000 0.19320 0.28286 0.93823 0.28857 0.79848 0.29429 0.33295 0.36286 " +"0.93866 0.37429 0.19580 0.39714 0.79538 0.39714 0.35277 0.47143 0.92319 0.47143 " +"0.21184 0.48286 0.77143 0.48947 0.23216 0.54000 0.38742 0.54000 0.89927 0.54000 " +"0.74286 0.54057 0.71429 0.57275 0.42286 0.57813 0.87678 0.58000 0.27429 0.60984 " +"0.48571 0.61580 0.64571 0.61580 0.54286 0.62950 0.58857 0.62950 0.60000 0.62723 " +"0.60571 0.62680 0.83225 0.63714 0.31025 0.64857 0.34857 0.67864 0.75429 0.69641 " +"0.40000 0.70784 0.45143 0.72605 0.68571 0.72538 0.53714 0.74152 0.60000 0.74109 65 11 4 15 8 " +"0 1 17 7 5 11 2 4 2 9 1 8 1 9 0 8 10 0 10 3 2 " +"11 9 3 13 5 10 13 3 6 12 22 6 15 4 15 6 22 18 28 27 17 " +"5 13 14 19 18 16 23 22 19 7 17 7 19 14 18 19 21 24 23 25 25 " +"23 16 19 20 21 16 22 12 26 29 25 27 30 31 26 25 16 28 18 21 29 " +"26 33 30 27 28 31 34 36 33 32 35 26 32 33 34 31 30 33 35 37 40 " +"36 34 37 39 41 40 38 42 39 37 35 47 57 43 38 40 34 43 49 42 46 " +"45 56 39 44 41 41 48 45 43 57 49 41 44 48 43 42 38 57 47 58 54 " +"55 53 56 45 48 50 60 47 64 63 53 64 55 62 53 63 52 59 62 51 61 " +"60 50 64 53 55 51 62 55 52 61 50 59 46 56 61 52 63 46 59 51 58 " +"47 60 " +; + +char *VTK_VECTOR_TEXT_112 = (char *) "49 0.935625 " +"0.24571 -0.37740 0.37454 -0.37429 0.56000 -0.08966 0.66857 -0.07966 0.47429 -0.06657 " +"0.75429 -0.04331 0.37584 -0.00286 0.80571 -0.00704 0.38286 0.00159 0.59429 0.02152 " +"0.52000 0.02891 0.63429 0.02992 0.85964 0.05429 0.45143 0.06725 0.70857 0.07330 " +"0.39787 0.13429 0.39514 0.14000 0.39216 0.14571 0.76213 0.14571 0.90538 0.14571 " +"0.37462 0.19714 0.78327 0.20857 0.92680 0.22571 0.36379 0.27143 0.36152 0.28286 " +"0.79580 0.29429 0.93563 0.30000 0.36379 0.36857 0.79580 0.36857 0.92680 0.43714 " +"0.78286 0.45547 0.38286 0.47232 0.75429 0.52921 0.41714 0.54057 0.88571 0.56444 " +"0.44571 0.57582 0.69143 0.59964 0.51429 0.62213 0.65143 0.62213 0.36571 0.63051 " +"0.56571 0.63563 0.82704 0.64857 0.45714 0.70784 0.74857 0.70657 0.24571 0.72329 " +"0.36000 0.72329 0.51429 0.73177 0.69143 0.72899 0.62286 0.74152 49 0 1 6 0 24 44 3 9 2 2 10 4 3 11 9 4 " +"13 8 10 2 9 11 5 14 11 3 5 7 14 5 4 10 13 14 12 18 14 " +"7 12 0 20 24 15 8 13 8 15 6 19 18 12 18 19 21 21 22 25 24 " +"27 44 17 15 16 22 21 19 28 25 26 22 26 25 6 15 17 29 30 28 23 " +"24 20 20 6 17 29 28 26 30 34 32 27 31 44 0 6 20 31 39 44 32 " +"41 36 41 32 34 31 33 39 42 37 46 39 35 42 34 30 29 39 33 35 38 " +"47 40 35 37 42 47 38 43 40 46 37 43 36 41 39 45 44 46 40 48 48 " +"40 47 38 36 43 " +; + +char *VTK_VECTOR_TEXT_113 = (char *) "52 0.885714 " +"0.76000 -0.37740 0.88571 -0.37740 0.56571 -0.09009 0.45143 -0.07673 0.65143 -0.06784 " +"0.36000 -0.03188 0.70857 -0.03465 0.75580 -0.00286 0.74857 0.00454 0.29714 0.02418 " +"0.54286 0.02152 0.57714 0.02193 0.58857 0.02420 0.59429 0.02462 0.47429 0.03927 " +"0.64571 0.04371 0.43302 0.06571 0.70670 0.09429 0.23914 0.11143 0.38607 0.11714 " +"0.38286 0.12221 0.38241 0.12286 0.75008 0.17429 0.21101 0.19143 0.34748 0.20857 " +"0.76723 0.25429 0.19848 0.26000 0.76723 0.27143 0.33605 0.28286 0.76991 0.28857 " +"0.19580 0.37429 0.33866 0.40286 0.75429 0.45277 0.21101 0.47143 0.35429 0.47832 " +"0.73143 0.51301 0.39846 0.56286 0.69296 0.56857 0.25669 0.58571 0.45143 0.60902 " +"0.61714 0.62213 0.49143 0.62723 0.76571 0.62602 0.29330 0.63714 0.56571 0.63522 " +"0.72403 0.67143 0.36571 0.69641 0.66286 0.71355 0.77408 0.72286 0.88571 0.72329 " +"0.44571 0.72966 0.56000 0.74152 52 29 27 25 " +"49 42 32 22 7 25 3 13 11 2 13 " +"3 4 13 2 6 15 4 11 13 12 " +"3 14 5 13 4 15 10 3 11 15 6 " +"8 14 3 10 15 8 17 24 23 18 " +"5 16 9 17 8 22 14 16 5 9 19 " +"18 19 20 21 18 19 21 42 35 32 " +"7 22 8 16 19 9 49 48 42 7 0 " +"1 24 18 21 23 24 26 26 28 30 " +"28 26 24 30 31 33 34 33 31 31 30 " +"28 33 34 38 49 29 25 36 43 38 " +"49 25 7 35 42 37 37 45 40 45 37 " +"42 29 49 32 45 47 40 39 43 36 " +"46 39 50 40 47 44 43 39 46 36 38 " +"34 41 44 51 41 50 39 49 7 1 " +"50 41 51 51 44 47 " +; + +char *VTK_VECTOR_TEXT_114 = (char *) "24 0.667686 " +"0.24571 -0.07186 0.37143 -0.07186 0.24152 -0.06571 0.37563 -0.06571 0.37563 0.38000 " +"0.39748 0.50000 0.41964 0.54571 0.44740 0.57429 0.61714 0.57787 0.62286 0.57880 " +"0.48000 0.59294 0.57714 0.59395 0.51429 0.60134 0.36571 0.61385 0.41868 0.68857 " +"0.66769 0.69429 0.66542 0.70000 0.24152 0.71714 0.35735 0.72286 0.24571 0.72329 " +"0.46286 0.72436 0.60000 0.73109 0.51429 0.74109 0.55429 0.74109 22 1 2 0 " +"1 3 2 4 2 3 5 6 13 5 13 " +"17 21 11 15 2 4 17 4 5 17 " +"6 7 13 18 17 13 7 10 14 13 7 " +"14 14 12 20 11 21 12 9 15 11 " +"12 14 10 19 17 18 20 12 22 8 9 " +"11 21 15 16 22 12 23 23 12 21 " +; + +char *VTK_VECTOR_TEXT_115 = (char *) "63 0.849502 " +"0.56000 -0.09009 0.46286 -0.08705 0.65143 -0.07395 0.37143 -0.06723 0.70444 -0.05429 " +"0.33143 -0.04943 0.76057 -0.02000 0.28571 -0.01813 0.79582 0.01429 0.50286 0.02152 " +"0.55429 0.02152 0.56571 0.02379 0.57714 0.02420 0.24571 0.02636 0.64000 0.04200 " +"0.41714 0.04371 0.22200 0.06571 0.38286 0.06725 0.68384 0.07714 0.83580 0.08286 " +"0.69927 0.10000 0.34200 0.12286 0.84950 0.14000 0.71009 0.15714 0.19109 0.16286 " +"0.19370 0.16857 0.32000 0.18615 0.69864 0.19143 0.84723 0.20286 0.65714 0.22784 " +"0.83641 0.24286 0.80956 0.28857 0.34286 0.32371 0.75429 0.33641 0.30286 0.34421 " +"0.69143 0.36327 0.25714 0.38445 0.22645 0.43714 0.41143 0.44538 0.37587 0.46571 " +"0.35885 0.48286 0.21295 0.49429 0.69143 0.50460 0.34478 0.51714 0.81977 0.52286 " +"0.67514 0.55143 0.35216 0.56286 0.22034 0.56857 0.64000 0.59465 0.38286 0.59829 " +"0.79429 0.61016 0.24000 0.61573 0.42857 0.62041 0.58286 0.62252 0.48571 0.62991 " +"0.74689 0.67143 0.28571 0.67258 0.70286 0.70045 0.33714 0.70613 0.38857 0.72538 " +"0.61714 0.73050 0.47429 0.74109 0.54286 0.74109 61 2 12 0 10 1 12 12 2 14 14 4 6 7 17 13 0 " +"12 1 4 14 2 11 10 12 15 3 1 3 15 5 9 1 10 14 6 18 15 " +"1 9 17 5 15 6 8 18 5 17 7 21 16 13 16 21 24 18 8 20 23 " +"28 27 21 13 17 19 22 23 26 25 21 21 25 24 20 19 23 19 20 8 28 " +"23 22 27 33 29 28 30 27 31 27 30 27 31 33 29 38 32 35 29 33 29 " +"35 38 34 38 36 32 38 34 36 40 37 39 36 38 41 43 47 43 41 37 36 " +"39 40 50 45 42 43 37 40 47 46 51 46 47 43 53 60 54 45 57 48 52 " +"58 49 45 55 57 51 49 56 49 51 46 50 42 44 48 57 53 56 49 58 55 " +"45 50 52 59 58 59 52 61 52 54 61 60 53 57 61 54 62 62 54 60 " +; + +char *VTK_VECTOR_TEXT_116 = (char *) "24 0.551972 " +"0.42286 -0.08395 0.48000 -0.08437 0.55197 -0.07143 0.33714 -0.05914 0.29901 -0.02571 " +"0.28041 0.00857 0.44571 0.04816 0.44453 0.04857 0.53714 0.04344 0.44000 0.05008 " +"0.41057 0.07714 0.26748 0.10000 0.40152 0.11714 0.26597 0.61429 0.40260 0.61429 " +"0.17143 0.61957 0.53450 0.62000 0.53866 0.71714 0.53450 0.72286 0.17143 0.72329 " +"0.26597 0.72857 0.40260 0.72857 0.26748 0.91714 0.40000 0.99545 22 10 5 4 " +"6 7 9 10 4 3 10 3 9 8 6 " +"1 6 9 1 5 10 11 8 1 2 " +"0 9 3 11 12 13 0 1 9 10 12 " +"11 17 18 16 14 13 12 21 14 16 " +"18 21 16 22 20 23 20 13 14 15 20 " +"19 15 13 20 20 14 21 23 20 21 " +; + +char *VTK_VECTOR_TEXT_117 = (char *) "38 0.884197 " +"0.48571 -0.09009 0.53714 -0.09009 0.41714 -0.07673 0.77143 -0.07295 0.88000 -0.07186 " +"0.63518 -0.06571 0.76571 -0.06878 0.88420 -0.06571 0.34857 -0.04771 0.70857 -0.01846 " +"0.29901 -0.00857 0.27429 0.02730 0.52000 0.02723 0.56000 0.02764 0.47339 0.03714 " +"0.76000 0.03684 0.61714 0.04135 0.43943 0.05429 0.65143 0.05787 0.41330 0.07714 " +"0.25143 0.08437 0.69143 0.08704 0.39343 0.10571 0.38899 0.11714 0.71473 0.11714 " +"0.38645 0.12286 0.73294 0.15714 0.23848 0.17429 0.37563 0.17429 0.75009 0.26000 " +"0.23848 0.71714 0.37295 0.71714 0.75009 0.71714 0.88420 0.71714 0.24265 0.72286 " +"0.36878 0.72286 0.75429 0.72329 0.88000 0.72329 36 6 3 15 " +"3 7 15 3 4 7 8 17 10 2 14 " +"17 2 17 8 5 13 1 19 11 10 " +"9 16 5 12 1 13 0 12 2 12 0 " +"1 9 18 16 13 5 16 14 2 12 " +"11 22 20 21 18 9 15 21 9 21 15 " +"24 20 28 27 11 19 22 24 7 26 " +"19 10 17 24 15 7 25 22 23 20 22 " +"25 20 25 28 26 7 29 31 30 27 " +"33 29 7 34 31 35 34 30 31 31 27 " +"28 36 33 37 32 29 33 36 32 33 " +; + +char *VTK_VECTOR_TEXT_118 = (char *) "12 0.884203 " +"0.45714 -0.06947 0.58857 -0.07103 0.52000 0.09808 0.52571 0.09808 0.47580 0.23714 " +"0.16151 0.71714 0.88420 0.71714 0.16427 0.72286 0.30286 0.71951 0.74857 0.72090 " +"0.88145 0.72286 0.29714 0.72395 10 4 0 " +"2 0 4 5 3 2 0 1 3 0 " +"3 6 9 8 11 5 9 6 10 7 5 " +"11 8 5 4 3 1 6 " +; + +char *VTK_VECTOR_TEXT_119 = (char *) "14 1.231638 " +"0.39429 -0.07215 0.52571 -0.07215 0.97714 -0.07252 0.84571 -0.06947 0.45714 0.10650 " +"0.46286 0.10650 0.92000 0.12073 0.69143 0.52785 0.15122 0.72286 0.28571 0.72090 " +"0.62857 0.72243 0.76193 0.72286 1.23164 0.72286 1.10857 0.72329 12 " +"2 6 3 0 4 8 3 6 7 5 0 " +"1 12 13 6 5 4 0 7 10 5 " +"11 10 7 7 5 1 11 7 6 4 9 " +"8 12 6 2 " +; + +char *VTK_VECTOR_TEXT_120 = (char *) "17 0.882498 " +"0.15697 -0.07143 0.88073 -0.07143 0.15473 -0.06571 0.31429 -0.07035 0.72571 -0.07140 " +"0.88250 -0.06571 0.52000 0.22529 0.52571 0.22529 0.60332 0.33429 0.43534 0.34000 " +"0.51429 0.45005 0.17188 0.71714 0.86812 0.71714 0.17412 0.72286 0.86588 0.72286 " +"0.32571 0.72395 0.71429 0.72395 15 1 5 4 2 6 9 8 6 7 3 2 0 4 8 7 6 2 3 4 " +"5 8 8 10 6 10 9 6 15 11 9 16 10 8 15 9 10 12 16 8 13 " +"11 15 16 12 14 " +; + +char *VTK_VECTOR_TEXT_121 = (char *) "16 0.888063 " +"0.34286 -0.39563 0.24000 -0.38043 0.41714 -0.37641 0.45714 -0.34956 0.50436 -0.29429 " +"0.32000 -0.26680 0.22286 -0.25766 0.36652 -0.25429 0.54371 -0.22000 0.41293 -0.21429 " +"0.46848 -0.07714 0.53714 0.09292 0.16998 0.72286 0.30857 0.71999 0.76000 0.72246 " +"0.88806 0.72286 14 2 7 0 0 5 1 5 0 7 " +"6 1 5 3 7 2 7 3 9 3 4 " +"9 9 8 10 9 4 8 10 11 12 " +"11 15 14 11 8 15 11 10 8 11 13 " +"12 " +; + +char *VTK_VECTOR_TEXT_122 = (char *) "17 0.872768 " +"0.17714 -0.07295 0.86857 -0.07186 0.17143 -0.06878 0.87277 -0.06571 0.17146 0.03714 " +"0.34212 0.03714 0.87277 0.03714 0.34132 0.04286 0.44000 0.04327 0.86857 0.04329 " +"0.20571 0.61689 0.67062 0.62000 0.84991 0.64286 0.20152 0.71714 0.84991 0.71714 " +"0.20571 0.72329 0.84571 0.72329 15 2 0 4 0 1 9 0 5 4 1 3 9 5 0 8 5 7 4 0 " +"9 8 3 6 9 12 14 11 11 14 16 11 16 10 12 11 7 11 4 7 10 " +"15 13 15 10 16 " +; + +char *VTK_VECTOR_TEXT_123 = (char *) "39 0.611429 " +"0.61143 -0.39454 0.46857 -0.38420 0.40000 -0.34154 0.61143 -0.27975 0.35748 -0.27143 " +"0.52000 -0.26992 0.47787 -0.23143 0.46748 -0.19143 0.34134 -0.18000 0.46395 0.04286 " +"0.33563 0.05429 0.45184 0.14571 0.32109 0.16286 0.29143 0.21832 0.42286 0.22716 " +"0.25143 0.24943 0.18857 0.26528 0.39429 0.26698 0.31413 0.32286 0.18857 0.38615 " +"0.25143 0.40073 0.41188 0.40286 0.29143 0.42775 0.43514 0.44286 0.32823 0.49429 " +"0.45866 0.52286 0.34134 0.60286 0.46705 0.80857 0.34478 0.84857 0.47748 0.87143 " +"0.35748 0.91143 0.50286 0.90821 0.50793 0.91143 0.50857 0.91188 0.61143 0.92814 " +"0.40571 0.99511 0.46857 1.03294 0.53143 1.04437 0.61143 1.04329 37 0 3 5 6 2 5 2 6 4 0 5 1 2 " +"1 5 4 7 8 7 4 6 8 9 10 10 11 12 9 8 7 11 10 9 12 " +"17 13 12 14 17 14 12 11 18 15 13 16 15 20 18 13 17 16 20 19 15 " +"18 20 21 22 18 22 21 24 22 20 18 24 25 26 23 24 21 25 24 23 26 " +"27 28 27 26 25 28 29 30 29 28 27 30 29 35 31 32 33 36 31 33 31 " +"36 29 36 33 37 34 38 37 35 29 36 34 37 33 " +; + +char *VTK_VECTOR_TEXT_124 = (char *) "4 0.388571 " +"0.28571 -0.39454 0.38857 -0.39563 0.28571 1.04329 0.38857 1.04437 2 3 2 0 3 0 1 " +; + +char *VTK_VECTOR_TEXT_125 = (char *) "35 0.606299 " +"0.17714 -0.39454 0.31429 -0.38613 0.39429 -0.33832 0.17714 -0.27975 0.27429 -0.26784 " +"0.43681 -0.26000 0.31070 -0.23714 0.44950 -0.19714 0.32723 -0.15714 0.45295 0.04857 " +"0.33295 0.11714 0.46857 0.16404 0.35387 0.19714 0.51429 0.23258 0.56000 0.25681 " +"0.39429 0.26403 0.60630 0.26571 0.47702 0.32857 0.41714 0.36742 0.60571 0.38615 " +"0.54857 0.39927 0.50171 0.43143 0.36086 0.43714 0.46748 0.50000 0.32991 0.56857 " +"0.45252 0.78571 0.32723 0.80286 0.31748 0.87143 0.29143 0.90893 0.43470 0.91714 " +"0.17714 0.92814 0.41629 0.95714 0.36571 1.01107 0.32000 1.03294 0.17714 1.04329 33 4 3 0 2 4 1 6 7 8 1 4 0 2 6 4 5 " +"6 2 6 5 7 8 9 10 9 8 7 10 11 12 15 13 17 11 10 9 12 " +"11 15 13 14 17 13 15 11 20 17 14 20 14 16 19 20 16 21 17 20 17 " +"21 18 22 23 24 22 18 21 23 22 21 25 26 24 25 24 23 29 27 26 29 " +"26 25 27 31 28 31 27 29 32 28 31 28 33 30 33 34 30 33 28 32 " +; + +char *VTK_VECTOR_TEXT_126 = (char *) "25 0.971429 " +"0.73714 0.34462 0.20759 0.35143 0.21143 0.34662 0.81143 0.34723 0.66857 0.35756 " +"0.86857 0.36135 0.25143 0.38115 0.90857 0.38086 0.52000 0.41580 0.32571 0.42723 " +"0.97140 0.43143 0.37143 0.43866 0.42286 0.44093 0.79429 0.49009 0.21028 0.50000 " +"0.72571 0.49681 0.86286 0.50930 0.25714 0.54115 0.92571 0.54759 0.32571 0.57470 " +"0.50286 0.57621 0.96571 0.58154 0.97143 0.58073 0.38857 0.58680 0.44000 0.58723 23 1 17 14 8 4 15 13 5 7 6 1 2 5 " +"13 3 1 6 17 3 13 0 16 10 18 15 4 0 13 7 16 15 0 13 8 " +"20 12 12 20 11 9 17 6 10 16 7 17 9 19 22 21 18 11 20 24 11 " +"19 9 20 8 15 11 24 23 22 18 10 11 23 19 " +; + + +// Construct object with no string set and backing enabled. +VTKViewer_VectorText::VTKViewer_VectorText() +{ + this->Text = NULL; + + this->Letters[33] = VTK_VECTOR_TEXT_33; + this->Letters[34] = VTK_VECTOR_TEXT_34; + this->Letters[35] = VTK_VECTOR_TEXT_35; + this->Letters[36] = VTK_VECTOR_TEXT_36; + this->Letters[37] = VTK_VECTOR_TEXT_37; + this->Letters[38] = VTK_VECTOR_TEXT_38; + this->Letters[39] = VTK_VECTOR_TEXT_39; + this->Letters[40] = VTK_VECTOR_TEXT_40; + this->Letters[41] = VTK_VECTOR_TEXT_41; + this->Letters[42] = VTK_VECTOR_TEXT_42; + this->Letters[43] = VTK_VECTOR_TEXT_43; + this->Letters[44] = VTK_VECTOR_TEXT_44; + this->Letters[45] = VTK_VECTOR_TEXT_45; + this->Letters[46] = VTK_VECTOR_TEXT_46; + this->Letters[47] = VTK_VECTOR_TEXT_47; + this->Letters[48] = VTK_VECTOR_TEXT_48; + this->Letters[49] = VTK_VECTOR_TEXT_49; + this->Letters[50] = VTK_VECTOR_TEXT_50; + this->Letters[51] = VTK_VECTOR_TEXT_51; + this->Letters[52] = VTK_VECTOR_TEXT_52; + this->Letters[53] = VTK_VECTOR_TEXT_53; + this->Letters[54] = VTK_VECTOR_TEXT_54; + this->Letters[55] = VTK_VECTOR_TEXT_55; + this->Letters[56] = VTK_VECTOR_TEXT_56; + this->Letters[57] = VTK_VECTOR_TEXT_57; + this->Letters[58] = VTK_VECTOR_TEXT_58; + this->Letters[59] = VTK_VECTOR_TEXT_59; + this->Letters[60] = VTK_VECTOR_TEXT_60; + this->Letters[61] = VTK_VECTOR_TEXT_61; + this->Letters[62] = VTK_VECTOR_TEXT_62; + this->Letters[63] = VTK_VECTOR_TEXT_63; + this->Letters[64] = VTK_VECTOR_TEXT_64; + this->Letters[65] = VTK_VECTOR_TEXT_65; + this->Letters[66] = VTK_VECTOR_TEXT_66; + this->Letters[67] = VTK_VECTOR_TEXT_67; + this->Letters[68] = VTK_VECTOR_TEXT_68; + this->Letters[69] = VTK_VECTOR_TEXT_69; + this->Letters[70] = VTK_VECTOR_TEXT_70; + this->Letters[71] = VTK_VECTOR_TEXT_71; + this->Letters[72] = VTK_VECTOR_TEXT_72; + this->Letters[73] = VTK_VECTOR_TEXT_73; + this->Letters[74] = VTK_VECTOR_TEXT_74; + this->Letters[75] = VTK_VECTOR_TEXT_75; + this->Letters[76] = VTK_VECTOR_TEXT_76; + this->Letters[77] = VTK_VECTOR_TEXT_77; + this->Letters[78] = VTK_VECTOR_TEXT_78; + this->Letters[79] = VTK_VECTOR_TEXT_79; + this->Letters[80] = VTK_VECTOR_TEXT_80; + this->Letters[81] = VTK_VECTOR_TEXT_81; + this->Letters[82] = VTK_VECTOR_TEXT_82; + this->Letters[83] = VTK_VECTOR_TEXT_83; + this->Letters[84] = VTK_VECTOR_TEXT_84; + this->Letters[85] = VTK_VECTOR_TEXT_85; + this->Letters[86] = VTK_VECTOR_TEXT_86; + this->Letters[87] = VTK_VECTOR_TEXT_87; + this->Letters[88] = VTK_VECTOR_TEXT_88; + this->Letters[89] = VTK_VECTOR_TEXT_89; + this->Letters[90] = VTK_VECTOR_TEXT_90; + this->Letters[91] = VTK_VECTOR_TEXT_91; + this->Letters[92] = VTK_VECTOR_TEXT_92; + this->Letters[93] = VTK_VECTOR_TEXT_93; + this->Letters[94] = VTK_VECTOR_TEXT_94; + this->Letters[95] = VTK_VECTOR_TEXT_95; + this->Letters[96] = VTK_VECTOR_TEXT_96; + this->Letters[97] = VTK_VECTOR_TEXT_97; + this->Letters[98] = VTK_VECTOR_TEXT_98; + this->Letters[99] = VTK_VECTOR_TEXT_99; + this->Letters[100] = VTK_VECTOR_TEXT_100; + this->Letters[101] = VTK_VECTOR_TEXT_101; + this->Letters[102] = VTK_VECTOR_TEXT_102; + this->Letters[103] = VTK_VECTOR_TEXT_103; + this->Letters[104] = VTK_VECTOR_TEXT_104; + this->Letters[105] = VTK_VECTOR_TEXT_105; + this->Letters[106] = VTK_VECTOR_TEXT_106; + this->Letters[107] = VTK_VECTOR_TEXT_107; + this->Letters[108] = VTK_VECTOR_TEXT_108; + this->Letters[109] = VTK_VECTOR_TEXT_109; + this->Letters[110] = VTK_VECTOR_TEXT_110; + this->Letters[111] = VTK_VECTOR_TEXT_111; + this->Letters[112] = VTK_VECTOR_TEXT_112; + this->Letters[113] = VTK_VECTOR_TEXT_113; + this->Letters[114] = VTK_VECTOR_TEXT_114; + this->Letters[115] = VTK_VECTOR_TEXT_115; + this->Letters[116] = VTK_VECTOR_TEXT_116; + this->Letters[117] = VTK_VECTOR_TEXT_117; + this->Letters[118] = VTK_VECTOR_TEXT_118; + this->Letters[119] = VTK_VECTOR_TEXT_119; + this->Letters[120] = VTK_VECTOR_TEXT_120; + this->Letters[121] = VTK_VECTOR_TEXT_121; + this->Letters[122] = VTK_VECTOR_TEXT_122; + this->Letters[123] = VTK_VECTOR_TEXT_123; + this->Letters[124] = VTK_VECTOR_TEXT_124; + this->Letters[125] = VTK_VECTOR_TEXT_125; + this->Letters[126] = VTK_VECTOR_TEXT_126; + +} + +void VTKViewer_VectorText::Execute() +{ + vtkPolyData *output = this->GetOutput(); + vtkPoints *newPoints; + vtkCellArray *newPolys; + int ptOffset = 0; + int aPoint, i; + int pos = 0; + float xpos = 0; + float ypos = 0; + int ptCount, triCount; + char *aLetter; + float width; + float ftmp[3]; + + if (this->Text == NULL) + { + vtkErrorMacro (<< "Text is not set!"); + return; + } + + // Set things up; allocate memory + newPoints = vtkPoints::New(); + newPolys = vtkCellArray::New(); + ftmp[2] = 0.0; + + // Create Text + while (this->Text[pos]) + { + switch (this->Text[pos]) + { + case 32: + xpos += 0.4; + break; + + case 10: + ypos -= 1.4; + xpos = 0; + break; + + default: + // if we have a valid character + if ((this->Text[pos] > 32)&&(this->Text[pos] < 127)) + { + // add the result to our output + aLetter = this->Letters[this->Text[pos]]; + ptCount = strtol(aLetter,&aLetter,10); + width = strtod(aLetter,&aLetter); + for (i = 0; i < ptCount; i++) + { + ftmp[0] = strtod(aLetter,&aLetter); + ftmp[1] = strtod(aLetter,&aLetter); + ftmp[0] += xpos; + ftmp[1] += ypos; + newPoints->InsertNextPoint(ftmp); + } + triCount = strtol(aLetter,&aLetter,10); + for (i = 0; i < triCount; i++) + { + newPolys->InsertNextCell(3); + aPoint = strtol(aLetter,&aLetter,10); + newPolys->InsertCellPoint(aPoint + ptOffset); + aPoint = strtol(aLetter,&aLetter,10); + newPolys->InsertCellPoint(aPoint + ptOffset); + aPoint = strtol(aLetter,&aLetter,10); + newPolys->InsertCellPoint(aPoint + ptOffset); + } + ptOffset += ptCount; + xpos += width; + } + break; + } + pos++; + } + + // + // Update ourselves and release memory + // + output->SetPoints(newPoints); + newPoints->Delete(); + + output->SetPolys(newPolys); + newPolys->Delete(); +} + +void VTKViewer_VectorText::PrintSelf(ostream& os, vtkIndent indent) +{ + this->Superclass::PrintSelf(os,indent); + + os << indent << "Text: " << (this->Text ? this->Text : "(none)") << "\n"; +} + +VTKViewer_VectorText::~VTKViewer_VectorText() +{ + if (this->Text) + { + delete [] this->Text; + } +} diff --git a/src/VTKViewer/VTKViewer_VectorText.h b/src/VTKViewer/VTKViewer_VectorText.h new file mode 100644 index 000000000..660257a35 --- /dev/null +++ b/src/VTKViewer/VTKViewer_VectorText.h @@ -0,0 +1,67 @@ +/*========================================================================= + + Program: Visualization Toolkit + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + + Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen + All rights reserved. + See Copyright.txt or http://www.kitware.com/Copyright.htm for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notice for more information. + +=========================================================================*/ +// .NAME vtkVectorText - create polygonal text +// .SECTION Description + +// vtkVectorText generates vtkPolyData from an input text string. Besides the +// ASCII alphanumeric characters a-z, A-Z, 0-9, vtkVectorText also supports +// ASCII punctuation marks. (The supported ASCII character set are the codes +// (33-126) inclusive.) The only control character supported is the line feed +// character "\n", which advances to a new line. +// +// To use thie class, you normally couple it with a vtkPolyDataMapper and a +// vtkActor. In this case you would use the vtkActor's transformation methods +// to position, orient, and scale the text. You may also wish to use a +// vtkFollower to orient the text so that it always faces the camera. + +// .SECTION See Also +// vtkTextMapper vtkCaptionActor2D + +// VTKViewer_VectorText.h is a copy of vtkVectorText.h file. +// Purpose of copying: to remove linking to libHybrid.so VTK library + +#ifndef __VTKViewer_VectorText_h +#define __VTKViewer_VectorText_h + +#include "vtkPolyDataSource.h" + +class VTKViewer_VectorText : public vtkPolyDataSource +{ +public: + static VTKViewer_VectorText *New(); + vtkTypeRevisionMacro(VTKViewer_VectorText,vtkPolyDataSource); + void PrintSelf(ostream& os, vtkIndent indent); + + // Description: + // Set/Get the text to be drawn. + vtkSetStringMacro(Text); + vtkGetStringMacro(Text); + +protected: + VTKViewer_VectorText(); + ~VTKViewer_VectorText(); + + void Execute(); + char *Text; + char *Letters[127]; + +}; + +#endif + + diff --git a/src/VTKViewer/VTKViewer_ViewFrame.cxx b/src/VTKViewer/VTKViewer_ViewFrame.cxx index ae35016b9..b54107cd5 100644 --- a/src/VTKViewer/VTKViewer_ViewFrame.cxx +++ b/src/VTKViewer/VTKViewer_ViewFrame.cxx @@ -26,10 +26,13 @@ // Module : SALOME // $Header$ -using namespace std; #include "VTKViewer_ViewFrame.h" #include "VTKViewer_RenderWindow.h" -//#include "VTKViewer_InteractorStyleSALOME.h" + +#include "SALOME_Transform.h" +#include "SALOME_TransformFilter.h" +#include "SALOME_PassThroughFilter.h" +#include "SALOME_GeometryFilter.h" #include "QAD_Settings.h" #include "QAD_Config.h" @@ -38,6 +41,7 @@ using namespace std; #include "SALOME_Selection.h" #include "SALOME_InteractiveObject.hxx" #include "VTKViewer_InteractorStyleSALOME.h" +#include "VTKViewer_VectorText.h" #include "utilities.h" @@ -50,21 +54,14 @@ using namespace std; // VTK Includes #include #include -#include #include #include -#include #include #include -#include -#include -#include -#include -#include -#include #include +using namespace std; /*! Constructor */ @@ -81,13 +78,13 @@ VTKViewer_ViewFrame::VTKViewer_ViewFrame(QWidget* parent, const char* name) vtkFollower* CreateTextActor(char *text, float aSize) { - vtkVectorText* aTxt = vtkVectorText::New(); + VTKViewer_VectorText* aTxt = VTKViewer_VectorText::New(); aTxt->SetText(text); vtkPolyDataMapper* textMapper = vtkPolyDataMapper::New(); textMapper->SetInput(aTxt->GetOutput()); vtkFollower* textActor = vtkFollower::New(); textActor->SetMapper(textMapper); - float aScale = 6 * aSize/100; + float aScale = 17 * aSize/100; textActor->SetScale(aScale, aScale, aScale); return textActor; } @@ -258,6 +255,7 @@ void VTKViewer_ViewFrame::InitialSetup() { m_Renderer->GetActiveCamera()->ParallelProjectionOn(); m_Renderer->LightFollowCameraOn(); + m_Renderer->TwoSidedLightingOn(); // Set BackgroundColor QString BgrColorRed = QAD_CONFIG->getSetting("VTKViewer:BackgroundColorRed"); @@ -426,7 +424,38 @@ void VTKViewer_ViewFrame::onViewReset() camera->SetFocalPoint(0,0,0); camera->SetViewUp(0,0,1); m_Renderer->ResetCamera(); + + double aOldScale = camera->GetParallelScale(); camera->SetParallelScale(500); + double aNewScale = camera->GetParallelScale(); + + //for controlling labels scale after reset + float dim; + QString Size = QAD_CONFIG->getSetting("Viewer:TrihedronSize"); + if( Size.isEmpty() ){ + dim = 100; + } else { + dim = Size.toFloat(); + } + float aScale = 17 * dim/100; + + m_Triedron->InitTraversal(); + vtkActor *ac = m_Triedron->GetNextActor(); + bool IsConeActor = true; + while(!(ac==NULL)) { + if(ac->IsA("vtkFollower")) { + ac->SetScale(aScale, aScale, aScale); + IsConeActor = true; + } + else { + if (IsConeActor) { + //coneActor is the first in the list (see m_Triedron->AddItem(...) in VTKViewer_ViewFrame::AddVector(...)) + IsConeActor = false; + } + } + ac = m_Triedron->GetNextActor(); + } + m_Renderer->ResetCameraClippingRange(); m_RW->update(); } @@ -572,7 +601,7 @@ static void ResetCameraClippingRange(vtkRenderer* theRenderer, float bounds[6] ) anActiveCamera->SetClippingRange( range ); } -static void ResetCamera(vtkRenderer* theRenderer){ +static void ResetCamera(vtkRenderer* theRenderer, vtkActorCollection* theTriedron, VTKViewer_RenderWindowInteractor* theRWInteractor){ //see vtkRenderer::ResetCamera(float bounds[6]) method float bounds[6]; if(!theRenderer) return; @@ -582,6 +611,7 @@ static void ResetCamera(vtkRenderer* theRenderer){ float distance; float width; double vn[3], *vup; + int* winsize; if ( theRenderer->GetActiveCamera() != NULL ) { @@ -601,6 +631,10 @@ static void ResetCamera(vtkRenderer* theRenderer){ (bounds[5]-bounds[4])*(bounds[5]-bounds[4])); double ang = theRenderer->GetActiveCamera()->GetViewAngle(); distance = 2.0*width/tan(ang*vtkMath::Pi()/360.0); + + // find size of the window + winsize = theRenderer->GetSize(); + // check view-up vector against view plane normal vup = theRenderer->GetActiveCamera()->GetViewUp(); if ( fabs(vtkMath::Dot(vup,vn)) > 0.999 ) @@ -611,11 +645,25 @@ static void ResetCamera(vtkRenderer* theRenderer){ // update the camera theRenderer->GetActiveCamera()->SetFocalPoint(center[0],center[1],center[2]); - theRenderer->GetActiveCamera()->SetPosition(center[0]+distance*vn[0], + theRenderer->GetActiveCamera()->SetPosition(center[0]+distance*vn[0], center[1]+distance*vn[1], center[2]+distance*vn[2]); // setup default parallel scale + double aOldScale = theRenderer->GetActiveCamera()->GetParallelScale(); + + if(winsize[0]GetActiveCamera()->SetParallelScale(width/2.0); + double aNewScale = theRenderer->GetActiveCamera()->GetParallelScale(); + + // for controlling label size + VTKViewer_InteractorStyleSALOME* Style = 0; + if (theRWInteractor->GetInteractorStyle()->IsA("VTKViewer_InteractorStyleSALOME")) { + Style = VTKViewer_InteractorStyleSALOME::SafeDownCast(theRWInteractor->GetInteractorStyle()); + Style->ControlLblSize(aOldScale,aNewScale); + } + //workaround on VTK //theRenderer->ResetCameraClippingRange(bounds); ResetCameraClippingRange(theRenderer,bounds); @@ -634,8 +682,9 @@ void VTKViewer_ViewFrame::onViewFitAll() TriedronWasVisible = true; } bool hasVisibleActors = m_Renderer->VisibleActorCount() > 0; - if ( hasVisibleActors ) // if there are visible actors, not to take into account Trihedron - ResetCamera(m_Renderer); + if ( hasVisibleActors ) { // if there are visible actors, not to take into account Trihedron + ResetCamera(m_Renderer,m_Triedron,m_RWInteractor); + } if(TriedronWasVisible) { m_Triedron->InitTraversal(); vtkActor *ac = m_Triedron->GetNextActor(); @@ -643,8 +692,9 @@ void VTKViewer_ViewFrame::onViewFitAll() ac->VisibilityOn(); ac = m_Triedron->GetNextActor(); } - if ( !hasVisibleActors ) // if there are NO visible actors, fit view to see only Trihedron - ResetCamera(m_Renderer); + if ( !hasVisibleActors ) { // if there are NO visible actors, fit view to see only Trihedron + ResetCamera(m_Renderer,m_Triedron,m_RWInteractor); + } } //m_Renderer->ResetCameraClippingRange(); m_RW->update(); @@ -930,6 +980,11 @@ void VTKViewer_ViewFrame::GetScale(double theScale[3]){ void VTKViewer_ViewFrame::SetScale(double theScale[3]){ m_Transform->SetScale(theScale[0], theScale[1], theScale[2]); m_Transform->Modified(); + vtkActorCollection* theActors = m_Renderer->GetActors(); + theActors->InitTraversal(); + vtkActor *anActor; + while(anActor = theActors->GetNextActor()) + anActor->GetMapper()->Update(); Repaint(); } -- 2.39.2