//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
//
//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
//  This library is free software; you can redistribute it and/or
//  modify it under the terms of the GNU Lesser General Public
//  License as published by the Free Software Foundation; either
//  version 2.1 of the License.
//
//  This library is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
//  Lesser General Public License for more details.
//
//  You should have received a copy of the GNU Lesser General Public
//  License along with this library; if not, write to the Free Software
//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
//
//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//

//  File   : VISU_Gen.idl
//  Author : Alexey Petrov
//
/*! \file VISU_Gen.idl This file conatins a set of interfaces of the %VISU module.
 *     This module provides various forms of data visualization in %SALOME application.
 *     These forms include data tables, XY plots, 3d representations
 *     and combination of these forms.
 */

#ifndef __VISU_GEN__
#define __VISU_GEN__

#include "SALOME_Exception.idl"
#include "SALOME_GenericObj.idl"
#include "SALOME_Component.idl"
#include "SALOMEDS.idl"
#include "SALOMEDS_Attributes.idl"
#include "MED.idl"

/*!
  The main package of interfaces of the post-processing module %VISU.
*/
module VISU {
  //-------------------------------------------------------
  typedef string IdType;

  typedef sequence<string> string_array;
  typedef sequence<double> double_array;

  /*!
   * This enumeration contains a set of elements defining the type
   * of the scaling, which can be applied on different presentations.
   */
  enum Scaling{ LINEAR, /*!< Linear type of scaling. */
		LOGARITHMIC /*!< Logarithmic type of scaling. */
	      };

  /*!
   * This enumeration contains a set of elements defining
   * what kind of value will be extracted from gauss points data.
   */
  enum GaussMetric {
    AVERAGE, /*!< Average value (default). */
    MINIMUM, /*!< Minimum value. */
    MAXIMUM  /*!< Maximum value. */
  };

  /*!
   * This enumeration contains a set of elements defining the
   * type of the %entity (topological units) constituting a mesh.
   */
  enum Entity {
    NODE, /*!< Node corresponds to a geometrical point. */
    EDGE, /*!< Edge corresponds to a geometrical line connecting two points. */
    FACE, /*!< Face corresponds to a geometrical plane bounded by several lines. */
    CELL, /*!< Cell is a volumic element of a mesh */
    NONE  /*!< Indicates undefined entity value */
  };

  /*!
   * Marker type (used for point rendering)
   */
  enum MarkerType {
    MT_NONE,
    MT_POINT,
    MT_PLUS,
    MT_STAR,
    MT_O,
    MT_X,
    MT_O_POINT,
    MT_O_PLUS,
    MT_O_STAR,
    MT_O_X,
    MT_USER
  };

  /*!
   * Marker scale (used for point rendering)
   */
  enum MarkerScale {
    MS_NONE,
    MS_10,
    MS_15,
    MS_20,
    MS_25,
    MS_30,
    MS_35,
    MS_40,
    MS_45,
    MS_50,
    MS_55,
    MS_60,
    MS_65,
    MS_70
  };

  /*!
   * Tables' sort order
   */
  enum SortOrder {
    AscendingOrder, /*!< The table items are sorted ascending */
    DescendingOrder /*!< The table items are sorted descending */
  };

  /*!
   * Tables' sort policy (specifies how empty cells are taken into account when sorting)
   */
  enum SortPolicy {
    EmptyLowest,    /*!< Empty cells are considered as lowest values */
    EmptyHighest,   /*!< Empty cells are considered as highest values */
    EmptyFirst,     /*!< Empty cells are always first */
    EmptyLast,      /*!< Empty cells are always last */
    EmptyIgnore     /*!< Empty cells are ignored (stay at initial positions) */
  };

  /*!
   * This enumeration contains a set of elements defining the type of the %VISU object.
   * This enumeration is used for navigation between a set of %VISU interfaces.
   */
  enum VISUType {
    TNONE, /*!< Not a %VISU object */
    TCURVE, /*!< Curve line object for construction of 2D XY plots */
    TTABLE, /*!< Table containing numerical data */
    TCONTAINER, /*!< Container object used for storing a set of curve lines */
    TMESH, /*!< Meshing object */
    TSCALARMAP, /*!< Scalarmap 3D presentation object */
    TISOSURFACES, /*!< Iso surface 3D presentation object */
    TDEFORMEDSHAPE, /*!< Deformed shape 3D presentation object */
    TSCALARMAPONDEFORMEDSHAPE, /*!< Scalar map on deformed shape 3D presentation object. It is obsolete. Use TDEFORMEDSHAPEANDSCALARMAP instead */
    TDEFORMEDSHAPEANDSCALARMAP, /*!< Deformed shape and scalar map 3D presentation object */
    TGAUSSPOINTS, /*!< Gauss Points 3D presentation object */
    TPLOT3D, /*!< Plot3D 3D presentation object */
    TPOINTMAP3D, /*!< 3D presentation for table object */
    TCUTPLANES, /*!< Cut planes 3D presentation object */
    TCUTLINES, /*!< Cut lines 3D presentation object */
    TCUTSEGMENT, /*!< Cut segment 3D presentation object */
    TVECTORS, /*!< Vectors 3D presentation object */
    TSTREAMLINES, /*!< Streamlines 3D presentation object */
    TVISUGEN, /*!< %VISU generator used for performing operations with different %VISU objects */
    TVIEWMANAGER, /*!< View manager used for performing operations with different views */
    TRESULT, /*!< The data on which different presentations are based */
    TXYPLOT, /*!< 2D XY plot consisting of one or several curve lines */
    TTABLEVIEW, /*!< Table view is used for displaying data tables */
    TVIEW3D, /*!< 3D view is used for displaying 3D graphical presentations */
    TGAUSSVIEW, /*!< 3D view is used for displaying Gauss Points graphical presentations */
    TENTITY, /*!< An element composing a mesh: node, edge, face or cell */
    TFAMILY, /*!< The whole mesh can be divided into one or several submeshes, called families, which are defined by the user. Each family in its turn is composed of entities of a definite type. */
    TGROUP, /*!< A group of families */
    TFIELD, /*!< Field represents the results of calculations (it can be scalar or vector values), grouped together under one physical concept. */
    TTIMESTAMP, /*!<Time stamp represents a subfield: the results of calculations are taken in one definite moment. */
    TANIMATION, /*!< Represents Animation object. */
    TEVOLUTION, /*!< Represents Evolution object. */
    TCOLOREDPRS3DHOLDER, /*!< Colored 3D presentation holder */
    TCOLOREDPRS3DCACHE, /*!< Colored 3D presentation cache */
    TPART, /*!< MULTIPR: part of a mesh */
    TALL
  };

  /* Clipping planes management */
  struct ClippingPlane {
    double X;
    double Y;
    double Z;
    double dX;
    double dY;
    double dZ;
    boolean isAuto;
    string name;
  };
    
  interface Base {
    /*!
     * Returns ID of the object.
     */
    IdType GetID();

    /*!
     * Returns the type of the presentable object
     */
    VISUType GetType();
  };

  /*!
   *  \brief Removable object interface
   *
   *  Removable object interface is the root class of all removable objects.
   */
  interface RemovableObject : Base {
    /*!
     *  Remove object from study.
     */
    void RemoveFromStudy();
  };

  /*! \brief Presentable object interface
   *
   * Presentable object interface is the root class of all presentable objects.
   */
  interface PrsObject : RemovableObject {
  };

  //-------------------------------------------------------
  /*! \brief Interface of curve representation.
   *
   * Manages presentation parameters of one curve.
   * It can be used for presentation of a set of curves using a combined presentation.
   */
  interface Curve : PrsObject {
    /*!
     * Sets the title of the curve.
     * \param theTitle This string parameter defines the title of this curve.
     */
    void SetTitle(in string theTitle);

    /*!
     * Gets the title of the curve.
     * \return String value corresponding to the title of the curve.
     */
    string GetTitle();

    /*!
     * Sets the color of the curve.
     * \param theColor The color of the curve. This parameter is taken
     *                 from the <VAR>Orientation</VAR> enumeration.
     */
    void SetColor(in SALOMEDS::Color theColor);

    /*!
     * Gets the color of the curve.
     * \return Color of the curve. The returned value will correspond
     *         to one of the elements the <VAR>Color</VAR> enumeration.
     */
    SALOMEDS::Color GetColor();

    /*!
     * This enumeration contains a set of elements defining the
     * presentation type of markers (data points) with help of
     * which the curve is constructed on the graphics.
     */
    enum MarkerType { NONE,
		      CIRCLE,
		      RECTANGLE,
		      DIAMOND,
		      DTRIANGLE,
		      UTRIANGLE,
		      LTRIANGLE,
		      RTRIANGLE,
		      CROSS,
		      XCROSS
    };

    /*!
     * Sets the presentation type of markers (data points) with help of
     * which the curve is constructed on the graphics.
     * \param theType This parameter defines the type of marker with help
     *                of which the curve is constructed on the graphics.
     *                It is taken from <VAR>MarkerType</VAR> enumeration.
     */
    void SetMarker(in MarkerType theType);

    /*!
     * Gets the presentation type of markers (data points) with
     * help of which the curve is constructed on the graphics.
     * \return The type of marker with help of which the curve is constructed
     *         on the graphics. The returned value will correspond to
     *         one of the elements the <VAR>MarkerType</VAR> enumeration.
     */
    MarkerType GetMarker();

    /*!
     * This enumeration contains a set of elements defining the
     * type of presentation of a curve line on the graphics.
     */
    enum LineType{ VOIDLINE, SOLIDLINE, DASHLINE, DOTLINE, DASHDOTLINE, DASHDOTDOTLINE};

    /*!
     * Sets the type of presentation of curve lines on the graphics.
     * \param theType This parameter defines the type of presentation of curve lines on the graphics.
     * \param theLineWidth Long value defining the width of the curve line.
     */
    void SetLine(in LineType theType, in long theLineWidth);

    /*!
     * Gets the type of representation of curve lines on the graphics.
     * \return The type of representation of curve lines on the graphics.
     */
    LineType GetLine();

    /*!
     * Gets the width of the curve line.
     * \return Long value corresponding to the width of the curve line.
     */
    long GetLineWidth();
  };

  //-------------------------------------------------------
  /*! \brief %Container presentable object interface
   *
   * This class is provided in order to create one presentation using several presentable objects.
   * This can provide a combination of a set of curves to display them in XY plot view.
   */
  interface Container : PrsObject {
    /*!
     * Adds a curve into the container.
     * \param theCurve The added curve.
     */
    void AddCurve(in Curve theCurve);

    /*!
     * Removes a curve from the container.
     * \param theCurve The removed curve.
     */
    void RemoveCurve(in Curve theCurve);

    /*!
     * Gets the number of curves which are stored in the container.
     * \return A long value corresponding to the number of curves which are stored in the container.
     */
    long GetNbCurves();

    /*!
     * Removes all curves from the container.
     */
    void Clear();
  };

  //-------------------------------------------------------
  interface Result;
  /*! \brief 3D presentation interface
   *
   * This is a root class for all 3D presentations, which can be displayed in %VISU module.
   */
  interface Prs3d : PrsObject, SALOME::GenericObj 
  {
    /*!
     * Move the 3D presentation according to the given offset parameters
     */
    void SetOffset(in float theDx, in float theDy, in float theDz);

    /*!
     * Gets offset parameters for the 3D presentation
     */
    void GetOffset(out float theDx, out float theDy, out float theDz);

    /*!
     * Set standard point marker for the object
     * \param theType standard marker type
     * \param theScale standard marker scale
     */
    void SetMarkerStd(in MarkerType theType, in MarkerScale theScale);

    /*!
     * Set custom point marker for the object. The texture can be added
     * by LoadTexture() function
     * \param theTextureId texture ID
     */
    void SetMarkerTexture(in long theTextureId);

    /*!
     * Get type of the point marker assigned to the object
     * \return current marker type (MT_NONE if no marker is set)
     */
    MarkerType GetMarkerType();

    /*!
     * Get scale of the point marker assigned to the object
     * \return current marker scale (MS_NONE if no marker is set)
     */
    MarkerScale GetMarkerScale();

    /*!
     * Get texture idenifier of the point marker assigned to the object
     * \return marker texture ID (0 if no marker set)
     */
    long GetMarkerTexture();

    /*!
     * Gets memory size actually used by the presentation (Mb).
     */
    float GetMemorySize();
  };

  /*!
   * This enumeration contains a set of elements defining the
   * type of presentation of the mesh.
   */
  enum PresentationType{ POINT,
			 WIREFRAME,
			 SHADED,
			 INSIDEFRAME,
			 SURFACEFRAME,
			 FEATURE_EDGES,
			 SHRINK
  };

  /*!
   * This enumeration contains a set of elements defining the
   * type of presentation of the 2D quadratic mesh elements.
   */
  enum Quadratic2DPresentationType{
    LINES,
    ARCS
  };

  /*! \brief Interface of the mesh.
   *
   * Manages presentation parameters of a 3D presentation of a mesh.
   * This object can be used for presentation of set of curves using Container class.
   */
  interface Mesh : Prs3d {
    /*!
     * Sets the color of mesh cells.
     * \param theColor The color of the cells. This parameter is taken from <VAR>Color</VAR> enumeration.
     */
    void SetCellColor(in SALOMEDS::Color theColor);

    /*!
     * Gets the color of mesh cells.
     */
    SALOMEDS::Color GetCellColor();

    /*!
     * Sets the color of mesh nodes.
     * \param theColor The color of the nodes. This parameter is taken from <VAR>Color</VAR> enumeration.
     */
    void SetNodeColor(in SALOMEDS::Color theColor);

    /*!
     * Gets the color of mesh nodes.
     */
    SALOMEDS::Color GetNodeColor();

    /*!
     * Sets the color of mesh links.
     * \param theColor The color of the links. This parameter is taken from <VAR>Color</VAR> enumeration.
     */
    void SetLinkColor(in SALOMEDS::Color theColor);

    /*!
     * Gets the color of mesh links.
     */
    SALOMEDS::Color GetLinkColor();

    /*!
     * Sets the type of representation of a mesh.
     * \param theType The of representation of a mesh. This parameter is
     *                taken from <VAR>PresentationType</VAR> enumeration.
     */
    void SetPresentationType(in PresentationType theType);

    /*!
     * Gets the type of representation of the mesh.
     * \return The type of representation of the mesh.
     */
    PresentationType GetPresentationType();


    /*!
     * Sets the type of representation of a 2D quadratic mesh elements.
     * \param theType The type of representation of 2D quadratic mesh elements.
     *                This parameter is taken from 
     *		      <VAR>Quadratic2DPresentationType</VAR> enumeration.
     */
    void SetQuadratic2DPresentationType(in Quadratic2DPresentationType theType);

    /*!
     * Gets the type of representation of the 2D quadratic mesh elements.
     * \return The type of representation of the 2D quadratic mesh elements.
     */
    Quadratic2DPresentationType GetQuadratic2DPresentationType();
    
    /*!
     * Switches shrink mode of presentation
     * Note: SetPresentationType(SHRINK) is same as SetShrink(True)
     */
    void SetShrink(in boolean toShrink);

    /*!
     * Returns current state of shrink mode
     */
    boolean IsShrank();
  };


  //-------------------------------------------------------
  /*! \brief Basic Interface for the %Colored 3D Presentations
   *
   * This interface is responsable for coloring of 3D field presentations
   * according the scalar values applied to different cells.
   * As well it contains presentation parameters of the scalar bar. The scalar
   * bar is displayed along with each colored field presentation and serves for
   * consulting the correspondance between colors and data values.
   */
  interface ColoredPrs3dBase : Prs3d
  {
    /*!
     * Sets scalar range - min and max boundaries of the scalar bar.
     * \param theMin  Min boundary of the scalar bar.
     * \param theMax  Max boundary of the scalar bar.
     */
    void SetRange(in double theMin, in double theMax);

    /*!
     * Gets the min boundary of the scalar bar.
     */
    double GetMin();

    /*!
     * Gets the max boundary of the scalar bar.
     */
    double GetMax();

    /*!
     * Sets scalar range that corresponds to the source data.
     */
    void SetSourceRange();

    /*!
     * Gets the min boundary of the scalar bar from source data.
     */
    double GetSourceMin();    

    /*!
     * Gets the max boundary of the scalar bar from source data.
     */
    double GetSourceMax();

    /*!
     * Defines whether the scalar range corresponds to the source data or not.
     */
    boolean IsRangeFixed();

    /*! \brief Position of the scalar bar.
     *
     * Sets the position of the scalar bar origin on the screen.
     * \param X   Horizontal position. The value can be between 0 and 1.
     * \param Y   Vertical position. The value can be between 0 and 1.
     */
    void SetPosition(in double X, in double Y);

    /*!
     * Gets horizontal position of the scalar bar origin.
     */
    double GetPosX();

    /*!
     * Gets vertical position of the scalar bar origin.
     */
    double GetPosY();

    /*! \brief Size of this presentable object.
     *
     * Sets the size of the scalar bar.
     * \param theWidth  Width of this presentable object. The value can be between 0 and 1.
     * \param theHeight  Height of this presentable object. The value can be between 0 and 1.
     */
    void SetSize(in double theWidth, in double theHeight);

    /*!
     * Gets the width of this presentable object.
     * \return A double value corresponding to the width of this presentable object.
     */
    double GetWidth();

    /*!
     * Gets the height of this presentable object.
     * \return A double value corresponding to the height of this presentable object.
     */
    double GetHeight();

    /*!
     * Sets the number of colors which will be used for presentation of this presentable object.
     * \param theNbColors A long value defining the number of colors.
     */
    void SetNbColors(in long theNbColors);

    /*!
     * Gets the number of colors which will be used for visualization of this presentable object.
     * \return A long value corresponding to the number of colors which
     *         will be used for visualization of this presentable object.
     */
    long GetNbColors();
    /*!
     * Sets the number of labels which will be used for indication of color gradation
     * of the scalar bar.
     * \param theNbLabels A long value defining the number of labels.
     */
    void SetLabels(in long theNbLabels);

    /*!
     * Gets the number of labels which will be used for indication of color gradation of the scalar bar.
     * \return A long value corresponding to the number of labels which will
     *         be used for indication of color gradation of the scalar bar.
     */
    long GetLabels();

    /*! %Orientation of the scalar bar (to provide backward compatibility). */
    enum Orientation {
      HORIZONTAL, /*!< Horizontal orientation of the scalar bar.*/
      VERTICAL    /*!< Vertical orientation of the scalar bar.*/
    };

    /*!
     * Sets the type of orientation of the scalar bar (to provide backward compatibility).
     * \param theOrientation This parameter defines the orientation of the scalar bar.
     *                       It is taken from the <VAR>Orientaton</VAR> enumeration.
     */
    void SetBarOrientation(in Orientation theOrientation);

    /*!
     * Gets the type of orientation of the scalar bar (to provide backward compatibility).
     */
    Orientation GetBarOrientation();
  };

  /*! \brief Additional Interface for the %Colored 3D Presentations
   *
   */

  interface ColoredPrs3d : ColoredPrs3dBase
  {
    /*!
     * Sets the title of the scalar bar. By default - the name of the selected result is used.
     * \param theName String parameter defining the name of the scalar bar.
     */
    void SetTitle(in string theName);

    /*!
     * Gets the title of the scalar bar.
     */
    string GetTitle();

    /*! Sets the method of coloring of the elements composing a 3D presentation.
     */
    void SetScalarMode(in long theScalarMode);

    /*! Gets the method of coloring of the elements composing a 3D presentation.
     */
    long GetScalarMode();

    /*!  
     * Set the visibility of a distribution curve.
     * \param theIs is used to switch on/off the visibility of a distribution curve.
     */
    void SetIsDistributionVisible(in boolean theIs);

    //! Gets current visibility of a distribution curve
    boolean GetIsDistributionVisible();

    //! Gets current filtering by scalars mode
    boolean IsScalarFilterUsed();

    void UseScalarFiltering( in boolean theUseScalarFilter );

    /*!
     * Sets scalar range - min and max boundaries of the scalar bar.
     * \param theMin  Min boundary of the scalar bar.
     * \param theMax  Max boundary of the scalar bar.
     * \param theIsFilter  if true then filter by scalars.
     */
    void SetScalarFilterRange( in double theMin, in double theMax );

    double GetScalarFilterMin();

    double GetScalarFilterMax();

    /*!
     * Add group as geometry of presentation.
     * \param theMeshName  - mesh name
     * \param theGroupName - group name
     */
    void AddMeshOnGroup(in string theGroupName);
    
    /*!
     * PrsMerger method:
     * Remove all groups.(The scalar map will be placed on all mesh).
     */
    void RemoveAllGeom();
  };


  //-------------------------------------------------------
  interface View3D;
  interface ColoredPrs3dCache;


  //-------------------------------------------------------
  /*! \brief %ColoredPrs3dHolder interface.
   * Interface of 3d presentation's holder, which represents colored 3d presentations,
   * created on fields. It is publishing in the object browser in a separate folder
   * and can be controled by viewer's slider.
   */
  interface ColoredPrs3dHolder : PrsObject, SALOME::GenericObj
  {
    /*!
     * Presentation input parameters.
     */
    struct BasicInput
    {
      Result myResult;
      string myMeshName;
      Entity myEntity;
      string myFieldName;
      long myTimeStampNumber;
    };

    /*!
     * Apply input parameters to last visited presentation in the cache.
     */
    boolean Apply(in ColoredPrs3d thePrs3d,
		  in BasicInput theInput,
		  in View3D theView3D);

    /*!
     * Gets the last visited presentation in the cache.
     */
    ColoredPrs3d GetDevice();

    /*!
     * Gets type of the managed presentations.
     */
    VISUType GetPrsType();

    /*! Defines timestamp representation. 
     */
    struct TimeStampInfo
    {
      string myTime;
      long myNumber;
    };

    /*! Defines representation range of timestamps. 
     */
    typedef sequence<TimeStampInfo> TimeStampsRange;

    /*!
     * Gets TimeStampsRange information from the last visited presentation.
     */
    TimeStampsRange GetTimeStampsRange();

    /*!
     * Gets input parameters of the last visited presentation.
     */
    BasicInput GetBasicInput();

    /*!
     * Gets a %ColoredPrs3dCache, to which the holder belongs
     */
    ColoredPrs3dCache GetCache();

    /*!
     * Gets memory size actually used by the holder (Mb).
     */
    float GetMemorySize();
  };


  //-------------------------------------------------------
  /*! \brief %ColoredPrs3dCache interface.
   * This interface is responsible for memory management of 3d presentations.
   * One cache corresponds to one study.
   */
  interface ColoredPrs3dCache : RemovableObject, SALOME::GenericObj
  {
    /*! This enumeration contains the cache memory modes. */
    enum MemoryMode {
      MINIMAL, /*!< Minimal memory mode (default behaviour). */
      LIMITED  /*!< Limited memory mode (fixed memory size for presentations). */
    };

    /*! This enumeration defines how to enlarge the cache limited memory. */
    enum EnlargeType {
      NO_ENLARGE, /*!< No need to enlarge (default behaviour). */
      ENLARGE,    /*!< Enlarge limited memory. */
      IMPOSSIBLE  /*!< Impossible to enlarge (not enough free memory). */
    };

    /*! Sets a memory mode.*/
    void SetMemoryMode(in MemoryMode theMode);

    /*! Gets a memory mode.*/
    MemoryMode GetMemoryMode();

    /*! Sets a memory size for limited mode (Mb). */
    void SetLimitedMemory(in float theMemorySize);

    /*! Gets a memory size for limited mode (Mb). */
    float GetLimitedMemory();

    /*!
     * Gets memory size actually used by the cache system (Mb).
     */
    float GetMemorySize();

    /*! Creates %ColoredPrs3dHolder.*/
    ColoredPrs3dHolder CreateHolder(in VISUType theType,
				    in ColoredPrs3dHolder::BasicInput theInput);

    /*! Gets a memory which is required to create a holder. */
    EnlargeType GetRequiredMemory(in VISUType theType,
				  in ColoredPrs3dHolder::BasicInput theInput,
				  out float theRequiredMemory);
  };


  //-------------------------------------------------------
  /*! \brief Interface of the %Scalar Map
   *
   * This interface is responsable for coloring of 3D field presentations
   * according the scalar values applied to different cells.
   * As well it contains presentation parameters of the scalar bar. The scalar
   * bar is displayed along with each colored field presentation and serves for
   * consulting the correspondance between colors and data values.
   */
  
  interface ScaledPrs3d {
    /*!
     * Sets the type of scaling of the values reflected by the scalar bar.
     * \param theScaling The value of this parameter is taken from the <VAR>Scaling</VAR> enumeration.
     */
    void SetScaling(in Scaling theScaling);

    /*!
     * Gets the type of scaling of the values reflected by this presentation.
     */
    Scaling GetScaling();
  };

  interface ScalarMap : ColoredPrs3d, ScaledPrs3d {

    /*!
     * Returns visibility state of scalar bar
     */
    boolean IsBarVisible();

    /*!
     * Sets visibility state of scalar bar
     */
    void SetBarVisible(in boolean theVisible);

    /*!
     * Sets the gauss metric for the presentation.
     * \param theGaussMetric The value of this parameter is taken from the <VAR>GaussMetric</VAR> enumeration.
     */
    void SetGaussMetric(in GaussMetric theGaussMetric);

    /*!
     * Gets the gauss metric of the presentation.
     */
    GaussMetric GetGaussMetric();

    /*!
     * Sets the color of mesh links.
     * \param theColor The color of the links. This parameter is taken from <VAR>Color</VAR> enumeration.
     */
    void SetLinkColor(in SALOMEDS::Color theColor);

    /*!
     * Gets the color of mesh links.
     */
    SALOMEDS::Color GetLinkColor();
  };

  //-------------------------------------------------------
  /*! \brief Gauss Points presentation interface
   *
   * Presentation parameters of the Gauss Points presentation.
   */
  //-------------------------------------------------------
  interface GaussPoints : ColoredPrs3d 
  {
    //! Set flag indicating which scalar bar is active.
    void SetIsActiveLocalScalarBar(in boolean theFlag);

    //! Get flag indicating which scalar bar is active.
    boolean GetIsActiveLocalScalarBar();

    //! Set flag indicating visibility of global scalar bar.
    void SetIsDispGlobalScalarBar(in boolean theFlag);

    //! Get flag indicating visibility of global scalar bar.
    boolean GetIsDispGlobalScalarBar();

    //! Set value of the distance between global and local scalar bars.
    void SetSpacing(in double theSpacing);

    //! Get value of the distance between global and local scalar bars.
    double GetSpacing();
    
    /*!
     * Returns visibility state of scalar bar
     */
    boolean IsBarVisible();

    /*!
     * Sets visibility state of scalar bar
     */
    void SetBarVisible(in boolean theVisible);

    /*!  
     * Set the Multicolored mode.
     * \param theIsColored is used to switch between Results and Geometry modes.
     * Multiple colors are using when the presentation is
     * drawing in the Results mode, one color - in the Geometry mode.
     */
    void SetIsColored(in boolean theIsColored);

    //! Gets current color mode
    boolean GetIsColored();

    /*! Sets the color of this presentation in case of IsColored switched off.
     * \param theColor The color of this presentation. This parameter
     *                 is taken from the <VAR>Color</VAR> enumeration.
     */
    void SetColor(in SALOMEDS::Color theColor);

    /*!
     * When the Bicolor parameter is set to true, scalar bars are
     * drawing with two colors : red color correspoonds to positive
     * scalar values, blue color - to negative values.
     */
    void SetBiColor(in boolean theIsBiColor);

    //! Get the Bicolor mode.
    boolean GetBiColor();

    //! Checks whether the Gauss Points will be deformed or not
    boolean GetIsDeformed();

    //! Apply deformation on the Gauss Points
    void SetIsDeformed(in boolean theIsDeformed);

    /*!
     *  Sets the scale factor for scalar values
     *  (how much corresponding mesh elements should be translated).
     *  \param theScaleFactor The scaling factor.
     */
    void SetScaleFactor(in double theScaleFactor);

    /*!
     *  Gets the scale factor for scalar values.
     *  (how much corresponding mesh elements is translated)
     */
    double GetScaleFactor();

    /*!
     * This enumeration contains a set of elements defining the type of representation of the vector head.
     */
    enum PrimitiveType { 
      SPRITE,
      POINT,
      SPHERE
    };

    //! Set type of the primitives which is used for drawing the Gauss Points
    void SetPrimitiveType(in PrimitiveType thePrimitiveType);

    //! Get type of the primitives which is used for drawing the Gauss Points
    PrimitiveType GetPrimitiveType();

    //! Sets Point Sprite clamp
    void SetClamp(in double theClamp);

    //! Gets Point Sprite clamp
    double GetClamp();

    //! Sets minimum size of Point Sprites
    void SetMinSize(in double theMinSize);

    //! Gets minimum size of Point Sprites
    double GetMinSize();

    //! Sets maximum size of Point Sprites
    void SetMaxSize(in double theMaxSize);

    //! Gets maximum size of Point Sprites
    double GetMaxSize();

    //! Sets magnification for Point Sprites
    void SetMagnification(in double theMagnification);

    //! Gets magnification for Point Sprites
    double GetMagnification();

    //! Sets the increment of changing Magnification parameter
    void SetMagnificationIncrement(in double theIncrement);

    //! Gets the increment of changing Magnification parameter
    double GetMagnificationIncrement();

    //! Sets Point Sprites size
    void SetGeomSize(in double theGeomSize);

    //! Sets size of Point Sprite
    double GetGeomSize();

    //! Get path to the image using for Main Point Sprite texture
    string GetMainTexture();

    //! Get path to the image using for Alpha Point Sprite texture
    string GetAlphaTexture();

    //! Points Main and AlphaMask images to be used by Point Sprites
    void SetTextures(in string theMainTexture, in string theAlphaTexture);

    //! Sets Point Sprite Alpha threshold
    void SetAlphaThreshold(in double theAlphaThreshold);

    //! Gets Point Sprite Alpha threshold
    double GetAlphaThreshold();

    //! Sets resolution of the Geometrical Sphere
    void SetResolution(in long theResolution);

    //! Sets resolution of the Geometrical Sphere
    long GetResolution();

    //! Sets how many faces of can be drawn in the Geometrical Sphere primitive mode
    void SetFaceLimit(in long theFaceLimit);

    //! Defines how many faces of can be drawn in the Geometrical Sphere primitive mode
    long GetFaceLimit();
    
    
  };


  /*! \brief MonoColor presentation presentation interface
   *
   * Presentation parameters of the MonoColor presentation.
   */
  interface MonoColorPrs : ScalarMap {

    /*! This boolean method returns True if this deformed shape presentation is colored.
     */
    boolean IsColored();

    /*! Shows this presentation in colored mode.
     * \param theColored If this boolean parameter is True this presentable
     *                   object will be shown in colored mode.
     */
    void ShowColored(in boolean theColored);

    /*! Gets the color of this presentable object.
     * \return The color of this presentable object.
     */
    SALOMEDS::Color GetColor();

    /*! Sets the color of this presentation.
     * \param theColor The color of this presentation. This parameter
     *                 is taken from the <VAR>Color</VAR> enumeration.
     */
    void SetColor(in SALOMEDS::Color theColor);
  };


  /*! \brief Deformed shape presentation interface
   *
   * Presentation parameters of the deformed shape presentation.
   */
  interface DeformedShape : MonoColorPrs 
  {
    /*!
     * Sets the scale of the presentatable object.
     * \param theScale Double value defining the scale of this presentable object.
     */
    void SetScale(in double theScale);

    /*!
     * Gets the scale of the presentatable object.
     */
    double GetScale();

  };

  //-------------------------------------------------------
  /*! \brief Deformation interface
   *
   * This is base interface for building of the deformed presentations
   */
  interface Deformation{
    /*!
     * Sets the scale of the presentatable object.
     * \param theScale Double value defining the scale of this presentable object.
     */
    void SetScale(in double theScale);

    /*!
     * Gets the scale of the presentatable object.
     */
    double GetScale();

    /*!
     * Sets the vectorial field
     * \param theEntity    - entity of vectorial field
     * \param theFieldName - the name of vectorial field
     */
    void SetVectorialField(in Entity theEntity,
			   in string theFieldName);

    /*!
     * Get vectorial entity
     */
    Entity GetVectorialFieldEntity();

    /*!
     * Get scalar field name
     */
    string GetVectorialFieldName();
    
  };

  //-------------------------------------------------------
  /*! \brief OptionalDeformation interface
   *
   * This is interface for switch on/off of the deformation of the presentation
   */
  interface OptionalDeformation : Deformation{

    /*!
     * Sets the deformation flag of the presentatable object.
     * \param theFlag Boolean value defining the deformation flag of this presentable object.
     */
    void UseDeformation(in boolean theFlag);

    /*!
     * Gets the deformation flag of the presentatable object.
     */
    boolean IsDeformed();
  };

  //-------------------------------------------------------
  /*! \brief Scalar Map on Deformed shape presentation interface
   *
   * Presentation parameters of the scalar map on deformed shape presentation.
   */
  interface DeformedShapeAndScalarMap : ScalarMap {
    
    /*!
     * Sets the scale of the presentatable object.
     * \param theScale Double value defining the scale of this presentable object.
     */
    void SetScale(in double theScale);

    /*!
     * Gets the scale of the presentatable object.
     */
    double GetScale();

    /*!
     * Sets the scalar field
     * \param theEntity    - entity of scalar field
     * \param theFieldName - the name of scalar field
     * \param theTimeStampNumber - the timestamp number for the scalar field
     */
    void SetScalarField(in Entity theEntity,
			in string theFieldName,
			in long theTimeStampNumber);


    /*!
     * Get scalar entity
     */
    Entity GetScalarEntity();

    /*!
     * Get scalar field name
     */
    string GetScalarFieldName();

    /*!
     * Get timestamp number for the scalar field
     */
    long GetScalarTimeStampNumber();
  };


  //-------------------------------------------------------
  /*!
   *  \brief Plot3D interface
   *
   *  Presentation parameters of Plot3D presentation. This type of presentation
   *  consists of deforming initial planar mesh according to values assigned to the mesh elements.
   *  If mesh not planar but volumic one, it is possible to generate intermediate planar mesh.
   */
  interface Plot3dBase {
    /*!
     *  Sets the scale factor for scalar values
     *  (how much corresponding mesh elements should be translated).
     *  \param theScaleFactor The scaling factor.
     */
    void SetScaleFactor (in double theScaleFactor);

    /*!
     *  Gets the scale factor for scalar values.
     *  (how much corresponding mesh elements is translated)
     */
    double GetScaleFactor();

    /*!
     *  Sets presentation type: contour or surface.
     *  \param theIsContourPrs Define, whether presentation type is contour.
     */
    void SetContourPrs (in boolean theIsContourPrs );

    /*!
     *  Returns true if presentation type is contour.
     */
    boolean GetIsContourPrs();

    /*!
     *  Sets the number of contours.
     *  \param theNb The number of contours.
     */
    void SetNbOfContours (in long theNb);

    /*!
     *  Gets the number of contours.
     */
    long GetNbOfContours();
  };

  interface Plot3D : ScalarMap, Plot3dBase {
    /*!
     *  This enumeration contains a set of elements defining
     *  the type of orientation in 3D space of the cutting plane.
     */
    enum Orientation { XY,   /*!< The object is located in the plane formed by X and Y axis. */
        	       YZ,   /*!< The object is located in the plane formed by Y and Z axis. */
        	       ZX }; /*!< The object is located in the plane formed by Z and X axis. */

    /*!
     *  Sets the orientation in 3D space of cutting plane for the presentation.
     *  \param theOrientation This parameter defines the type of orientation of cutting plane
     *         in 3D space. It is taken from the <VAR>Orientation</VAR> enumeration.
     *  \param theXAngle The angle of rotation of the cutting plane
     *         around the first axis of the chosen orientation.
     *  \param theXAngle The angle of rotation of the cutting plane
     *         around the second axis of the chosen orientation.
     */
    void SetOrientation (in Orientation theOrientation, in double theXAngle, in double theYAngle);

    /*!
     *  Gets the type of orientation in 3D space of cutting plane.
     */
    Orientation GetOrientationType();

    /*!
     *  Gets rotation angle of the cutting plane
     *  around the first axis of the chosen orientation.
     */
    double GetRotateX();

    /*!
     *  Gets rotation angle of the cutting plane
     *  around the second axis of the chosen orientation.
     */
    double GetRotateY();

    /*!
     *  Sets the position of a cutting plane.
     *  \param thePlanePosition The position of the cutting plane.
     *  \param theIsRelative Define, whether the input position is relative.
     */
    void SetPlanePosition (in double  thePlanePosition,
			   in boolean theIsRelative);

    /*!
     *  Gets the position of the cutting plane
     */
    double GetPlanePosition();

    /*!
     *  Returns true if a position of cutting plane is relative
     */
    boolean IsPositionRelative();
  };

 //-------------------------------------------------------
  /*! \brief %Table representation interface
   *
   * Presentation parameters of the %Table view.
   */
  interface Table : PrsObject {
    /*!
     * Sets the title of the table.
     * \param theTitle String parameter defining the title of this table.
     */
    void SetTitle(in string theTitle);

    /*!
     * Gets the title of the table.
     * \return A string value containing the title of the table.
    */
    string GetTitle();

    /*!
     * This enumeration contains a set of elements defining the orientation of the table.
     */
    enum Orientation {
      HORIZONTAL, /*!< Horizontal orientation of the table. */
      VERTIACAL   /*!< Vertical orientation of the table. */
    };

    /*!
     * Sets orientation of the table.
     * \param theOrientation This input parameter defines the orientation of the table.
     *                       It is taken from the <VAR>Orientation</VAR> enumeration.
     */
    void SetOrientation(in Orientation theOrientation);

    /*!
     * Gets orientation of the table.
     * \return Orientation of the table. The returned value will correspond
     *         to one of the elements the <VAR>Orientation</VAR> enumeration.
     */
    Orientation GetOrientation();

    /*!
     * Gets the number of rows of the table.
     * \return Long value corresponding to the number of rows of the table
     */
    long GetNbRows();

    /*!
     * Gets the number of columns of the table.
     * \return Long value corresponding to the number of columns of the table
     */
    long GetNbColumns();

    /*!
     * Sorts the specified row of the table.
     * \param theRow Index of the row to sort
     * \param theSortOrder Sort order (see <VAR>SortOrder</VAR> enumeration)
     * \param theSortPolicy Sort policy (see <VAR>SortPolicy</VAR> enumeration)
     */
    void SortRow(in long theRow, in SortOrder theSortOrder, in SortPolicy theSortPolicy);

    /*!
     * Sorts the specified column of the table.
     * \param theRow Index of the column to sort
     * \param theSortOrder Sort order (see <VAR>SortOrder</VAR> enumeration)
     * \param theSortPolicy Sort policy (see <VAR>SortPolicy</VAR> enumeration)
     */
    void SortColumn(in long theColumn, in SortOrder theSortOrder, in SortPolicy theSortPolicy);

    /*!
     * Sorts the table by the specified row.
     * \param theRow Index of the row, by which the table has to be sort
     * \param theSortOrder Sort order (see <VAR>SortOrder</VAR> enumeration)
     * \param theSortPolicy Sort policy (see <VAR>SortPolicy</VAR> enumeration)
     */
    void SortByRow(in long theRow, in SortOrder theSortOrder, in SortPolicy theSortPolicy);

    /*!
     * Sorts the table by the specified column.
     * \param theColumn Index of the column, by which the table has to be sort
     * \param theSortOrder Sort order (see <VAR>SortOrder</VAR> enumeration)
     * \param theSortPolicy Sort policy (see <VAR>SortPolicy</VAR> enumeration)
     */
    void SortByColumn(in long theColumn, in SortOrder theSortOrder, in SortPolicy theSortPolicy);
  };

  //-------------------------------------------------------
  /*! \brief %PointMap3d representation interface
   *
   * Presentation parameters of the %Table Point Map in 3d view.
   */
  interface PointMap3d : ColoredPrs3dBase, ScaledPrs3d, Plot3dBase, Table {
  };

  //-------------------------------------------------------
  /*! \brief Cut planes interface
   *
   * Presentation parameters of Cut planes presentation. This type of presentation
   * consists of cutting your initial mesh by a definite number of planes. As the
   * result you will see these planes which will be cutted by the borders of the mesh.
   */
  interface CutPlanes : ScalarMap, OptionalDeformation {
    /*!
     * This enumeration contains a set of elements defining the type of orientation in 3D space
     * of the cut planes.
     */
    enum Orientation {XY, /*!< The object is located in the plane formed by X and Y axis. */
                      YZ, /*!< The object is located in the plane formed by Y and Z axis. */
		      ZX}; /*!< The object is located in the plane formed by Z and X axis. */

    /*!
     * Sets the type of orientation in 3D space of cut planes presentation.
     * \param theOrientation This parameter defines the type of orientation of cut planes
     *                       in 3D space. It is taken from the <VAR>Orientation</VAR> enumeration.
     * \param theXAngle The angle of rotation of the cut planes around
     *                  the first axis of the chosen orientation.
     * \param theXAngle The angle of rotation of the cut planes around
     *                  the second axis of the chosen orientation.
     */
    void SetOrientation(in Orientation theOrientation, in double theXAngle, in double theYAngle);

    /*!
     * Gets the type of orientation in 3D space of cut planes presentation.
     */
    Orientation GetOrientationType();

    /*!
     * Gets rotation angle of the cut plane presentation around the first axis of the chosen orientation.
     */
    double GetRotateX();

    /*!
     * Gets rotation angle of the cut plane presentation around the second axis of the chosen orientation.
     */
    double GetRotateY();

    /*!
     * Sets the displacement of the cut planes in 3D space.
     *
     * \param theDisp This parameter defines position of the cut planes
     * in 3D space. It varies from 0 to 1. If the chosen value is 0.5, the cut planes
     * will be evenly located regarding each other; in other words, the distance between all
     * of them will be equal. If the value is higher or lower than 0.5, the planes will be displaced
     * to one or another side.
     */
    void SetDisplacement(in double theDisp);

    /*!
     * Gets the displacement of the cut planes in 3D space.
     */
    double GetDisplacement();

    /*!
     * Sets the position of a definite cut plane.
     * \param thePlaneNumber The number of this cut plane.
     * \param thePlanePosition The position of this cut plane.
     */
     void SetPlanePosition(in long thePlaneNumber, in double thePlanePosition);

    /*!
     * Sets the position of the choosen plane to default value.
     * \param thePlaneNumber The number of this cut plane.
     */
     void SetDefault(in long thePlaneNumber);

    /*!
     * Gets the position of the choosen plane
     */
    double GetPlanePosition(in long thePlaneNumber);

    /*!
     * Determines whether the choosen plane has default position.
     * \param thePlaneNumber The number of this cut plane.
     */
    boolean IsDefault(in long thePlaneNumber);

    /*!
     * Sets the number of cut planes.
     * \param theNb The number of cut planes.
     */
    void SetNbPlanes(in long theNb);

    /*!
     * Gets the number of cut planes.
     */
    long GetNbPlanes();
  };

  //-------------------------------------------------------
  /*! \brief Base interface for Cut Lines and Cut Segment tools
   *
   */
  interface CutLinesBase : ScalarMap {
    /*!
     * Sets the number of cut lines.
     * \param theNb The number of cut lines.
     */
    void SetNbLines(in long theNb);

    /*!
     * Gets the number of cut lines.
     */
    long GetNbLines();

    /*! Invert all curves of corresponding table
     * \param theInvert - Invert all curves, if value is TRUE, else not.
     */
    void SetAllCurvesInverted(in boolean theInvert);

    /*! Checks the orientation of all curves
     * \retval TRUE - if all curves are inverted, else FALSE
     */
    boolean IsAllCurvesInverted();

    /*! Sets values which cutlines would be shown: aboslute or relative values
     * \param theAbsLength - boolean value, TRUE or false.
     */
    void SetUseAbsoluteLength(in boolean theAbsLength);

    /*! Checks values of cutlines: using aboslute or relative values
     */
    boolean IsUseAbsoluteLength();
  };

  //-------------------------------------------------------
  /*! \brief Cut lines presentation.
   *
   * Presentation parameters of a Cut lines presentation.
   * Cut Lines is a type of presentation which displays colored cells
   *   with applied scalar values on the mesh where lines are placed.
   * The procedure of construction of a Cut Lines presentation reuses the algorithm
   *   of creation of Cut Planes presentation and consists of two steps:
   *
   *   1. From Cut Planes presentation one plane is taken and
   *      it is used as base plane for construction of cut lines.
   *   2. This plane is cut by a regular array of planes. The result of this
   *      operation is a regular array of lines in space, belonging to the same plane
   *      and having the same orientation. They are located inside or on the mesh.
   */
  interface CutLines : CutLinesBase {
    /*!
     * Sets the type of orientation in 3D space of the base plane of a cut lines presentation.
     * \param theOrientation The orientation of the base plane in 3D space.
     * \param theXAngle The angle of rotation of the base plane around
     *                  the first axis of the chosen orientation.
     * \param theXAngle The angle of rotation of the base plane around
     *                  the second axis of the chosen orientation.
     */
    void SetOrientation(in CutPlanes::Orientation theOrientation, in double theXAngle, in double theYAngle);

    /*!
     * Sets the type of orientation in 3D space of the cutting planes of a cut lines presentation.
     * \param theOrientation This parameter defines the type of orientation of the cutting planes
     *                       in 3D space. It is taken from the <VAR>Orientation</VAR> enumeration.
     * \param theXAngle The angle of rotation of the cutting planes
     *                  around the first axis of the chosen orientation.
     * \param theXAngle The angle of rotation of the cutting planes
     *                  around the second axis of the chosen orientation.
     */
    void SetOrientation2(in CutPlanes::Orientation theOrientation, in double theXAngle, in double theYAngle);

    /*!
     * Gets the type of orientation in 3D space of the base plane of a cut lines presentation.
     */
    CutPlanes::Orientation GetOrientationType();

    /*!
     * Gets the type of orientation in 3D space of the cutting planes of a cut lines presentation.
     */
    CutPlanes::Orientation GetOrientationType2();

    /*!
     * Gets rotation angle of the base plane around the first axis of the chosen orientation.
     */
    double GetRotateX();

    /*!
     * Gets rotation angle of the cutting planes around the first axis of the chosen orientation.
     */
    double GetRotateX2();

    /*!
     * Gets rotation angle of the base plane around the second axis of the chosen orientation.
     */
    double GetRotateY();

    /*!
     * Gets rotation angle of the cutting planes around the second axis of the chosen orientation.
     */
    double GetRotateY2();

    /*!
     * Sets the displacement of the base plane of the cut lines presentation in 3D space.
     *
     * \param theDisp This parameter defines position of the base plane
     * in 3D space. It varies from 0 to 1.
     */
    void SetDisplacement(in double theDisp);

    /*!
     * Sets the displacement of the cutting planes of the cut lines presentation in 3D space.
     *
     * \param theDisp This parameter defines position of the cutting planes
     * in 3D space. It varies from 0 to 1.
     */
    void SetDisplacement2(in double theDisp);

    /*!
     * Gets the displacement of the base plane of the cut lines presentation in 3D space.
     */
    double GetDisplacement();

    /*!
     * Gets the displacement of the cutting planes of the cut lines presentation in 3D space.
     */
    double GetDisplacement2();

    /*! Sets the position of the base plane in 3D space.
     * \param thePlanePosition A double value defining the position of the base plane in 3D space.
     */
    void SetBasePlanePosition(in double thePlanePosition);

    /*! Gets the position of the base plane in 3D space.
     */
    double GetBasePlanePosition();

    /*! Sets the position of one of cutting planes in 3D space.
     * \param thePlaneNumber A long value defining the order number of this cutting plane.
     * \param thePlanePosition A double value defining the position of the base plane in 3D space.
     */
    void SetLinePosition(in long thePlaneNumber, in double thePlanePosition);

    /*! Gets the position of one of cutting planes in 3D space.
     * \param thePlaneNumber A long value defining the order number of this cutting plane.
     */
    double GetLinePosition(in long thePlaneNumber);

    /*! Sets the position of the base plane to default value.
     */
    void SetDefault();

    /*!
     * Determines whether the base plane has default position.
     * \return True if the base plane has default position.
     */
    boolean IsDefault();

    /*!
     * Sets the position of the choosen cutting plane to default value.
     * \param thePlaneNumber The number of this cutting plane.
     */
    void SetDefaultPosition(in long thePlaneNumber);

    /*!
     * Determines whether the choosen cutting plane has default position.
     * \param thePlaneNumber The number of this cutting plane.
     * \return True if this cutting plane has default position.
     */
    boolean IsDefaultPosition(in long thePlaneNumber);
  };

  //-------------------------------------------------------
  /*! \brief Cut segment presentation.
   *
   * Presentation parameters of a Cut segment presentation.
   * Cut Segment is a simplified variant of Cut Lines presentation, which is used
   * to display a single line instead of set of them. Axis of this line is defined
   * by coordinates of two points in 3D space.
   */
  interface CutSegment : CutLinesBase {
    /*!
     * Sets coordinates of the first point of axis of the segment.
     * \param theX X coordinate of the point
     * \param theY Y coordinate of the point
     * \param theZ Z coordinate of the point
     */
    void SetPoint1(in double theX, in double theY, in double theZ);

    /*!
     * Gets coordinates of the first point of axis of the segment.
     * \param theX X coordinate of the point
     * \param theY Y coordinate of the point
     * \param theZ Z coordinate of the point
     */
    void GetPoint1(out double theX, out double theY, out double theZ);

    /*!
     * Sets coordinates of the second point of axis of the segment.
     * \param theX X coordinate of the point
     * \param theY Y coordinate of the point
     * \param theZ Z coordinate of the point
     */
    void SetPoint2(in double theX, in double theY, in double theZ);

    /*!
     * Gets coordinates of the second point of axis of the segment.
     * \param theX X coordinate of the point
     * \param theY Y coordinate of the point
     * \param theZ Z coordinate of the point
     */
    void GetPoint2(out double theX, out double theY, out double theZ);
  };

  /*! \brief Interface of the stream lines representation
   *
   * This interface contains presentation parameters of stream lines presentations.
   * <BR>Stream lines is a type of presentation transforming into lines the
   * cells with vectors having most similar direction. A stream line can be thought
   * of as the path that a massless particle takes in a vector field.
   * Streamlines are used to convey the structure of a vector field.
   * Usually streamlines are created to explore the most interesting features in the field.
   */
  interface StreamLines : MonoColorPrs {
    /*! This enumerations contains a set of elements necessary
     * for definition of direction of the stream lines.
     */
    enum Direction{ FORWARD,
		    BACKWARD,
		    BOTH
    };

    /*! Sets the parameters of the stream lines presentation.
     * \param theIntStep Inegration step is a parameter of smoothness of the stream lines.
     *                   This parameter defines the accuracy of construction of the streamlines.
     *                   A smaller value of this parameter allows to construct smoother
     *                   streamlines (at the cost of more computation time).
     * \param thePropogationTime This parameter controls the maximum length of
     *                           the stream line (measured in units of time).
     * \param theStepLength This parameter defines the size of the output line segments
     *                      that make up the streamline (which is represented as a polyline).
     * \param thePrs3d The source presentation. The points of the field located on this source
     *                 presentation will serve as starting points for generation of stream lines.
     * \note If this parameter is not defined, your stream lines
     *       presentation will be generated on all points of the field.
     * \param thePercents This parameter defines the quantity of points of the field
     *                    (from 0 to 100%) which will be used as starting points for
     *                    construction of the stream lines. Thus, the value of this
     *                    parameter can vary from 0 to 1.
     * \param theDirection Direction of the stream lines (Forward, Backward or Both).
     * \return True if all parameters are properly set.
     */
    boolean SetParams(in double theIntStep,
		      in double thePropogationTime,
		      in double theStepLength,
		      in Prs3d thePrs3d,
		      in double thePercents,
		      in Direction theDirection);

    /*! Gets the value of integration step of the stream lines presentation.
     */
    double GetIntegrationStep();

    /*! Gets the value of propagation time of the stream lines presentation.
     */
    double GetPropagationTime();

    /*! Gets the value of step length of the stream lines presentation.
     */
    double GetStepLength();

    /*! Returns the source presentation used for generation of the stream lines.
     */
    Prs3d GetSource();

    /*! Gets the quantity of points of the field used as starting
     *  points for generation of the stream lines presentation.
     */
    double GetUsedPoints();

    /*! Returns the direction of the stream lines.
     */
    Direction GetDirection();
  };

  /*! \brief Interface of the isometric surface presentation
   *
   * This interface contains presentation parameters of
   * isometric surface presentations.
   * <BR>Iso surfaces presentation combines all equal scalar
   * values on the cells and on the basis of them constructs
   * isobaric surfaces, which form this presentation.
   */
  interface IsoSurfaces : MonoColorPrs {
    /*!
     * Sets the number of isometric surfaces.
     * \param theNb A long value defining the number of isometric surfaces
     *              which will be used for construction of this presentation.
     */
    void SetNbSurfaces(in long theNb);

    /*!
     * Gets the number of isometric surfaces
     */
    long GetNbSurfaces();

    /*!
     * Returns TRUE if labels with values are shown
     */
    boolean IsLabeled();

    /*!
     * Set show or not value labels
     */
    void ShowLabels(in boolean theShow, in long theNb);

    /*!
     * Returns Nb of labels per surface
     */
   long GetNbLabels();

  };

  //-------------------------------------------------------
  /*! \brief Interface of the vector presentation.
   *
   * This interface contains presentation parameters of vector presentations.
   */
  interface Vectors : DeformedShape {
    /*!
     * Sets the width of the lines of the vectors.
     * \param theWidth A double value defining the width of the lines of the vectors.
     */
    void SetLineWidth(in double theWidth);

    /*!
     * Gets the width of the lines of the vectors.
     */
    double GetLineWidth();

    /*!
     * This enumeration contains a set of elements defining the type of representation of the vector head.
     */
    enum GlyphType{ ARROW,
                    CONE2,
                    CONE6,
                    NONE
                  };

    /*!
     * Sets the type of representation of the vector head.
     * \param theType This parameter defines the type of representation of the vector head.
     * This value is taken from the <VAR>GlyphType</VAR> enumeration.
     */
    void SetGlyphType(in GlyphType theType);

    /*!
     * Gets the type of representation of the vector head.
     */
    GlyphType GetGlyphType();

    /*!
     * This enumeration contains a set of elements defining the position of the vector head.
     */
    enum GlyphPos{ CENTER, /*!<In the center of the vector.*/
                   TAIL,   /*!<In the tail of the vector.*/
                   HEAD  /*!<In the head of the vector.*/
                 };

    /*!
     * Sets the position of the vector head.
     * \param thePos This parameter defines the position of the vector head.
     * This value is taken from the <VAR>GlyphPos</VAR> enumeration.
     */
    void SetGlyphPos(in GlyphPos thePos);

    /*!
     * Gets the position of the vector head.
     */
    GlyphPos GetGlyphPos();
  };

  //-------------------------------------------------------
  /*! \brief %Animation class
   *
   * This class provides a set of methods used for:<br>
   * <ul>
   *     <li> generating different animations on the basis of a field,
   *     <li> setting the parameters of the animations,
   *     <li> playing these animations in the %VISU module.
   * </ul>
   * \note
   * <BR><B>Field</B> represents the results of calculations
   * (it can be scalar or vector values), grouped together under one physical concept.
   * <BR><B>Time stamp</B> represents a subfield: the results
   * of calculations are taken in one definite moment.
   */
  interface Animation : Base 
  {
    /*!
   * This enumeration contains a set of available animation modes.
   */
    enum AnimationMode{ PARALLEL, /*!< parallel mode of animation. */
			SUCCESSIVE /*!< succcessive mode of animation. */
    };
    
    /*! Defines the field which will be used as a base for generation of the animation.
     * \param theObject The %SObject corresponding to the field.
     */
    boolean addField(in SALOMEDS::SObject theObject);

    /*! Remove all fields from Animation object.
     */
    void clearFields();

    /*! Generates presentations on the basis of the field.
     * \param theFieldNum The number of the field, which will be used
     *                    as the basis for construction of the presentation.
     */
    void generatePresentations(in long theFieldNum);

    /*! Generates a set of frames from the created by the method
     *  <VAR>generatePresentations</VAR>3D presentations. A sequence of
     *  these frames will be transformed into an animation.
     *  \return  True, if the frames have been successfully generated.
     */
    boolean generateFrames();

    /*! Clears the view before starting an animation.
     */
    void clearView();

    /*! \name Playback of an animation:
     */
/*@{*/

    /*! Starts an animation.
     */
    void startAnimation();

    /*! Stops an animation.
     */
    void stopAnimation();

    /*! Forwards to the next frame.
     */
    void nextFrame();

    /*! Returns to the previous frame.
     */
    void prevFrame();

    /*! Returns to the first frame of the animation.
     */
    void firstFrame();

    /*! Forwards to the last frame of the animation.
     */
    void lastFrame();

    /*!  Passes to a definite frame of the animation.
     * \param theFrame A long value defining the number of the frame.
     */
    void gotoFrame(in long theFrame);
/*@}*/

    /*! Gets the number of time stamps (subfields) contained in the given field.
     */
    long getNbFields();

    /*! Gets the number of generated frames
     */
    long getNbFrames();

    /*! Returns True, if the animation is currently running.
     */
    boolean isRunning();

    /*! Returns the number of the current frame.
     */
    long getCurrentFrame();

    /*!
     */
    ColoredPrs3d getPresentation(in long theField, in long theFrame);

    /*! Sets the type of presentation (vectors, deformed shape etc.)
     *  which will be generated by the method <VAR>generatePresentations</VAR>.
     *  \note \c addField() method should be called before in order to add field
     *  with number theFieldNum.
     */
    void setPresentationType(in long theFieldNum, in VISUType theType);

    /*! Gets the type of presentation (vectors, deformed shape etc.) which will
     *  be generated by the method <VAR>generatePresentations</VAR>.
     *  \note \c addField() method should be called before in order to add field
     *  with number theFieldNum.
     */
    VISUType getPresentationType(in long theFieldNum);

    /*! Sets the speed of the animation.
     * \param theSpeed The speed of the animation. The value varies from 1 to 99.
     */
    void setSpeed(in long theSpeed);

    /*!  Gets the speed of the animation.
     */
    long getSpeed();

    /*! Ruturns True, if playback of the animation is proportional.
     * This option allows to render your animation with proportional periods
     * of time between every frame (not depending on the time stamps).
     */
    boolean isProportional();

    /*! Sets the range of the animation. The range is defined on the basis of
     *  the time stamps of the field which have been used for generation of the animation.
     *  This method allows to bound the range of generated frames.
     *  If this method is not used, the animation will be generated
     *  on the basis of all time stamps contained in the field.
     *  \param theMin The value of the first time stamp which will be used for generation of the animation.
     *  \param theMax The value of the last time stamp which will be used for generation of the animation.
     */
    void setAnimationRange(in double theMin, in double theMax);

    /*! Gets the number of the first time stamp which will be used for generation of the animation.
     */
    double getMinRange();

    /*! Gets the number of the last time stamp which will be used for generation of the animation.
     */
    double getMaxRange();

    /*! Returns True if the range of the animation has been defined
     *  by the method <VAR>setAnimationRange</VAR>. Otherwise
     *  the animation will be generated on the basis of all time stamps contained in the field.
     */
    boolean isRangeDefined();

    /*! Sets the sequence of the animation. The sequence is defined on the basis of
     *  the time stamps of the field which have been used for generation of the animation.
     *  This method allows to set the sequence of generated frames.
     *  If this method is not used, the animation will be generated
     *  on the basis of all time stamps contained in the field.
     *  Format of the sequence: '1,9,2-5,7-8'
     *  \param theSequence The sequence of time stamps indices which will be used for generation of the animation.
     */
    void setAnimationSequence(in string theSequence);

    /*! Gets the animation sequence.
     */
    string getAnimationSequence();

    /*! Returns True if the sequence of the animation has been defined
     *  by the method <VAR>setAnimationSequence</VAR>. Otherwise
     *  the animation will be generated on the basis of all time stamps contained in the field.
     */
    boolean isSequenceDefined();

    /*! Saves all the frames composing the animation into a definite directory.
     *  Pictures format is set with method <VAR>setDumpFormat()</VAR>.
     *  \param thePath The directory where all the frames will be saved.
     */
    void dumpTo(in string thePath);

    /*! Set format for saving all the frames composing the animation.
     *  \param theFormat The format for saving pictures.
     *                   For available formats see QImageIO documentation (Qt).
     *                   If specified format is not available, default format will be used.
     *                   Default format is JPEG or first of supported, if JPEG is not available.
     *  \return Really set format. Differ from \a theFormat if \a theFormat is not available.
     */
    string setDumpFormat(in string theFormat);

    /*! Set frequency of timestamps used to generate AVI file.
     *  \param theFrequency The frequency of timestamps to use.
     */
    void setTimeStampFrequency(in long theFrequency);

    /*! Get frequency of timestamps used to generate AVI file.
     *  \return The frequency of timestamps to use.
     */
    long getTimeStampFrequency();

    /*! Returns True, if the playback of the animation is cycling.
     */
    boolean isCycling();

    /*! Gets the first time stamp of the field defined at the input of the animation.
     * \note This method is used if animation range is <b>NOT</b> defined.
     */
    double getMinTime();

    /*! Gets the last time stamp of the field defined at the input of the animation.
     * \note This method is used if animation range is <b>NOT</b> defined.
     */
    double getMaxTime();

    /*! Sets proprtional playback of the animation. This option allows to render your animation
     *  with proportional periods of time between every frame (not depending on the time stamps).
     *  \param theProp If this boolean parameter is True, playback
     *                 of your animation will be set as proportional.
     */
    void setProportional(in boolean theProp);

    /*! Sets cycling playback of the animation. The number of cycles
     *  can be infinite, untill you use <VAR>startAnimation</VAR> method.
     *  \param theCycle If this boolean parameter is True, playback
     *                  of your animation will be set as cycling.
     */
    void setCycling(in boolean theCycle);

    boolean isCleaningMemoryAtEachFrame();
    void setCleaningMemoryAtEachFrame(in boolean theCycle);

    SALOMEDS::SObject publishInStudy();

    void saveAnimation();

    void restoreFromStudy(in SALOMEDS::SObject theSObj);

    boolean isSavedInStudy();
    
    /*!
     * Sets the animation mode.
     * \param theMode The value of this parameter is taken from the <VAR>AnimationMode</VAR> enumeration.
     */
    void setAnimationMode(in AnimationMode theMode);

    /*!
     * Gets the animation mode.
     */
    AnimationMode getAnimationMode();

    /*!
     * Apply the presentation properties to all fields. The exception is raised in the following cases:
     * 1) presentations for the given field is not yet created;
     * 2) invalid dynamic cast of the given presentation to VISU::ColoredPrs3d_i;
     * 3) the MED file is not the same;
     * 4) the mesh name is not the same;
     * 5) the field name is not the same;
     * 6) the entity is not the same.
     */
    void ApplyProperties(in long theFieldNum, in ColoredPrs3d thePrs)
      raises (SALOME::SALOME_Exception);
  };

  
  //-------------------------------------------------------
  interface XYPlot;

  //-------------------------------------------------------
  /*! \brief Interface %Evolution
   *
   */
  interface Evolution : Base 
  {
    /*!
     * Defines the field which will be used as a base for generation of the evolution.
     * \param theObject The %SObject corresponding to the field.
     */
    boolean setField(in SALOMEDS::SObject theObject);

    /*!
     * Sets id of the point for which the evolution will be generated.
     * \param thePointId id of the point.
     */
    void setPointId(in long thePointId);

    /*!
     * Sets id of the component for which the evolution will be generated.
     * \param thePointId id of the component.
     */
    void setComponentId(in long theComponentId);

    /*!
     * Shows the evolution.
     */
    boolean showEvolution();

    /*!
     * Restores the evolution from study.
     * \param theSObj the study object from which the evolution should be restored.
     */
    void restoreFromStudy(in SALOMEDS::SObject theSObj);
  };


  /*! \brief Interface %Result
   *
   * This interface serves for inner representation of data generated
   * in other sources (MED object or file). This data is needed
   * for further construction of graphical presentations.
   */
  interface Result : RemovableObject, SALOME::GenericObj 
  {
    /*! Reads all data from the corresponding sources. By default the data is loaded on demand.
     */
    boolean BuildAll();

    /*! Start to parse the source MED file and publish all its entities into the study*/
    boolean Build(in boolean theIsBuildAll, in boolean theIsAtOnce);

    /*! Allow to check is all requested MED entites already loaded or not */
    boolean IsDone();

    /*! Allow to check is corresponding MED entites already loaded or not */
    boolean IsEntitiesDone();

    /*! Choose to parse MED fields and perform global min / max on the MED timestamps.*/
    void SetBuildFields(in boolean theIsBuildFields, in boolean theIsCalculateMinMax);

    /*! Allow to check is corresponding MED fields already loaded or not */
    boolean IsFieldsDone();

    /*! Choose to parse MED groups.*/
    void SetBuildGroups(in boolean theIsBuildGroups);

    /*! Allow to check is corresponding MED groups and families already loaded or not */
    boolean IsGroupsDone();

    /*! Allow to check is min / max calculation over field's components already perfrormed or not */
    boolean IsMinMaxDone();

    /*! Allow to check is corresponding multi resolution structure already loaded or not */
    boolean IsPartsDone();

    typedef sequence<Entity> Entities;

    typedef string EntityName;

    typedef sequence<EntityName> EntityNames;

    typedef long TimeStampNumber;

    typedef sequence<TimeStampNumber> TimeStampNumbers;

    enum Resolution {
      FULL,
      MEDIUM,
      LOW,
      HIDDEN
    };

    typedef sequence<Resolution> Resolutions;

    /*! Gets existing mesh names */
    EntityNames GetMeshNames();

    /*! Gets existing mesh entites for the given mesh name */
    Entities GetEntities(in EntityName theMeshName);

    /*! Gets existing families for the given mesh name and entity */
    EntityNames GetFamilies(in EntityName theMeshName, in Entity theEntity);

    /*! Gets existing families for the given mesh name */
    EntityNames GetGroups(in EntityName theMeshName);

    /*! Gets existing fields for the given mesh name and entity */
    EntityNames GetFields(in EntityName theMeshName, in Entity theEntity);

    /*! Gets number of components for the given mesh name, entity and name of field */
    long GetNumberOfComponents(in EntityName theMeshName, in Entity theEntity, in EntityName theFieldName);

    /*! Gets existing numbers of time stamps for the given mesh name, entity and name of field */
    TimeStampNumbers GetTimeStampNumbers(in EntityName theMeshName, in Entity theEntity, in EntityName theFieldName);

    /*! Gets existing parts of multi resolution structure for the given mesh name */
    EntityNames GetPartNames(in EntityName theMeshName);

    /*! Gets available resolutions of multi resolution structure for the given mesh and part names */
    Resolutions GetResolutions(in EntityName theMeshName, in EntityName thePartName);

    /*! Gets current resolution of multi resolution structure for the given mesh and part names */
    Resolution GetResolution(in EntityName theMeshName, in EntityName thePartName);

    /*! Gets current resolution of multi resolution structure for the given mesh and part names */
    void SetResolution(in EntityName theMeshName, in EntityName thePartName, in Resolution theResolution);
    
    /*! Gets information about imported MED file */
    SALOME_MED::MedFileInfo GetMEDFileInfo();

    /*! Export MED file from temp object.  */
    boolean ExportMED(in string theFileName);
  };

  //-------------------------------------------------------
  interface ViewManager;

  /*! \brief %VISU_Gen interface
   *
   * This is the main interface of %VISU component. It is necessary for creation of
   * post-processing presentations from given %Result and %Table object reference,
   * using the views provided by %ViewManager.
   */
  interface VISU_Gen : Engines::Component, SALOMEDS::Driver, Base 
  {
    /*! Sets a definite study to be current.
     */
    void SetCurrentStudy(in SALOMEDS::Study theStudy);

    /*! Gets the current study.
     */
    SALOMEDS::Study GetCurrentStudy();

    /*!
     * Gets the %View Manager which is used for creation of
     * post-processing presentations.
     */
    ViewManager GetViewManager();

    /*!
     * Imports tables from a file and create TableAttribute in Study
     */
    SALOMEDS::SObject ImportTables(in string theFileName,
                                   in boolean theFirstStrAsTitle);

    /*!
     * Export table to a file
     */
    boolean ExportTableToFile(in SALOMEDS::SObject theTable, in string theFileName);

    /*!
     * Imports data from a file. The access to this file will be conserved outside of the application.
     * \param theFileName String parameter defining the name of the file
     *                    from which the data will be imported.
     */
    Result ImportFile(in string theFileName);

    /*!
     * Create result and initialize its with the file. The access to this file will be conserved outside of the application.
     * \param theFileName String parameter defining the name of the file
     *                    from which the data will be imported.
     */
    Result CreateResult(in string theFileName);

    /*!
     * Imports data from a file. The access to this file will closed.
     * \param theFileName String parameter defining the name of the file
     *                    from which the data will be imported.
     */
    Result CopyAndImportFile(in string theFileName);

    /*!
     * Imports data from a %MED object.
     */
    Result ImportMed(in SALOMEDS::SObject theMedSObject);

    /*!
     * Imports data from a %MED field.
     */
    Result ImportMedField(in SALOME_MED::FIELD theField);

    /*!
     * Rename a study object, representing a mesh, specified by given values.
     * \param theResult   Data generated in other sources (MED object or file).
     * \param theMeshName One of the meshes presented in MED file.
     * \param theEntity   Type of entity where the field is defined.
     * \param theSubMeshName Name of sub-mesh (group or family).
     * \param theNewName  Name to be given to the study object.
     */
    void RenameEntityInStudy(in Result theResult,
			     in string theMeshName,
			     in Entity theEntity,
			     in string theNewName);
    void RenameFamilyInStudy(in Result theResult,
			     in string theMeshName,
			     in Entity theEntity,
			     in string theSubMeshName,
			     in string theNewName);
    void RenameGroupInStudy(in Result theResult,
			    in string theMeshName,
			    in string theSubMeshName,
			    in string theNewName);

    /*!
     * Creates a mesh on the basis of the data generated in other sources (MED object or file).
     * \param theResult   Data generated in other sources. (MED object or file)
     * \param theMeshName  One of the meshes presented in MED file
     * \param theEntity Type of entity where the field is defined
     */
    Mesh MeshOnEntity(in Result theResult, in string theMeshName, in Entity theEntity);

    /*!
     * Creates on the basis of a family a mesh  which will be composed of geometrical
     * elements, corresponding to the type of cells (node, edge, face or cell) of this family.
     * \param theResult   Data generated in other sources. (MED object or file)
     * \param theMeshName  One of the meshes presented in MED file
     * \param theEntity Type of entity where the field is defined.
     */
    Mesh FamilyMeshOnEntity(in Result theResult, in string theMeshName,
			    in Entity theEntity, in string theFamilyName);

    /*!
     * Creates a mesh on the basis of a group of families.
     * \param theResult   Data generated in other sources. (MED object or file)
     * \param theMeshName  One of the meshes presented in MED file
     * \param theGroupName Name of the group.
     */
    Mesh GroupMesh(in Result theResult, in string theMeshName, in string theGroupName);

    /*!
     * Creates a scalar map presentation.
     * \param theResult    Data generated in other sources. (MED object or file)
     * \param theMeshName  One of the meshes presented in MED file
     * \param theEntity    Type of entity where the field is defined
     * \param theFieldName Group of data attributed to the %MESH. The data can be scalar or vector.
     * \param theTimeStampNumber Number of iteration on the field
     */
    ScalarMap ScalarMapOnField(in Result theResult, in string theMeshName,
			       in Entity theEntity, in string theFieldName,
			       in long theTimeStampNumber);

    /*!
     * Creates a Gauss Points presentation.
     * \param theResult    Data generated in other sources. (MED object or file)
     * \param theMeshName  One of the meshes presented in MED file
     * \param theEntity    Type of entity where the field is defined
     * \param theFieldName Group of data attributed to the %MESH. The data can be scalar or vector.
     * \param theTimeStampNumber Number of iteration on the field
     */
    GaussPoints GaussPointsOnField(in Result theResult, in string theMeshName,
				   in Entity theEntity, in string theFieldName,
				   in long theTimeStampNumber);

    /*!
     * Creates a deformed shape presentation.
     * \param theResult    Data generated in other sources. (MED object or file)
     * \param theMeshName  One of the meshes presented in MED file
     * \param theEntity    Type of entity where the field is defined
     * \param theFieldName Group of data attributed to the %MESH. The data can be scalar or vector.
     * \param theTimeStampNumber Number of iteration on the field
     */
    DeformedShape DeformedShapeOnField(in Result theResult, in string theMeshName,
				       in Entity theEntity, in string theFieldName,
				       in long theTimeStampNumber);

    /*!
     * Creates a deformed shape presentation. This function is obsolete. Use DeformedShapeAndScalarMapOnField instead.
     * \param theResult    Data generated in other sources. (MED object or file)
     * \param theMeshName  One of the meshes presented in MED file
     * \param theEntity    Type of entity where the field is defined
     * \param theFieldName Group of data attributed to the %MESH. The data can be scalar or vector.
     * \param theTimeStampNumber Number of iteration on the field
     */
    DeformedShapeAndScalarMap ScalarMapOnDeformedShapeOnField(in Result theResult, in string theMeshName,
							      in Entity theEntity, in string theFieldName,
							      in long theTimeStampNumber);

    /*!
     * Creates a deformed shape presentation.
     * \param theResult    Data generated in other sources. (MED object or file)
     * \param theMeshName  One of the meshes presented in MED file
     * \param theEntity    Type of entity where the field is defined
     * \param theFieldName Group of data attributed to the %MESH. The data can be scalar or vector.
     * \param theTimeStampNumber Number of iteration on the field
     */
    DeformedShapeAndScalarMap DeformedShapeAndScalarMapOnField(in Result theResult, in string theMeshName,
							       in Entity theEntity, in string theFieldName,
							       in long theTimeStampNumber);

    /*!
     * Creates a vector presentation.
     * \param theResult    Data generated in other sources. (MED object or file)
     * \param theMeshName  One of the meshes presented in MED file
     * \param theEntity    Type of entity where the field is defined
     * \param theFieldName Group of data attributed to the %MESH. The data can be scalar or vector.
     * \param theTimeStampNumber Number of iteration on the field
     */
    Vectors VectorsOnField(in Result theResult, in string theMeshName,
			   in Entity theEntity, in string theFieldName,
			   in long theTimeStampNumber);

    /*!
     * Creates an iso surface presentation.
     * \param theResult    Data generated in other sources. (MED object or file)
     * \param theMeshName  One of the meshes presented in MED file
     * \param theEntity    Type of entity where the field is defined
     * \param theFieldName Group of data attributed to the %MESH. The data can be scalar or vector.
     * \param theTimeStampNumber Number of iteration on the field
     */
    IsoSurfaces IsoSurfacesOnField(in Result theResult, in string theMeshName,
				   in Entity theEntity, in string theFieldName,
				   in long theTimeStampNumber);

    /*!
     * Creates an stream lines presentation.
     * \param theResult    Data generated in other sources. (MED object or file)
     * \param theMeshName  One of the meshes presented in MED file
     * \param theEntity    Type of entity where the field is defined
     * \param theFieldName Group of data attributed to the %MESH. The data can be scalar or vector.
     * \param theTimeStampNumber Number of iteration on the field
     */
    StreamLines StreamLinesOnField(in Result theResult, in string theMeshName,
				   in Entity theEntity, in string theFieldName,
				   in long theTimeStampNumber);

    /*!
     * Creates a presentation of cut planes.
     * \param theResult    Data generated in other sources. (MED object or file)
     * \param theMeshName  One of the meshes presented in MED file
     * \param theEntity    Type of entity where the field is defined
     * \param theFieldName Group of data attributed to the %MESH. The data can be scalar or vector.
     * \param theTimeStampNumber Number of iteration on the field
     */
    CutPlanes CutPlanesOnField(in Result theResult, in string theMeshName,
			       in Entity theEntity, in string theFieldName,
			       in long theTimeStampNumber);

    /*!
     * Creates a presentation of cut lines.
     * \param theResult    Data generated in other sources. (MED object or file)
     * \param theMeshName  One of the meshes presented in MED file
     * \param theEntity    Type of entity where the field is defined
     * \param theFieldName Group of data attributed to the %MESH. The data can be scalar or vector.
     * \param theTimeStampNumber Number of iteration on the field
     */
    CutLines CutLinesOnField(in Result theResult, in string theMeshName,
			     in Entity theEntity, in string theFieldName,
			     in long theTimeStampNumber);

    /*!
     * Creates a presentation of cut segment.
     * \param theResult    Data generated in other sources. (MED object or file)
     * \param theMeshName  One of the meshes presented in MED file
     * \param theEntity    Type of entity where the field is defined
     * \param theFieldName Group of data attributed to the %MESH. The data can be scalar or vector.
     * \param theTimeStampNumber Number of iteration on the field
     */
    CutSegment CutSegmentOnField(in Result theResult, in string theMeshName,
			         in Entity theEntity, in string theFieldName,
			         in long theTimeStampNumber);

    /*!
     * Creates a Plot3D presentation.
     * \param theResult    Data generated in other sources. (MED object or file)
     * \param theMeshName  One of the meshes presented in MED file
     * \param theEntity    Type of entity where the field is defined
     * \param theFieldName Group of data attributed to the %MESH. The data can be scalar or vector.
     * \param theTimeStampNumber Number of iteration on the field
     */
    Plot3D Plot3DOnField(in Result theResult, in string theMeshName,
			 in Entity theEntity, in string theFieldName,
			 in long theTimeStampNumber);

    /*!
     * Creates a table presentation.
     * \param theTableEntry The entry of the table which will be displayed.
     */
    Table CreateTable(in string theTableEntry);

    /*!
     * Creates a curve on the basis of points, whose values are taken from the table.
     * \param theTable  Table containing the data for construction of curves.
     * \param theHRow   Index of the row in the table: abscissa of the point.
     * \param theVRow   Index of the row in the table: ordinate of the point.
     */
    Curve CreateCurve(in Table theTable, in long theHRow, in long theVRow);
    
    /*!
     * Creates a curve on the basis of points, whose values are taken from the table.
     * Each point has also assigned value, that will be shown as tooltip in Plot2d 
     * \param theTable  Table containing the data for construction of curves.
     * \param theHRow   Index of the row in the table: abscissa of the point.
     * \param theVRow   Index of the row in the table: ordinate of the point.
     * \param theZRow   Index of the row in the table: assigned value (so-called as Z).
     */    
    Curve CreateCurveWithZ( in Table theTable, in long theHRow, in long theVRow, in long theZRow );

    /*!
     * Creates a curve on the basis of points, whose values are taken from the table.
     * Each point has also assigned value, that will be shown as tooltip in Plot2d.
     * The curve can be displayed using right axis of Plot2d view.
     * \param theTable  Table containing the data for construction of curves.
     * \param theHRow   Index of the row in the table: abscissa of the point.
     * \param theVRow   Index of the row in the table: ordinate of the point.
     * \param theZRow   Index of the row in the table: assigned value (so-called as Z).
     * \param theIsV2   Flag allowed to display the curve using right axis of Plot2d view.
     */    
    Curve CreateCurveWithZExt( in Table theTable, in long theHRow, in long theVRow, in long theZRow,
                               in boolean theIsV2 );

    /*!
     * Creates a presentation form containing an array of references to the curves.
     */
    Container CreateContainer();

    /*! Creates an animation in the 3D view.
     * \param theView3d The 3D view, where the animation will be rendered.
     */
    Animation CreateAnimation(in View3D theView3d);

    /*! Creates an evolution in the XY plot.
     * \param theXYPlot The XY plot, where the evolution will be rendered.
     */
    Evolution CreateEvolution(in XYPlot theXYPlot);

    void DeleteResult(in Result theResult);

    void DeletePrs3d(in Prs3d thePrs3d);

    /*!
     * Get or create %ColoredPrs3dCache object.
     */
    ColoredPrs3dCache GetColoredPrs3dCache(in SALOMEDS::Study theStudy);

    
    /* Clipping planes management */

    /*Create a clipping plane and return its ID (position in corresponded array) 
      Id of clipping plane could be changed after deletion of other clipping plane
    */
    long CreateClippingPlane(in double X, in double Y, in double Z, 
			     in double dX, in double dY, in double dZ, 
			     in boolean auto, in string name);
    
    void EditClippingPlane(in long id, in double X, in double Y, in double Z, 
			     in double dX, in double dY, in double dZ, 
			     in boolean auto, in string name);
    
    /* Returns clipping plane by its Id */
    ClippingPlane GetClippingPlane(in long id);
    
    /* Deletes clipping plane by its Id */
    boolean DeleteClippingPlane(in long id);
    
    /* Applyes a clipping plane with Id to presentation thePrs */
    boolean ApplyClippingPlane(in Prs3d thePrs, in long id);

    /* Detaches a clipping plane with Id from presentation thePrs */
    boolean DetachClippingPlane(in Prs3d thePrs, in long id);
    
    
    /* Get number of clipping planes */
    long GetClippingPlanesNb();

    /*! Converts set of VTK files to the one MED-file
     * \param theVTKFiles sequence of VTK files
     * \param out MED-file
     * \param theMeshName mesh name. This parameter can be empty. In this case name
              of mesh is equal vtk2med
     * \param theTSNames values of time stamps. This array can be empty, in
              this case values of time stamps will be generated automatically ( 0, 1, 2 ... )
     * \return TRUE if operation has been completed successfully, FALSE otherwise
     */
    boolean VTK2MED( in string_array theVTKFiles,
                     in string theMEDFile,
                     in string theMeshName,
                     in double_array theTStamps );

    /*!
     * Load texture from file
     * \param theTextureFile texture file name
     * \return unique texture identifier
     */
    long LoadTexture(in string theTextureFile);
  };

  /*! \brief %View interface
   *
   * Contains a set of methods used by the %View frame, which can be one of
   * the following types: 3d, Table, XY plot.
   * %View interface is a base for all types of %view interfaces.
   */
  interface View: Base, SALOME::GenericObj 
  {
    /*! \brief %ViewRepresentation enumeration
     *
     * displaying part ("ALL" isn't setable)
     */
    enum ViewRepresentation {
      OBJECTBROWSER,
      VIEWER,
      PYTHON,
      MESSAGES
    };

    void ShowPart (in ViewRepresentation ViewRepr, in boolean state );

    boolean IsPartShown( in ViewRepresentation ViewRepr );

    /*!
     *  New methods for view parameters management.
     */

    /*! \brief Split workarea of this view.
     *
     *  Horizontally split workarea of this view.
     *  This view is moved in a new right area.
     */
    void SplitRight();

    /*! \brief Split workarea of this view.
     *
     *  Horizontally split workarea of this view.
     *  This view stays in an old left area, others are moved in a new right area.
     */
    void SplitLeft();

    /*! \brief Split workarea of this view.
     *
     *  Vertically split workarea of this view.
     *  This view is moved in a new bottom area.
     */
    void SplitBottom();

    /*! \brief Split workarea of this view.
     *
     *  Vertically split workarea of this view.
     *  This view stays in an old top area, others are moved in a new bottom area.
     */
    void SplitTop();

    /*!
     *  Put this view window on top of its work area.
     */
    void OnTop();

    /*!
     *  Put \a theView in workarea of this view right after it.
     *  If \a theView was alone in its workarea, workarea of \a theView will be destroyed.
     *  If \a theView was in the same workarea with this view, simple reordering will take place.
     *  \param theView A view window to be attracted to this one.
     */
    void Attract (in View theView);

    /*!
     *  Put all the view windows from workarea of \a theView in workarea of this view right after it.
     *  Workarea of \a theView will be destroyed.
     *  If \a theView was in the same workarea with this view, simple reordering will take place.
     *  \param theView A view window to be attracted to this one together with all its workarea.
     */
    void AttractAll (in View theView);

    /*!
     *  Set position of this view window relatively its splitter.
     *  \param thePosition Desired position of this view window relatively
     *         its splitter. Meaningfull values lays in range [0..1].
     *
     *  Direction of positioning is defined by the splitter orientation.
     */
    void SetRelativePositionInSplitter (in double thePosition);

    /*!
     *  Set size of this view window relatively its splitter.
     *  \param theSize Desired size of this view window relatively
     *         its splitter. Meaningfull values lays in range [0..1].
     *
     *  Direction of resizing is defined by the splitter orientation.
     */
    void SetRelativeSizeInSplitter (in double theSize);

    /*!
     *  Set horizontal position of this view window relatively its workstack.
     *  \param thePosition Desired horizontal position of this view window
     *         relatively its workstack. Meaningfull values lays in range [0..1].
     */
    void SetRelativePositionX (in double thePosition);

    /*!
     *  Set vertical position of this view window relatively its workstack.
     *  \param thePosition Desired vertical position of this view window
     *         relatively its workstack. Meaningfull values lays in range [0..1].
     */
    void SetRelativePositionY (in double thePosition);

    /*!
     *  Set horizontal size of this view window relatively its workstack.
     *  \param theSize Desired horizontal size of this view window relatively
     *         its workstack. Meaningfull values lays in range [0..1].
     */
    void SetRelativeSizeX (in double theSize);

    /*!
     *  Set vertical size of this view window relatively its workstack.
     *  \param theSize Desired vertical size of this view window relatively
     *         its workstack. Meaningfull values lays in range [0..1].
     */
    void SetRelativeSizeY (in double theSize);

    /*!
     *  Old methods for view parameters management, they don't work now
     */
    void SetViewWidth (in long Width); //setting width of view
    void SetViewHeight (in long Height); //setting height of view
    long GetViewWidth(); //getting view width
    long GetViewHeight(); //getting view height
    enum ViewPosition {TOP, CENTER, BOTTOM, RIGHT, LEFT}; //position of the study frame
    void SetViewPositionHorizontal (in ViewPosition ViewPosHor); //setting of the horizontal view position
    void SetViewPositionVertical (in ViewPosition ViewPosVer); //setting of the vertical view position
    void SetRelativePosition( in double x, in double y );
    void SetRelativeSize( in double x, in double y );
    void Minimize(); // Minimizes to the task bar or to the bottom of the Desktop the %View frame.
    void Restore(); // Restores the %View frame.
    void Maximize(); // Maximizes the %View frame.

    /*!
     * Sets the title of the %View frame.
     * \param theTitle String parameter defining the title of the %View frame.
     */
    void SetTitle(in string theTitle);

    /*!
     * Gets the title of the %View frame.
     */
    string GetTitle();

    /*!
     * Sets background color of the %View frame.
     * \param theColor Background color defined in <VAR>SALOMEDS::Color</VAR> enumeration.
     */
    void SetBackground(in SALOMEDS::Color theColor);

    /*!
     * Gets background color of the %View frame.
     */
    SALOMEDS::Color GetBackground();

    /*!
     * Removes all presentations (presentable objects) from the %view.
     */
    void EraseAll();

    /*!
     * Displays all presentations (presentable objects) in the %view.
     */
    void DisplayAll();

    /*!
     * Removes a definite presentation (presentable object) from the %view.
     * \param thePrsObj The presentation (presentable object) which should be deleted.
     */
    void Erase(in PrsObject thePrsObj);

    /*!
     * Displays a definite presentation (presentable object) in the %view.
     * \param thePrsObj The presentation (presentable object) which should be displayed.
     */
    void Display(in PrsObject thePrsObj);

    /*!
     * Allows to display only a definite presentation (presentable object) in the %view.
     * All other presentations are removed from the %view.
     * \param thePrsObj The presentation (presentable object) which should be displayed.
     */
    void DisplayOnly(in PrsObject thePrsObj);

    /*!
     * Updates the view.
     */
    void Update();

    /*!
     * Saves the view.
     * \param theFileName The name of the file where the view will be saved.
     * \return True, if the view have been saved successfully.
     */
    boolean SavePicture(in string theFileName);
  };

  //-------------------------------------------------------
  /*! \brief 3D view interface
   *
   *  This interface contains a set of methods necessary for representation of objects in 3D space.
   */
  interface View3D : View {
    /*!
     * This enumeration contains a set of elements determining a predefined point of view
     *  (position of the camera in 3D space relative to the presentable object).
     */
    enum ViewType{ FRONT, BACK, LEFT, RIGHT, TOP, BOTTOM};

    /*!
     * This enumeration contains a set of elements determining the axis
     */
    enum Axis{ XAxis, YAxis, ZAxis};

    /*!
     * Data type defining coordinates in 3D space.
     */
    typedef double XYZ[3];

    /*!
     * Makes all presentations, which are currently present in the %view, completely visible.
     */
    void FitAll();

    /*!
     * Sets a predefined point of view (FRONT, BACK, LEFT, RIGHT, TOP, BOTTOM). (In other words it means
     * a predefined position of the camera in 3D space with respect to the object which is represented.)
     */
    void SetView(in ViewType theType);

    /*!
     * Sets the position of the camera in 3D space.
     * This point is used as the first point of the vector
     * defining the view direction of the camera.
     */
    void SetPointOfView(in XYZ theCoord);

    /*!
     * Gets the position of the camera in 3D space.
     * This point is used as the first point of the vector
     * defining the view direction of the camera.
     */
    XYZ GetPointOfView();

    /*!
     * Sets the vertical line of the camera in 3D space.
     */
    void SetViewUp(in XYZ theDir);

    /*!
     * Gets the vertical line of the camera in 3D space.
     */
    XYZ GetViewUp();

    /*!
     * Sets the point of sight of the camera. This point is used as the
     * second point of the vector defining the view direction of the camera.
     */
    void SetFocalPoint(in XYZ theDir);

    /*!
     * Gets the point of sight of the camera. This point is used as the
     * second point of the vector defining the view direction of the camera.
     */
    XYZ GetFocalPoint();

    /*!
     * Zooming of the presentable object. Sets the scale.
     */
    void SetParallelScale(in double theScale);

    /*!
     * Zooming of the presentable object. Gets the scale.
     */
    double GetParallelScale();

    /*!
     * Scaling of the view along a definite axis.
     * \param theAxis The axis of the scaling
     * \param theParam The coefficient of the scaling
     */
    void ScaleView(in Axis theAxis, in double theParam);

    /*!
     * Removes the scaling of the view.
     */
    void RemoveScale();

    /*!
     * Saves view parameters.
     * \return True if the view parameters have been created, False if the parameters have been modified.
     * \param theName The name under which the view parameters will be saved.
     */
    boolean SaveViewParams(in string theName);

    /*! Restores view parameters.
     * \return True if the view parameters have been found and applied to the view,
     * False if the parameters with this name don't exist.
     * \param theName The name of the view parameters which will be restored.
     */
    boolean RestoreViewParams(in string theName);


    /*! Get representation type of the given presentation in this view.
     *  \param thePrs Object to get a representation type of.
     *  \return <VAR>PresentationType</VAR> Representation type of object in this view.
     */
    PresentationType GetPresentationType(in ScalarMap thePrs);

    /*! Set representation type of the given presentation in this view.
     *  \param thePrs Object to set a representation type of.
     *  \param thePrsType Representation type to be set to the given object.
     *  \return Empty string in case of success, error description in case of failure.
     */
    string SetPresentationType(in ScalarMap thePrs, in PresentationType thePrsType);


    /*! Set representation type of 2D quadratic elements 
     *  of the given presentation in this view.
     *  \param thePrs Object to set a representation type of 2D quadratic elements.
     *  \param theType Representation type of 2D quadratic elements to be set to the given object.
     *  \return Empty string in case of success, error description in case of failure.
     */
    string SetQuadratic2DPresentationType(in ScalarMap thePrs,in Quadratic2DPresentationType theType);


    /*! Get representation type of the 2D quadratic mesh elements of given presentation in this view.
     *  \param thePrs Object to get a representation type of 2D quadratic mesh elements.
     *  \return <VAR>Quadratic2DPresentationType</VAR> Representation type of 2D quadratic mesh elements 
     *          in this view.
     */    
    Quadratic2DPresentationType GetQuadratic2DPresentationType(in ScalarMap thePrs);
    

    /*! Get shrink state of the given presentation in this view.
     *  \param thePrs Object to get a shrink state of.
     *  \return TRUE if \a thePrs is shrinked in this view, FALSE overwise.
     */
    boolean IsShrinked(in ScalarMap thePrs);

    /*! Make the given presentation shrinked or not shrinked in this view.
     *  \param thePrs Object to change a shrink state of.
     *  \param isShrinked Pass TRUE to make \a thePrs shrinked, FALSE overwise.
     *  \return Empty string in case of success, error description in case of failure.
     */
    string SetShrinked(in ScalarMap thePrs, in boolean isShrinked);

    /*! Get shading state of the given presentation in this view.
     *  \param thePrs Object to get a shading state of.
     *  \return TRUE if \a thePrs is shaded in this view, FALSE overwise.
     */
    boolean IsShaded(in ScalarMap thePrs);

    /*! Make the given presentation shaded or not shaded in this view.
     *  \param thePrs Object to set a shading state of.
     *  \param isShaded Pass TRUE to make \a thePrs shaded, FALSE overwise.
     *  \return Empty string in case of success, error description in case of failure.
     */
    string SetShaded(in ScalarMap thePrs, in boolean isShaded);

    /*! Get opacity of the given presentation in this view.
     *  \param thePrs Object to get an opacity of.
     *  \return Opacity value in range [0, 1], 0 - transparent, 1 - opaque.
     */
    double GetOpacity(in ScalarMap thePrs);

    /*! Set opacity of the given presentation in this view.
     *  \param thePrs Object to set an opacity of.
     *  \param theOpacity Opacity value [0, 1]. 0 - transparent, 1 - opaque.
     *  \return Empty string in case of success, error description in case of failure.
     */
    string SetOpacity(in ScalarMap thePrs, in double theOpacity);

    /*! Get line width of the given presentation in this view.
     *  \param thePrs Object to get a line width of.
     *  \return Line width of \a thePrs in this view.
     */
    double GetLineWidth(in ScalarMap thePrs);

    /*! Set line width of the given presentation in this view.
     *  \param thePrs Object to set a line width of.
     *  \param theLineWidth Line width value. Recommended values are in range [1, 10].
     *  \return Empty string in case of success, error description in case of failure.
     */
    string SetLineWidth(in ScalarMap thePrs, in double theLineWidth);
  };

  //-------------------------------------------------------
  /*! \brief Interface of the Table view
   *
   * This interface is used for creation of a view necessary for presentation of a table.
   */
  interface TableView : View {
  };

  //-------------------------------------------------------
  /*! \brief Interface of the 2D plot view
   *
   * This interface is used for creation of a view necessary for presentation
   * of a XY plot generated on the basis of one or several curve lines.
   */
  interface XYPlot : View {
    /*! Sets the title of the XY plot
     * \param theTitle  The title of the XY plot
     */
    void SetSubTitle(in string theTitle);

    /*! Gets the title of the XY plot
     */
    string GetSubTitle();

    /*!
     * This enumeration contains a set of elements determining the type
     * of the curve lines, which will be displayed in your XY plot.
     */
    enum CurveType { POINTS, MULTYLINE, SPLINE};

    /*! Sets the type of the curve lines.
     * \param theType The type of the curve lines taken from <VAR>CurveType</VAR> enumeration.
     */
    void SetCurveType(in CurveType theType);

    /*! Gets the type of the curve lines.
     */
    CurveType GetCurveType();

    /*! Sets the size of the markers (data points) with help of
     * which the curve is constructed on the graphics.
     * \param theSize Long value defining the size of the markers.
     */
    void SetMarkerSize(in long theSize);

    /*! Gets the size of the markers (data points) with help of
     * which the curve is constructed on the graphics.
     */
    long GetMarkerSize();

    /*! Enable/disables X-axis grid of the 2D plot.
     */
    void EnableXGrid(in boolean theMajor, in long theNumMajor, in boolean theMinor, in long theNumMinor);

    /*! Enable/disables Y-axis grid of the 2D plot.
     */
    void EnableYGrid(in boolean theMajor, in long theNumMajor, in boolean theMinor, in long theNumMinor);

    /*! Sets horizontal scaling of the 2D plot.
     * \param theScaling Type of scaling taken from <VAR>Scaling</VAR> enumeration.
     */
    void SetHorScaling(in Scaling theScaling);

    /*! Gets the type horizontal scaling of the 2D plot.
     */
    Scaling GetHorScaling();

    /*! Sets vertical scaling of the 2D plot.
     * \param theScaling Type of scaling taken from <VAR>Scaling</VAR> enumeration.
     */
    void SetVerScaling(in Scaling theScaling);

    /*! Gets the type vertical scaling of the 2D plot.
     */
    Scaling GetVerScaling();

    /*! Sets the title of the X-axis of the plot.
     * \param theTitle String value defining the title of the X-axis of the plot.
     */
    void SetXTitle(in string theTitle);

    /*! Gets the title of the X-axis of the plot.
     */
    string GetXTitle();

    /*! Sets the title of the Y-axis of the plot.
     * \param theTitle String value defining the title of the X-axis of the plot.
     */
    void SetYTitle(in string theTitle);

    /*! Gets the title of the Y-axis of the plot.
     */
    string GetYTitle();

    /*! Shows/hides the legend (description) of the 2D plot.
     */
    void ShowLegend(in boolean theShowing);

    /*! Shrinks and enlarges the 2D plot to fit the 2D viewer.
     */
    void FitAll();

    /*! Set range of the 2D plot to X axis of the 2D viewer.
     */
    void FitXRange(in double xMin, in double xMax);

    /*! Set range of the 2D plot to Y axis of the 2D viewer.
     */
    void FitYRange(in double yMin, in double yMax);

    /*! Set range of the 2D plot to XY axis of the 2D viewer.
     */
    void FitRange(in double xMin, in double xMax,
		  in double yMin, in double yMax);

    void GetFitRanges(out double xMin,out double xMax,
		      out double yMin,out double yMax);
  };

  //-------------------------------------------------------
  /*! \brief Interface of the %ViewManager
   *
   * The ViewManager is necessary for work with view windows (creation and deletion).
   */
  interface ViewManager: Base {
    /*! \brief Getting an active %View Frame
     *
     * Returns an object reference to the active %View Frame.
     * Type of the %View must be checked.
     * \note <BR>Returns nil if there are no views currently opened.
     */
    View GetCurrentView();

    /*! \brief Creation of a 3d %View.
     *
     * Returns an object reference to the newly created 3D %View.
     */
    View3D Create3DView();

    /*! \brief Creation of a Table %View.
     *
     * Returns an object reference to the newly created Table %View.
     */
    TableView CreateTableView(in Table theTable);

    /*! \brief Creation of a 2D plot %View.
     *
     * Returns an object reference to the newly created 2D plot %View.
     */
    XYPlot CreateXYPlot();

    /*! Deletes a definite view.
     * \param theView The view which should be deleted.
     */
    void Destroy(in View theView);
  };


};

#endif
