+++ /dev/null
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-<HEAD>
- <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
- <TITLE></TITLE>
- <META NAME="GENERATOR" CONTENT="OpenOffice.org 2.2 (Linux)">
- <META NAME="CREATED" CONTENT="20100112;18335600">
- <META NAME="CHANGED" CONTENT="20100126;17235200">
- <STYLE TYPE="text/css">
- <!--
- H2 { margin-top: 0.33in; margin-bottom: 0.08in; color: #ff0000; text-align: left }
- H2.western { font-family: "Liberation Serif", serif; font-size: 14pt }
- H2.cjk { font-family: "DejaVu Sans"; font-size: 14pt }
- H2.ctl { font-family: "DejaVu Sans"; font-size: 14pt }
- -->
- </STYLE>
-</HEAD>
-<BODY LANG="en-US" DIR="LTR">
-<P ALIGN=CENTER><FONT SIZE=6><B>PARAVIS development</B></FONT></P>
-<P ALIGN=CENTER><FONT SIZE=6><B>General architecture of PARAVIEW
-extractor</B></FONT></P>
-<H1 STYLE="page-break-before: always"><A NAME="1.Introduction|outline"></A>
-<A HREF="#1.Introduction|outline"><FONT FACE="Liberation Serif, serif"><FONT SIZE=4 STYLE="font-size: 15pt"><B>1.Introduction</B></FONT></FONT></A></H1>
-<P><A HREF="#2.General architecture|outline"><FONT FACE="Liberation Serif, serif"><FONT SIZE=4 STYLE="font-size: 15pt"><B>2.General
-architecture</B></FONT></FONT></A></P>
-<P><A HREF="#3.Automatic generation of container classes|outline"><FONT FACE="Liberation Serif, serif"><FONT SIZE=4 STYLE="font-size: 15pt"><B>3.Automatic
-generation of container classes</B></FONT></FONT></A></P>
-<H1><A NAME="3.1. Source files related to PARAVIS server definition|outline"></A>
-<A HREF="#3.1. Source files related to PARAVIS server definition|outline"><FONT FACE="Liberation Serif, serif"><FONT SIZE=4 STYLE="font-size: 15pt"><B>3.1.
-Source files related to PARAVIS server definition</B></FONT></FONT></A></H1>
-<P><A HREF="#3.2. Process of generation|outline"><FONT FACE="Liberation Serif, serif"><FONT SIZE=4 STYLE="font-size: 15pt"><B>3.2.
-Process of generation</B></FONT></FONT></A></P>
-<P><A HREF="#3.3. Definition of IDL interfaces|outline"><FONT FACE="Liberation Serif, serif"><FONT SIZE=4 STYLE="font-size: 15pt"><B>3.3.
-Definition of IDL interfaces</B></FONT></FONT></A></P>
-<P><A HREF="#3.4. Base interface and its implementation|outline"><FONT FACE="Liberation Serif, serif"><FONT SIZE=4 STYLE="font-size: 15pt"><B>3.4.
-Base interface and its implementation</B></FONT></FONT></A></P>
-<H1><A NAME="3.5. GUI events queue|outline"></A><A HREF="#3.5. GUI events queue|outline"><FONT FACE="Liberation Serif, serif"><FONT SIZE=4 STYLE="font-size: 15pt"><B>3.5.
-GUI events queue</B></FONT></FONT></A></H1>
-<P><A HREF="#3.6. Overloaded methods definition|outline"><FONT FACE="Liberation Serif, serif"><FONT SIZE=4 STYLE="font-size: 15pt"><B>3.6.
-Overloaded methods definition</B></FONT></FONT></A></P>
-<P><A HREF="#3.7. Creation of objects in Python|outline"><FONT FACE="Liberation Serif, serif"><FONT SIZE=4 STYLE="font-size: 15pt"><B>3.7.
-Creation of objects in Python</B></FONT></FONT></A></P>
-<P><A HREF="#3.8. servermanager.py and simple.py|outline"><FONT FACE="Liberation Serif, serif"><FONT SIZE=4 STYLE="font-size: 15pt"><B>3.8.
-servermanager.py and simple.py</B></FONT></FONT></A></P>
-<P><A HREF="#4.Trace functionality|outline"><FONT FACE="Liberation Serif, serif"><FONT SIZE=4 STYLE="font-size: 15pt"><B>4.Trace
-functionality</B></FONT></FONT></A></P>
-<P><BR><BR>
-</P>
-<P><BR><BR>
-</P>
-<H1>Introduction</H1>
-<P>This document describes development of ParaView server manager API
-for PARAVIS module. The new API must provide following features:</P>
-<OL>
- <LI><P>Define interaction between two different processes: Python
- console and PARAVIS GUI defined in SALOME desktop.</P>
- <LI><P>Make possible to manage PARAVIS GUI and ParaView server data
- from Python scripts in synchronized mode.</P>
- <LI><P>The new API must be similar as much as possible to the API
- provided by servermanager.py module from ParaView in order to make
- possible launching the same scripts as in ParaView as in PARAVIS
- without modifications.</P>
-</OL>
-<P>General architecture and development features of this task are
-described below.</P>
-<H1><A NAME="2.General architecture|outline"></A>General architecture</H1>
-<P>Main components of PARAVIS architecture and their relations can be
-represented as on the following picture:</P>
-<P><IMG SRC="GeneralArchitecture_html_m4ed0a034.gif" NAME="graphics1" ALIGN=LEFT WIDTH=100% BORDER=0><BR CLEAR=LEFT><BR><BR>
-</P>
-<P>The usual way to implement SALOME module is to develop a
-Data/Algorithms engine unit as a CORBA server and module GUI as a
-CORBA client. But in case if we need to use GUI and Algorithms from
-Python console (what usually is an external process) in synchronized
-mode then we have to implement them together as a CORBA server within
-a one process.</P>
-<P>On the diagram above following component are shown:
-</P>
-<UL>
- <LI><P>PARAVIS module GUI which is responsible for creation of
- necessary widgets within SALOME Desktop, initialization of ParaView
- client objects, connection of ParaView GUI objects to created
- widgets.</P>
- <LI><P>ParaView client code is a set of ParaView objects what
- provides ParaView GUI.</P>
- <LI><P>ParaView server for PARAVIS module can be used as built-in
- (by default) as remote. For connection to remote server it is
- necessary to use corresponded menu commands connect/disconnect as it
- is used in standard ParaView GUI client.</P>
- <LI><P>ParaView server manager API is a set of classes provided by
- ParaView for definition of API for Python interpreter.</P>
- <LI><P>Container objects - implementation of CORBA servants for
- wrapping server manager object instances and redirection of CORBA
- interface calls to corresponded server manager object.</P>
-</UL>
-<H1><A NAME="3.Automatic generation of container classes|outline"></A>
-Automatic generation of container classes</H1>
-<H2 CLASS="western">Source files related to PARAVIS server definition</H2>
-<P STYLE="margin-bottom: 0in">In PARAVIS_SRC/idl/ directory:</P>
-<OL>
- <LI><P><B>PARAVIS_Gen.idl</B> – defines main interfaces to PARAVIS
- module.</P>
- <LI><P><B>PARAVIS_Gen_Types.idl</B> – defines data collection
- types.</P>
- <LI><P><B>hints_paravis</B> – defines sizes of arrays missed in
- standard VTK hints file. If some functions of VTK classes which
- return array data are not extracted then it is necessary to edit
- this file in order to describe missed functions.</P>
- <LI><P><B>pythonIDL.py</B> – command file which is used for
- extraction of IDL interfaces to Python files. This is modification
- of similar file from omniidl product what takes into account
- overloading of methods in class.</P>
- <LI><P><B>vtkWrapIDL.c</B> – source file for building extraction
- executables: <SPAN STYLE="font-weight: medium">vtkWrapIDL,
- vtkWrapIDL_CC, vtkWrapIDL_HH.</SPAN></P>
-</OL>
-<P STYLE="font-weight: medium">In PARAVIS_SRC/src/PVGUI directory:</P>
-<OL>
- <LI><P><B>PARAVIS_Gen_i.cc</B> <SPAN STYLE="font-weight: medium">and
- </SPAN><B>PARAVIS_Gen_i.hh</B> – <SPAN STYLE="font-weight: medium">implementation
- of PARAVIS_Gen interface.</SPAN></P>
- <LI><P><B>PV_Events.h</B> – <SPAN STYLE="font-weight: medium">defines
- events for synchronization of CORBA client calls with main GUI
- events queue.</SPAN></P>
- <LI><P STYLE="font-weight: medium">Other files are related to GUI
- definition and auxiliary tools.</P>
-</OL>
-<P STYLE="font-weight: medium">In <SPAN STYLE="font-weight: medium">PARAVIS_SRC/src/PV_SWIG
-directory:</SPAN></P>
-<OL>
- <LI><P STYLE="font-weight: medium"><B>paravis.py</B> – <SPAN STYLE="font-weight: medium">general
- Python module for PARAVIS. It installs connection to PARAVIS CORBA
- server, defines a variable </SPAN><B>myParavis</B> <SPAN STYLE="font-weight: medium">in
- order to provide acces to </SPAN><B>PARAVIS_Gen</B> <SPAN STYLE="font-weight: medium">functions,
- creates a set of empty constructors for all extracted ParaView
- classes.</SPAN></P>
- <LI><P STYLE="font-weight: medium"><B>paravisSM.py</B> – <SPAN STYLE="font-weight: medium">modified
- copy of servermanager.py module from ParaView. Modification done
- according to conventions defined by paravis.py module and features
- of working with CORBA server.</SPAN></P>
- <LI><P STYLE="font-weight: medium"><B>pvsimple.py</B> – <SPAN STYLE="font-weight: medium">modified
- copy of simple.py module from ParaView. Modifications done because
- of the same reasons.</SPAN></P>
-</OL>
-<H2 CLASS="western">Process of generation</H2>
-<P>CORBA servant classes for wrapping of server manager API classes
-is generated automatically. The process of building PARAVIS module
-with generation of wrappers is performed in the following way:</P>
-<OL>
- <LI><P>Execute <B>cmake</B> command from a build directory.
- During performing of this command it performs some standard steps
- of SALOME module building and calls a Python command file
- <B>getwrapclasses.py</B> is called. This procedure creates a list
- of ParaView and VTK class names what has to be extracted.
- This list includes all <B>vtkSM*</B> classes and <B>vtk*</B> classes
- what are referred by previous group of classes. Results
- of build_configure step are:</P>
- <OL TYPE=a>
- <LI><P>idl/wrap.cmake – defines variables what lists all interfaces
- (*.idl and *.cc files) what will be generated.</P>
- <LI><P>idl/vtkWrapIDL.c – defines a list of extracted classes in
- form of char* array.</P>
- <LI><P>src/PVGUI/PARAVIS_CreateClass.cxx is a C++ file what
- contains a one function CreateInstance. This function creates a
- servant class which corresponds to a given name of original
- ParaView/VTK class.</P>
- </OL>
- <LI><P>Call <B>make</B> command in build directory. This command
- does following steps related to automatic generation:</P>
- <OL TYPE=a>
- <LI><P>Builds <B>vtkWrapIDL</B> executable in <B>idl</B> directory
- what is responsible for generation of IDL files using names of
- classes to wrap. This executable analyzes related header files for
- classes from vtkWrapIDL.h and defines corresponded IDL file.</P>
- <LI><P>Defines all IDL files with help of this executable and
- launches standard SALOME compilation for <B>idl</B> directory.</P>
- <LI><P>Compiles <B>vtkWrapIDL_CC </B><SPAN STYLE="font-weight: medium">and
- </SPAN><B>vtkWrapIDL_HH</B> <SPAN STYLE="font-weight: medium">executables
- in src/PVGUI directory what are responsible for generation of
- header files (*.hh) and implementation files (*.cc) for servants
- classes.</SPAN></P>
- <LI><P STYLE="font-weight: medium">Generation of servant classes
- with help of these executables and building the library.</P>
- </OL>
- <LI><P><SPAN STYLE="font-weight: medium">Call </SPAN><B>make install</B>
- <SPAN STYLE="font-weight: medium">command in build directory. This
- will finalize building of libraries and generate Python files for
- IDL interfaces.</SPAN></P>
-</OL>
-<P STYLE="font-weight: medium"><SPAN STYLE="background: transparent">Note:</SPAN></P>
-<P STYLE="font-weight: medium"><SPAN STYLE="background: transparent">make
-command can not be used with -j key because extraction of parent
-classes should be done before extraction of child classes.</SPAN></P>
-<H2 CLASS="western">Definition of IDL interfaces</H2>
-<P>Process of IDL interfaces generation has to respect following
-restrictions of IDL format:</P>
-<OL>
- <LI><P>IDL does not support several functions with the same name
- within a one interface definition. Even they have different
- parameters (overloading of methods as in C++). Also this is not
- supported between parent and its ancestors.</P>
- <LI><P>In context of PARAVIS it is difficult to extract methods what
- accept or return “void*” data type. In IDL it can be described
- as “ANY” data type, but in context of ParaView it is not clear
- to what type it has to be casted.</P>
-</OL>
-<P>IDL interfaces extracted following to the next principals:</P>
-<OL>
- <LI><P>All interfaces are inherited from a common parent interface
- Base.
- </P>
- <LI><P>Each interface includes all extracted methods of its
- prototype class including all its parents.</P>
- <LI><P>If the prototype class contains overloaded methods (methods
- with the same name) then each appearance of this method name is
- supplied with index.</P>
- <LI><P>If prototype class contains methods which return or accept
- void* then these methods are ignored.</P>
- <LI><P>If prototype class contains methods which return array (int*,
- double*, ...) which size is not defined in “hints” or
- “hints_paravis” files then these methods are ignored.</P>
- <LI><P><SPAN STYLE="background: transparent">If prototype class
- contains methods which get a pointer to function then these methods
- are ignored.</SPAN></P>
- <LI><P>If a method of prototype class returns/accepts a pointer on
- ParaView/VTK class instance then interface will return/accept Base
- interface.</P>
-</OL>
-<H2 CLASS="western">Base interface and its implementation</H2>
-<P>Base interface is defined in order to satisfy following points:</P>
-<OL>
- <LI><P>Sometimes we need to have a possibility to use a servant as a
- pointer on a common interface.</P>
- <LI><P>We need to have possibility to define a common auxiliary
- methods for all generated interfaces which out of ParaView/VTK
- definitions.</P>
- <LI><P>We need to have a base implementation for all servant
- classes.</P>
-</OL>
-<P>Currently Base class implements smart pointer on a vtkObjectBase
-instance and several methods to Get/Set this pointer. By default each
-ancestor class initializes this pointer with help of New() method.
-This useful for classes what contain static methods. But after this
-pointer can be reinitialized from outside what is used when we need
-to have access to certain instance.</P>
-<P>Also Base interface introduces a method IsSame(Base theOther). We
-need this method when it is necessary to compare two ParaView objects
-in Python process. In fact if we will apply standard operation “==”
-then we will compare two wrapper instances instead of ParaView
-objects instances. So, method IsSame(Base theOther) checks if two
-wrappers refer to the same ParaView instance or not.</P>
-<H2 CLASS="western">GUI events queue</H2>
-<P>Some calls of server manager API functions cause a modification of
-GUI state: creation of new widgets, update of widgets state,
-visualization of presentable objects in viewers. In our case we have
-two different processes: Python console and PARAVIS GUI. At the same
-moment the Python console “manages” PARAVIS GUI with help of
-server manager API functions calls. So, for correct performance of
-Python scripts the calls of Python commands have to be synchronized
-with PARAVIS GUI events queue.</P>
-<P>For this purposes all calls to server manager API from servant are
-additionally wrapped by event classes. Therefore implementation of
-servants methods accords to following general template:</P>
-<OL>
- <LI><P>Get an encapsulated pointer on VTK object instance.</P>
- <LI><P>Create a special event instance for target function call.</P>
- <LI><P>Launch event and wait while it returns.</P>
- <LI><P>Get result from event (if result is supposed).</P>
- <LI><P>Return this result as result of servant method.</P>
-</OL>
-<P>For example:</P>
-<P>Class vtkSMProxyManager has a method GetProxy. This method
-implemented in corresponded servant class as following:</P>
-<TABLE WIDTH=100% BORDER=1 BORDERCOLOR="#000000" CELLPADDING=3 CELLSPACING=0>
- <COL WIDTH=12*>
- <COL WIDTH=164*>
- <COL WIDTH=80*>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#000080">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>#</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#000080">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Code</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#000080">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Remarks</I></FONT></FONT></FONT></P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>1</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>//C++:
- vtkSMProxy *GetProxy (const char *groupname, const char *name);</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>2</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>struct
- CreateEventName(GetProxy_0): public SALOME_Event</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Generation
- of unique event class name with help of a special macros</I></FONT></FONT></FONT></P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>3</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>{</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>4</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>typedef
- ::vtkSMProxy* TResult;</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>5</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>TResult
- myResult;</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Definition
- of the return type</I></FONT></FONT></FONT></P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>6</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>typedef
- ::vtkSMProxyManager* TObj;</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>7</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>TObj
- myObj;</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Definition
- of parameters</I></FONT></FONT></FONT></P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>8</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>typedef
- char* TParam0;</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>9</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>TParam0
- myParam0;</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>10</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>typedef
- char* TParam1;</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>11</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>TParam1
- myParam1;</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>12</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>13</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>CreateEventName(GetProxy_0)(TObj
- theObj, TParam0 theParam0, TParam1 theParam1):</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Constructor
- of event. Defines object instance and necessary parameters</I></FONT></FONT></FONT></P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>14</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>myObj(theObj),
- myParam0(theParam0), myParam1(theParam1)</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>15</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>{
- }</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>16</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>17</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>virtual
- void Execute()</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Execution
- method.</I></FONT></FONT></FONT></P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>18</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>{</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>19</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>myResult
- = myObj->GetProxy(myParam0, myParam1);</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Call
- of target method</I></FONT></FONT></FONT></P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>20</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>}</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>21</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>};</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>22</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>//</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>23</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>PARAVIS_Base_ptr
- vtkSMProxyManager_i::GetProxy_0 (const char *temp0, const char
- *temp1) {</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Implementation
- of servant method</I></FONT></FONT></FONT></P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>24</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>try
- {</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>25</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>char
- *c_temp0 = CORBA::string_dup(temp0);</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Getting
- parameters</I></FONT></FONT></FONT></P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>26</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>char
- *c_temp1 = CORBA::string_dup(temp1);</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>27</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>::vtkSMProxy*
- avtkSMProxy = (getVTKObject() != NULL) ? ProcessEvent(new
- CreateEventName(GetProxy_0)((::vtkSMProxyManager*)getVTKObject(),
- c_temp0 , c_temp1)):NULL;</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>If
- wrapped object is defined then create event and launch it. Finally
- it will return result.</I></FONT></FONT></FONT></P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>28</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>29</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>if(avtkSMProxy
- == NULL) {</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>30</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>return
- PARAVIS::vtkSMProxy::_nil();</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>31</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>}</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>32</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>PARAVIS_Base_i*
- aPtr = ::CreateInstance(<FONT COLOR="#000000"><SPAN STYLE="text-decoration: none"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><SPAN STYLE="font-weight: medium">avtkSMProxy</SPAN></FONT></FONT></SPAN></FONT>,
- avtkSMProxy->GetClassName());</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Create
- a wrapper (servant) class according to class name of result object</I></FONT></FONT></FONT></P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>33</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>aPtr->Init(avtkSMProxy);</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Initialize
- the internal pointer of wrapper class by result</I></FONT></FONT></FONT></P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>34</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>return
- aPtr->_this();</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Return
- wrapper instance as result</I></FONT></FONT></FONT></P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>35</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>}
- catch(...) {</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>36</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>MESSAGE("GetProxy
- - Unknown exception was occurred!!!");</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>37</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>return
- PARAVIS::vtkSMProxy::_nil();</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>38</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#ffffff">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>}</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=5% BGCOLOR="#4d4d4d">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#ffffff"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>39</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=64% BGCOLOR="#cccccc">
- <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>}</I></FONT></FONT></FONT></P>
- </TD>
- <TD WIDTH=31% BGCOLOR="#cccccc">
- <P ALIGN=LEFT><BR>
- </P>
- </TD>
- </TR>
-</TABLE>
-<P STYLE="margin-bottom: 0in"><BR>
-</P>
-<H2 CLASS="western">Overloaded methods definition</H2>
-<P>Classes of ParaView server manager API have overloaded methods. As
-it is mentioned above description of IDL interface prohibits using of
-the same name for various methods even they have different
-parameters. To avoid this limitation we have to add index to name in
-each appearance of overloaded method. But at Python script level it
-is necessary to avoid using of function names with indexes. It is
-necessary to provide possibility to use methods as they was defined
-in API of corresponded class.</P>
-<P>For tis purposes we redefined standard IDL to Python wrapping in
-order to add a function which has a name of overloaded method and
-accepts any parameters. This function analyzes input parameters and
-selects what function (with which index) it has to be called.</P>
-<P>For example:</P>
-<P>vtkObject class contains definition of overloaded functions:</P>
-<P STYLE="margin-bottom: 0in"><FONT SIZE=2><I>void RemoveObservers
-(unsigned long event);</I></FONT></P>
-<P STYLE="margin-bottom: 0in"><FONT SIZE=2><I>void RemoveObservers
-(const char *event);</I></FONT></P>
-<P STYLE="margin-bottom: 0in"><BR>
-</P>
-<P STYLE="margin-bottom: 0in">In IDL interface these function will be
-defined as:</P>
-<P STYLE="margin-bottom: 0in"><FONT SIZE=2><I>void _RemoveObservers_0
-(in long temp0);</I></FONT></P>
-<P STYLE="margin-bottom: 0in"><FONT SIZE=2><I>void _RemoveObservers_1
-(in string temp0);</I></FONT></P>
-<P STYLE="margin-bottom: 0in"><BR>
-</P>
-<P STYLE="margin-bottom: 0in; font-style: normal">These functions
-will be wrapped by standard IDL to Python wrapper as it is (with
-indexes). But we need to call this function in Python as they were
-defined in vtkObject definition – by name “RemoveObservers”.
-For this purposes we modify IDL to Python wrapper in order to add the
-following function:</P>
-<P STYLE="margin-bottom: 0in"><FONT SIZE=2><I>def
-RemoveObservers(self, *args):</I></FONT></P>
-<P STYLE="margin-bottom: 0in"><FONT SIZE=2><I>if len(args) == 1 and
-(type(args[0]) in [IntType, LongType]):</I></FONT></P>
-<P STYLE="margin-bottom: 0in"><FONT SIZE=2><I>return
-self.RemoveObservers_0(*args)</I></FONT></P>
-<P STYLE="margin-bottom: 0in"><FONT SIZE=2><I>if len(args) == 1 and
-(type(args[0]) in [StringType]):</I></FONT></P>
-<P STYLE="margin-bottom: 0in"><FONT SIZE=2><I>return
-self.RemoveObservers_1(*args)</I></FONT></P>
-<P STYLE="margin-bottom: 0in"><FONT SIZE=2><I>print 'Warning: The
-corresponding method of RemoveObservers group is not found for ' +
-str(args)</I></FONT></P>
-<P STYLE="margin-bottom: 0in"><BR>
-</P>
-<P STYLE="margin-bottom: 0in">After this we can use function
-RemoveObserves in Python as it was defined without indexes.</P>
-<H2 CLASS="western">Creation of objects in Python</H2>
-<P>Creation of CORBA object on client side is not so trivial as
-usually. When client requests a creation of object then it has to be
-created:
-</P>
-<UL>
- <LI><P>CORBA client object instance on client side,
- </P>
- <LI><P>CORBA servant instance on server side
- </P>
- <LI><P>and both of them are connected to each other across CORBA
- interface.
- </P>
-</UL>
-<P STYLE="margin-bottom: 0.08in">More simplest way is to request an
-object from PARAVIS server interface <B>PARAVIS_Gen</B>. For this
-purposes a method <B>CreateClass</B> function in <B>PARAVIS_Gen
-</B>interface is defined. Also there is a function <B>GetClassesList</B>
-which returns list of names of extracted classes. Both these methods
-let to define a set of functions which looks like an object
-constructor for all extracted classes.
-</P>
-<P STYLE="margin-bottom: 0.08in">These definitions done in paravis.py
-module with help of createConstructors function. Result of this
-function is a set of functions which looks like vtkClassName(). These
-functions return an object instance which wraps a pointer on
-requested class vtkClassName instance with corresponded API.</P>
-<P STYLE="margin-bottom: 0.08in">For example call in Python console</P>
-<P STYLE="margin-bottom: 0.08in"><FONT SIZE=2><I>> a =
-vtkSMProxyManager()</I></FONT></P>
-<P STYLE="margin-bottom: 0.08in">returns an instance of
-PARAVIS_Gen_vtkSMProxyManager object on client side which implements
-all methods of vtkSMProxyManager class readdressing them to
-incapsulated vtkSMProxyManager instance on server side.</P>
-<H2 CLASS="western">servermanager.py and simple.py</H2>
-<P STYLE="margin-bottom: 0.08in">In ParaView Python API is defined
-with help of two modules servermanager.py and simple.py. PARAVIS has
-corresponded modules paravisSM.py and pvsimple.py. Because of actions
-described above we got a set of Python interfaces which is very close
-to original Python API of ParaView. So, PARAVIS Python modules have
-fiew modifications in comparison to original ones. These
-modifications mainly related to:</P>
-<OL>
- <LI><P STYLE="margin-bottom: 0.08in">Already mentioned problem with
- “==” operation to wrapper classes.</P>
- <LI><P STYLE="margin-bottom: 0.08in">Impossibility to use observers.</P>
- <LI><P STYLE="margin-bottom: 0.08in">Reimplementation of hidden code
- existing in ParaView which is called in Python console on its
- creation.</P>
- <LI><P STYLE="margin-bottom: 0.08in">Providing access to Trace
- functionality.</P>
-</OL>
-<H1><A NAME="4.Trace functionality|outline"></A>Trace functionality</H1>
-<P>Trace functionality in PARAVIS module is defined in GUI of module
-using already existing Python functions in ParaView.</P>
-<P>Because this trace functionality is used for “Dump Study”
-functionality defined in SALOME then tracing is started automatically
-on loading of PARAVIS module and registers all actions during whole
-session. In case if there are no necessity tracing can be switched
-off in preferences dialog box. But it is necessary to take into
-account that dumping of study can't be done for PARAVIS module in
-this case.</P>
-<P>To check the trace content there are two functions defined in
-pvsimple.py module and accessible in SALOME Python console:</P>
-<UL>
- <LI><P>PrintTrace() - this function prints trace directly to Python
- console</P>
- <LI><P>SaveTrace(fileName) – this function outputs trace into disk
- file according to given name.</P>
-</UL>
-<H1>Connection with other SALOME modules</H1>
-<P>According to SALOME general architecture each module independs
-from other modules by default. In general case adding of module to
-module dependency can be caused by necessity to transfer some data
-from one module to another. In this case a module consumer has to
-“know” about API of module supplier what is going to be used. If
-this API is not defined on a general module level then we have to use
-direct connection to module object instance what implements a
-necessary API.</P>
-<P>In general algorithm of connected to a module-supplier API on a
-module-consumer side looks like following:</P>
-<OL>
- <LI><P>Find and load a module-supplier component CORBA object from
- active study.</P>
- <LI><P>Get a module-supplier engine from the component.</P>
- <LI><P>Using of the engine to get necessary data.</P>
-</OL>
-</BODY>
-</HTML>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-<HEAD>
- <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1">
- <TITLE></TITLE>
- <META NAME="GENERATOR" CONTENT="OpenOffice.org 1.1.5 (Linux)">
- <META NAME="CREATED" CONTENT="20100112;19261000">
- <META NAME="CHANGED" CONTENT="20100528;14505900">
-</HEAD>
-<BODY LANG="en-US" DIR="LTR">
-<P ALIGN=CENTER><FONT SIZE=6><B>PARAVIS development</B></FONT></P>
-<P ALIGN=CENTER><FONT SIZE=6><B>PARAVIS user documentation</B></FONT></P>
-<P STYLE="page-break-before: always"><A HREF="#1.Introduction|outline"><B><SPAN LANG="fr-FR"><FONT SIZE=4 STYLE="font-size: 15pt">1.Introduction</FONT></SPAN></B></A></P>
-<P><A HREF="#2.Building environment|outline"><B><SPAN LANG="fr-FR"><FONT SIZE=4 STYLE="font-size: 15pt">2.Building
-environment</FONT></SPAN></B></A></P>
-<P><A HREF="#3.VTK library|outline"><B><SPAN LANG="fr-FR"><FONT SIZE=4 STYLE="font-size: 15pt">3.VTK
-library</FONT></SPAN></B></A></P>
-<P><A HREF="#4.Building of PARAVIS|outline"><B><SPAN LANG="fr-FR"><FONT SIZE=4 STYLE="font-size: 15pt">4.Building
-of PARAVIS</FONT></SPAN></B></A></P>
-<P><A HREF="#5.Starting SALOME with PARAVIS|outline"><B><SPAN LANG="fr-FR"><FONT SIZE=4 STYLE="font-size: 15pt">5.Starting
-SALOME with PARAVIS</FONT></SPAN></B></A></P>
-<P><A HREF="#6.Commands accessible in Python console|outline"><B><SPAN LANG="fr-FR"><FONT SIZE=4 STYLE="font-size: 15pt">6.Commands
-accessible in Python console</FONT></SPAN></B></A></P>
-<P><A HREF="#7.Trace management|outline"><B><SPAN LANG="fr-FR"><FONT SIZE=4 STYLE="font-size: 15pt">7.Trace
-management</FONT></SPAN></B></A></P>
-<P><A HREF="#8.PARAVIS GUI specific|outline"><B><SPAN LANG="fr-FR"><FONT SIZE=4 STYLE="font-size: 15pt">8.PARAVIS
-GUI specific</FONT></SPAN></B></A></P>
-<P><A HREF="#PARAVIEW options|outline"><B><SPAN LANG="fr-FR"><FONT SIZE=4 STYLE="font-size: 15pt">9.
-PARAVIEW options</FONT></SPAN></B></A></P>
-<H1><A NAME="1.Introduction|outline"></A>Introduction</H1>
-<P STYLE="margin-bottom: 0in">This document describes features of
-ParaView Python extractor using in PARAVIS module of SALOME platform.
-In general building of PARAVIEW module is not too much differ from
-usual process of any other SALOME module building, and result Python
-API extracted for using in SALOME Python console is similar to the
-server manager API of ParaView. But there are some features what is
-desirable to understand for effective using of extractor.</P>
-<H1><A NAME="2.Building environment|outline"></A>Building environment</H1>
-<P STYLE="margin-bottom: 0in; page-break-inside: auto">It is
-necessary to check that PARAVIS_SRC directory contains following
-files and they are up-to-date:</P>
-<OL>
- <LI><P STYLE="margin-bottom: 0in; page-break-inside: auto">src/Paraview/lex.yy.c</P>
- <LI><P STYLE="margin-bottom: 0in; page-break-inside: auto">src/Paraview/vtkParse.tab.c</P>
- <LI><P STYLE="margin-bottom: 0in; page-break-inside: auto">src/Paraview/vtkParse.h</P>
-</OL>
-<H1><A NAME="3.VTK library|outline"></A>VTK library</H1>
-<P STYLE="margin-bottom: 0in; page-break-inside: auto">SALOME already
-uses VTK library for visualization and post-processing purposes.
-PARAVIS also uses VTK library supplied with ParaView. In order to
-avoid problem with using of different versions of VTK library in
-different components of SALOME platform it is necessary to use the
-same version supplied with ParaView for all components and modules of
-SALOME.
-</P>
-<P STYLE="margin-bottom: 0in; page-break-inside: auto">For this
-purposes a new option “--with-paraview” has been defined
-for configure script. This option configures building procedure to
-use VTK from ParaView. It means that GUI package and all modules has
-to be configured with this option.</P>
-<H1><A NAME="4.Building of PARAVIS|outline"></A>Building of PARAVIS</H1>
-<P STYLE="margin-bottom: 0in; page-break-inside: auto"><BR>
-</P>
-<OL>
- <LI><P ALIGN=JUSTIFY STYLE="margin-bottom: 0.08in; page-break-inside: auto; widows: 2; orphans: 2">
- Call <B>cmake</B> in a build directory:
- </P>
- <P ALIGN=JUSTIFY STYLE="margin-bottom: 0.08in; page-break-inside: auto; widows: 2; orphans: 2">
- <I><FONT SIZE=3><FONT FACE="Nimbus Roman No9 L"><FONT COLOR="#000000">>
- ccmake ../PARAVIS_SRC</FONT></FONT></FONT></I></P>
- <LI><P>Call <B>make</B> command in build directory.
- </P>
- <P><I>> make</I></P>
- <LI><P ALIGN=JUSTIFY STYLE="margin-bottom: 0.08in; page-break-inside: auto; widows: 2; orphans: 2">
- <FONT FACE="Nimbus Roman No9 L"><B><FONT SIZE=2><FONT COLOR="#000000">Call
- </FONT></FONT>make install</B> command in</FONT> build directory.
- </P>
- <P ALIGN=JUSTIFY STYLE="margin-bottom: 0.08in; page-break-inside: auto; widows: 2; orphans: 2">
- <FONT FACE="Nimbus Roman No9 L"><FONT SIZE=3><I>> <FONT COLOR="#000000">make
- </FONT>install</I></FONT></FONT></P>
-</OL>
-<H1 ALIGN=LEFT STYLE="margin-top: 0.42in; margin-bottom: 0.08in; page-break-inside: avoid; widows: 2; orphans: 2; page-break-after: avoid"><A NAME="5.Starting SALOME with PARAVIS|outline"></A>
-<FONT COLOR="#000000"><FONT FACE="Arial, sans-serif"><FONT SIZE=4 STYLE="font-size: 16pt"><B>Starting
-SALOME with PARAVIS</B></FONT></FONT></FONT></H1>
-<P>> runSalome –modules="PARAVIS"</P>
-<P>If it is necessary then other SALOME modules can be added to
-“modules” list separated by comma.</P>
-<H1><A NAME="6.Commands accessible in Python console|outline"></A>Commands
-accessible in Python console</H1>
-<P>Loading ParaView Python API for PARAVIS can be done with help of
-command:</P>
-<P><I>> from pvsimple import *</I></P>
-<P>This command makes accessible the same Python API what provided by
-simple.py module in ParaView (see ParaView documentation).
-</P>
-<H1><A NAME="7.Trace management|outline"></A>Trace management</H1>
-<P>Last version of ParaView is supplied with trace functionality.
-PARAVIS also supports this feature. But in contrary to ParaView,
-which can start/stop trace in any moment, in PARAVIS trace is
-activating or deactivating for whole session.</P>
-<P>Trace functionality can be switched on/off in SALOME preferences
-dialog box in PARAVIS tab (main menu | Preferences...). It contains
-check box “Deactivate Trace”. By default the trace is
-activated. Change of check box state makes effect only for next
-session.</P>
-<P>User can get the trace with help of two commands (after pvsimple
-import):</P>
-<OL>
- <LI><P>PrintTrace() - prints the trace content directly into Python
- console window.</P>
- <LI><P>SaveTrace(fileName) - saves the trace into a given disk file.</P>
-</OL>
-<P>Also trace is using for “Dump Study” functionality.
-But if the tracing is switched off then “Dump Study”
-doesn't saves PARAVIS module state.</P>
-<H1>SALOME study save</H1>
-<P>On SALOME study saving PARAVIS module data is also saved in the
-study. This data is saved in form of ParaView state file. ParaView
-state file could have references on external files imported during
-PARAVIS working session. These referenced files can be saved with the
-current study depending on preference “Paraview state saving
-type” defined in PARAVIS preferences dialog box. This
-preference can have three possible state:</P>
-<OL>
- <LI><P>“Save referenced files only for built-in server”.
- In case if this option is active then referenced files will be saved
- in study together with ParaView state only if in PARAVIS was used
- built-in ParaView server. In case of remote ParaView server the
- state will be saved as it is without referenced files.</P>
- <LI><P>“Always save referenced files if they are accessible”.
- In this case referenced files will be saved with ParaView state for
- any type of ParaView server but only in case if they are accessible
- across local file system.</P>
- <LI><P>“Never save referenced files”. In this case
- referenced files will be never saved with ParaView state.</P>
-</OL>
-<P>It is necessary to be aware that if referenced files are not saved
-in study then there is no guarantee that the saved study will be
-opened correctly on other station or if the referenced files will be
-moved or deleted.</P>
-<H1><A NAME="8.PARAVIS GUI specific|outline"></A>PARAVIS GUI specific</H1>
-<P STYLE="margin-bottom: 0in; page-break-inside: auto">In fact
-PARAVIS is a ParaView GUI integrated into SALOME environment. General
-architecture of ParaView is very different from general architecture
-of SALOME. If SALOME is an application which is able to open several
-documents (studies) within one application session because it has
-multi-document architecture, then ParaView has a single document
-architecture what means that it can have only one document (data
-structure) opened within one session.</P>
-<P STYLE="margin-bottom: 0in; page-break-inside: auto">This leads to
-the fact that PARAVIS module can be opened only once within SALOME
-application session. It can be opened only in a first desktop
-appeared after SALOME launch. Other desktops, even they opened with
-study containing PARAVIS data, can not load PARAVIS module.</P>
-<P ALIGN=LEFT><BR><BR>
-</P>
-<H1><A NAME="PARAVIEW options|outline"></A>PARAVIEW options</H1>
-<P ALIGN=LEFT>If it is necessary to define a spcific command line
-parameters for ParaView application then it can be defined with help
-of PARAVIS_OPTIONS environment variable. For example:</P>
-<P ALIGN=LEFT>export PARAVIS_OPTIONS=--server=myServer</P>
-<P ALIGN=LEFT>If it is necessary to define several command line
-parameters then these parameters has to be separated by “:”
-symbol.</P>
-</BODY>
-</HTML>
\ No newline at end of file
PARAVIS Module - Architecture and conception
############################################
-This documentation is intended for SALOME's developpers or anyone wishing to modify the module itself.
+*This documentation is intended for SALOME's developpers or anyone wishing to modify the module itself.
If you are looking for user documentation, please launch SALOME, activate the PARAVIS module, and refer
-to the Help menu there.
-
+to the Help menu there.*
PARAVIS is the visualization module of SALOME. The module is a tight integration of the functionalities
offered by ParaView in the SALOME architecture.
If you are looking for the Doxygen of the C++ code, it can be found here: `Doxygen documentation <api/index.html>`_
-.. toctree::
- :maxdepth: 1
+Overview - Executive summary
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The PARAVIS module represents the integration of ParaView inside SALOME.
+
+SALOME uses by default the *detached* server mode of ParaView: the ``pvserver`` is launched outside the main Salome process
+and the ParaVis module, or the PVViewer view (Window -> ParaView view) connects to it.
+
+Following this logic, the PVSERVER CORBA service has a very restrained role. Its only purpose is to:
+
+* control the start and stop of the pvserver process
+* provide the URL of the pvserver, so that a client can connect to it.
+
+Hence, we emphazise the fact that the CORBA engine does *not* provide any access to the objects or the visualisation
+results themselves. It only serves to establish the link with the ``pvserver``. The latter can then be queried (with
+the standard ParaView mechanisms) to retrieve those objects.
+
+A typical session looks like this:
+
+* start SALOME's GUI
+* request activation of PARAVIS (or request activation of a *Paraview's View*)
+ * activation of the PVSERVER CORBA service
+ * invokation of the method ``FindOrStartPVServer()``: launches the pvserver process and returns its URL
+ (in the standard ParaView's format, e.g. ``cs://localhost:11111``)
+ * invokation of the standard ParaView's API to connect to the pvserver (e.g. ``Connect()`` method in the
+ Python module ``paraview.simple``)
+* use the standard ParaView's API to interact with the server (either from the C++ side, within SALOME's GUI
+ or from a Python script, using for example the methods provided in the Python module ``pvsimple``).
+
+The picture below summarizes the architecture:
+
+.. image:: images/archi.jpg
+ :scale: 70
+
+In terms of code structure, the main, all the initialization logic of ParaView is attached to the ``PVViewer``
+(ParaView's viewer) located in the GUI module in the **src/PVViewer** folder.
+The CORBA engine and the graphical interface of the ParaVis module are located in the ParaVis module of SALOME.
+
+Functionalities
+%%%%%%%%%%%%%%%
+
+The following functionalities are offered by the PVSERVER and the ParaVis module:
+
+* full embedding of ParaView's functionalities inside SALOME environment
+* manage ParaVis GUI and ParaView server data from Python scripts in synchronized mode.
+* compatibility of the Python scripting interface with the ``paraview.simple`` and the ``paraview.servermanager``
+ modules.
+
+Folder structure
+%%%%%%%%%%%%%%%%
+
+ParaVis module
+==============
+
+In the ParaVis module, here is the list of code folders:
+
+* **idl**: contains the IDL for the PVSERVER CORBA service
+* **src/ENGINE**: implementation of the IDL's functionalities in Python. Mainly deal with the start/stop of the pvserver
+* **src/Plugins**: SALOME's specific plugins for ParaView: MEDReader, etc ...
+* **src/PVGUI**: graphical elements constituing the ParaVis client in the SALOME GUI. Management of the menus, the toolbars,
+ etc ... seen in PARAVIS interface.
+* **src/PV_SWIG**: Python modules to be able to invoke visualization functionalities from a script
+
+At the time of writing the PVSERVER CORBA service is sitll hosted by the ParaVis module, but it should move to GUI
+to be able to compile GUI without any dependency to PARAVIS. At present, this is only a weak dependency in the sense
+that nothing is needed at link time, but only at run-time.
+
+GUI module
+==========
+
+One can request a ParaView view without activating the ParaVis module itself. For example the MED module now integrates
+a control visualization which is in fact a ParaView view.
+
+To make this work, a specific type of viewer (*PVViewer*, short for ParaView viewer) has been created in the GUI module itself.
+The code is located in **src/PVViewer**.
+
+This folder contains the following classes:
+
+* ``PVViewer_Behaviors``: re-instanciates the desired ParaView behaviors (a behavior defines for example the fact that ParaView
+ should automatically reconnect to the server if a disconnection occurs)
+* ``PVViewer_EngineWrapper``: encapsulates the calls to the PVSERVER CORBA service in a dynamic fashion, so that GUI can be
+ compiled without having a link dependency to the ParaVis module
+* ``PVViewer_GUIElements``: see :ref:`view_part`
+* ``PVViewer_LogWindowAdapter``: an adapter to redirect VTK and ParaView's output messages to the SALOME's message
+ window (not working?)
+
+The folder also contain the adaptor classes needed to make the ParaView
+native 3D view (a ``pqTabbedMultiViewWidget``) fit into the *SUIT*
+model (i.e. the model imposed by SALOME's GUI architecture to define a new type of view):
+
+* ``PVViewer_ViewManager``: this class centralizes all the initialization logic (see method ``ParaviewInitApp``) of the
+ ParaView application (``pqCoreApplication``).
+* ``PVViewer_ViewModel``
+* ``PVViewer_ViewWindow``
+
+
+Reminder about ParaView's architecture
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ParaView works in a client/server mode. In two words, a server part (the ``pvserver``) takes care of the 'intensive'
+computations (filter, etc ...) and a client part serves to control this server, and obviously visualize the final rendering.
+
+The ``pvserver`` represents the main visualisation server, and can be either:
+
+* *built-in*, in which case, launching ParaView suffices to activate it automatically;
+* *detached*, in which case, one has to launch the server first (possibly on another host) and then connect
+ to it from a client.
-Overview
-%%%%%%%%
+The various types of clients are:
-Blabal
+* either the standard ParaView GUI (where the name and type of the current server can be
+ seen by looking at the top element in the pipeline widget)
+* or a Python script, using for example the module ``paraview.simple`` and the ``Connect()`` method.
-Another sub-section for test
-============================
+Historically the pvserver was not able to receive the connections from multiple clients, but this has been changed from
+ParaView 4.0 (or was it 3.98?). Salome now exploits this feature.
+.. _view_part:
+Viewer part (in GUI module)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+In the GUI module of SALOME, the folder **src/PVViewer** contains all the code needed to activate a minimal ParaView
+3D view, without activating the ParaVis module itself.
+This folder hence deals with:
+* the initialization of the ParaView application (``pqApplicationCore``)
+* the initialization of ParaView's desired behaviors (class ``PVViewer_GUIElements``)
+* the initialization of all the GUI elements needed for a later activation of the ParaVis interface: at the time of
+ writing the pipeline, some menus, and other elements are very hard to connect *after* having set up a 3D view. They are
+ however not wanted when the user just requested a 3D view, outside the ParaVis interface. We hence create those elements
+ any way, but hide them, so that we can later show them again, once the ParaVis module is activated.
-Specificities in the code
-%%%%%%%%%%%%%%%%%%%%%%%%%
+The class ``PVViewer_GUIElements`` is in charge of this.
+
+ParaVis graphical interface
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The initialization of the viewer takes part of instantiating the most important widgets, notably:
+
+* the pipeline
+* the dynamic menus (filters and sources)
+* the macros
+* the Properties panel
+* and finally the toolbars
+
+In the ParaVis module, the class ``PVGUI_Module`` represents the GUI client compliant with the usual architecture of
+a SALOME GUI module. The implementation is split in three ``cxx`` files:
+
+* ``PVGUI_Module.cxx``: core stuff: module initialization and activation, management of the Python trace, etc ...
+* ``PVGUI_Module_actions.cxx``: creation of the Qt actions and menus
+* ``PVGUI_Module_widgets.cxx``: hide/show various widgets and save/restore their positions in the main window.
+
+Embedded Python interpreter - Multi-threading
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ParaView is a mono-threaded application. It also provides an embedded Python interpreter to make the Python shell work.
+SALOME on the other hand is multi-threaded, and also provides an embedded Python's interpreter.
+
+Making the two work together has often been (and still is) a painful job!
+If you run into this sort of problems, take a look at what the GIL is:
+`Global Interpreter Lock <https://wiki.python.org/moin/GlobalInterpreterLock>`_
+
+In Salome, the current setup is to:
+
+* patch ParaView itself so that all calls to the Python C API are GIL safe (using ``PyGILState_Ensure``, ``PyGILState_Release``)
+* have Salome's embedded Python console work in mono-threaded mode (although it is fully capable of being asynchronous).
+ This is achieved in ``src/PyConsole/PyConsole_Editor.cxx`` and the initialization of the ``myIsSync`` boolean member to ``True``.
+
+**The last point is of crucial importance**: it basically means that all the GUI events are in a single thread.
+Even without considering
+
+All the calls to the Python API in the rest of SALOME are (should be!) GIL safe.
+
+The ParaView Python's trace mechanism has long been a problem, but has fortunately been rationalized thanks to the API of
+ParaView providing clear methods to control the start/stop (and other options of the trace).
+This is grouped in the ``ParaViewCore/ServerManager/Core/vtkSMTrace`` class and used in the
+method ``PVGUI_Module::startTrace()``.
+
+Python modules
+%%%%%%%%%%%%%%
+The modules found in **src/PV_SWIG** are mostly simple namespace forwards from the original ParaView's modules (i.e. they
+redirect to the original modules):
+
+* ``pvsimple`` is a forward of ``paraview.simple`` with little extra functionalities to make sure:
+ * the connection to the correct PVSERVER is automatically established
+ * that a ParaView's view is available when importing the module from the embedded Python console.
+* ``paravisSM`` is a forward of ``paraview.servermanager``. It is left mostly for backward compatibility (it used to be
+ full of nasty overrides).
+
+Those forward/similarities are naturally intended so that a script written for pure ParaView can easily be ported
+to ParaVis. The conversion boils down to replacing ``import paraview.simple`` by ``impory pvsimple`` (with a few other
+extra details of lesser importance).
+
+Updating to a newer ParaView version
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The following items should be revised each time an upgrade to a newer ParaView version is done.
+They are often a copy/paste of ParaView's source code with a slight amendment to fit SALOME's requirements.
+
+* *initialization sequence*: currently located in GUI module, ``PVViewer_ViewManager::ParaViewInitApp()``: the following
+ classes should be inspected, and compared with their equivalent in ParaView source code to see if an update is necessary:
+ * ``PVViewer_ViewManager`` (GUI module): method ``ParaviewInitApp()``, ``ParaviewInitBehaviors()``, ``ParaviewLoadConfigurations()``
+ and finally ``ConnectToExternalPVServer()`` should be re-read. Their precise ordering is used in ``PVGUI_Module::initialize()``
+ and the whole sequence should be compared with what can be found in:
+ * ``Applications/ParaView/ParaViewMainWindow.cxx``
+ * ``CMake/branded_paraview_initializer.cxx.in``, and the method ``Initialize()``
+ * ``PVViewer_Behaviors`` (GUI module): compare with ``Qt/ApplicationComponents/pqParaViewBehaviors.cxx``
+* *menus and actions*: ``PVGUI_Module_widgets.cxx`` (ParaVis module) should be compared with ``Applications/ParaView/ParaViewMainWindow.cxx``
+* *settings dialog box*: ``PVGUI_ParaViewSettingsPane`` (ParaVis module) should be compared with ``Qt/Components/pqSettingsDialog.h``
+* *trace mechanism*: method ``PVGUI_Module::startTrace()`` should be compared with ``pqTraceReaction::start()`` in file
+ ``Qt/ApplicationComponents/pqTraceReaction.h``
+
+Miscellaneous
+%%%%%%%%%%%%%
+
+**Trace management**
+
+Contrary to ParaView, which can start/stop its trace at any moment, in PARAVIS the trace is activated
+or deactivated for the whole session.
+
+The trace functionality can be switched on/off in SALOME preferences dialog box, in the PARAVIS tab (main menu | Preferences...).
+It contains a check box “Deactivate Trace”. By default the trace is activated.
+Change of check box state makes effect only for next session.
+
+Also, the trace is used for the "Dump Study" functionality. But if the tracing is switched off then the "Dump Study"
+doesn't save PARAVIS module trace.
+
+**Application options**
+
+If it is necessary to define a spcific command line parameter for ParaView application,
+then it can be defined with the help of the PARAVIS_OPTIONS environment variable. For example: ::
+
+ export PARAVIS_OPTIONS=--server=myServer
+
+If it is necessary to define several command line parameters, these parameters have to be separated by the “:” character.
Various TODO
%%%%%%%%%%%%
+
+* make the PVSERVER a true CORBA service not linked to the PARAVIS module
+* the PARAVIS module should be a *light* module (TODO check again why this is blocking).
+