Salome HOME
Merge from BR_PARAVIS_LOT1_2 24/02/2010
[modules/paravis.git] / doc / GeneralArchitecture.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2 <HTML>
3 <HEAD>
4         <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
5         <TITLE></TITLE>
6         <META NAME="GENERATOR" CONTENT="OpenOffice.org 2.2  (Linux)">
7         <META NAME="CREATED" CONTENT="20100112;18335600">
8         <META NAME="CHANGED" CONTENT="20100126;17235200">
9         <STYLE TYPE="text/css">
10         <!--
11                 H2 { margin-top: 0.33in; margin-bottom: 0.08in; color: #ff0000; text-align: left }
12                 H2.western { font-family: "Liberation Serif", serif; font-size: 14pt }
13                 H2.cjk { font-family: "DejaVu Sans"; font-size: 14pt }
14                 H2.ctl { font-family: "DejaVu Sans"; font-size: 14pt }
15         -->
16         </STYLE>
17 </HEAD>
18 <BODY LANG="en-US" DIR="LTR">
19 <P ALIGN=CENTER><FONT SIZE=6><B>PARAVIS development</B></FONT></P>
20 <P ALIGN=CENTER><FONT SIZE=6><B>General architecture of PARAVIEW
21 extractor</B></FONT></P>
22 <H1 STYLE="page-break-before: always"><A NAME="1.Introduction|outline"></A>
23 <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>
24 <P><A HREF="#2.General architecture|outline"><FONT FACE="Liberation Serif, serif"><FONT SIZE=4 STYLE="font-size: 15pt"><B>2.General
25 architecture</B></FONT></FONT></A></P>
26 <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
27 generation of container classes</B></FONT></FONT></A></P>
28 <H1><A NAME="3.1. Source files related to PARAVIS server definition|outline"></A>
29 <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.
30 Source files related to PARAVIS server definition</B></FONT></FONT></A></H1>
31 <P><A HREF="#3.2. Process of generation|outline"><FONT FACE="Liberation Serif, serif"><FONT SIZE=4 STYLE="font-size: 15pt"><B>3.2.
32 Process of generation</B></FONT></FONT></A></P>
33 <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.
34 Definition of IDL interfaces</B></FONT></FONT></A></P>
35 <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.
36 Base interface and its implementation</B></FONT></FONT></A></P>
37 <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.
38 GUI events queue</B></FONT></FONT></A></H1>
39 <P><A HREF="#3.6. Overloaded methods definition|outline"><FONT FACE="Liberation Serif, serif"><FONT SIZE=4 STYLE="font-size: 15pt"><B>3.6.
40 Overloaded methods definition</B></FONT></FONT></A></P>
41 <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.
42 Creation of objects in Python</B></FONT></FONT></A></P>
43 <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.
44 servermanager.py and simple.py</B></FONT></FONT></A></P>
45 <P><A HREF="#4.Trace functionality|outline"><FONT FACE="Liberation Serif, serif"><FONT SIZE=4 STYLE="font-size: 15pt"><B>4.Trace
46 functionality</B></FONT></FONT></A></P>
47 <P><BR><BR>
48 </P>
49 <P><BR><BR>
50 </P>
51 <H1>Introduction</H1>
52 <P>This document describes development of ParaView server manager API
53 for PARAVIS module. The new API must provide following features:</P>
54 <OL>
55         <LI><P>Define interaction between two different processes: Python
56         console and PARAVIS GUI defined in SALOME desktop.</P>
57         <LI><P>Make possible to manage PARAVIS GUI and ParaView server data
58         from Python scripts in synchronized mode.</P>
59         <LI><P>The new API must be similar as much as possible to the API
60         provided by servermanager.py module from ParaView in order to make
61         possible launching the same scripts as in ParaView as in PARAVIS
62         without modifications.</P>
63 </OL>
64 <P>General architecture and development features of this task are
65 described below.</P>
66 <H1><A NAME="2.General architecture|outline"></A>General architecture</H1>
67 <P>Main components of PARAVIS architecture and their relations can be
68 represented as on the following picture:</P>
69 <P><IMG SRC="GeneralArchitecture_html_m4ed0a034.gif" NAME="graphics1" ALIGN=LEFT WIDTH=100% BORDER=0><BR CLEAR=LEFT><BR><BR>
70 </P>
71 <P>The usual way to implement SALOME module is to develop a
72 Data/Algorithms engine unit as a CORBA server and module GUI as a
73 CORBA client. But in case if we need to use GUI and Algorithms from
74 Python console (what usually is an external process) in synchronized
75 mode then we have to implement them together as a CORBA server within
76 a one process.</P>
77 <P>On the diagram above following component are shown: 
78 </P>
79 <UL>
80         <LI><P>PARAVIS module GUI which is responsible for creation of
81         necessary widgets within SALOME Desktop, initialization of ParaView
82         client objects, connection of ParaView GUI objects to created
83         widgets.</P>
84         <LI><P>ParaView client code is a set of ParaView objects what
85         provides ParaView GUI.</P>
86         <LI><P>ParaView server for PARAVIS module can be used as built-in
87         (by default) as remote. For connection to remote server it is
88         necessary to use corresponded menu commands connect/disconnect as it
89         is used in standard ParaView GUI client.</P>
90         <LI><P>ParaView server manager API is a set of classes provided by
91         ParaView for definition of API for Python interpreter.</P>
92         <LI><P>Container objects - implementation of CORBA servants for
93         wrapping server manager object instances and redirection of CORBA
94         interface calls to corresponded server manager object.</P>
95 </UL>
96 <H1><A NAME="3.Automatic generation of container classes|outline"></A>
97 Automatic generation of container classes</H1>
98 <H2 CLASS="western">Source files related to PARAVIS server definition</H2>
99 <P STYLE="margin-bottom: 0in">In PARAVIS_SRC/idl/ directory:</P>
100 <OL>
101         <LI><P><B>PARAVIS_Gen.idl</B> – defines main interfaces to PARAVIS
102         module.</P>
103         <LI><P><B>PARAVIS_Gen_Types.idl</B> – defines data collection
104         types.</P>
105         <LI><P><B>hints_paravis</B> – defines sizes of arrays missed in
106         standard VTK hints file. If some functions of VTK classes which
107         return array data are not extracted then it is necessary to edit
108         this file in order to describe missed functions.</P>
109         <LI><P><B>pythonIDL.py</B> – command file which is used for
110         extraction of IDL interfaces to Python files. This is modification
111         of similar file from omniidl product what takes into account
112         overloading of methods in class.</P>
113         <LI><P><B>vtkWrapIDL.c</B> – source file for building extraction
114         executables: <SPAN STYLE="font-weight: medium">vtkWrapIDL,
115         vtkWrapIDL_CC, vtkWrapIDL_HH.</SPAN></P>
116 </OL>
117 <P STYLE="font-weight: medium">In PARAVIS_SRC/src/PVGUI directory:</P>
118 <OL>
119         <LI><P><B>PARAVIS_Gen_i.cc</B> <SPAN STYLE="font-weight: medium">and
120         </SPAN><B>PARAVIS_Gen_i.hh</B> – <SPAN STYLE="font-weight: medium">implementation
121         of PARAVIS_Gen interface.</SPAN></P>
122         <LI><P><B>PV_Events.h</B> – <SPAN STYLE="font-weight: medium">defines
123         events for synchronization of CORBA client calls with main GUI
124         events queue.</SPAN></P>
125         <LI><P STYLE="font-weight: medium">Other files are related to GUI
126         definition and auxiliary tools.</P>
127 </OL>
128 <P STYLE="font-weight: medium">In <SPAN STYLE="font-weight: medium">PARAVIS_SRC/src/PV_SWIG
129 directory:</SPAN></P>
130 <OL>
131         <LI><P STYLE="font-weight: medium"><B>paravis.py</B> – <SPAN STYLE="font-weight: medium">general
132         Python module for PARAVIS. It installs connection to PARAVIS CORBA
133         server, defines a variable </SPAN><B>myParavis</B> <SPAN STYLE="font-weight: medium">in
134         order to provide acces to </SPAN><B>PARAVIS_Gen</B> <SPAN STYLE="font-weight: medium">functions,
135         creates a set of empty constructors for all extracted ParaView
136         classes.</SPAN></P>
137         <LI><P STYLE="font-weight: medium"><B>paravisSM.py</B> – <SPAN STYLE="font-weight: medium">modified
138         copy of servermanager.py module from ParaView. Modification done
139         according to conventions defined by paravis.py module and features
140         of working with CORBA server.</SPAN></P>
141         <LI><P STYLE="font-weight: medium"><B>pvsimple.py</B> – <SPAN STYLE="font-weight: medium">modified
142         copy of simple.py module from ParaView. Modifications done because
143         of the same reasons.</SPAN></P>
144 </OL>
145 <H2 CLASS="western">Process of generation</H2>
146 <P>CORBA servant classes for wrapping of server manager API classes
147 is generated automatically. The process of building PARAVIS module
148 with generation of wrappers is performed in the following way:</P>
149 <OL>
150         <LI><P>Call <B>build_configure</B> script. During performing of this
151         script it performs some standard steps of SALOME module building and
152         calls a Python command file <B>getwrapclasses.py</B> is called. This
153         procedure creates a list of ParaView and VTK class names what has to
154         be extracted. This list includes all <B>vtkSM*</B> classes and <B>vtk*
155         </B>classes what are referred by previous group of classes. Results
156         of build_configure step are:</P>
157         <OL TYPE=a>
158                 <LI><P>idl/wrap.am – defines variables what lists all interfaces
159                 (*.idl and *.cc files) what will be generated.</P>
160                 <LI><P>idl/vtkWrapIDL.h – defines a list of extracted classes in
161                 form of char* array.</P>
162                 <LI><P>src/PVGUI/wrap.am - defines variables what lists all servant
163                 classes (*.hh and *.cc files) what will be generated.</P>
164                 <LI><P>src/PVGUI/PARAVIS_CreateClass.cxx is a C++ file what
165                 contains a one function CreateInstance. This function creates a
166                 servant class which corresponds to a given name of original
167                 ParaView/VTK class.</P>
168         </OL>
169         <LI><P>Launch <B>configure</B> script from a build directory. This
170         step is similar to the same steps in other SALOME modules and does
171         not have any special related to automatic generation of CORBA
172         interfaces.</P>
173         <LI><P>Call <B>make</B> command in build directory. This command
174         does following steps related to automatic generation:</P>
175         <OL TYPE=a>
176                 <LI><P>Builds <B>vtkWrapIDL</B> executable in <B>idl</B> directory
177                 what is responsible for generation of IDL files using names of
178                 classes to wrap. This executable analyzes related header files for
179                 classes from vtkWrapIDL.h and defines corresponded IDL file.</P>
180                 <LI><P>Defines all IDL files with help of this executable and
181                 launches standard SALOME compilation for <B>idl</B> directory.</P>
182                 <LI><P>Compiles <B>vtkWrapIDL_CC </B><SPAN STYLE="font-weight: medium">and
183                 </SPAN><B>vtkWrapIDL_HH</B> <SPAN STYLE="font-weight: medium">executables
184                 in src/PVGUI directory what are responsible for generation of
185                 header files (*.hh) and implementation files (*.cc) for servants
186                 classes.</SPAN></P>
187                 <LI><P STYLE="font-weight: medium">Generation of servant classes
188                 with help of these executables and building the library.</P>
189         </OL>
190         <LI><P><SPAN STYLE="font-weight: medium">Call </SPAN><B>make install</B>
191         <SPAN STYLE="font-weight: medium">command in build directory. This
192         will finalize building of libraries and generate Python files for
193         IDL interfaces.</SPAN></P>
194 </OL>
195 <P STYLE="font-weight: medium"><SPAN STYLE="background: transparent">Note:</SPAN></P>
196 <P STYLE="font-weight: medium"><SPAN STYLE="background: transparent">make
197 command can not be used with -j key because extraction of parent
198 classes should be done before extraction of child classes.</SPAN></P>
199 <H2 CLASS="western">Definition of IDL interfaces</H2>
200 <P>Process of IDL interfaces generation has to respect following
201 restrictions of IDL format:</P>
202 <OL>
203         <LI><P>IDL does not support several functions with the same name
204         within a one interface definition. Even they have different
205         parameters (overloading of methods as in C++). Also this is not
206         supported between parent and its ancestors.</P>
207         <LI><P>In context of PARAVIS it is difficult to extract methods what
208         accept or return “void*” data type. In IDL it can be described
209         as “ANY” data type, but in context of ParaView it is not clear
210         to what type it has to be casted.</P>
211 </OL>
212 <P>IDL interfaces extracted following to the next principals:</P>
213 <OL>
214         <LI><P>All interfaces are inherited from a common parent interface
215         Base. 
216         </P>
217         <LI><P>Each interface includes all extracted methods of its
218         prototype class including all its parents.</P>
219         <LI><P>If the prototype class contains overloaded methods (methods
220         with the same name) then each appearance of this method name is
221         supplied with index.</P>
222         <LI><P>If prototype class contains methods which return or accept
223         void* then these methods are ignored.</P>
224         <LI><P>If prototype class contains methods which return array (int*,
225         double*, ...) which size is not defined in “hints” or
226         “hints_paravis” files then these methods are ignored.</P>
227         <LI><P><SPAN STYLE="background: transparent">If prototype class
228         contains methods which get a pointer to function then these methods
229         are ignored.</SPAN></P>
230         <LI><P>If a method of prototype class returns/accepts a pointer on
231         ParaView/VTK class instance then interface will return/accept Base
232         interface.</P>
233 </OL>
234 <H2 CLASS="western">Base interface and its implementation</H2>
235 <P>Base interface is defined in order to satisfy following points:</P>
236 <OL>
237         <LI><P>Sometimes we need to have a possibility to use a servant as a
238         pointer on a common interface.</P>
239         <LI><P>We need to have possibility to define a common auxiliary
240         methods for all generated interfaces which out of ParaView/VTK
241         definitions.</P>
242         <LI><P>We need to have a base implementation for all servant
243         classes.</P>
244 </OL>
245 <P>Currently Base class implements smart pointer on a vtkObjectBase
246 instance and several methods to Get/Set this pointer. By default each
247 ancestor class initializes this pointer with help of New() method.
248 This useful for classes what contain static methods. But after this
249 pointer can be reinitialized from outside what is used when we need
250 to have access to certain instance.</P>
251 <P>Also Base interface introduces a method IsSame(Base theOther). We
252 need this method when it is necessary to compare two ParaView objects
253 in Python process. In fact if we will apply standard operation “==”
254 then we will compare two wrapper instances instead of ParaView
255 objects instances. So, method IsSame(Base theOther) checks if two
256 wrappers refer to the same ParaView instance or not.</P>
257 <H2 CLASS="western">GUI events queue</H2>
258 <P>Some calls of server manager API functions cause a modification of
259 GUI state: creation of new widgets, update of widgets state,
260 visualization of presentable objects in viewers. In our case we have
261 two different processes: Python console and PARAVIS GUI. At the same
262 moment the Python console “manages” PARAVIS GUI with help of
263 server manager API functions calls. So, for correct performance of
264 Python scripts the calls of Python commands have to be synchronized
265 with PARAVIS GUI events queue.</P>
266 <P>For this purposes all calls to server manager API from servant are
267 additionally wrapped by event classes. Therefore implementation of
268 servants methods accords to following general template:</P>
269 <OL>
270         <LI><P>Get an encapsulated pointer on VTK object instance.</P>
271         <LI><P>Create a special event instance for target function call.</P>
272         <LI><P>Launch event and wait while it returns.</P>
273         <LI><P>Get result from event (if result is supposed).</P>
274         <LI><P>Return this result as result of servant method.</P>
275 </OL>
276 <P>For example:</P>
277 <P>Class vtkSMProxyManager has a method GetProxy. This method
278 implemented in corresponded servant class as following:</P>
279 <TABLE WIDTH=100% BORDER=1 BORDERCOLOR="#000000" CELLPADDING=3 CELLSPACING=0>
280         <COL WIDTH=12*>
281         <COL WIDTH=164*>
282         <COL WIDTH=80*>
283         <TR VALIGN=TOP>
284                 <TD WIDTH=5% BGCOLOR="#000080">
285                         <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>
286                 </TD>
287                 <TD WIDTH=64% BGCOLOR="#000080">
288                         <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>
289                 </TD>
290                 <TD WIDTH=31% BGCOLOR="#000080">
291                         <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>
292                 </TD>
293         </TR>
294         <TR VALIGN=TOP>
295                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
296                         <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>
297                 </TD>
298                 <TD WIDTH=64% BGCOLOR="#ffffff">
299                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>//C++:
300                         vtkSMProxy *GetProxy (const char *groupname, const char *name);</I></FONT></FONT></FONT></P>
301                 </TD>
302                 <TD WIDTH=31% BGCOLOR="#cccccc">
303                         <P ALIGN=LEFT><BR>
304                         </P>
305                 </TD>
306         </TR>
307         <TR VALIGN=TOP>
308                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
309                         <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>
310                 </TD>
311                 <TD WIDTH=64% BGCOLOR="#ffffff">
312                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>struct
313                         CreateEventName(GetProxy_0): public SALOME_Event</I></FONT></FONT></FONT></P>
314                 </TD>
315                 <TD WIDTH=31% BGCOLOR="#cccccc">
316                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Generation
317                         of unique event class name with help of a special macros</I></FONT></FONT></FONT></P>
318                 </TD>
319         </TR>
320         <TR VALIGN=TOP>
321                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
322                         <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>
323                 </TD>
324                 <TD WIDTH=64% BGCOLOR="#ffffff">
325                         <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>
326                 </TD>
327                 <TD WIDTH=31% BGCOLOR="#cccccc">
328                         <P ALIGN=LEFT><BR>
329                         </P>
330                 </TD>
331         </TR>
332         <TR VALIGN=TOP>
333                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
334                         <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>
335                 </TD>
336                 <TD WIDTH=64% BGCOLOR="#ffffff">
337                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>typedef
338                         ::vtkSMProxy* TResult;</I></FONT></FONT></FONT></P>
339                 </TD>
340                 <TD WIDTH=31% BGCOLOR="#cccccc">
341                         <P ALIGN=LEFT><BR>
342                         </P>
343                 </TD>
344         </TR>
345         <TR VALIGN=TOP>
346                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
347                         <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>
348                 </TD>
349                 <TD WIDTH=64% BGCOLOR="#ffffff">
350                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>TResult
351                         myResult;</I></FONT></FONT></FONT></P>
352                 </TD>
353                 <TD WIDTH=31% BGCOLOR="#cccccc">
354                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Definition
355                         of the return type</I></FONT></FONT></FONT></P>
356                 </TD>
357         </TR>
358         <TR VALIGN=TOP>
359                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
360                         <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>
361                 </TD>
362                 <TD WIDTH=64% BGCOLOR="#ffffff">
363                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>typedef
364                         ::vtkSMProxyManager* TObj;</I></FONT></FONT></FONT></P>
365                 </TD>
366                 <TD WIDTH=31% BGCOLOR="#cccccc">
367                         <P ALIGN=LEFT><BR>
368                         </P>
369                 </TD>
370         </TR>
371         <TR VALIGN=TOP>
372                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
373                         <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>
374                 </TD>
375                 <TD WIDTH=64% BGCOLOR="#ffffff">
376                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>TObj
377                         myObj;</I></FONT></FONT></FONT></P>
378                 </TD>
379                 <TD WIDTH=31% BGCOLOR="#cccccc">
380                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Definition
381                         of parameters</I></FONT></FONT></FONT></P>
382                 </TD>
383         </TR>
384         <TR VALIGN=TOP>
385                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
386                         <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>
387                 </TD>
388                 <TD WIDTH=64% BGCOLOR="#ffffff">
389                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>typedef
390                         char* TParam0;</I></FONT></FONT></FONT></P>
391                 </TD>
392                 <TD WIDTH=31% BGCOLOR="#cccccc">
393                         <P ALIGN=LEFT><BR>
394                         </P>
395                 </TD>
396         </TR>
397         <TR VALIGN=TOP>
398                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
399                         <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>
400                 </TD>
401                 <TD WIDTH=64% BGCOLOR="#ffffff">
402                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>TParam0
403                         myParam0;</I></FONT></FONT></FONT></P>
404                 </TD>
405                 <TD WIDTH=31% BGCOLOR="#cccccc">
406                         <P ALIGN=LEFT><BR>
407                         </P>
408                 </TD>
409         </TR>
410         <TR VALIGN=TOP>
411                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
412                         <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>
413                 </TD>
414                 <TD WIDTH=64% BGCOLOR="#ffffff">
415                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>typedef
416                         char* TParam1;</I></FONT></FONT></FONT></P>
417                 </TD>
418                 <TD WIDTH=31% BGCOLOR="#cccccc">
419                         <P ALIGN=LEFT><BR>
420                         </P>
421                 </TD>
422         </TR>
423         <TR VALIGN=TOP>
424                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
425                         <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>
426                 </TD>
427                 <TD WIDTH=64% BGCOLOR="#ffffff">
428                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>TParam1
429                         myParam1;</I></FONT></FONT></FONT></P>
430                 </TD>
431                 <TD WIDTH=31% BGCOLOR="#cccccc">
432                         <P ALIGN=LEFT><BR>
433                         </P>
434                 </TD>
435         </TR>
436         <TR VALIGN=TOP>
437                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
438                         <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>
439                 </TD>
440                 <TD WIDTH=64% BGCOLOR="#ffffff">
441                         <P ALIGN=LEFT><BR>
442                         </P>
443                 </TD>
444                 <TD WIDTH=31% BGCOLOR="#cccccc">
445                         <P ALIGN=LEFT><BR>
446                         </P>
447                 </TD>
448         </TR>
449         <TR VALIGN=TOP>
450                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
451                         <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>
452                 </TD>
453                 <TD WIDTH=64% BGCOLOR="#ffffff">
454                         <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
455                         theObj, TParam0 theParam0, TParam1 theParam1):</I></FONT></FONT></FONT></P>
456                 </TD>
457                 <TD WIDTH=31% BGCOLOR="#cccccc">
458                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Constructor
459                         of event. Defines object instance and necessary parameters</I></FONT></FONT></FONT></P>
460                 </TD>
461         </TR>
462         <TR VALIGN=TOP>
463                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
464                         <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>
465                 </TD>
466                 <TD WIDTH=64% BGCOLOR="#ffffff">
467                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>myObj(theObj),
468                         myParam0(theParam0), myParam1(theParam1)</I></FONT></FONT></FONT></P>
469                 </TD>
470                 <TD WIDTH=31% BGCOLOR="#cccccc">
471                         <P ALIGN=LEFT><BR>
472                         </P>
473                 </TD>
474         </TR>
475         <TR VALIGN=TOP>
476                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
477                         <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>
478                 </TD>
479                 <TD WIDTH=64% BGCOLOR="#ffffff">
480                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>{
481                         }</I></FONT></FONT></FONT></P>
482                 </TD>
483                 <TD WIDTH=31% BGCOLOR="#cccccc">
484                         <P ALIGN=LEFT><BR>
485                         </P>
486                 </TD>
487         </TR>
488         <TR VALIGN=TOP>
489                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
490                         <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>
491                 </TD>
492                 <TD WIDTH=64% BGCOLOR="#ffffff">
493                         <P ALIGN=LEFT><BR>
494                         </P>
495                 </TD>
496                 <TD WIDTH=31% BGCOLOR="#cccccc">
497                         <P ALIGN=LEFT><BR>
498                         </P>
499                 </TD>
500         </TR>
501         <TR VALIGN=TOP>
502                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
503                         <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>
504                 </TD>
505                 <TD WIDTH=64% BGCOLOR="#ffffff">
506                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>virtual
507                         void Execute()</I></FONT></FONT></FONT></P>
508                 </TD>
509                 <TD WIDTH=31% BGCOLOR="#cccccc">
510                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Execution
511                         method.</I></FONT></FONT></FONT></P>
512                 </TD>
513         </TR>
514         <TR VALIGN=TOP>
515                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
516                         <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>
517                 </TD>
518                 <TD WIDTH=64% BGCOLOR="#ffffff">
519                         <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>
520                 </TD>
521                 <TD WIDTH=31% BGCOLOR="#cccccc">
522                         <P ALIGN=LEFT><BR>
523                         </P>
524                 </TD>
525         </TR>
526         <TR VALIGN=TOP>
527                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
528                         <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>
529                 </TD>
530                 <TD WIDTH=64% BGCOLOR="#ffffff">
531                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>myResult
532                         = myObj-&gt;GetProxy(myParam0, myParam1);</I></FONT></FONT></FONT></P>
533                 </TD>
534                 <TD WIDTH=31% BGCOLOR="#cccccc">
535                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Call
536                         of target method</I></FONT></FONT></FONT></P>
537                 </TD>
538         </TR>
539         <TR VALIGN=TOP>
540                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
541                         <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>
542                 </TD>
543                 <TD WIDTH=64% BGCOLOR="#ffffff">
544                         <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>
545                 </TD>
546                 <TD WIDTH=31% BGCOLOR="#cccccc">
547                         <P ALIGN=LEFT><BR>
548                         </P>
549                 </TD>
550         </TR>
551         <TR VALIGN=TOP>
552                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
553                         <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>
554                 </TD>
555                 <TD WIDTH=64% BGCOLOR="#ffffff">
556                         <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>
557                 </TD>
558                 <TD WIDTH=31% BGCOLOR="#cccccc">
559                         <P ALIGN=LEFT><BR>
560                         </P>
561                 </TD>
562         </TR>
563         <TR VALIGN=TOP>
564                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
565                         <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>
566                 </TD>
567                 <TD WIDTH=64% BGCOLOR="#ffffff">
568                         <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>
569                 </TD>
570                 <TD WIDTH=31% BGCOLOR="#cccccc">
571                         <P ALIGN=LEFT><BR>
572                         </P>
573                 </TD>
574         </TR>
575         <TR VALIGN=TOP>
576                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
577                         <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>
578                 </TD>
579                 <TD WIDTH=64% BGCOLOR="#ffffff">
580                         <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
581                         vtkSMProxyManager_i::GetProxy_0 (const char *temp0, const char
582                         *temp1) {</I></FONT></FONT></FONT></P>
583                 </TD>
584                 <TD WIDTH=31% BGCOLOR="#cccccc">
585                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Implementation
586                         of servant method</I></FONT></FONT></FONT></P>
587                 </TD>
588         </TR>
589         <TR VALIGN=TOP>
590                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
591                         <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>
592                 </TD>
593                 <TD WIDTH=64% BGCOLOR="#ffffff">
594                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>try
595                         {</I></FONT></FONT></FONT></P>
596                 </TD>
597                 <TD WIDTH=31% BGCOLOR="#cccccc">
598                         <P ALIGN=LEFT><BR>
599                         </P>
600                 </TD>
601         </TR>
602         <TR VALIGN=TOP>
603                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
604                         <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>
605                 </TD>
606                 <TD WIDTH=64% BGCOLOR="#ffffff">
607                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>char
608                         *c_temp0 = CORBA::string_dup(temp0);</I></FONT></FONT></FONT></P>
609                 </TD>
610                 <TD WIDTH=31% BGCOLOR="#cccccc">
611                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Getting
612                         parameters</I></FONT></FONT></FONT></P>
613                 </TD>
614         </TR>
615         <TR VALIGN=TOP>
616                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
617                         <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>
618                 </TD>
619                 <TD WIDTH=64% BGCOLOR="#ffffff">
620                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>char
621                         *c_temp1 = CORBA::string_dup(temp1);</I></FONT></FONT></FONT></P>
622                 </TD>
623                 <TD WIDTH=31% BGCOLOR="#cccccc">
624                         <P ALIGN=LEFT><BR>
625                         </P>
626                 </TD>
627         </TR>
628         <TR VALIGN=TOP>
629                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
630                         <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>
631                 </TD>
632                 <TD WIDTH=64% BGCOLOR="#ffffff">
633                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>::vtkSMProxy*
634                         avtkSMProxy = (getVTKObject() != NULL) ? ProcessEvent(new
635                         CreateEventName(GetProxy_0)((::vtkSMProxyManager*)getVTKObject(),
636                         c_temp0 , c_temp1)):NULL;</I></FONT></FONT></FONT></P>
637                 </TD>
638                 <TD WIDTH=31% BGCOLOR="#cccccc">
639                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>If
640                         wrapped object is defined then create event and launch it. Finally
641                         it will return result.</I></FONT></FONT></FONT></P>
642                 </TD>
643         </TR>
644         <TR VALIGN=TOP>
645                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
646                         <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>
647                 </TD>
648                 <TD WIDTH=64% BGCOLOR="#ffffff">
649                         <P ALIGN=LEFT><BR>
650                         </P>
651                 </TD>
652                 <TD WIDTH=31% BGCOLOR="#cccccc">
653                         <P ALIGN=LEFT><BR>
654                         </P>
655                 </TD>
656         </TR>
657         <TR VALIGN=TOP>
658                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
659                         <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>
660                 </TD>
661                 <TD WIDTH=64% BGCOLOR="#ffffff">
662                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>if(avtkSMProxy
663                         == NULL) {</I></FONT></FONT></FONT></P>
664                 </TD>
665                 <TD WIDTH=31% BGCOLOR="#cccccc">
666                         <P ALIGN=LEFT><BR>
667                         </P>
668                 </TD>
669         </TR>
670         <TR VALIGN=TOP>
671                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
672                         <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>
673                 </TD>
674                 <TD WIDTH=64% BGCOLOR="#ffffff">
675                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>return
676                         PARAVIS::vtkSMProxy::_nil();</I></FONT></FONT></FONT></P>
677                 </TD>
678                 <TD WIDTH=31% BGCOLOR="#cccccc">
679                         <P ALIGN=LEFT><BR>
680                         </P>
681                 </TD>
682         </TR>
683         <TR VALIGN=TOP>
684                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
685                         <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>
686                 </TD>
687                 <TD WIDTH=64% BGCOLOR="#ffffff">
688                         <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>
689                 </TD>
690                 <TD WIDTH=31% BGCOLOR="#cccccc">
691                         <P ALIGN=LEFT><BR>
692                         </P>
693                 </TD>
694         </TR>
695         <TR VALIGN=TOP>
696                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
697                         <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>
698                 </TD>
699                 <TD WIDTH=64% BGCOLOR="#ffffff">
700                         <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*
701                         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>,
702                         avtkSMProxy-&gt;GetClassName());</I></FONT></FONT></FONT></P>
703                 </TD>
704                 <TD WIDTH=31% BGCOLOR="#cccccc">
705                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Create
706                         a wrapper (servant) class according to class name of result object</I></FONT></FONT></FONT></P>
707                 </TD>
708         </TR>
709         <TR VALIGN=TOP>
710                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
711                         <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>
712                 </TD>
713                 <TD WIDTH=64% BGCOLOR="#ffffff">
714                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>aPtr-&gt;Init(avtkSMProxy);</I></FONT></FONT></FONT></P>
715                 </TD>
716                 <TD WIDTH=31% BGCOLOR="#cccccc">
717                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Initialize
718                         the internal pointer of wrapper class by result</I></FONT></FONT></FONT></P>
719                 </TD>
720         </TR>
721         <TR VALIGN=TOP>
722                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
723                         <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>
724                 </TD>
725                 <TD WIDTH=64% BGCOLOR="#ffffff">
726                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>return
727                         aPtr-&gt;_this();</I></FONT></FONT></FONT></P>
728                 </TD>
729                 <TD WIDTH=31% BGCOLOR="#cccccc">
730                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>Return
731                         wrapper instance as result</I></FONT></FONT></FONT></P>
732                 </TD>
733         </TR>
734         <TR VALIGN=TOP>
735                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
736                         <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>
737                 </TD>
738                 <TD WIDTH=64% BGCOLOR="#ffffff">
739                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>}
740                         catch(...) {</I></FONT></FONT></FONT></P>
741                 </TD>
742                 <TD WIDTH=31% BGCOLOR="#cccccc">
743                         <P ALIGN=LEFT><BR>
744                         </P>
745                 </TD>
746         </TR>
747         <TR VALIGN=TOP>
748                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
749                         <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>
750                 </TD>
751                 <TD WIDTH=64% BGCOLOR="#ffffff">
752                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>MESSAGE(&quot;GetProxy
753                         - Unknown exception was occurred!!!&quot;);</I></FONT></FONT></FONT></P>
754                 </TD>
755                 <TD WIDTH=31% BGCOLOR="#cccccc">
756                         <P ALIGN=LEFT><BR>
757                         </P>
758                 </TD>
759         </TR>
760         <TR VALIGN=TOP>
761                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
762                         <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>
763                 </TD>
764                 <TD WIDTH=64% BGCOLOR="#ffffff">
765                         <P ALIGN=LEFT STYLE="font-weight: medium; text-decoration: none"><FONT COLOR="#000000"><FONT FACE="Liberation Serif, serif"><FONT SIZE=2><I>return
766                         PARAVIS::vtkSMProxy::_nil();</I></FONT></FONT></FONT></P>
767                 </TD>
768                 <TD WIDTH=31% BGCOLOR="#cccccc">
769                         <P ALIGN=LEFT><BR>
770                         </P>
771                 </TD>
772         </TR>
773         <TR VALIGN=TOP>
774                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
775                         <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>
776                 </TD>
777                 <TD WIDTH=64% BGCOLOR="#ffffff">
778                         <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>
779                 </TD>
780                 <TD WIDTH=31% BGCOLOR="#cccccc">
781                         <P ALIGN=LEFT><BR>
782                         </P>
783                 </TD>
784         </TR>
785         <TR VALIGN=TOP>
786                 <TD WIDTH=5% BGCOLOR="#4d4d4d">
787                         <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>
788                 </TD>
789                 <TD WIDTH=64% BGCOLOR="#cccccc">
790                         <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>
791                 </TD>
792                 <TD WIDTH=31% BGCOLOR="#cccccc">
793                         <P ALIGN=LEFT><BR>
794                         </P>
795                 </TD>
796         </TR>
797 </TABLE>
798 <P STYLE="margin-bottom: 0in"><BR>
799 </P>
800 <H2 CLASS="western">Overloaded methods definition</H2>
801 <P>Classes of ParaView server manager API have overloaded methods. As
802 it is mentioned above description of IDL interface prohibits using of
803 the same name for various methods even they have different
804 parameters. To avoid this limitation we have to add index to name in
805 each appearance of overloaded method. But at Python script level it
806 is necessary to avoid using of function names with indexes. It is
807 necessary to provide possibility to use methods as they was defined
808 in API of corresponded class.</P>
809 <P>For tis purposes we redefined standard IDL to Python wrapping in
810 order to add a function which has a name of overloaded method and
811 accepts any parameters. This function analyzes input parameters and
812 selects what function (with which index) it has to be called.</P>
813 <P>For example:</P>
814 <P>vtkObject class contains definition of overloaded functions:</P>
815 <P STYLE="margin-bottom: 0in"><FONT SIZE=2><I>void RemoveObservers
816 (unsigned long event);</I></FONT></P>
817 <P STYLE="margin-bottom: 0in"><FONT SIZE=2><I>void RemoveObservers
818 (const char *event);</I></FONT></P>
819 <P STYLE="margin-bottom: 0in"><BR>
820 </P>
821 <P STYLE="margin-bottom: 0in">In IDL interface these function will be
822 defined as:</P>
823 <P STYLE="margin-bottom: 0in"><FONT SIZE=2><I>void _RemoveObservers_0
824 (in long temp0);</I></FONT></P>
825 <P STYLE="margin-bottom: 0in"><FONT SIZE=2><I>void _RemoveObservers_1
826 (in string temp0);</I></FONT></P>
827 <P STYLE="margin-bottom: 0in"><BR>
828 </P>
829 <P STYLE="margin-bottom: 0in; font-style: normal">These functions
830 will be wrapped by standard IDL to Python wrapper as it is (with
831 indexes). But we need to call this function in Python as they were
832 defined in vtkObject definition – by name “RemoveObservers”.
833 For this purposes we modify IDL to Python wrapper in order to add the
834 following function:</P>
835 <P STYLE="margin-bottom: 0in"><FONT SIZE=2><I>def
836 RemoveObservers(self, *args):</I></FONT></P>
837 <P STYLE="margin-bottom: 0in"><FONT SIZE=2><I>if len(args) == 1 and
838 (type(args[0]) in [IntType, LongType]):</I></FONT></P>
839 <P STYLE="margin-bottom: 0in"><FONT SIZE=2><I>return
840 self.RemoveObservers_0(*args)</I></FONT></P>
841 <P STYLE="margin-bottom: 0in"><FONT SIZE=2><I>if len(args) == 1 and
842 (type(args[0]) in [StringType]):</I></FONT></P>
843 <P STYLE="margin-bottom: 0in"><FONT SIZE=2><I>return
844 self.RemoveObservers_1(*args)</I></FONT></P>
845 <P STYLE="margin-bottom: 0in"><FONT SIZE=2><I>print 'Warning: The
846 corresponding method of RemoveObservers group is not found for ' +
847 str(args)</I></FONT></P>
848 <P STYLE="margin-bottom: 0in"><BR>
849 </P>
850 <P STYLE="margin-bottom: 0in">After this we can use function
851 RemoveObserves in Python as it was defined without indexes.</P>
852 <H2 CLASS="western">Creation of objects in Python</H2>
853 <P>Creation of CORBA object on client side is not so trivial as
854 usually. When client requests a creation of object then it has to be
855 created: 
856 </P>
857 <UL>
858         <LI><P>CORBA client object instance on client side, 
859         </P>
860         <LI><P>CORBA servant instance on server side 
861         </P>
862         <LI><P>and both of them are connected to each other across CORBA
863         interface. 
864         </P>
865 </UL>
866 <P STYLE="margin-bottom: 0.08in">More simplest way is to request an
867 object from PARAVIS server interface <B>PARAVIS_Gen</B>. For this
868 purposes a method <B>CreateClass</B> function in <B>PARAVIS_Gen
869 </B>interface is defined. Also there is a function <B>GetClassesList</B>
870 which returns list of names of extracted classes. Both these methods
871 let to define a set of functions which looks like an object
872 constructor for all extracted classes. 
873 </P>
874 <P STYLE="margin-bottom: 0.08in">These definitions done in paravis.py
875 module with help of createConstructors function. Result of this
876 function is a set of functions which looks like vtkClassName(). These
877 functions return an object instance which wraps a pointer on
878 requested class vtkClassName instance with corresponded API.</P>
879 <P STYLE="margin-bottom: 0.08in">For example call in Python console</P>
880 <P STYLE="margin-bottom: 0.08in"><FONT SIZE=2><I>&gt; a =
881 vtkSMProxyManager()</I></FONT></P>
882 <P STYLE="margin-bottom: 0.08in">returns an instance of
883 PARAVIS_Gen_vtkSMProxyManager object on client side which implements
884 all methods of vtkSMProxyManager class readdressing them to
885 incapsulated vtkSMProxyManager instance on server side.</P>
886 <H2 CLASS="western">servermanager.py and simple.py</H2>
887 <P STYLE="margin-bottom: 0.08in">In ParaView Python API is defined
888 with help of two modules servermanager.py and simple.py. PARAVIS has
889 corresponded modules paravisSM.py and pvsimple.py. Because of actions
890 described above we got a set of Python interfaces which is very close
891 to original Python API of ParaView. So, PARAVIS Python modules have
892 fiew modifications in comparison to original ones. These
893 modifications mainly related to:</P>
894 <OL>
895         <LI><P STYLE="margin-bottom: 0.08in">Already mentioned problem with
896         “==” operation to wrapper classes.</P>
897         <LI><P STYLE="margin-bottom: 0.08in">Impossibility to use observers.</P>
898         <LI><P STYLE="margin-bottom: 0.08in">Reimplementation of hidden code
899         existing in ParaView which is called in Python console on its
900         creation.</P>
901         <LI><P STYLE="margin-bottom: 0.08in">Providing access to Trace
902         functionality.</P>
903 </OL>
904 <H1><A NAME="4.Trace functionality|outline"></A>Trace functionality</H1>
905 <P>Trace functionality in PARAVIS module is defined in GUI of module
906 using already existing Python functions in ParaView.</P>
907 <P>Because this trace functionality is used for “Dump Study”
908 functionality defined in SALOME then tracing is started automatically
909 on loading of PARAVIS module and registers all actions during whole
910 session. In case if there are no necessity tracing can be switched
911 off in preferences dialog box. But it is necessary to take into
912 account that dumping of study can't be done for PARAVIS module in
913 this case.</P>
914 <P>To check the trace content there are two functions defined in
915 pvsimple.py module and accessible in SALOME Python console:</P>
916 <UL>
917         <LI><P>PrintTrace() - this function prints trace directly to Python
918         console</P>
919         <LI><P>SaveTrace(fileName) – this function outputs trace into disk
920         file according to given name.</P>
921 </UL>
922 <H1>Connection with other SALOME modules</H1>
923 <P>According to SALOME general architecture each module independs
924 from other modules by default. In general case adding of module to
925 module dependency can be caused by necessity to transfer some data
926 from one module to another. In this case a module consumer has to
927 “know” about API of module supplier what is going to be used. If
928 this API is not defined on a general module level then we have to use
929 direct connection to module object instance what implements a
930 necessary API.</P>
931 <P>In general algorithm of connected to a module-supplier API on a
932 module-consumer side looks like following:</P>
933 <OL>
934         <LI><P>Find and load a module-supplier component CORBA object from
935         active study.</P>
936         <LI><P>Get a module-supplier engine from the component.</P>
937         <LI><P>Using of the engine to get necessary data.</P>
938 </OL>
939 </BODY>
940 </HTML>