/[escript]/trunk/doc/user/pyvisi.tex
ViewVC logotype

Diff of /trunk/doc/user/pyvisi.tex

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1082 by jongui, Wed Apr 11 22:33:52 2007 UTC revision 1318 by ksteube, Wed Sep 26 04:39:14 2007 UTC
# Line 1  Line 1 
1  \chapter{The module \pyvisi}  \chapter{The Module \pyvisi}
2  \label{PYVISI CHAP}  \label{PYVISI CHAP}
3  \declaremodule{extension}{esys.pyvisi}  \declaremodule{extension}{esys.pyvisi}
4  \modulesynopsis{Python Visualization Interface}  \modulesynopsis{Python Visualization Interface}
# Line 6  Line 6 
6  \section{Introduction}  \section{Introduction}
7  \pyvisi is a Python module that is used to generate 2D and 3D visualization  \pyvisi is a Python module that is used to generate 2D and 3D visualization
8  for escript and its PDE solvers: finley and bruce. This module provides  for escript and its PDE solvers: finley and bruce. This module provides
9  an easy to use interface to the \VTK library (\VTKUrl). There are three  an easy to use interface to the \VTK library (\VTKUrl). Pyvisi can be used to
10  approaches of rendering an object. (1) Online - object is rendered on-screen  render (generate) surface maps and contours for scalar fields, arrows and
11  with interaction (i.e. zoom and rotate) capability, (2) Offline - object is  streamlines for vector fields, and ellipsoids for tensor fields.  
12  rendered off-screen (no window comes up) and (3) Display - object is rendered  There are three
13  on-screen but with no interaction capability (able to produce on-the-fly  approaches for rendering an object. (1) Online - object is rendered on-screen
14    with interaction capability (i.e. zoom and rotate), (2) Offline - object is
15    rendered off-screen (no pop-up window) and (3) Display - object is rendered
16    on-screen but with no interaction capability (on-the-fly
17  animation). All three approaches have the option to save the rendered object  animation). All three approaches have the option to save the rendered object
18  as an image.  as an image (i.e. jpg) and subsequently converting a series of images into a
19    movie (.mpg).
20    
21  The following points outline the general guidelines when using \pyvisi:  The following outlines the general steps to use Pyvisi:
22    
23  \begin{enumerate}  \begin{enumerate}
24  \item Create a \Scene instance, a window in which objects are to be rendered on.  \item Create a \Scene instance - a window in which objects are to be
25  \item Create a data input instance (i.e. \DataCollector or \ImageReader), which  rendered on.
26    \item Create a data input instance (i.e. \DataCollector or \ImageReader) -
27  reads and loads the source data for visualization.  reads and loads the source data for visualization.
28  \item Create a data visualization instance (i.e. \Map, \Velocity, \Ellipsoid,  \item Create a data visualization instance (i.e. \Map, \Velocity, \Ellipsoid,
29  \Contour, \Carpet, \StreamLine or \Image), which proccesses and manipulates the  \Contour, \Carpet, \StreamLine or \Image) -  processes and manipulates
30  source data.  the source data.
31  \item Create a \Camera or \Light instance, which controls the viewing angle and  \item Create a \Camera or \Light instance - controls the viewing angle and
32  lighting effects.  lighting effects.
33  \item Render the object using either the Online, Offline or Display approach.  \item Render the object - using either the Online, Offline or Display approach.
34    \item Generate movie - converts a series of images into a movie.
35  \end{enumerate}  \end{enumerate}
36  \begin{center}  \begin{center}
37  \begin{math}  \begin{math}
38  scene \rightarrow data \; input \rightarrow data \; visualization \rightarrow  scene \rightarrow data \; input \rightarrow data \; visualization \rightarrow
39  camer \, / \, light \rightarrow render  camera \, / \, light \rightarrow render \rightarrow movie
40  \end{math}  \end{math}
41  \end{center}  \end{center}
42    
 The sequence in which instances are created is very important due to  
 to the dependencies among them. For example, a data input instance must  
 be created BEFORE a data visualization instance, because the source data must  
 be specified before it can be manipulated. If the sequence is switched,  
 the program will throw an error. Similarly, a camera and light instance must  
 be created AFTER a data input instance because the camera and light instance  
 calculates their position based on the source data. If the sequence is switched,  
 the programthe will throw an error .  
   
43  \section{\pyvisi Classes}  \section{\pyvisi Classes}
44  The following subsections give a brief overview of the important classes  The following subsections give a brief overview of the important classes
45  and some of their corresponding methods. Please refer to \ReferenceGuide for  and some of their corresponding methods. Please refer to \ReferenceGuide for
# Line 61  This subsection details the instances us Line 58  This subsection details the instances us
58  x_size = 1152, y_size = 864}  x_size = 1152, y_size = 864}
59  A scene is a window in which objects are to be rendered on. Only  A scene is a window in which objects are to be rendered on. Only
60  one scene needs to be created. However, a scene may be divided into four  one scene needs to be created. However, a scene may be divided into four
61  smaller windows called viewports (if needed). Each viewport can  smaller windows called viewports (if needed). Each viewport in turn can
62  render a different object.  render a different object.
63  \end{classdesc}  \end{classdesc}
64    
# Line 76  Render the object using either the Onlin Line 73  Render the object using either the Onlin
73    
74  \subsubsection{\Camera class}  \subsubsection{\Camera class}
75    
76  \begin{classdesc}{Camera}{scene, data_collector, viewport = Viewport.SOUTH_WEST}  \begin{classdesc}{Camera}{scene, viewport = Viewport.SOUTH_WEST}
77  A camera controls the display angle of the rendered object and one is  A camera controls the display angle of the rendered object and one is
78  usually created for a \Scene. However, if a \Scene has four viewports, then a  usually created for a \Scene. However, if a \Scene has four viewports, then a
79  separate camera may be created for each viewport.  separate camera may be created for each viewport.
# Line 124  Rotate the camera to view the isometric Line 121  Rotate the camera to view the isometric
121  \end{methoddesc}  \end{methoddesc}
122    
123  \begin{methoddesc}[Camera]{dolly}{distance}  \begin{methoddesc}[Camera]{dolly}{distance}
124  Move the camera towards (greater than 1) and away (less than 1) from  Move the camera towards (greater than 1) the rendered object. However,
125  the rendered object.  the camera is unable to be moved away from the rendered object.
126  \end{methoddesc}  \end{methoddesc}
127    
128  \subsubsection{\Light class}  \subsubsection{\Light class}
129    
130  \begin{classdesc}{Light}{scene, data_collector, viewport = Viewport.SOUTH_WEST}  \begin{classdesc}{Light}{scene, viewport = Viewport.SOUTH_WEST}
131  A light controls the lighting for the rendered object and works in  A light controls the lighting effect for the rendered object and works in
132  a similar way to \Camera.  a similar way to \Camera.
133  \end{classdesc}  \end{classdesc}
134    
# Line 158  elevation and azimuth. Line 155  elevation and azimuth.
155    
156    
157  \subsection{Input Classes}  \subsection{Input Classes}
158    \label{INPUT SEC}
159  This subsection details the instances used to read and load the source data  This subsection details the instances used to read and load the source data
160  for visualization.  for visualization.
161    
162  \subsubsection{\DataCollector class}  \subsubsection{\DataCollector class}
   
163  \begin{classdesc}{DataCollector}{source = Source.XML}  \begin{classdesc}{DataCollector}{source = Source.XML}
164  A data collector is used to read data from an XML file or from  A data collector is used to read data either from a XML file (using
165  an escript object directly.  \texttt{setFileName()}) or from an escript object directly (using
166    \texttt{setData()}). Writing XML files are expensive, but this approach has
167    the advantage given that the results can be analyzed easily after the
168    simulation has completed.  
169  \end{classdesc}  \end{classdesc}
170    
171  The following are some of the methods available:  The following are some of the methods available:
# Line 177  Set the XML file name to read. Line 177  Set the XML file name to read.
177  Create data using the \textless name\textgreater=\textless data\textgreater  Create data using the \textless name\textgreater=\textless data\textgreater
178  pairing. Assumption is made that the data will be given in the  pairing. Assumption is made that the data will be given in the
179  appropriate format.  appropriate format.
   
 BUG: Reading source data directly from an escript object is NOT  
 work properly. Therefore this method should NOT be used at this stage.  
180  \end{methoddesc}  \end{methoddesc}
181    
182  \begin{methoddesc}[DataCollector]{setActiveScalar}{scalar}  \begin{methoddesc}[DataCollector]{setActiveScalar}{scalar}
# Line 209  Set the image name to be read. Line 206  Set the image name to be read.
206    
207  \begin{classdesc}{Text2D}{scene, text, viewport = Viewport.SOUTH_WEST}  \begin{classdesc}{Text2D}{scene, text, viewport = Viewport.SOUTH_WEST}
208  A two-dimensional text is used to annotate the rendered object  A two-dimensional text is used to annotate the rendered object
209  (i.e. adding titles, authors and labels).  (i.e. inserting titles, authors and labels).
210  \end{classdesc}  \end{classdesc}
211    
212  The following are some of the methods available:  The following are some of the methods available:
# Line 232  Including methods from \ActorTwoD. Line 229  Including methods from \ActorTwoD.
229    
230    
231  \subsection{Data Visualization Classes}  \subsection{Data Visualization Classes}
232    \label{DATAVIS SEC}
233  This subsection details the instances used to process and manipulate the source  This subsection details the instances used to process and manipulate the source
234  data.  data. The typical usage of some of the classes are also shown.
235    
236  One point to note is that the source can either be point or cell data. If the  One point to note is that the source can either be point or cell data. If the
237  source is cell data, a conversion to point data may or may not be  source is cell data, a conversion to point data may or may not be
238  required, in order for the object to be rendered correctly.  required, in order for the object to be rendered correctly.
239  If a conversion is needed, the 'cell_to_point' flag (see below) must be set to  If a conversion is needed, the 'cell_to_point' flag (see below) must
240  'True', otherwise 'False' (which is the default).  be set to 'True', otherwise 'False' (which is the default). On occasions, an
241    inaccurate object may be rendered from cell data even after conversion.
242    
243  \subsubsection{\Map class}  \subsubsection{\Map class}
244    
# Line 247  If a conversion is needed, the 'cell_to_ Line 246  If a conversion is needed, the 'cell_to_
246  viewport = Viewport.SOUTH_WEST, lut = Lut.COLOR, cell_to_point = False,  viewport = Viewport.SOUTH_WEST, lut = Lut.COLOR, cell_to_point = False,
247  outline = True}  outline = True}
248  Class that shows a scalar field on a domain surface. The domain surface  Class that shows a scalar field on a domain surface. The domain surface
249  can either be colored or grey-scaled, depending on the lookup table used.  can either be color or gray-scale, depending on the lookup table used.
250  \end{classdesc}  \end{classdesc}
251    
252  The following are some of the methods available:\\  The following are some of the methods available:\\
253  Methods from \ActorThreeD.  Methods from \ActorThreeD and \DataSetMapper.
254    
255  A typical usage of \Map is shown below, which can be found in  A typical usage of \Map is shown below.
 \texttt{\PyvisiExampleDirectory}.  
256    
257  \begin{python}  \begin{python}
258    """
259    Author: John Ngui, john.ngui@uq.edu.au
260    """
261    
262  # Import the necessary modules.  # Import the necessary modules.
263  from esys.pyvisi import Scene, DataCollector, Map, Camera  from esys.pyvisi import Scene, DataCollector, Map, Camera
264  from esys.pyvisi.constant import *  from esys.pyvisi.constant import *
265    import os
266    
267  PYVISI_EXAMPLE_MESHES_PATH = "data_meshes/"  PYVISI_EXAMPLE_MESHES_PATH = "data_meshes"
268  PYVISI_EXAMPLE_IMAGES_PATH = "data_sample_images/"  PYVISI_EXAMPLE_IMAGES_PATH = "data_sample_images"
269  X_SIZE = 800  X_SIZE = 800
270  Y_SIZE = 800  Y_SIZE = 800
271    
# Line 272  FILE_3D = "interior_3D.xml" Line 275  FILE_3D = "interior_3D.xml"
275  IMAGE_NAME = "map.jpg"  IMAGE_NAME = "map.jpg"
276  JPG_RENDERER = Renderer.ONLINE_JPG  JPG_RENDERER = Renderer.ONLINE_JPG
277    
   
278  # Create a Scene with four viewports.  # Create a Scene with four viewports.
279  s = Scene(renderer = JPG_RENDERER, num_viewport = 4, x_size = X_SIZE,  s = Scene(renderer = JPG_RENDERER, num_viewport = 4, x_size = X_SIZE,
280          y_size = Y_SIZE)          y_size = Y_SIZE)
281    
282  # Create a DataCollector reading from a XML file.  # Create a DataCollector reading from a XML file.
283  dc1 = DataCollector(source = Source.XML)  dc1 = DataCollector(source = Source.XML)
284  dc1.setFileName(file_name = PYVISI_EXAMPLE_MESHES_PATH + FILE_3D)  dc1.setFileName(file_name = os.path.join(PYVISI_EXAMPLE_MESHES_PATH, FILE_3D))
285  dc1.setActiveScalar(scalar = SCALAR_FIELD_POINT_DATA)  dc1.setActiveScalar(scalar = SCALAR_FIELD_POINT_DATA)
286    
287  # Create a  Map for the first viewport.  # Create a  Map for the first viewport.
# Line 288  m1 = Map(scene = s, data_collector = dc1 Line 290  m1 = Map(scene = s, data_collector = dc1
290  m1.setRepresentationToWireframe()  m1.setRepresentationToWireframe()
291    
292  # Create a Camera for the first viewport  # Create a Camera for the first viewport
293  c1 = Camera(scene = s, data_collector = dc1, viewport = Viewport.SOUTH_WEST)  c1 = Camera(scene = s, viewport = Viewport.SOUTH_WEST)
294  c1.isometricView()  c1.isometricView()
295    
296  # Create a second DataCollector reading from the same XML file but specifying  # Create a second DataCollector reading from the same XML file but specifying
297  # a different scalar field.  # a different scalar field.
298  dc2 = DataCollector(source = Source.XML)  dc2 = DataCollector(source = Source.XML)
299  dc2.setFileName(file_name = PYVISI_EXAMPLE_MESHES_PATH + FILE_3D)  dc2.setFileName(file_name = os.path.join(PYVISI_EXAMPLE_MESHES_PATH, FILE_3D))
300  dc2.setActiveScalar(scalar = SCALAR_FIELD_CELL_DATA)  dc2.setActiveScalar(scalar = SCALAR_FIELD_CELL_DATA)
301    
302  # Create a Map for the third viewport.  # Create a Map for the third viewport.
303  m2 = Map(scene = s, data_collector = dc2, viewport = Viewport.NORTH_EAST,  m2 = Map(scene = s, data_collector = dc2, viewport = Viewport.NORTH_EAST,
304          lut = Lut.COLOR, cell_to_point = True, outline = True)          lut = Lut.COLOR, cell_to_point = True, outline = True)
305    
306    # Create a Camera for the third viewport
307    c2 = Camera(scene = s, viewport = Viewport.NORTH_EAST)
308    
309  # Render the object.  # Render the object.
310  s.render(PYVISI_EXAMPLE_IMAGES_PATH + IMAGE_NAME)  s.render(image_name = os.path.join(PYVISI_EXAMPLE_IMAGES_PATH, IMAGE_NAME))
311  \end{python}  \end{python}
312    
313  \subsubsection{\MapOnPlaneCut class}  \subsubsection{\MapOnPlaneCut class}
# Line 316  X, Y and Z axes. Line 321  X, Y and Z axes.
321  \end{classdesc}  \end{classdesc}
322    
323  The following are some of the methods available:\\  The following are some of the methods available:\\
324  Methods from \ActorThreeD and \Transform.  Methods from \ActorThreeD, \Transform and \DataSetMapper.
325    
326  \subsubsection{\MapOnPlaneClip class}  \subsubsection{\MapOnPlaneClip class}
327    
# Line 328  scalar field clipped using a plane. Line 333  scalar field clipped using a plane.
333  \end{classdesc}  \end{classdesc}
334    
335  The following are some of the methods available:\\  The following are some of the methods available:\\
336  Methods from \ActorThreeD, \Transform and \Clipper.  Methods from \ActorThreeD, \Transform, \Clipper and \DataSetMapper.
337    
338  \subsubsection{\MapOnScalarClip class}  \subsubsection{\MapOnScalarClip class}
339    
# Line 340  field clipped using a scalar value. Line 345  field clipped using a scalar value.
345  \end{classdesc}  \end{classdesc}
346    
347  The following are some of the methods available:\\  The following are some of the methods available:\\
348  Methods from \ActorThreeD and \Clipper.  Methods from \ActorThreeD, \Clipper and \DataSetMapper.
349    
350    \subsubsection{\MapOnScalarClipWithRotation class}
351    
352    \begin{classdesc}{MapOnScalarClipWithRotation}{scene, data_collector,
353    viewport = Viewport.SOUTH_WEST, lut = Lut.COLOR, cell_to_point = False}
354    This class works in a similar way to \Map except that it
355    shows a 2D scalar field clipped using a scalar value and subsequently
356    rotated around the z-axis to create a  3D looking effect. This class should
357    only be used with 2D data sets and NOT 3D.
358    \end{classdesc}
359    
360    The following are some of the methods available:\\
361    Methods from \ActorThreeD, \Clipper, \Rotation and \DataSetMapper.
362    
363  \subsubsection{\Velocity class}  \subsubsection{\Velocity class}
364    
365  \begin{classdesc}{Velocity}{scene, data_collector,  \begin{classdesc}{Velocity}{scene, data_collector, arrow = Arrow.TWO_D,
366  viewport = Viewport.SOUTH_WEST, color_mode = ColorMode.VECTOR,  color_mode = ColorMode.VECTOR, viewport = Viewport.SOUTH_WEST,  
367  arrow = Arrow.TWO_D, lut = Lut.COLOR, cell_to_point = False, outline = True}  lut = Lut.COLOR, cell_to_point = False, outline = True}
368  Class that shows a vector field using arrows. The arrows can either be  Class that shows a vector field using arrows. The arrows can either be
369  colored or grey-scaled, depending on the lookup table used. If the arrows  color or gray-scale, depending on the lookup table used. If the arrows
370  are colored, there are two possible coloring modes, either using vector data or  are colored, there are two possible coloring modes, either using vector data or
371  scalar data. Similarly, there are two possible types of arrows, either  scalar data. Similarly, there are two possible types of arrows, either
372  using two-dimensional or three-dimensional.  using two-dimensional or three-dimensional.
373  \end{classdesc}  \end{classdesc}
374    
375  The following are some of the methods available:\\  The following are some of the methods available:\\
376  Methods from \ActorThreeD, \GlyphThreeD and \MaskPoints.  Methods from \ActorThreeD, \GlyphThreeD, \MaskPoints and \DataSetMapper.
377    
378  \subsubsection{\VelocityOnPlaneCut class}  \subsubsection{\VelocityOnPlaneCut class}
379    
380  \begin{classdesc}{VelocityOnPlaneCut}{scene, data_collector,  \begin{classdesc}{VelocityOnPlaneCut}{scene, data_collector,
381  arrow = Arrow.TWO_D, color_mode = ColorMode.VECTOR,  arrow = Arrow.TWO_D, color_mode = ColorMode.VECTOR,
382  viewport = Viewport.SOUTH_WEST, lut = Lut.COLOR,  viewport = Viewport.SOUTH_WEST, lut = Lut.COLOR,
383  cell_to_point = False, outline = True}  cell_to_point = False, outline = True}
# Line 368  it shows a vector field using arrows cut Line 386  it shows a vector field using arrows cut
386  \end{classdesc}  \end{classdesc}
387    
388  The following are some of the methods available:\\  The following are some of the methods available:\\
389  Methods from \ActorThreeD, \GlyphThreeD, \Transform and \MaskPoints.  Methods from \ActorThreeD, \GlyphThreeD, \Transform, \MaskPoints and
390    \DataSetMapper.
391    
392  A typical usage of \VelocityOnPlaneCut is shown below, which can be found in  A typical usage of \VelocityOnPlaneCut is shown below.
 \texttt{\PyvisiExampleDirectory}.  
393    
394  \begin{python}  \begin{python}
395    """
396    Author: John Ngui, john.ngui@uq.edu.au
397    """
398    
399  # Import the necessary modules  # Import the necessary modules
400  from esys.pyvisi import Scene, DataCollector, VelocityOnPlaneCut, Camera  from esys.pyvisi import Scene, DataCollector, VelocityOnPlaneCut, Camera
401  from esys.pyvisi.constant import *  from esys.pyvisi.constant import *
402    import os
403    
404  PYVISI_EXAMPLE_MESHES_PATH = "data_meshes/"  PYVISI_EXAMPLE_MESHES_PATH = "data_meshes"
405  PYVISI_EXAMPLE_IMAGES_PATH = "data_sample_images/"  PYVISI_EXAMPLE_IMAGES_PATH = "data_sample_images"
406  X_SIZE = 400  X_SIZE = 400
407  Y_SIZE = 400  Y_SIZE = 400
408    
# Line 388  FILE_3D = "interior_3D.xml" Line 411  FILE_3D = "interior_3D.xml"
411  IMAGE_NAME = "velocity.jpg"  IMAGE_NAME = "velocity.jpg"
412  JPG_RENDERER = Renderer.ONLINE_JPG  JPG_RENDERER = Renderer.ONLINE_JPG
413    
414    # Create a Scene.
 # Create a Scene with four viewports  
415  s = Scene(renderer = JPG_RENDERER, num_viewport = 1, x_size = X_SIZE,  s = Scene(renderer = JPG_RENDERER, num_viewport = 1, x_size = X_SIZE,
416          y_size = Y_SIZE)          y_size = Y_SIZE)
417    
418  # Create a DataCollector reading from a XML file.  # Create a DataCollector reading from a XML file.
419  dc1 = DataCollector(source = Source.XML)  dc1 = DataCollector(source = Source.XML)
420  dc1.setFileName(file_name = PYVISI_EXAMPLE_MESHES_PATH + FILE_3D)  dc1.setFileName(file_name = os.path.join(PYVISI_EXAMPLE_MESHES_PATH, FILE_3D))
421  dc1.setActiveVector(vector = VECTOR_FIELD_CELL_DATA)  dc1.setActiveVector(vector = VECTOR_FIELD_CELL_DATA)
422    
423  # Create VelocityOnPlaneCut.  # Create VelocityOnPlaneCut.
# Line 409  vopc1.setRatio(2) Line 431  vopc1.setRatio(2)
431  vopc1.randomOn()  vopc1.randomOn()
432    
433  # Create a Camera.  # Create a Camera.
434  c1 = Camera(scene = s, data_collector = dc1, viewport = Viewport.SOUTH_WEST)  c1 = Camera(scene = s, viewport = Viewport.SOUTH_WEST)
435  c1.isometricView()  c1.isometricView()
436  c1.elevation(angle = -20)  c1.elevation(angle = -20)
437    
438  # Render the object.  # Render the object.
439  s.render(PYVISI_EXAMPLE_IMAGES_PATH + IMAGE_NAME)  s.render(image_name = os.path.join(PYVISI_EXAMPLE_IMAGES_PATH, IMAGE_NAME))
440  \end{python}  \end{python}
441    
442  \subsubsection{\VelocityOnPlaneClip class}  \subsubsection{\VelocityOnPlaneClip class}
# Line 428  vector field using arrows clipped using Line 450  vector field using arrows clipped using
450  \end{classdesc}  \end{classdesc}
451    
452  The following are some of the methods available:\\  The following are some of the methods available:\\
453  Methods from \ActorThreeD, \GlyphThreeD, \Transform, \Clipper and  Methods from \ActorThreeD, \GlyphThreeD, \Transform, \Clipper,
454  \MaskPoints.  \MaskPoints and \DataSetMapper.
455    
456  \subsubsection{\Ellipsoid class}  \subsubsection{\Ellipsoid class}
457    
# Line 437  Methods from \ActorThreeD, \GlyphThreeD, Line 459  Methods from \ActorThreeD, \GlyphThreeD,
459  viewport = Viewport = SOUTH_WEST, lut = Lut.COLOR, cell_to_point = False,  viewport = Viewport = SOUTH_WEST, lut = Lut.COLOR, cell_to_point = False,
460  outline = True}  outline = True}
461  Class that shows a tensor field using ellipsoids. The ellipsoids can either be  Class that shows a tensor field using ellipsoids. The ellipsoids can either be
462  colored or grey-scaled, depending on the lookup table used.  color or gray-scale, depending on the lookup table used.
463  \end{classdesc}  \end{classdesc}
464    
465  The following are some of the methods available:\\  The following are some of the methods available:\\
466  Methods from \ActorThreeD, \Sphere, \TensorGlyph and \MaskPoints.  Methods from \ActorThreeD, \Sphere, \TensorGlyph, \MaskPoints and
467    \DataSetMapper.
468    
469  \subsubsection{\EllipsoidOnPlaneCut class}  \subsubsection{\EllipsoidOnPlaneCut class}
470    
# Line 453  a tensor field using ellipsoids cut usin Line 476  a tensor field using ellipsoids cut usin
476  \end{classdesc}  \end{classdesc}
477    
478  The following are some of the methods available:\\  The following are some of the methods available:\\
479  Methods from \ActorThreeD, \Sphere, \TensorGlyph, \Transform and  Methods from \ActorThreeD, \Sphere, \TensorGlyph, \Transform,
480  \MaskPoints.  \MaskPoints and \DataSetMapper.
481    
482  \subsubsection{\EllipsoidOnPlaneClip class}  \subsubsection{\EllipsoidOnPlaneClip class}
483    
# Line 466  tensor field using ellipsoids clipped us Line 489  tensor field using ellipsoids clipped us
489  \end{classdesc}  \end{classdesc}
490                    
491  The following are some of the methods available:\\  The following are some of the methods available:\\
492  Methods from \ActorThreeD, \Sphere, \TensorGlyph, \Transform, \Clipper  Methods from \ActorThreeD, \Sphere, \TensorGlyph, \Transform, \Clipper,
493  and \MaskPoints.  \MaskPoints and \DataSetMapper.
494    
495  A typical usage of \EllipsoidOnPlaneClip is shown below, which can be found in  A typical usage of \EllipsoidOnPlaneClip is shown below.
 \texttt{\PyvisiExampleDirectory}.  
496    
497  \begin{python}  \begin{python}
498    """
499    Author: John Ngui, john.ngui@uq.edu.au
500    """
501    
502  # Import the necessary modules  # Import the necessary modules
503  from esys.pyvisi import Scene, DataCollector, EllipsoidOnPlaneClip, Camera  from esys.pyvisi import Scene, DataCollector, EllipsoidOnPlaneClip, Camera
504  from esys.pyvisi.constant import *  from esys.pyvisi.constant import *
505    import os
506    
507  PYVISI_EXAMPLE_MESHES_PATH = "data_meshes/"  PYVISI_EXAMPLE_MESHES_PATH = "data_meshes"
508  PYVISI_EXAMPLE_IMAGES_PATH = "data_sample_images/"  PYVISI_EXAMPLE_IMAGES_PATH = "data_sample_images"
509  X_SIZE = 400  X_SIZE = 400
510  Y_SIZE = 400  Y_SIZE = 400
511    
# Line 493  s = Scene(renderer = JPG_RENDERER, num_v Line 520  s = Scene(renderer = JPG_RENDERER, num_v
520    
521  # Create a DataCollector reading from a XML file.  # Create a DataCollector reading from a XML file.
522  dc1 = DataCollector(source = Source.XML)  dc1 = DataCollector(source = Source.XML)
523  dc1.setFileName(file_name = PYVISI_EXAMPLE_MESHES_PATH + FILE_3D)  dc1.setFileName(file_name = os.path.join(PYVISI_EXAMPLE_MESHES_PATH, FILE_3D))
524  dc1.setActiveTensor(tensor = TENSOR_FIELD_CELL_DATA)  dc1.setActiveTensor(tensor = TENSOR_FIELD_CELL_DATA)
525    
526  # Create a EllipsoidOnPlaneClip.  # Create an EllipsoidOnPlaneClip.
527  eopc1 = EllipsoidOnPlaneClip(scene = s, data_collector = dc1,  eopc1 = EllipsoidOnPlaneClip(scene = s, data_collector = dc1,
528          viewport = Viewport.SOUTH_WEST, lut = Lut.COLOR, cell_to_point = True,          viewport = Viewport.SOUTH_WEST, lut = Lut.COLOR, cell_to_point = True,
529          outline = True)          outline = True)
# Line 504  eopc1.setPlaneToXY() Line 531  eopc1.setPlaneToXY()
531  eopc1.setScaleFactor(scale_factor = 0.2)  eopc1.setScaleFactor(scale_factor = 0.2)
532  eopc1.rotateX(angle = 10)  eopc1.rotateX(angle = 10)
533    
534  # Create a camera.  # Create a Camera.
535  c1 = Camera(scene = s, data_collector = dc1, viewport = Viewport.SOUTH_WEST)  c1 = Camera(scene = s, viewport = Viewport.SOUTH_WEST)
536  c1.bottomView()  c1.bottomView()
537  c1.azimuth(angle = -90)  c1.azimuth(angle = -90)
538  c1.elevation(angle = 10)  c1.elevation(angle = 10)
539    
540  # Render the object.  # Render the object.
541  s.render(PYVISI_EXAMPLE_IMAGES_PATH + IMAGE_NAME)  s.render(image_name = os.path.join(PYVISI_EXAMPLE_IMAGES_PATH, IMAGE_NAME))
542  \end{python}  \end{python}
543    
544  \subsubsection{\Contour class}  \subsubsection{\Contour class}
# Line 520  s.render(PYVISI_EXAMPLE_IMAGES_PATH + IM Line 547  s.render(PYVISI_EXAMPLE_IMAGES_PATH + IM
547  viewport = Viewport.SOUTH_WEST, lut = Lut.COLOR, cell_to_point = False,  viewport = Viewport.SOUTH_WEST, lut = Lut.COLOR, cell_to_point = False,
548  outline = True}  outline = True}
549  Class that shows a scalar field using contour surfaces. The contour surfaces can  Class that shows a scalar field using contour surfaces. The contour surfaces can
550  either be colored or grey-scaled, depending on the lookup table used. This  either be color or gray-scale, depending on the lookup table used. This
551  class can also be used to generate iso surfaces.  class can also be used to generate iso surfaces.
552  \end{classdesc}  \end{classdesc}
553    
554  The following are some of the methods available:\\  The following are some of the methods available:\\
555  Methods from \ActorThreeD and \ContourModule.  Methods from \ActorThreeD, \ContourModule and \DataSetMapper.
556    
557  A typical usage of \Contour is shown below, which can be found in  A typical usage of \Contour is shown below.
 \texttt{\PyvisiExampleDirectory}.  
558    
559  \begin{python}  \begin{python}
560    """
561    Author: John Ngui, john.ngui@uq.edu.au
562    """
563    
564  # Import the necessary modules  # Import the necessary modules
565  from esys.pyvisi import Scene, DataCollector, Contour, Camera  from esys.pyvisi import Scene, DataCollector, Contour, Camera
566  from esys.pyvisi.constant import *  from esys.pyvisi.constant import *
567    import os
568    
569  PYVISI_EXAMPLE_MESHES_PATH = "data_meshes/"  PYVISI_EXAMPLE_MESHES_PATH = "data_meshes"
570  PYVISI_EXAMPLE_IMAGES_PATH = "data_sample_images/"  PYVISI_EXAMPLE_IMAGES_PATH = "data_sample_images"
571  X_SIZE = 400  X_SIZE = 400
572  Y_SIZE = 400  Y_SIZE = 400
573    
# Line 545  FILE_3D = "interior_3D.xml" Line 576  FILE_3D = "interior_3D.xml"
576  IMAGE_NAME = "contour.jpg"  IMAGE_NAME = "contour.jpg"
577  JPG_RENDERER = Renderer.ONLINE_JPG  JPG_RENDERER = Renderer.ONLINE_JPG
578    
   
579  # Create a Scene.  # Create a Scene.
580  s = Scene(renderer = JPG_RENDERER, num_viewport = 1, x_size = X_SIZE,  s = Scene(renderer = JPG_RENDERER, num_viewport = 1, x_size = X_SIZE,
581          y_size = Y_SIZE)          y_size = Y_SIZE)
582    
583  # Create a DataCollector reading a XML file.  # Create a DataCollector reading a XML file.
584  dc1 = DataCollector(source = Source.XML)  dc1 = DataCollector(source = Source.XML)
585  dc1.setFileName(file_name = PYVISI_EXAMPLE_MESHES_PATH + FILE_3D)  dc1.setFileName(file_name = os.path.join(PYVISI_EXAMPLE_MESHES_PATH, FILE_3D))
586  dc1.setActiveScalar(scalar = SCALAR_FIELD_POINT_DATA)  dc1.setActiveScalar(scalar = SCALAR_FIELD_POINT_DATA)
587    
588  # Create a Contour.  # Create a Contour.
# Line 561  ctr1 = Contour(scene = s, data_collector Line 591  ctr1 = Contour(scene = s, data_collector
591  ctr1.generateContours(contours = 3)  ctr1.generateContours(contours = 3)
592    
593  # Create a Camera.  # Create a Camera.
594  cam1 = Camera(scene = s, data_collector = dc1, viewport = Viewport.SOUTH_WEST)  cam1 = Camera(scene = s, viewport = Viewport.SOUTH_WEST)
595  cam1.elevation(angle = -40)  cam1.elevation(angle = -40)
596    
597  # Render the object.  # Render the object.
598  s.render(PYVISI_EXAMPLE_IMAGES_PATH + IMAGE_NAME)  s.render(image_name = os.path.join(PYVISI_EXAMPLE_IMAGES_PATH, IMAGE_NAME))
599  \end{python}  \end{python}
600    
601  \subsubsection{\ContourOnPlaneCut class}  \subsubsection{\ContourOnPlaneCut class}
# Line 578  scalar field using contour surfaces cut Line 608  scalar field using contour surfaces cut
608  \end{classdesc}  \end{classdesc}
609    
610  The following are some of the methods available:\\  The following are some of the methods available:\\
611  Methods from \ActorThreeD, \ContourModule and \Transform.  Methods from \ActorThreeD, \ContourModule, \Transform and \DataSetMapper.
612    
613  \subsubsection{\ContourOnPlaneClip class}  \subsubsection{\ContourOnPlaneClip class}
614    
# Line 590  scalar field using contour surfaces clip Line 620  scalar field using contour surfaces clip
620  \end{classdesc}  \end{classdesc}
621    
622  The following are some of the methods available:\\  The following are some of the methods available:\\
623  Methods from \ActorThreeD, \ContourModule, \Transform and \Clipper.  Methods from \ActorThreeD, \ContourModule, \Transform, \Clipper and
624    \DataSetMapper.
625    
626  \subsubsection{\StreamLine class}  \subsubsection{\StreamLine class}
627    
628  \begin{classdesc}{StreamLine}{scene, data_collector,  \begin{classdesc}{StreamLine}{scene, data_collector,
629  viewport = Viewport.SOUTH_WEST, color_mode = ColorMode.VECTOR, lut = Lut.COLOR,  viewport = Viewport.SOUTH_WEST, color_mode = ColorMode.VECTOR, lut = Lut.COLOR,
630  outline = True}  cell_to_point = False, outline = True}
631  Class that shows the direction of particles of a vector field using streamlines.  Class that shows the direction of particles of a vector field using streamlines.
632  The streamlines can either be colored or grey-scaled, depending on the lookup  The streamlines can either be color or gray-scale, depending on the lookup
633  table used. If the streamlines are colored, there are two possible coloring  table used. If the streamlines are colored, there are two possible coloring
634  modes, either using vector data or scalar data.  modes, either using vector data or scalar data.
635  \end{classdesc}  \end{classdesc}
636    
637  The following are some of the methods available:\\  The following are some of the methods available:\\
638  Methods from \ActorThreeD, \PointSource, \StreamLineModule and \Tube.  Methods from \ActorThreeD, \PointSource, \StreamLineModule, \Tube and
639    \DataSetMapper.
640    
641  A typical usage of \StreamLine is shown below, which can be found in  A typical usage of \StreamLine is shown below.
 \texttt{\PyvisiExampleDirectory}.  
642    
643  \begin{python}  \begin{python}
644    """
645    Author: John Ngui, john.ngui@uq.edu.au
646    """
647    
648  # Import the necessary modules.  # Import the necessary modules.
649  from esys.pyvisi import Scene, DataCollector, StreamLine, Camera  from esys.pyvisi import Scene, DataCollector, StreamLine, Camera
650  from esys.pyvisi.constant import *  from esys.pyvisi.constant import *
651    import os
652    
653  PYVISI_EXAMPLE_MESHES_PATH = "data_meshes/"  PYVISI_EXAMPLE_MESHES_PATH = "data_meshes"
654  PYVISI_EXAMPLE_IMAGES_PATH = "data_sample_images/"  PYVISI_EXAMPLE_IMAGES_PATH = "data_sample_images"
655  X_SIZE = 400  X_SIZE = 400
656  Y_SIZE = 400  Y_SIZE = 400
657    
# Line 624  FILE_3D = "interior_3D.xml" Line 660  FILE_3D = "interior_3D.xml"
660  IMAGE_NAME = "streamline.jpg"  IMAGE_NAME = "streamline.jpg"
661  JPG_RENDERER = Renderer.ONLINE_JPG  JPG_RENDERER = Renderer.ONLINE_JPG
662    
   
663  # Create a Scene.  # Create a Scene.
664  s = Scene(renderer = JPG_RENDERER, num_viewport = 1, x_size = X_SIZE,  s = Scene(renderer = JPG_RENDERER, num_viewport = 1, x_size = X_SIZE,
665          y_size = Y_SIZE)          y_size = Y_SIZE)
666    
667  # Create a DataCollector reading from a XML file.  # Create a DataCollector reading from a XML file.
668  dc1 = DataCollector(source = Source.XML)  dc1 = DataCollector(source = Source.XML)
669  dc1.setFileName(file_name = PYVISI_EXAMPLE_MESHES_PATH + FILE_3D)  dc1.setFileName(file_name = os.path.join(PYVISI_EXAMPLE_MESHES_PATH, FILE_3D))
670    
671  # Create a Streamline.  # Create a Streamline.
672  sl1 = StreamLine(scene = s, data_collector = dc1,  sl1 = StreamLine(scene = s, data_collector = dc1,
673          viewport = Viewport.SOUTH_WEST, color_mode = ColorMode.SCALAR,          viewport = Viewport.SOUTH_WEST, color_mode = ColorMode.SCALAR,
674          lut = Lut.COLOR, cell_to_point = False, outline = True)          lut = Lut.COLOR, cell_to_point = False, outline = True)
675  sl1.setTubeRadius(radius = 0.02)  sl1.setTubeRadius(radius = 0.02)
676    sl1.setTubeNumberOfSides(3)
677    sl1.setTubeRadiusToVaryByVector()
678    sl1.setPointSourceRadius(0.9)
679    
680  # Create a Camera.  # Create a Camera.
681  c1 = Camera(scene = s, data_collector = dc1, viewport = Viewport.SOUTH_WEST)  c1 = Camera(scene = s, viewport = Viewport.SOUTH_WEST)
682  c1.isometricView()  c1.isometricView()
683    
684  # Render the object.  # Render the object.
685  s.render(PYVISI_EXAMPLE_IMAGES_PATH + IMAGE_NAME)  s.render(image_name = os.path.join(PYVISI_EXAMPLE_IMAGES_PATH, IMAGE_NAME))
686  \end{python}  \end{python}
687    
688  \subsubsection{\Carpet class}  \subsubsection{\Carpet class}
689    
690  \begin{classdesc}{Carpet}{scene, data_collector,  \begin{classdesc}{Carpet}{scene, data_collector,
691  viewport = Viewport.Viewport.SOUTH_WEST, warp_mode = WarpMode.SCALAR,  viewport = Viewport.Viewport.SOUTH_WEST, warp_mode = WarpMode.SCALAR,
692  lut = Lut.COLOR, outline = True}  lut = Lut.COLOR, cell_to_point = False, outline = True}
693  This class works in a similar way to \MapOnPlaneCut, except that it shows a  This class works in a similar way to \MapOnPlaneCut, except that it shows a
694  scalar field cut on a plane and deformated (warp) along the normal. The  scalar field cut on a plane and deformed (warped) along the normal. The
695  plane can either be colored or grey-scaled, depending on the lookup table used.  plane can either be color or gray-scale, depending on the lookup table used.
696  Similarly, the plane can be deformated either using scalar data or vector data.  Similarly, the plane can be deformed either using scalar data or vector data.
697  \end{classdesc}  \end{classdesc}
698    
699  The following are some of the methods available:\\  The following are some of the methods available:\\
700  Methods from \ActorThreeD, \Warp and \Transform.  Methods from \ActorThreeD, \Warp, \Transform and \DataSetMapper.
701    
702  A typical usage of \Carpet is shown below, which can be found in  A typical usage of \Carpet is shown below.
 \texttt{\PyvisiExampleDirectory}.  
703    
704  \begin{python}  \begin{python}
705    """
706    Author: John Ngui, john.ngui@uq.edu.au
707    """
708    
709  # Import the necessary modules.  # Import the necessary modules.
710  from esys.pyvisi import Scene, DataCollector, Carpet, Camera  from esys.pyvisi import Scene, DataCollector, Carpet, Camera
711  from esys.pyvisi.constant import *  from esys.pyvisi.constant import *
712    import os
713    
714  PYVISI_EXAMPLE_MESHES_PATH = "data_meshes/"  PYVISI_EXAMPLE_MESHES_PATH = "data_meshes"
715  PYVISI_EXAMPLE_IMAGES_PATH = "data_sample_images/"  PYVISI_EXAMPLE_IMAGES_PATH = "data_sample_images"
716  X_SIZE = 400  X_SIZE = 400
717  Y_SIZE = 400  Y_SIZE = 400
718    
# Line 685  s = Scene(renderer = JPG_RENDERER, num_v Line 727  s = Scene(renderer = JPG_RENDERER, num_v
727    
728  # Create a DataCollector reading from a XML file.  # Create a DataCollector reading from a XML file.
729  dc1 = DataCollector(source = Source.XML)  dc1 = DataCollector(source = Source.XML)
730  dc1.setFileName(file_name = PYVISI_EXAMPLE_MESHES_PATH + FILE_3D)  dc1.setFileName(file_name = os.path.join(PYVISI_EXAMPLE_MESHES_PATH, FILE_3D))
731  dc1.setActiveScalar(scalar = SCALAR_FIELD_CELL_DATA)  dc1.setActiveScalar(scalar = SCALAR_FIELD_CELL_DATA)
732    
733  # Create a Carpet.  # Create a Carpet.
# Line 696  cpt1.setPlaneToXY(0.2) Line 738  cpt1.setPlaneToXY(0.2)
738  cpt1.setScaleFactor(1.9)  cpt1.setScaleFactor(1.9)
739    
740  # Create a Camera.  # Create a Camera.
741  c1 = Camera(scene = s, data_collector = dc1, viewport = Viewport.SOUTH_WEST)  c1 = Camera(scene = s, viewport = Viewport.SOUTH_WEST)
742  c1.isometricView()  c1.isometricView()
743    
744  # Render the object.  # Render the object.
745  s.render(PYVISI_EXAMPLE_IMAGES_PATH + IMAGE_NAME)  s.render(image_name = os.path.join(PYVISI_EXAMPLE_IMAGES_PATH, IMAGE_NAME))
746  \end{python}  \end{python}
747    
748    \subsubsection{\Legend class}
749    
750    \begin{classdesc}{Legend}{scene, data_collector,
751    viewport = Viewport.SOUTH_WEST, lut = Lut.COLOR, legend = LegendType.SCALAR}
752    Class that shows a scalar field on a domain surface. The domain surface
753    can either be color or gray-scale, depending on the lookup table used
754    \end{classdesc}
755    
756    The following are some of the methods available:\\
757    Methods from \ActorThreeD, \ScalarBar and \DataSetMapper.
758    
759    \subsubsection{\Rectangle class}
760    
761    \begin{classdesc}{Rectangle}{scene, viewport = Viewport.SOUTH_WEST}
762    Class that generates a rectangle box.
763    \end{classdesc}
764    
765    The following are some of the methods available:\\
766    Methods from \ActorThreeD, \CubeSource and \DataSetMapper.
767    
768  \subsubsection{\Image class}  \subsubsection{\Image class}
769    
770  \begin{classdesc}{Image}{scene, image_reader, viewport = Viewport.SOUTH_WEST}  \begin{classdesc}{Image}{scene, image_reader, viewport = Viewport.SOUTH_WEST}
771  Class that displays an image which can be scaled (upwards and downwards). The  Class that displays an image which can be scaled (upwards and downwards) and
772  image can also be translated and rotated along the X, Y and Z axes.  has interaction capability. The image can also be translated and rotated along
773    the X, Y and Z axes. One of the most common use of this feature is pasting an
774    image on a surface map.
775  \end{classdesc}  \end{classdesc}
776    
777  The following are some of the methods available:\\  The following are some of the methods available:\\
778  Methods from \ActorThreeD, \PlaneSource and \Transform.  Methods from \ActorThreeD, \PlaneSource and \Transform.
779    
780  A typical usage of \Image is shown below, which can be found in  A typical usage of \Image is shown below.
 \texttt{\PyvisiExampleDirectory}.  
781    
782  \begin{python}  \begin{python}
783    """
784    Author: John Ngui, john.ngui@uq.edu.au
785    """
786    
787  # Import the necessary modules.  # Import the necessary modules.
788  from esys.pyvisi import Scene, DataCollector, StreamLine, Camera  from esys.pyvisi import Scene, DataCollector, Map, ImageReader, Image, Camera
789    from esys.pyvisi import GlobalPosition
790  from esys.pyvisi.constant import *  from esys.pyvisi.constant import *
791    import os
792    
793  PYVISI_EXAMPLE_MESHES_PATH = "data_meshes/"  PYVISI_EXAMPLE_MESHES_PATH = "data_meshes"
794  PYVISI_EXAMPLE_IMAGES_PATH = "data_sample_images/"  PYVISI_EXAMPLE_IMAGES_PATH = "data_sample_images"
795  X_SIZE = 400  X_SIZE = 400
796  Y_SIZE = 400  Y_SIZE = 400
797    
798  VECTOR_FIELD_CELL_DATA = "temperature"  SCALAR_FIELD_POINT_DATA = "temperature"
799  FILE_3D = "interior_3D.xml"  FILE_3D = "interior_3D.xml"
800  IMAGE_NAME = "streamline.jpg"  LOAD_IMAGE_NAME = "flinders.jpg"
801    SAVE_IMAGE_NAME = "image.jpg"
802  JPG_RENDERER = Renderer.ONLINE_JPG  JPG_RENDERER = Renderer.ONLINE_JPG
803    
   
804  # Create a Scene.  # Create a Scene.
805  s = Scene(renderer = JPG_RENDERER, num_viewport = 1, x_size = X_SIZE,  s = Scene(renderer = JPG_RENDERER, num_viewport = 1, x_size = X_SIZE,
806          y_size = Y_SIZE)          y_size = Y_SIZE)
807    
808  # Create a DataCollector reading from a XML file.  # Create a DataCollector reading from a XML file.
809  dc1 = DataCollector(source = Source.XML)  dc1 = DataCollector(source = Source.XML)
810  dc1.setFileName(file_name = PYVISI_EXAMPLE_MESHES_PATH + FILE_3D)  dc1.setFileName(file_name = os.path.join(PYVISI_EXAMPLE_MESHES_PATH, FILE_3D))
811    
812  # Create a Streamline.  # Create a Map.
813  sl1 = StreamLine(scene = s, data_collector = dc1,  m1 = Map(scene = s, data_collector = dc1, viewport = Viewport.SOUTH_WEST,
         viewport = Viewport.SOUTH_WEST, color_mode = ColorMode.SCALAR,  
814          lut = Lut.COLOR, cell_to_point = False, outline = True)          lut = Lut.COLOR, cell_to_point = False, outline = True)
815  sl1.setTubeRadius(radius = 0.02)  m1.setOpacity(0.3)
816    
817    # Create an ImageReader (in place of DataCollector).
818    ir = ImageReader(ImageFormat.JPG)
819    ir.setImageName(image_name =  os.path.join(PYVISI_EXAMPLE_MESHES_PATH, \
820            LOAD_IMAGE_NAME))
821    
822    # Create an Image.
823    i = Image(scene = s, image_reader = ir, viewport = Viewport.SOUTH_WEST)
824    i.setOpacity(opacity = 0.9)
825    i.translate(0,0,-1)
826    i.setPoint1(GlobalPosition(2,0,0))
827    i.setPoint2(GlobalPosition(0,2,0))
828    
829    # Create a Camera.
830    c1 = Camera(scene = s, viewport = Viewport.SOUTH_WEST)
831    
832    # Render the image.
833    s.render(image_name = os.path.join(PYVISI_EXAMPLE_IMAGES_PATH, SAVE_IMAGE_NAME))
834    \end{python}
835    
836    \subsubsection{\Logo class}
837    
838    \begin{classdesc}{Logo}{scene, image_reader, viewport = Viewport.SOUTH_WEST}
839    Class that displays a static image, in particular a logo
840    (i.e. company symbol) and has NO interaction capability. The position and size
841    of the logo can be specified.
842    \end{classdesc}
843    
844    The following are some of the methods available:\\
845    Methods from \ImageReslice and \ActorTwoD.
846    
847    \subsubsection{\Movie class}
848    
849    \begin{classdesc}{Movie}{parameter_file = "make_movie"}
850    Class that creates a file called 'make_movie' by default (if a parameter
851    file name is not specified) which contains a list of parameters required
852    by the 'ppmtompeg' command to generate a movie from a series of images.
853    \end{classdesc}
854    
855    The following are some of the methods available:\\
856    \begin{methoddesc}[Movie]{imageRange}{input_directory, first_image, last_image}
857    The image range from which the movie is to be generated from.
858    \end{methoddesc}
859    
860    \begin{methoddesc}[Movie]{imageList}{input_directory, image_list}
861    The image list from which the movie is to be generated from.
862    \end{methoddesc}
863    
864    \begin{methoddesc}[Movie]{makeMovie}{movie}
865    Generate the movie.
866    \end{methoddesc}
867    
868    A typical usage of \Movie is shown below.
869    
870    \begin{python}
871    """
872    Author: John Ngui, john.ngui@uq.edu.au
873    """
874    
875    # Import the necessary modules.
876    from esys.pyvisi import Scene, DataCollector, Map, Camera, Velocity, Legend
877    from esys.pyvisi import Movie, LocalPosition
878    from esys.pyvisi.constant import *
879    import os
880    
881    PYVISI_EXAMPLE_MESHES_PATH = "data_meshes"
882    PYVISI_EXAMPLE_IMAGES_PATH = "data_sample_images"
883    X_SIZE = 800
884    Y_SIZE = 800
885    
886    SCALAR_FIELD_POINT_DATA = "temp"
887    FILE_2D = "tempvel-"
888    IMAGE_NAME = "movie"
889    JPG_RENDERER = Renderer.ONLINE_JPG
890    
891    # Create a Scene.
892    s = Scene(renderer = JPG_RENDERER, num_viewport = 1, x_size = X_SIZE,
893            y_size = Y_SIZE)
894    
895    # Create a DataCollector reading from a XML file.
896    dc1 = DataCollector(source = Source.XML)
897    dc1.setActiveScalar(scalar = SCALAR_FIELD_POINT_DATA)
898    
899    # Create a Map.
900    m1 = Map(scene = s, data_collector = dc1,
901            viewport = Viewport.SOUTH_WEST, lut = Lut.COLOR, cell_to_point = False,
902            outline = True)
903    
904  # Create a Camera.  # Create a Camera.
905  c1 = Camera(scene = s, data_collector = dc1, viewport = Viewport.SOUTH_WEST)  cam1 = Camera(scene = s, viewport = Viewport.SOUTH_WEST)
 c1.isometricView()  
906    
907  # Render the object.  # Create a movie.
908  s.render(PYVISI_EXAMPLE_IMAGES_PATH + IMAGE_NAME)  mov = Movie()
909    #lst = []
910    
911    # Read in one file one after another and render the object.
912    for i in range(938, 949):
913        dc1.setFileName(file_name =  os.path.join(PYVISI_EXAMPLE_MESHES_PATH, \
914                FILE_2D + "%06d.vtu") % i)
915    
916        s.render(image_name = os.path.join(PYVISI_EXAMPLE_IMAGES_PATH, \
917                IMAGE_NAME + "%06d.jpg") % i)
918    
919        #lst.append(IMAGE_NAME + "%06d.jpg" % i)
920    
921    # Images (first and last inclusive) from which the movie is to be generated.
922    mov.imageRange(input_directory = PYVISI_EXAMPLE_IMAGES_PATH,
923            first_image = IMAGE_NAME + "000938.jpg",
924            last_image = IMAGE_NAME + "000948.jpg")
925    
926    # Alternatively, a list of images can be specified.
927    #mov.imageList(input_directory = PYVISI_EXAMPLE_IMAGES_PATH, image_list = lst)
928    
929    # Generate the movie.
930    mov.makeMovie(os.path.join(PYVISI_EXAMPLE_IMAGES_PATH, "movie.mpg"))
931  \end{python}  \end{python}
932    
933    
# Line 761  s.render(PYVISI_EXAMPLE_IMAGES_PATH + IM Line 937  s.render(PYVISI_EXAMPLE_IMAGES_PATH + IM
937  \subsection{Coordinate Classes}  \subsection{Coordinate Classes}
938  This subsection details the instances used to position the rendered object.  This subsection details the instances used to position the rendered object.
939    
940    \subsubsection{\LocalPosition class}
941    
942  \begin{classdesc}{LocalPosition}{x_coor, y_coor}  \begin{classdesc}{LocalPosition}{x_coor, y_coor}
943  Class that defines the local positioning coordinate system (2D).  Class that defines the local positioning (X and Y) coordinate system (2D).
944  \end{classdesc}  \end{classdesc}
945    
946    \subsubsection{\GlobalPosition class}
947    
948  \begin{classdesc}{GlobalPosition}{x_coor, y_coor, z_coor}  \begin{classdesc}{GlobalPosition}{x_coor, y_coor, z_coor}
949  Class that defines the global positioning coordinate system (3D).  Class that defines the global positioning (X, Y and Z) coordinate system (3D).
950  \end{classdesc}  \end{classdesc}
951    
952    
# Line 774  Class that defines the global positionin Line 954  Class that defines the global positionin
954    
955    
956  \subsection{Supporting Classes}  \subsection{Supporting Classes}
957  This subsection details the supporting classes inherited by the data  This subsection details the supporting classes and their corresponding methods
958  visualization classes and their available methods.  inherited by the input (see Section \ref{INPUT SEC}) and data
959    visualization classes (see Section \ref{DATAVIS SEC}).
960    
961  \subsubsection{\ActorThreeD class}  \subsubsection{\ActorThreeD class}
962    Class that defines a 3D actor. \\
963    
964  The following are some of the methods available:  The following are some of the methods available:
965    
# Line 794  Set the representation of the 3D actor t Line 976  Set the representation of the 3D actor t
976  \end{methoddesc}  \end{methoddesc}
977    
978  \subsubsection{\ActorTwoD class}  \subsubsection{\ActorTwoD class}
979    Class that defines a 2D actor. \\
980    
981  The following are some of the methods available:  The following are some of the methods available:
982    
# Line 803  corner of the window / viewport. Line 986  corner of the window / viewport.
986  \end{methoddesc}  \end{methoddesc}
987    
988  \subsubsection{\Clipper class}  \subsubsection{\Clipper class}
989    Class that defines a clipper. \\
990    
991  The following are some of the methods available:  The following are some of the methods available:
992    
# Line 819  Set the scalar clip value (instead of us Line 1003  Set the scalar clip value (instead of us
1003  \end{methoddesc}  \end{methoddesc}
1004    
1005  \subsubsection{\ContourModule class}  \subsubsection{\ContourModule class}
1006    Class that defines the contour module. \\
1007    
1008  The following are some of the methods available:  The following are some of the methods available:
1009    
1010  \begin{methoddesc}[ContourModule]{generateContours}{contours,  \begin{methoddesc}[ContourModule]{generateContours}{contours = None,
1011  lower_range = None, upper_range = None}  lower_range = None, upper_range = None}
1012  Generate the specified number of contours within the specified range.  Generate the specified number of contours within the specified range.
1013  In order to generate an iso surface, the 'lower_range' and 'upper_range'  In order to generate an iso surface, the 'lower_range' and 'upper_range'
# Line 830  must be equal. Line 1015  must be equal.
1015  \end{methoddesc}  \end{methoddesc}
1016    
1017  \subsubsection{\GlyphThreeD class}  \subsubsection{\GlyphThreeD class}
1018    Class that defines 3D glyphs. \\
1019    
1020  The following are some of the methods available:  The following are some of the methods available:
1021    
# Line 846  Set the 3D glyph scale factor. Line 1032  Set the 3D glyph scale factor.
1032  \end{methoddesc}  \end{methoddesc}
1033    
1034  \subsubsection{\TensorGlyph class}  \subsubsection{\TensorGlyph class}
1035    Class that defines tensor glyphs. \\
1036    
1037  The following are some of the methods available:  The following are some of the methods available:
1038    
# Line 858  Set the maximum allowable scale factor f Line 1045  Set the maximum allowable scale factor f
1045  \end{methoddesc}  \end{methoddesc}
1046    
1047  \subsubsection{\PlaneSource class}  \subsubsection{\PlaneSource class}
1048    Class that defines a plane source.  A plane source is defined by an origin
1049    and two other points, which form the axes (X and Y). \\
1050    
1051  The following are some of the methods available:  The following are some of the methods available:
1052    
# Line 870  Set the second point from the origin of Line 1059  Set the second point from the origin of
1059  \end{methoddesc}  \end{methoddesc}
1060    
1061  \subsubsection{\PointSource class}  \subsubsection{\PointSource class}
1062    Class that defines the source (location) to generate points. The points are
1063    generated within the radius of a sphere. \\
1064    
1065  The following are some of the methods available:  The following are some of the methods available:
1066    
# Line 877  The following are some of the methods av Line 1068  The following are some of the methods av
1068  Set the radius of the sphere.  Set the radius of the sphere.
1069  \end{methoddesc}  \end{methoddesc}
1070    
1071  \begin{methoddesc}[PointSource]{setPointSourceCenter}{position}  \begin{methoddesc}[PointSource]{setPointSourceCenter}{center}
1072  Set the center of the sphere.  Set the center of the sphere.
1073  \end{methoddesc}  \end{methoddesc}
1074    
# Line 887  number of points, the more streamlines a Line 1078  number of points, the more streamlines a
1078  \end{methoddesc}  \end{methoddesc}
1079    
1080  \subsubsection{\Sphere class}  \subsubsection{\Sphere class}
1081    Class that defines a sphere. \\
1082    
1083  The following are some of the methods available:  The following are some of the methods available:
1084    
# Line 895  Set the theta resolution of the sphere. Line 1087  Set the theta resolution of the sphere.
1087  \end{methoddesc}  \end{methoddesc}
1088    
1089  \begin{methoddesc}[Sphere]{setPhiResolution}{resolution}  \begin{methoddesc}[Sphere]{setPhiResolution}{resolution}
1090  Set the phi resoluton of the sphere.  Set the phi resolution of the sphere.
1091  \end{methoddesc}  \end{methoddesc}
1092    
1093  \subsubsection{\StreamLineModule class}  \subsubsection{\StreamLineModule class}
1094    Class that defines the streamline module. \\
1095    
1096  The following are some of the methods available:  The following are some of the methods available:
1097    
# Line 912  goes) and backward (where the streamline Line 1105  goes) and backward (where the streamline
1105  \end{methoddesc}  \end{methoddesc}
1106    
1107  \subsubsection{\Transform class}  \subsubsection{\Transform class}
1108    Class that defines the orientation of planes. \\
1109    
1110    The following are some of the methods available:
1111    
1112  \begin{methoddesc}[Transform]{translate}{x_offset, y_offset, z_offset}  \begin{methoddesc}[Transform]{translate}{x_offset, y_offset, z_offset}
1113  Translate the rendered object along the x, y and z-axes.  Translate the rendered object along the x, y and z-axes.
# Line 942  Set the plane orthogonal to the y-axis. Line 1138  Set the plane orthogonal to the y-axis.
1138  \end{methoddesc}  \end{methoddesc}
1139    
1140  \subsubsection{\Tube class}  \subsubsection{\Tube class}
1141    Class that defines the tube wrapped around the streamlines. \\
1142    
1143    The following are some of the methods available:
1144    
1145  \begin{methoddesc}[Tube]{setTubeRadius}{radius}  \begin{methoddesc}[Tube]{setTubeRadius}{radius}
1146  Set the radius of the tube.  Set the radius of the tube.
# Line 956  Set the radius of the tube to vary by sc Line 1155  Set the radius of the tube to vary by sc
1155  \end{methoddesc}  \end{methoddesc}
1156    
1157  \subsubsection{\Warp class}  \subsubsection{\Warp class}
1158    Class that defines the deformation of a scalar field. \\
1159    
1160    The following are some of the methods available:
1161    
1162  \begin{methoddesc}[Warp]{setScaleFactor}{scale_factor}  \begin{methoddesc}[Warp]{setScaleFactor}{scale_factor}
1163  Set the displacement scale factor.  Set the displacement scale factor.
1164  \end{methoddesc}  \end{methoddesc}
1165    
1166  \subsubsection{\MaskPoints class}  \subsubsection{\MaskPoints class}
1167    Class that defines the masking of points
1168    every n'th point.  This is useful to prevent the rendered object
1169    from being cluttered with arrows or ellipsoids. \\
1170    
1171    The following are some of the methods available:
1172    
1173  \begin{methoddesc}[MaskPoints]{setRatio}{ratio}  \begin{methoddesc}[MaskPoints]{setRatio}{ratio}
1174  Mask every nth point.  Mask every n'th point.
1175  \end{methoddesc}  \end{methoddesc}
1176    
1177  \begin{methoddesc}[MaskPoints]{randomOn}{}  \begin{methoddesc}[MaskPoints]{randomOn}{}
1178  Enables the randomization of the points selected for masking.  Enables the randomization of the points selected for masking.
1179  \end{methoddesc}  \end{methoddesc}
1180    
1181  \section{Online Rendering Mechnism}  \subsubsection{\ScalarBar class}
1182    Class that defines a scalar bar. \\
1183    
1184  %\begin{table}  The following are some of the methods available:
1185  %\begin{tabular}{c c c}  
1186  %\includegraphics[width=\thumbnailwidth]{figures/Map} &  \begin{methoddesc}[ScalarBar]{setTitle}{title}
1187  %\includegraphics[width=\thumbnailwidth]{figures/MapOnPlaneCut} &  Set the title of the scalar bar.
1188  %\includegraphics[width=\thumbnailwidth]{figures/MapOnPlaneClip} \\  \end{methoddesc}
1189  %1 & 2 & 3 \\  
1190  %\includegraphics[width=\thumbnailwidth]{figures/MapOnScalarClip}  \\  \begin{methoddesc}[ScalarBar]{setPosition}{position}
1191  %4  Set the local position of the scalar bar.
1192  %\end{tabular}  \end{methoddesc}
1193  %\end{table}  
1194    \begin{methoddesc}[ScalarBar]{setOrientationToHorizontal}{}
1195    Set the orientation of the scalar bar to horizontal.
1196    \end{methoddesc}
1197    
1198    \begin{methoddesc}[ScalarBar]{setOrientationToVertical}{}
1199    Set the orientation of the scalar bar to vertical.
1200    \end{methoddesc}
1201    
1202    \begin{methoddesc}[ScalarBar]{setHeight}{height}
1203    Set the height of the scalar bar.
1204    \end{methoddesc}
1205    
1206    \begin{methoddesc}[ScalarBar]{setWidth}{width}
1207    Set the width of the scalar bar.
1208    \end{methoddesc}
1209    
1210    \begin{methoddesc}[ScalarBar]{setLabelColor}{color}
1211    Set the color of the scalar bar's label.
1212    \end{methoddesc}
1213    
1214    \begin{methoddesc}[ScalarBar]{setTitleColor}{color}
1215    Set the color of the scalar bar's title.
1216    \end{methoddesc}
1217    
1218    \subsubsection{\ImageReslice class}
1219    Class that defines an image reslice used to resize static
1220    (no interaction capability) images (i.e. logo). \\
1221    
1222    The following are some of the methods available:
1223    
1224    \begin{methoddesc}[ImageReslice]{setSize}{size}
1225    Set the size of the image (logo in particular), between 0 and 2. Size 1 (one)
1226    displays the image in its original size (which is the default).
1227    \end{methoddesc}
1228    
1229    \subsubsection{\DataSetMapper class}
1230    Class that defines a data set mapper. \\
1231    
1232    The following are some of the methods available:
1233    
1234    \begin{methoddesc}[DataSetMapper]{setScalarRange}{lower_range, upper_range}
1235    Set the minimum and maximum scalar range for the data set mapper. This
1236    method is called when the range has been specified by the user.
1237    Therefore, the scalar range read from the source will be ignored.
1238    \end{methoddesc}
1239    
1240    \subsubsection{\CubeSource class}
1241    Class that defines a cube source. The center of the cube source defines
1242    the point from which the cube is to be generated and the X, Y
1243    and Z lengths define the length of the cube from the center point. If
1244    X length is 3, then the X length to the left and right of the center
1245    point is 1.5 respectively.\\
1246    
1247    The following are some of the methods available:
1248    
1249    \begin{methoddesc}[CubeSource]{setCenter}{center}
1250    Set the cube source center.
1251    \end{methoddesc}
1252    
1253    \begin{methoddesc}[CubeSource]{setXLength}{length}
1254    Set the cube source length along the x-axis.
1255    \end{methoddesc}
1256    
1257    \begin{methoddesc}[CubeSource]{setYLength}{length}
1258    Set the cube source length along the y-axis.
1259    \end{methoddesc}
1260    
1261    \begin{methoddesc}[CubeSource]{setZLength}{length}
1262    Set the cube source length along the z-axis.
1263    \end{methoddesc}
1264    
1265    \subsubsection{\Rotation class}
1266    Class that sweeps 2D data around the z-axis to create a 3D looking effect. \\
1267    
1268    The following are some of the methods available:
1269    
1270    \begin{methoddesc}[Rotation]{setResolution}{resolution}
1271    Set the resolution of the sweep for the rotation, which controls the
1272    number of intermediate points
1273    \end{methoddesc}
1274    
1275    \begin{methoddesc}[Rotation]{setAngle}{angle}
1276    Set the angle of rotation.
1277    \end{methoddesc}
1278    
1279    
1280    % #############################################################################
1281    
1282    
1283    \section{More Examples}
1284    This section shows more examples.
1285    
1286    \textsf{Reading A Series of Files}
1287    
1288    \begin{python}
1289    """
1290    Author: John Ngui, john.ngui@uq.edu.au
1291    """
1292    
1293    # Import the necessary modules.
1294    from esys.pyvisi import Scene, DataCollector, Contour, Camera
1295    from esys.pyvisi.constant import *
1296    import os
1297    
1298    PYVISI_EXAMPLE_MESHES_PATH = "data_meshes"
1299    PYVISI_EXAMPLE_IMAGES_PATH = "data_sample_images"
1300    X_SIZE = 400
1301    Y_SIZE = 300
1302    
1303    SCALAR_FIELD_POINT_DATA_1 = "lava"
1304    SCALAR_FIELD_POINT_DATA_2 = "talus"
1305    FILE_2D = "phi_talus_lava."
1306    
1307    IMAGE_NAME = "seriesofreads"
1308    JPG_RENDERER = Renderer.ONLINE_JPG
1309    
1310    # Create a Scene.
1311    s = Scene(renderer = JPG_RENDERER, num_viewport = 1, x_size = X_SIZE,
1312            y_size = Y_SIZE)
1313    
1314    # Create a DataCollector reading from a XML file.
1315    dc1 = DataCollector(source = Source.XML)
1316    dc1.setActiveScalar(scalar = SCALAR_FIELD_POINT_DATA_1)
1317    
1318    # Create a Contour.
1319    mosc1 = Contour(scene = s, data_collector = dc1,
1320            viewport = Viewport.SOUTH_WEST, lut = Lut.COLOR, cell_to_point = False,
1321            outline = True)
1322    mosc1.generateContours(0)
1323    
1324    # Create a second DataCollector reading from the same XML file
1325    # but specifying a different scalar field.
1326    dc2 = DataCollector(source = Source.XML)
1327    dc2.setActiveScalar(scalar = SCALAR_FIELD_POINT_DATA_2)
1328    
1329    # Create a second Contour.
1330    mosc2 = Contour(scene = s, data_collector = dc2,
1331            viewport = Viewport.SOUTH_WEST, lut = Lut.COLOR, cell_to_point = False,
1332            outline = True)
1333    mosc2.generateContours(0)
1334    
1335    # Create a Camera.
1336    cam1 = Camera(scene = s, viewport = Viewport.SOUTH_WEST)
1337    
1338    # Read in one file one after another and render the object.
1339    for i in range(99, 104):
1340        dc1.setFileName(file_name =  os.path.join(PYVISI_EXAMPLE_MESHES_PATH, \
1341                FILE_2D + "%04d.vtu") % i)
1342        dc2.setFileName(file_name =  os.path.join(PYVISI_EXAMPLE_MESHES_PATH, \
1343                FILE_2D + "%04d.vtu") % i)
1344    
1345        s.render(image_name = os.path.join(PYVISI_EXAMPLE_IMAGES_PATH, \
1346                IMAGE_NAME + "%04d.jpg") % i)
1347    \end{python}
1348    
1349    \textsf{Manipulating A Single File with A Series of Translation}
1350    
1351    \begin{python}
1352    """
1353    Author: John Ngui, john.ngui@uq.edu.au
1354    """
1355    
1356    # Import the necessary modules.
1357    from esys.pyvisi import Scene, DataCollector, MapOnPlaneCut, Camera
1358    from esys.pyvisi.constant import *
1359    import os
1360    
1361    PYVISI_EXAMPLE_MESHES_PATH = "data_meshes"
1362    PYVISI_EXAMPLE_IMAGES_PATH = "data_sample_images"
1363    X_SIZE = 400
1364    Y_SIZE = 400
1365    
1366    SCALAR_FIELD_POINT_DATA = "temperature"
1367    FILE_3D = "interior_3D.xml"
1368    IMAGE_NAME = "seriesofcuts"
1369    JPG_RENDERER = Renderer.ONLINE_JPG
1370    
1371    # Create a Scene.
1372    s = Scene(renderer = JPG_RENDERER, num_viewport = 1, x_size = X_SIZE,
1373            y_size = Y_SIZE)
1374    
1375    # Create a DataCollector reading from a XML file.
1376    dc1 = DataCollector(source = Source.XML)
1377    dc1.setFileName(file_name = os.path.join(PYVISI_EXAMPLE_MESHES_PATH, FILE_3D))
1378    dc1.setActiveScalar(scalar = SCALAR_FIELD_POINT_DATA)
1379    
1380    # Create a MapOnPlaneCut.
1381    mopc1 = MapOnPlaneCut(scene = s, data_collector = dc1,
1382            viewport = Viewport.SOUTH_WEST, lut = Lut.COLOR, cell_to_point = False,
1383            outline = True)
1384    mopc1.setPlaneToYZ(offset = 0.1)
1385    
1386    # Create a Camera.
1387    c1 = Camera(scene = s, viewport = Viewport.SOUTH_WEST)
1388    c1.isometricView()
1389    
1390    # Render the object with multiple cuts using a series of translation.
1391    for i in range(0, 5):
1392        s.render(image_name = os.path.join(PYVISI_EXAMPLE_IMAGES_PATH, IMAGE_NAME +
1393                "%02d.jpg") % i)
1394        mopc1.translate(0.6,0,0)
1395    \end{python}
1396    
1397    \textsf{Reading Data Directly from Escript Objects}
1398    
1399    \begin{python}
1400    """
1401    Author: Lutz Gross, l.gross@uq.edu.au
1402    Author: John Ngui, john.ngui@uq.edu.au
1403    """
1404    
1405    # Import the necessary modules.
1406    from esys.escript import *
1407    from esys.escript.linearPDEs import LinearPDE
1408    from esys.finley import Rectangle
1409    from esys.pyvisi import Scene, DataCollector, Map, Camera
1410    from esys.pyvisi.constant import *
1411    import os
1412    
1413    PYVISI_EXAMPLE_IMAGES_PATH = "data_sample_images"
1414    X_SIZE = 400
1415    Y_SIZE = 400
1416    JPG_RENDERER = Renderer.ONLINE_JPG
1417    
1418    #... set some parameters ...
1419    xc=[0.02,0.002]
1420    r=0.001
1421    qc=50.e6
1422    Tref=0.
1423    rhocp=2.6e6
1424    eta=75.
1425    kappa=240.
1426    tend=5.
1427    # ... time, time step size and counter ...
1428    t=0
1429    h=0.1
1430    i=0
1431    
1432    #... generate domain ...
1433    mydomain = Rectangle(l0=0.05,l1=0.01,n0=250, n1=50)
1434    #... open PDE ...
1435    mypde=LinearPDE(mydomain)
1436    mypde.setSymmetryOn()
1437    mypde.setValue(A=kappa*kronecker(mydomain),D=rhocp/h,d=eta,y=eta*Tref)
1438    # ... set heat source: ....
1439    x=mydomain.getX()
1440    qH=qc*whereNegative(length(x-xc)-r)
1441    # ... set initial temperature ....
1442    T=Tref
1443    
1444    # Create a Scene.
1445    s = Scene(renderer = JPG_RENDERER, x_size = X_SIZE, y_size = Y_SIZE)
1446    
1447    # Create a DataCollector reading directly from escript objects.
1448    dc = DataCollector(source = Source.ESCRIPT)
1449    
1450    # Create a Map.
1451    m = Map(scene = s, data_collector = dc, \
1452            viewport = Viewport.SOUTH_WEST, lut = Lut.COLOR, \
1453            cell_to_point = False, outline = True)
1454    
1455    # Create a Camera.
1456    c = Camera(scene = s, viewport = Viewport.SOUTH_WEST)
1457    
1458    # ... start iteration:
1459    while t<0.4:
1460          i+=1
1461          t+=h
1462          mypde.setValue(Y=qH+rhocp/h*T)
1463          T=mypde.getSolution()
1464    
1465          dc.setData(temp = T)
1466          
1467          # Render the object.
1468          s.render(image_name = os.path.join(PYVISI_EXAMPLE_IMAGES_PATH, \
1469                  "diffusion%02d.jpg") % i)
1470    \end{python}
1471    
1472    \newpage
1473    
1474    \section{Useful Keys}
1475    This section shows some of the useful keys when interacting with the rendered
1476    object (in the Online approach).
1477    
1478    \begin{table}[ht]
1479    \begin{center}
1480    \begin{tabular}{| c | p{13cm} |}
1481    \hline
1482    \textbf{Key} & \textbf{Description} \\ \hline
1483    Keypress 'c' / 'a' & Toggle between the camera ('c') and object ('a')  mode. In
1484    camera mode, mouse events affect the camera position and focal point. In
1485    object mode, mouse events affect the rendered object's element (i.e.
1486    cut surface map, clipped velocity field, streamline, etc) that is under the
1487    mouse pointer.\\ \hline
1488    Mouse button 1 & Rotate the camera around its focal point (if in camera mode)
1489    or rotate the rendered object's element (if in object mode).\\ \hline
1490    Mourse button 2 & Pan the camera (if in camera mode) or translate the rendered
1491    object's element (if in object mode). \\ \hline
1492    Mouse button 3 & Zoom the camera (if in camera mode) or scale the rendered
1493    object's element (if in object mode). \\ \hline
1494    Keypress 3 & Toggle the render window in and out of stereo mode. By default,
1495    red-blue stereo pairs are created. \\ \hline
1496    Keypress 'e' / 'q' & Exit the application if only one file is to be read, or
1497    read and display the next file if multiple files are to be read. \\ \hline
1498    Keypress 's' & Modify the representation of the rendered object to surfaces.
1499    \\ \hline
1500    Keypress 'w' & Modify the representation of the rendered object to wireframe.
1501    \\ \hline
1502    Keypress 'r' & Reset the position of the rendered object to the center.
1503    \\ \hline
1504    \end{tabular}
1505    \caption{Useful keys}
1506    \end{center}
1507    \end{table}
1508    
1509    
1510    % ############################################################################
1511    
1512    
1513  %\begin{tabular}{c c c c}  \newpage
 %\includegraphics[scale = 0.1]{figures/EscriptDiagram1} &  
 %\includegraphics[scale = 0.1]{figures/EscriptDiagram1} &  
 %\includegraphics[scale = 0.1]{figures/EscriptDiagram1} &  
 %\includegraphics[scale = 0.1]{figures/EscriptDiagram1} \\  
 %1 & 2 & 3 & 4  
 %\end{tabular}  
1514    
1515    \section{Sample Output}
1516    This section displays some of the sample output by Pyvisi.  
1517    
1518    \begin{table}[ht]
1519    \begin{tabular}{c c c}
1520    \includegraphics[width=\thumbnailwidth]{figures/Map} &
1521    \includegraphics[width=\thumbnailwidth]{figures/MapOnPlaneCut} &
1522    \includegraphics[width=\thumbnailwidth]{figures/MapOnPlaneClip} \\
1523    Map & MapOnPlaneCut & MapOnPlaneClip \\
1524    \includegraphics[width=\thumbnailwidth]{figures/MapOnScalarClip} &
1525    \includegraphics[width=\thumbnailwidth]{figures/MapOnScalarClipWithRotation} &
1526    \includegraphics[width=\thumbnailwidth]{figures/Velocity} \\
1527    MapOnScalarClip & MapOnScalarClipWithRotation & Velocity \\ \\ \\ \\
1528    \includegraphics[width=\thumbnailwidth]{figures/VelocityOnPlaneCut} &
1529    \includegraphics[width=\thumbnailwidth]{figures/VelocityOnPlaneClip} &
1530    \includegraphics[width=\thumbnailwidth]{figures/Ellipsoid} \\
1531    VelocityOnPlaneCut & VelocityOnPlaneClip & Ellipsoid \\ \\ \\ \\
1532    \includegraphics[width=\thumbnailwidth]{figures/EllipsoidOnPlaneCut} &
1533    \includegraphics[width=\thumbnailwidth]{figures/EllipsoidOnPlaneClip} \\
1534    EllipsoidOnPlaneCut & EllipsoidOnPlaneClip \\ \\ \\ \\
1535    \end{tabular}
1536    \caption{Sample output}
1537    \end{table}
1538    
1539    \begin{table}[t]
1540    \begin{tabular}{c c c}
1541    \includegraphics[width=\thumbnailwidth]{figures/Contour} &
1542    \includegraphics[width=\thumbnailwidth]{figures/ContourOnPlaneCut} &
1543    \includegraphics[width=\thumbnailwidth]{figures/ContourOnPlaneClip} \\
1544    Contour & ContourOnPlaneCut & ContourOnPlaneClip\\ \\  
1545    \includegraphics[width=\thumbnailwidth]{figures/StreamLine} &
1546    \includegraphics[width=\thumbnailwidth]{figures/Carpet} &
1547    \includegraphics[width=\thumbnailwidth]{figures/Rectangle} \\
1548    Streamline & Carpet & Rectangle \\ \\ \\
1549    \includegraphics[width=\thumbnailwidth]{figures/Text} &
1550    \includegraphics[width=\thumbnailwidth]{figures/Logo} &
1551    \includegraphics[width=\thumbnailwidth]{figures/Image} \\
1552    Text & Logo & Image \\ \\
1553    \includegraphics[width=\thumbnailwidth]{figures/Legend} \\
1554    Legend \\ \\
1555    \end{tabular}
1556    \caption{Sample Output}
1557    \end{table}
1558    
 same word on rendering, off-line, on-line, how to rotate, zoom, close the window, ...  
1559    
 %==============================================  
 \section{How to Make a Movie}  

Legend:
Removed from v.1082  
changed lines
  Added in v.1318

  ViewVC Help
Powered by ViewVC 1.1.26