]> SALOME platform Git repositories - modules/visu.git/blob - idl/VISU_Gen.idl
Salome HOME
Merge with branch V2_2_0_VISU_improvement
[modules/visu.git] / idl / VISU_Gen.idl
1 //  Copyright (C) 2003  CEA/DEN, EDF R&D
2 //
3 //
4 //
5 //  File   : VISU_Gen.idl
6 //  Author : Alexey Petrov
7
8 /*! \file VISU_Gen.idl This file conatins a set of interfaces of the %VISU module.
9  *     This module provides various forms of data visualization in %SALOME application.
10  *     These forms include data tables, XY plots, 3d representations
11  *     and combination of these forms.
12  */
13
14 #ifndef __VISU_GEN__
15 #define __VISU_GEN__
16
17 #include "SALOME_Exception.idl"
18 #include "SALOME_GenericObj.idl"
19 #include "SALOME_Component.idl"
20 #include "SALOMEDS.idl"
21 #include "SALOMEDS_Attributes.idl"
22 #include "MED.idl"
23
24 /*!
25   The main package of interfaces of the post-processing module %VISU.
26 */
27 module VISU {
28   //-------------------------------------------------------
29   typedef string IdType;
30
31   /*!
32    * This enumeration contains a set of elements defining the type
33    * of the scaling, which can be applied on different presentations.
34    */
35   enum Scaling{ LINEAR, /*!< Linear type of scaling. */
36                 LOGARITHMIC /*!< Logarithmic type of scaling. */
37               };
38
39   /*!
40    * This enumeration contains a set of elements defining the
41    * type of the %entity (topological units) constituting a mesh.
42    */
43   enum Entity{ NODE, /*!< Node corresponds to a geometrical point. */
44                EDGE, /*!< Edge corresponds to a geometrical line connecting two points. */
45                FACE, /*!< Face corresponds to a geometrical plane bounded by several lines. */
46                CELL  /*!< Cell is a volumic element of a mesh */
47                };
48
49   /*!
50    * This enumeration contains a set of elements defining the type of the %VISU object.
51    * This enumeration is used for navigation between a set of %VISU interfaces.
52    */
53   enum VISUType {
54     TNONE, /*!< Not a %VISU object */
55     TCURVE, /*!< Curve line object for construction of 2D XY plots */
56     TTABLE, /*!< Table containing numerical data */
57     TCONTAINER, /*!< Container object used for storing a set of curve lines */
58     TMESH, /*!< Meshing object */
59     TSCALARMAP, /*!< Scalarmap 3D presentation object */
60     TISOSURFACE, /*!< Iso surface 3D presentation object */
61     TDEFORMEDSHAPE, /*!< Deformed shape 3D presentation object */
62     TPLOT3D, /*!< Plot3D 3D presentation object */
63     TCUTPLANES, /*!< Cut planes 3D presentation object */
64     TCUTLINES, /*!< Cut lines 3D presentation object */
65     TVECTORS, /*!< Vectors 3D presentation object */
66     TSTREAMLINES, /*!< Streamlines 3D presentation object */
67     TVISUGEN, /*!< %VISU generator used for performing operations with different %VISU objects */
68     TVIEWMANAGER, /*!< View manager used for performing operations with different views */
69     TRESULT, /*!< The data on which different presentations are based */
70     TXYPLOT, /*!< 2D XY plot consisting of one or several curve lines */
71     TTABLEVIEW, /*!< Table view is used for displaying data tables */
72     TVIEW3D, /*!< 3D view is used for displaying 3D graphical presentations */
73     TENTITY, /*!< An element composing a mesh: node, edge, face or cell */
74     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. */
75     TGROUP, /*!< A group of families */
76     TFIELD, /*!< Field represents the results of calculations (it can be scalar or vector values), grouped together under one physical concept. */
77     TTIMESTAMP, /*!<Time stamp represents a subfield: the results of calculations are taken in one definite moment. */
78     TANIMATION, /*!< Represents Animation object. */
79     TALL
80   };
81
82   interface Base {
83     /*!
84      * Returns ID of the object.
85      */
86     IdType GetID();
87
88     /*!
89      * Returns the type of the presentable object
90      */
91     VISUType GetType();
92   };
93
94   /*!
95    *  \brief Removable object interface
96    *
97    *  Removable object interface is the root class of all removable objects.
98    */
99   interface RemovableObject : Base {
100     /*!
101      *  Remove object from study.
102      */
103     void RemoveFromStudy();
104   };
105
106   /*! \brief Presentable object interface
107    *
108    * Presentable object interface is the root class of all presentable objects.
109    */
110   interface PrsObject : RemovableObject {
111   };
112
113   //-------------------------------------------------------
114   /*! \brief %Table representation interface
115    *
116    * Presentation parameters of the %Table view.
117    */
118   interface Table : PrsObject {
119     /*!
120      * Sets the title of the table.
121      * \param theTitle String parameter defining the title of this table.
122      */
123     void SetTitle(in string theTitle);
124
125     /*!
126      * Gets the title of the table.
127      * \return A string value containing the title of the table.
128     */
129     string GetTitle();
130
131     /*!
132      * This enumeration contains a set of elements defining the orientation of the table.
133      */
134     enum Orientation {
135       HORIZONTAL, /*!< Horizontal orientation of the table. */
136       VERTIACAL   /*!< Vertical orientation of the table. */
137     };
138
139     /*!
140      * Sets orientation of the table.
141      * \param theOrientation This input parameter defines the orientation of the table.
142      *                       It is taken from the <VAR>Orientation</VAR> enumeration.
143      */
144     void SetOrientation(in Orientation theOrientation);
145
146     /*!
147      * Gets orientation of the table.
148      * \return Orientation of the table. The returned value will correspond
149      *         to one of the elements the <VAR>Orientation</VAR> enumeration.
150      */
151     Orientation GetOrientation();
152
153     /*!
154      * Gets the number of rows of the table.
155      * \return Long value corresponding to the number of rows of the table
156      */
157     long GetNbRows();
158
159     /*!
160      * Gets the number of columns of the table.
161      * \return Long value corresponding to the number of columns of the table
162      */
163     long GetNbColumns();
164   };
165
166   //-------------------------------------------------------
167   /*! \brief Interface of curve representation.
168    *
169    * Manages presentation parameters of one curve.
170    * It can be used for presentation of a set of curves using a combined presentation.
171    */
172   interface Curve : PrsObject {
173     /*!
174      * Sets the title of the curve.
175      * \param theTitle This string parameter defines the title of this curve.
176      */
177     void SetTitle(in string theTitle);
178
179     /*!
180      * Gets the title of the curve.
181      * \return String value corresponding to the title of the curve.
182      */
183     string GetTitle();
184
185     /*!
186      * Sets the color of the curve.
187      * \param theColor The color of the curve. This parameter is taken
188      *                 from the <VAR>Orientation</VAR> enumeration.
189      */
190     void SetColor(in SALOMEDS::Color theColor);
191
192     /*!
193      * Gets the color of the curve.
194      * \return Color of the curve. The returned value will correspond
195      *         to one of the elements the <VAR>Color</VAR> enumeration.
196      */
197     SALOMEDS::Color GetColor();
198
199     /*!
200      * This enumeration contains a set of elements defining the
201      * presentation type of markers (data points) with help of
202      * which the curve is constructed on the graphics.
203      */
204     enum MarkerType { NONE,
205                       CIRCLE,
206                       RECTANGLE,
207                       DIAMOND,
208                       DTRIANGLE,
209                       UTRIANGLE,
210                       LTRIANGLE,
211                       RTRIANGLE,
212                       CROSS,
213                       XCROSS
214     };
215
216     /*!
217      * Sets the presentation type of markers (data points) with help of
218      * which the curve is constructed on the graphics.
219      * \param theType This parameter defines the type of marker with help
220      *                of which the curve is constructed on the graphics.
221      *                It is taken from <VAR>MarkerType</VAR> enumeration.
222      */
223     void SetMarker(in MarkerType theType);
224
225     /*!
226      * Gets the presentation type of markers (data points) with
227      * help of which the curve is constructed on the graphics.
228      * \return The type of marker with help of which the curve is constructed
229      *         on the graphics. The returned value will correspond to
230      *         one of the elements the <VAR>MarkerType</VAR> enumeration.
231      */
232     MarkerType GetMarker();
233
234     /*!
235      * This enumeration contains a set of elements defining the
236      * type of presentation of a curve line on the graphics.
237      */
238     enum LineType{ VOIDLINE, SOLIDLINE, DASHLINE, DOTLINE, DASHDOTLINE, DASHDOTDOTLINE};
239
240     /*!
241      * Sets the type of presentation of curve lines on the graphics.
242      * \param theType This parameter defines the type of presentation of curve lines on the graphics.
243      * \param theLineWidth Long value defining the width of the curve line.
244      */
245     void SetLine(in LineType theType, in long theLineWidth);
246
247     /*!
248      * Gets the type of representation of curve lines on the graphics.
249      * \return The type of representation of curve lines on the graphics.
250      */
251     LineType GetLine();
252
253     /*!
254      * Gets the width of the curve line.
255      * \return Long value corresponding to the width of the curve line.
256      */
257     long GetLineWidth();
258   };
259
260   //-------------------------------------------------------
261   /*! \brief %Container presentable object interface
262    *
263    * This class is provided in order to create one presentation using several presentable objects.
264    * This can provide a combination of a set of curves to display them in XY plot view.
265    */
266   interface Container : PrsObject {
267     /*!
268      * Adds a curve into the container.
269      * \param theCurve The added curve.
270      */
271     void AddCurve(in Curve theCurve);
272
273     /*!
274      * Removes a curve from the container.
275      * \param theCurve The removed curve.
276      */
277     void RemoveCurve(in Curve theCurve);
278
279     /*!
280      * Gets the number of curves which are stored in the container.
281      * \return A long value corresponding to the number of curves which are stored in the container.
282      */
283     long GetNbCurves();
284
285     /*!
286      * Removes all curves from the container.
287      */
288     void Clear();
289   };
290
291   //-------------------------------------------------------
292   /*! \brief 3D presentation interface
293    *
294    * This is a root class for all 3D presentations, which can be displayed in %VISU module.
295    */
296   interface Prs3d : PrsObject, SALOME::GenericObj {
297     //interface Prs3d : PrsObject{
298     void SetOffset(in float theDx, in float theDy, in float theDz);
299     void GetOffset(out float theDx, out float theDy, out float theDz);
300   };
301
302   /*!
303    * This enumeration contains a set of elements defining the
304    * type of presentation of the mesh.
305    */
306   enum PresentationType{ POINT,
307                          WIREFRAME,
308                          SHADED,
309                          INSIDEFRAME,
310                          SURFACEFRAME,
311                          SHRINK
312   };
313
314   /*! \brief Interface of the mesh.
315    *
316    * Manages presentation parameters of a 3D presentation of a mesh.
317    * This object can be used for presentation of set of curves using Container class.
318    */
319   interface Mesh : Prs3d {
320     /*!
321      * Sets the color of mesh cells.
322      * \param theColor The color of the cells. This parameter is taken from <VAR>Color</VAR> enumeration.
323      */
324     void SetCellColor(in SALOMEDS::Color theColor);
325
326     /*!
327      * Gets the color of mesh cells.
328      */
329     SALOMEDS::Color GetCellColor();
330
331     /*!
332      * Sets the color of mesh nodes.
333      * \param theColor The color of the nodes. This parameter is taken from <VAR>Color</VAR> enumeration.
334      */
335     void SetNodeColor(in SALOMEDS::Color theColor);
336
337     /*!
338      * Gets the color of mesh nodes.
339      */
340     SALOMEDS::Color GetNodeColor();
341
342     /*!
343      * Sets the color of mesh links.
344      * \param theColor The color of the links. This parameter is taken from <VAR>Color</VAR> enumeration.
345      */
346     void SetLinkColor(in SALOMEDS::Color theColor);
347
348     /*!
349      * Gets the color of mesh links.
350      */
351     SALOMEDS::Color GetLinkColor();
352
353     /*!
354      * Sets the type of representation of a mesh.
355      * \param theType The of representation of a mesh. This parameter is
356      *                taken from <VAR>PresentationType</VAR> enumeration.
357      */
358     void SetPresentationType(in PresentationType theType);
359
360     /*!
361      * Gets the type of representation of the mesh.
362      * \return The type of representation of the mesh.
363      */
364     PresentationType GetPresentationType();
365   };
366
367   //-------------------------------------------------------
368   /*! \brief Interface of the %Scalar Map
369    *
370    * This interface is responsable for coloring of 3D field presentations
371    * according the scalar values applied to different cells.
372    * As well it contains presentation parameters of the scalar bar. The scalar
373    * bar is displayed along with each colored field presentation and serves for
374    * consulting the correspondance between colors and data values.
375    */
376   interface ScalarMap : Prs3d {
377     /*! Sets the method of coloring of the elements composing a 3D presentation.
378      */
379     void SetScalarMode(in long theScalarMode);
380
381     /*! Gets the method of coloring of the elements composing a 3D presentation.
382      */
383     long GetScalarMode();
384
385     /*!
386      * Sets the type of scaling of the values reflected by the scalar bar.
387      * \param theScaling The value of this parameter is taken from the <VAR>Scaling</VAR> enumeration.
388      */
389     void SetScaling(in Scaling theScaling);
390
391     /*!
392      * Gets the type of scaling of the values reflected by this presentation.
393      */
394     Scaling GetScaling();
395
396     /*!
397      * Sets scalar range - min and max boundaries of the scalar bar.
398      * \param theMin  Min boundary of the scalar bar.
399      * \param theMax  Max boundary of the scalar bar.
400      */
401     void SetRange(in double theMin, in double theMax);
402
403     /*!
404      * Gets the min boundary of the scalar bar.
405      */
406     double GetMin();
407
408     /*!
409      * Gets the max boundary of the scalar bar.
410      */
411     double GetMax();
412
413     /*! %Orientation of the scalar bar. */
414     enum Orientation {
415       HORIZONTAL, /*!< Horizontal orientation of the scalar bar.*/
416       VERTICAL    /*!< Vertical orientation of the scalar bar.*/
417     };
418
419     /*!
420      * Sets the type of orientation of the scalar bar.
421      * \param theOrientation This parameter defines the orientation of the scalar bar.
422      *                       It is taken from the <VAR>Orientaton</VAR> enumeration.
423      */
424     void SetBarOrientation(in Orientation theOrientation);
425
426     /*!
427      * Gets the type of orientation of the scalar bar.
428      */
429     Orientation GetBarOrientation();
430
431     /*! \brief Position of the scalar bar.
432      *
433      * Sets the position of the scalar bar origin on the screen.
434      * \param X   Horizontal position. The value can be between 0 and 1.
435      * \param Y   Vertical position. The value can be between 0 and 1.
436      */
437     void SetPosition(in double X, in double Y);
438
439     /*!
440      * Gets horizontal position of the scalar bar origin.
441      */
442     double GetPosX();
443
444     /*!
445      * Gets vertical position of the scalar bar origin.
446      */
447     double GetPosY();
448
449     /*! \brief Size of this presentable object.
450      *
451      * Sets the size of the scalar bar.
452      * \param theWidth  Width of this presentable object. The value can be between 0 and 1.
453      * \param theHeight  Height of this presentable object. The value can be between 0 and 1.
454      */
455     void SetSize(in double theWidth, in double theHeight);
456
457     /*!
458      * Gets the width of this presentable object.
459      * \return A double value corresponding to the width of this presentable object.
460      */
461     double GetWidth();
462
463     /*!
464      * Gets the height of this presentable object.
465      * \return A double value corresponding to the height of this presentable object.
466      */
467     double GetHeight();
468
469     /*!
470      * Sets the number of colors which will be used for presentation of this presentable object.
471      * \param theNbColors A long value defining the number of colors.
472      */
473     void SetNbColors(in long theNbColors);
474
475     /*!
476      * Gets the number of colors which will be used for visualization of this presentable object.
477      * \return A long value corresponding to the number of colors which
478      *         will be used for visualization of this presentable object.
479      */
480     long GetNbColors();
481
482     /*!
483      * Sets the number of labels which will be used for indication of color gradation
484      * of the scalar bar.
485      * \param theNbLabels A long value defining the number of labels.
486      */
487     void SetLabels(in long theNbLabels);
488
489     /*!
490      * Gets the number of labels which will be used for indication of color gradation of the scalar bar.
491      * \return A long value corresponding to the number of labels which will
492      *         be used for indication of color gradation of the scalar bar.
493      */
494     long GetLabels();
495
496     /*!
497      * Sets the title of the scalar bar. By default - the name of the selected result is used.
498      * \param theName String parameter defining the name of the scalar bar.
499      */
500     void SetTitle(in string theName);
501
502     /*!
503      * Gets the title of the scalar bar.
504      */
505     string GetTitle();
506   };
507
508   //-------------------------------------------------------
509   /*! \brief Deformed shape presentation interface
510    *
511    * Presentation parameters of the deformed shape presentation.
512    */
513   interface DeformedShape : ScalarMap {
514     /*!
515      * Sets the scale of the presentatable object.
516      * \param theScale Double value defining the scale of this presentable object.
517      */
518     void SetScale(in double theScale);
519
520     /*!
521      * Gets the scale of the presentatable object.
522      */
523     double GetScale();
524
525     /*! This boolean method returns True if this deformed shape presentation is colored.
526      */
527     boolean IsColored();
528
529     /*! Shows this presentation in colored mode.
530      * \param theColored If this boolean parameter is True this presentable
531      *                   object will be shown in colored mode.
532      */
533     void ShowColored(in boolean theColored);
534
535     /*! Gets the color of this presentable object.
536      * \return The color of this presentable object.
537      */
538     SALOMEDS::Color GetColor();
539
540     /*! Sets the color of this presentation.
541      * \param theColor The color of this presentation. This parameter
542      *                 is taken from the <VAR>Color</VAR> enumeration.
543      */
544     void SetColor(in SALOMEDS::Color theColor);
545   };
546
547   //-------------------------------------------------------
548   /*!
549    *  \brief Plot3D interface
550    *
551    *  Presentation parameters of Plot3D presentation. This type of presentation
552    *  consists of deforming initial planar mesh according to values assigned to the mesh elements.
553    *  If mesh not planar but volumic one, it is possible to generate intermediate planar mesh.
554    */
555   interface Plot3D : ScalarMap {
556     /*!
557      *  This enumeration contains a set of elements defining
558      *  the type of orientation in 3D space of the cutting plane.
559      */
560     enum Orientation { XY,   /*!< The object is located in the plane formed by X and Y axis. */
561                        YZ,   /*!< The object is located in the plane formed by Y and Z axis. */
562                        ZX }; /*!< The object is located in the plane formed by Z and X axis. */
563
564     /*!
565      *  Sets the orientation in 3D space of cutting plane for the presentation.
566      *  \param theOrientation This parameter defines the type of orientation of cutting plane
567      *         in 3D space. It is taken from the <VAR>Orientation</VAR> enumeration.
568      *  \param theXAngle The angle of rotation of the cutting plane
569      *         around the first axis of the chosen orientation.
570      *  \param theXAngle The angle of rotation of the cutting plane
571      *         around the second axis of the chosen orientation.
572      */
573     void SetOrientation (in Orientation theOrientation, in double theXAngle, in double theYAngle);
574
575     /*!
576      *  Gets the type of orientation in 3D space of cutting plane.
577      */
578     Orientation GetOrientationType();
579
580     /*!
581      *  Gets rotation angle of the cutting plane
582      *  around the first axis of the chosen orientation.
583      */
584     double GetRotateX();
585
586     /*!
587      *  Gets rotation angle of the cutting plane
588      *  around the second axis of the chosen orientation.
589      */
590     double GetRotateY();
591
592     /*!
593      *  Sets the position of a cutting plane.
594      *  \param thePlanePosition The position of the cutting plane.
595      *  \param theIsRelative Define, whether the input position is relative.
596      */
597     void SetPlanePosition (in double  thePlanePosition,
598                            in boolean theIsRelative);
599
600     /*!
601      *  Gets the position of the cutting plane
602      */
603     double GetPlanePosition();
604
605     /*!
606      *  Returns true if a position of cutting plane is relative
607      */
608     boolean IsPositionRelative();
609
610     /*!
611      *  Sets the scale factor for scalar values
612      *  (how much corresponding mesh elements should be translated).
613      *  \param theScaleFactor The scaling factor.
614      */
615     void SetScaleFactor (in double theScaleFactor);
616
617     /*!
618      *  Gets the scale factor for scalar values.
619      *  (how much corresponding mesh elements is translated)
620      */
621     double GetScaleFactor();
622
623     /*!
624      *  Sets presentation type: contour or surface.
625      *  \param theIsContourPrs Define, whether presentation type is contour.
626      */
627     void SetContourPrs (in boolean theIsContourPrs );
628
629     /*!
630      *  Returns true if presentation type is contour.
631      */
632     boolean GetIsContourPrs();
633
634     /*!
635      *  Sets the number of contours.
636      *  \param theNb The number of contours.
637      */
638     void SetNbOfContours (in long theNb);
639
640     /*!
641      *  Gets the number of contours.
642      */
643     long GetNbOfContours();
644   };
645
646   //-------------------------------------------------------
647   /*! \brief Cut planes interface
648    *
649    * Presentation parameters of Cut planes presentation. This type of presentation
650    * consists of cutting your initial mesh by a definite number of planes. As the
651    * result you will see these planes which will be cutted by the borders of the mesh.
652    */
653   interface CutPlanes : ScalarMap {
654     /*!
655      * This enumeration contains a set of elements defining the type of orientation in 3D space
656      * of the cut planes.
657      */
658     enum Orientation {XY, /*!< The object is located in the plane formed by X and Y axis. */
659                       YZ, /*!< The object is located in the plane formed by Y and Z axis. */
660                       ZX}; /*!< The object is located in the plane formed by Z and X axis. */
661
662     /*!
663      * Sets the type of orientation in 3D space of cut planes presentation.
664      * \param theOrientation This parameter defines the type of orientation of cut planes
665      *                       in 3D space. It is taken from the <VAR>Orientation</VAR> enumeration.
666      * \param theXAngle The angle of rotation of the cut planes around
667      *                  the first axis of the chosen orientation.
668      * \param theXAngle The angle of rotation of the cut planes around
669      *                  the second axis of the chosen orientation.
670      */
671     void SetOrientation(in Orientation theOrientation, in double theXAngle, in double theYAngle);
672
673     /*!
674      * Gets the type of orientation in 3D space of cut planes presentation.
675      */
676     Orientation GetOrientationType();
677
678     /*!
679      * Gets rotation angle of the cut plane presentation around the first axis of the chosen orientation.
680      */
681     double GetRotateX();
682
683     /*!
684      * Gets rotation angle of the cut plane presentation around the second axis of the chosen orientation.
685      */
686     double GetRotateY();
687
688     /*!
689      * Sets the displacement of the cut planes in 3D space.
690      *
691      * \param theDisp This parameter defines position of the cut planes
692      * in 3D space. It varies from 0 to 1. If the chosen value is 0.5, the cut planes
693      * will be evenly located regarding each other; in other words, the distance between all
694      * of them will be equal. If the value is higher or lower than 0.5, the planes will be displaced
695      * to one or another side.
696      */
697     void SetDisplacement(in double theDisp);
698
699     /*!
700      * Gets the displacement of the cut planes in 3D space.
701      */
702     double GetDisplacement();
703
704     /*!
705      * Sets the position of a definite cut plane.
706      * \param thePlaneNumber The number of this cut plane.
707      * \param thePlanePosition The position of this cut plane.
708      */
709      void SetPlanePosition(in long thePlaneNumber, in double thePlanePosition);
710
711     /*!
712      * Sets the position of the choosen plane to default value.
713      * \param thePlaneNumber The number of this cut plane.
714      */
715      void SetDefault(in long thePlaneNumber);
716
717     /*!
718      * Gets the position of the choosen plane
719      */
720     double GetPlanePosition(in long thePlaneNumber);
721
722     /*!
723      * Determines whether the choosen plane has default position.
724      * \param thePlaneNumber The number of this cut plane.
725      */
726     boolean IsDefault(in long thePlaneNumber);
727
728     /*!
729      * Sets the number of cut planes.
730      * \param theNb The number of cut planes.
731      */
732     void SetNbPlanes(in long theNb);
733
734     /*!
735      * Gets the number of cut planes.
736      */
737     long GetNbPlanes();
738   };
739
740   //-------------------------------------------------------
741   /*! \brief Cut lines presentation.
742    *
743    * Presentation parameters of a Cut lines presentation.
744    * Cut Lines is a type of presentation which displays colored cells
745    *   with applied scalar values on the mesh where lines are placed.
746    * The procedure of construction of a Cut Lines presentation reuses the algorithm
747    *   of creation of Cut Planes presentation and consists of two steps:
748    *
749    *   1. From Cut Planes presentation one plane is taken and
750    *      it is used as base plane for construction of cut lines.
751    *   2. This plane is cut by a regular array of planes. The result of this
752    *      operation is a regular array of lines in space, belonging to the same plane
753    *      and having the same orientation. They are located inside or on the mesh.
754    */
755   interface CutLines : ScalarMap {
756     /*!
757      * Sets the type of orientation in 3D space of the base plane of a cut lines presentation.
758      * \param theOrientation The orientation of the base plane in 3D space.
759      * \param theXAngle The angle of rotation of the base plane around
760      *                  the first axis of the chosen orientation.
761      * \param theXAngle The angle of rotation of the base plane around
762      *                  the second axis of the chosen orientation.
763      */
764     void SetOrientation(in CutPlanes::Orientation theOrientation, in double theXAngle, in double theYAngle);
765
766     /*!
767      * Sets the type of orientation in 3D space of the cutting planes of a cut lines presentation.
768      * \param theOrientation This parameter defines the type of orientation of the cutting planes
769      *                       in 3D space. It is taken from the <VAR>Orientation</VAR> enumeration.
770      * \param theXAngle The angle of rotation of the cutting planes
771      *                  around the first axis of the chosen orientation.
772      * \param theXAngle The angle of rotation of the cutting planes
773      *                  around the second axis of the chosen orientation.
774      */
775     void SetOrientation2(in CutPlanes::Orientation theOrientation, in double theXAngle, in double theYAngle);
776
777     /*!
778      * Gets the type of orientation in 3D space of the base plane of a cut lines presentation.
779      */
780     CutPlanes::Orientation GetOrientationType();
781
782     /*!
783      * Gets the type of orientation in 3D space of the cutting planes of a cut lines presentation.
784      */
785     CutPlanes::Orientation GetOrientationType2();
786
787     /*!
788      * Gets rotation angle of the base plane around the first axis of the chosen orientation.
789      */
790     double GetRotateX();
791
792     /*!
793      * Gets rotation angle of the cutting planes around the first axis of the chosen orientation.
794      */
795     double GetRotateX2();
796
797     /*!
798      * Gets rotation angle of the base plane around the second axis of the chosen orientation.
799      */
800     double GetRotateY();
801
802     /*!
803      * Gets rotation angle of the cutting planes around the second axis of the chosen orientation.
804      */
805     double GetRotateY2();
806
807     /*!
808      * Sets the displacement of the base plane of the cut lines presentation in 3D space.
809      *
810      * \param theDisp This parameter defines position of the base plane
811      * in 3D space. It varies from 0 to 1.
812      */
813     void SetDisplacement(in double theDisp);
814
815     /*!
816      * Sets the displacement of the cutting planes of the cut lines presentation in 3D space.
817      *
818      * \param theDisp This parameter defines position of the cutting planes
819      * in 3D space. It varies from 0 to 1.
820      */
821     void SetDisplacement2(in double theDisp);
822
823     /*!
824      * Gets the displacement of the base plane of the cut lines presentation in 3D space.
825      */
826     double GetDisplacement();
827
828     /*!
829      * Gets the displacement of the cutting planes of the cut lines presentation in 3D space.
830      */
831     double GetDisplacement2();
832
833     /*! Sets the position of the base plane in 3D space.
834      * \param thePlanePosition A double value defining the position of the base plane in 3D space.
835      */
836     void SetBasePlanePosition(in double thePlanePosition);
837
838     /*! Gets the position of the base plane in 3D space.
839      */
840     double GetBasePlanePosition();
841
842     /*! Sets the position of one of cutting planes in 3D space.
843      * \param thePlaneNumber A long value defining the order number of this cutting plane.
844      * \param thePlanePosition A double value defining the position of the base plane in 3D space.
845      */
846     void SetLinePosition(in long thePlaneNumber, in double thePlanePosition);
847
848     /*! Gets the position of one of cutting planes in 3D space.
849      * \param thePlaneNumber A long value defining the order number of this cutting plane.
850      */
851     double GetLinePosition(in long thePlaneNumber);
852
853     /*! Sets the position of the base plane to default value.
854      */
855     void SetDefault();
856
857     /*!
858      * Determines whether the base plane has default position.
859      * \return True if the base plane has default position.
860      */
861     boolean IsDefault();
862
863     /*!
864      * Sets the position of the choosen cutting plane to default value.
865      * \param thePlaneNumber The number of this cutting plane.
866      */
867     void SetDefaultPosition(in long thePlaneNumber);
868
869     /*!
870      * Determines whether the choosen cutting plane has default position.
871      * \param thePlaneNumber The number of this cutting plane.
872      * \return True if this cutting plane has default position.
873      */
874     boolean IsDefaultPosition(in long thePlaneNumber);
875
876     /*!
877      * Sets the number of cut lines.
878      * \param theNb The number of cut lines.
879      */
880     void SetNbLines(in long theNb);
881
882     /*!
883      * Gets the number of cut lines.
884      */
885     long GetNbLines();
886   };
887
888   /*! \brief Interface of the stream lines representation
889    *
890    * This interface contains presentation parameters of stream lines presentations.
891    * <BR>Stream lines is a type of presentation transforming into lines the
892    * cells with vectors having most similar direction. A stream line can be thought
893    * of as the path that a massless particle takes in a vector field.
894    * Streamlines are used to convey the structure of a vector field.
895    * Usually streamlines are created to explore the most interesting features in the field.
896    */
897   interface StreamLines : DeformedShape {
898     /*! This enumerations contains a set of elements necessary
899      * for definition of direction of the stream lines.
900      */
901     enum Direction{ FORWARD,
902                     BACKWARD,
903                     BOTH
904     };
905
906     /*! Sets the parameters of the stream lines presentation.
907      * \param theIntStep Inegration step is a parameter of smoothness of the stream lines.
908      *                   This parameter defines the accuracy of construction of the streamlines.
909      *                   A smaller value of this parameter allows to construct smoother
910      *                   streamlines (at the cost of more computation time).
911      * \param thePropogationTime This parameter controls the maximum length of
912      *                           the stream line (measured in units of time).
913      * \param theStepLength This parameter defines the size of the output line segments
914      *                      that make up the streamline (which is represented as a polyline).
915      * \param thePrs3d The source presentation. The points of the field located on this source
916      *                 presentation will serve as starting points for generation of stream lines.
917      * \note If this parameter is not defined, your stream lines
918      *       presentation will be generated on all points of the field.
919      * \param thePercents This parameter defines the quantity of points of the field
920      *                    (from 0 to 100%) which will be used as starting points for
921      *                    construction of the stream lines. Thus, the value of this
922      *                    parameter can vary from 0 to 1.
923      * \param theDirection Direction of the stream lines (Forward, Backward or Both).
924      * \return True if all parameters are properly set.
925      */
926     boolean SetParams(in double theIntStep,
927                       in double thePropogationTime,
928                       in double theStepLength,
929                       in Prs3d thePrs3d,
930                       in double thePercents,
931                       in Direction theDirection);
932
933     /*! Gets the value of integration step of the stream lines presentation.
934      */
935     double GetIntegrationStep();
936
937     /*! Gets the value of propagation time of the stream lines presentation.
938      */
939     double GetPropagationTime();
940
941     /*! Gets the value of step length of the stream lines presentation.
942      */
943     double GetStepLength();
944
945     /*! Returns the source presentation used for generation of the stream lines.
946      */
947     Prs3d GetSource();
948
949     /*! Gets the quantity of points of the field used as starting
950      *  points for generation of the stream lines presentation.
951      */
952     double GetUsedPoints();
953
954     /*! Returns the direction of the stream lines.
955      */
956     Direction GetDirection();
957   };
958
959   /*! \brief Interface of the isometric surface presentation
960    *
961    * This interface contains presentation parameters of
962    * isometric surface presentations.
963    * <BR>Iso surfaces presentation combines all equal scalar
964    * values on the cells and on the basis of them constructs
965    * isobaric surfaces, which form this presentation.
966    */
967   interface IsoSurfaces : ScalarMap {
968     /*!
969      * Sets the number of isometric surfaces.
970      * \param theNb A long value defining the number of isometric surfaces
971      *              which will be used for construction of this presentation.
972      */
973     void SetNbSurfaces(in long theNb);
974
975     /*!
976      * Gets the number of isometric surfaces
977      */
978     long GetNbSurfaces();
979   };
980
981   //-------------------------------------------------------
982   /*! \brief Interface of the vector presentation.
983    *
984    * This interface contains presentation parameters of vector presentations.
985    */
986   interface Vectors : DeformedShape {
987     /*!
988      * Sets the width of the lines of the vectors.
989      * \param theWidth A double value defining the width of the lines of the vectors.
990      */
991     void SetLineWidth(in double theWidth);
992
993     /*!
994      * Gets the width of the lines of the vectors.
995      */
996     double GetLineWidth();
997
998     /*!
999      * This enumeration contains a set of elements defining the type of representation of the vector head.
1000      */
1001     enum GlyphType{ ARROW,
1002                     CONE2,
1003                     CONE6,
1004                     NONE
1005                   };
1006
1007     /*!
1008      * Sets the type of representation of the vector head.
1009      * \param theType This parameter defines the type of representation of the vector head.
1010      * This value is taken from the <VAR>GlyphType</VAR> enumeration.
1011      */
1012     void SetGlyphType(in GlyphType theType);
1013
1014     /*!
1015      * Gets the type of representation of the vector head.
1016      */
1017     GlyphType GetGlyphType();
1018
1019     /*!
1020      * This enumeration contains a set of elements defining the position of the vector head.
1021      */
1022     enum GlyphPos{ CENTER, /*!<In the center of the vector.*/
1023                    TAIL,   /*!<In the tail of the vector.*/
1024                    HEAD  /*!<In the head of the vector.*/
1025                  };
1026
1027     /*!
1028      * Sets the position of the vector head.
1029      * \param thePos This parameter defines the position of the vector head.
1030      * This value is taken from the <VAR>GlyphPos</VAR> enumeration.
1031      */
1032     void SetGlyphPos(in GlyphPos thePos);
1033
1034     /*!
1035      * Gets the position of the vector head.
1036      */
1037     GlyphPos GetGlyphPos();
1038   };
1039
1040   //-------------------------------------------------------
1041   /*! \brief %Animation class
1042    *
1043    * This class provides a set of methods used for:<br>
1044    * <ul>
1045    *     <li> generating different animations on the basis of a field,
1046    *     <li> setting the parameters of the animations,
1047    *     <li> playing these animations in the %VISU module.
1048    * </ul>
1049    * \note
1050    * <BR><B>Field</B> represents the results of calculations
1051    * (it can be scalar or vector values), grouped together under one physical concept.
1052    * <BR><B>Time stamp</B> represents a subfield: the results
1053    * of calculations are taken in one definite moment.
1054    */
1055   interface Animation : Base {
1056     /*! Defines the field which will be used as a base for generation of the animation.
1057      * \param theObject The %SObject corresponding to the field.
1058      */
1059     void addField(in SALOMEDS::SObject theObject);
1060
1061     /*! Generates presentations on the basis of the field.
1062      * \param theFieldNum The number of the field, which will be used
1063      *                    as the basis for construction of the presentation.
1064      */
1065     void generatePresentations(in long theFieldNum);
1066
1067     /*! Generates a set of frames from the created by the method
1068      *  <VAR>generatePresentations</VAR>3D presentations. A sequence of
1069      *  these frames will be transformed into an animation.
1070      *  \return  True, if the frames have been successfully generated.
1071      */
1072     boolean generateFrames();
1073
1074     /*! Clears the view before starting an animation.
1075      */
1076     void clearView();
1077
1078     /*! \name Playback of an animation:
1079      */
1080 /*@{*/
1081
1082     /*! Starts an animation.
1083      */
1084     void startAnimation();
1085
1086     /*! Stops an animation.
1087      */
1088     void stopAnimation();
1089
1090     /*! Forwards to the next frame.
1091      */
1092     void nextFrame();
1093
1094     /*! Returns to the previous frame.
1095      */
1096     void prevFrame();
1097
1098     /*! Returns to the first frame of the animation.
1099      */
1100     void firstFrame();
1101
1102     /*! Forwards to the last frame of the animation.
1103      */
1104     void lastFrame();
1105
1106     /*!  Passes to a definite frame of the animation.
1107      * \param theFrame A long value defining the number of the frame.
1108      */
1109     void gotoFrame(in long theFrame);
1110 /*@}*/
1111
1112     /*! Gets the number of time stamps (subfields) contained in the given field.
1113      */
1114     long getNbFields();
1115
1116     /*! Gets the number of generated frames
1117      */
1118     long getNbFrames();
1119
1120     /*! Returns True, if the animation is currently running.
1121      */
1122     boolean isRunning();
1123
1124     /*! Returns the number of the current frame.
1125      */
1126     long getCurrentFrame();
1127
1128     /*!
1129      */
1130     ScalarMap getPresentation(in long theField, in long theFrame);
1131
1132     /*! Sets the type of presentation (vectors, deformed shape etc.)
1133      *  which will be generated by the method <VAR>generatePresentations</VAR>.
1134      */
1135     void setPresentationType(in long theFieldNum, in VISUType theType);
1136
1137     /*! Gets the type of presentation (vectors, deformed shape etc.) which will
1138      * be generated by the method <VAR>generatePresentations</VAR>.
1139      */
1140     VISUType getPresentationType(in long theFieldNum);
1141
1142     /*! Sets the speed of the animation.
1143      * \param theSpeed The speed of the animation. The value varies from 1 to 99.
1144      */
1145     void setSpeed(in long theSpeed);
1146
1147     /*!  Gets the speed of the animation.
1148      */
1149     long getSpeed();
1150
1151     /*! Ruturns True, if playback of the animation is proportional.
1152      * This option allows to render your animation with proportional periods
1153      * of time between every frame (not depending on the time stamps).
1154      */
1155     boolean isProportional();
1156
1157     /*! Sets the range of the animation. The range is defined on the basis of
1158      *  the time stamps of the field which have been used for generation of the animation.
1159      *  This method allows to bound the range of generated frames.
1160      *  If this method is not used, the animation will be generated
1161      *  on the basis of all time stamps contained in the field.
1162      *  /param theMin The value of the first time stamp which will be used for generation of the animation.
1163      *  /param theMax The value of the last time stamp which will be used for generation of the animation.
1164      */
1165     void setAnimationRange(in double theMin, in double theMax);
1166
1167     /*! Gets the number of the first time stamp which will be used for generation of the animation.
1168      */
1169     double getMinRange();
1170
1171     /*! Gets the number of the last time stamp which will be used for generation of the animation.
1172      */
1173     double getMaxRange();
1174
1175     /*! Returns True if the range of the animation has been defined
1176      *  by the method <VAR>setAnimationRange</VAR>. Otherwise
1177      *  the animation will be generated on the basis of all time stamps contained in the field.
1178      */
1179     boolean isRangeDefined();
1180
1181     /*! Saves all the frames composing the animation into a definite directory.
1182      * \param thePath The directory where all the frames will be saved.
1183      */
1184     void dumpTo(in string thePath);
1185
1186     /*! Returns True, if the playback of the animation is cycling.
1187      */
1188     boolean isCycling();
1189
1190     /*! Gets the first time stamp of the field defined at the input of the animation.
1191      * \note This method is used if animation range is <b>NOT</b> defined.
1192      */
1193     double getMinTime();
1194
1195     /*! Gets the last time stamp of the field defined at the input of the animation.
1196      * \note This method is used if animation range is <b>NOT</b> defined.
1197      */
1198     double getMaxTime();
1199
1200     /*! Sets proprtional playback of the animation. This option allows to render your animation
1201      *  with proportional periods of time between every frame (not depending on the time stamps).
1202      *  \param theProp If this boolean parameter is True, playback
1203      *                 of your animation will be set as proportional.
1204      */
1205     void setProportional(in boolean theProp);
1206
1207     /*! Sets cycling playback of the animation. The number of cycles
1208      *  can be infinite, untill you use <VAR>startAnimation</VAR> method.
1209      *  \param theCycle If this boolean parameter is True, playback
1210      *                  of your animation will be set as cycling.
1211      */
1212     void setCycling(in boolean theCycle);
1213
1214     SALOMEDS::SObject publishInStudy();
1215
1216     void saveAnimation();
1217
1218     void restoreFromStudy(in SALOMEDS::SObject theSObj);
1219
1220     boolean isSavedInStudy();
1221   };
1222
1223   /*! \brief Interface %Result
1224    *
1225    * This interface serves for inner representation of data generated
1226    * in other sources (MED object or file). This data is needed
1227    * for further construction of graphical presentations.
1228    */
1229   interface Result : RemovableObject, SALOME::GenericObj {
1230     //interface Result : Base{
1231     /*! Reads all data from the corresponding sources. By default the data is loaded on demand.
1232      */
1233     boolean BuildAll();
1234   };
1235
1236   //-------------------------------------------------------
1237   interface ViewManager;
1238   interface View3D;
1239
1240   /*! \brief %VISU_Gen interface
1241    *
1242    * This is the main interface of %VISU component. It is necessary for creation of
1243    * post-processing presentations from given %Result and %Table object reference,
1244    * using the views provided by %ViewManager.
1245    */
1246   interface VISU_Gen : Engines::Component, SALOMEDS::Driver, Base {
1247     /*! Sets a definite study to be current.
1248      */
1249     void SetCurrentStudy(in SALOMEDS::Study theStudy);
1250
1251     /*! Gets the current study.
1252      */
1253     SALOMEDS::Study GetCurrentStudy();
1254
1255     /*!
1256      * Gets the %View Manager which is used for creation of
1257      * post-processing presentations.
1258      */
1259     ViewManager GetViewManager();
1260
1261     /*!
1262      * Imports tables from a file and create TableAttribute in Sudy
1263      */
1264     SALOMEDS::SObject ImportTables(in string theFileName);
1265
1266     /*!
1267      * Export table to a file
1268      */
1269     boolean ExportTableToFile(in SALOMEDS::SObject theTable, in string theFileName);
1270
1271     /*!
1272      * Imports data from a file. The access to this file will be conserved outside of the application.
1273      * \param theFileName String parameter defining the name of the file
1274      *                    from which the data will be imported.
1275      */
1276     Result ImportFile(in string theFileName);
1277
1278     /*!
1279      * Imports data from a file. The access to this file will closed.
1280      * \param theFileName String parameter defining the name of the file
1281      *                    from which the data will be imported.
1282      */
1283     Result CopyAndImportFile(in string theFileName);
1284
1285     /*!
1286      * Imports data from a %MED object.
1287      */
1288     Result ImportMed(in SALOMEDS::SObject theMedSObject);
1289
1290     /*!
1291      * Imports data from a %MED field.
1292      */
1293     Result ImportMedField(in SALOME_MED::FIELD theField);
1294
1295     /*!
1296      * Creates a mesh on the basis of the data generated in other sources (MED object or file).
1297      * \param theResult   Data generated in other sources. (MED object or file)
1298      * \param theMeshName  One of the meshes presented in MED file
1299      * \param theEntity Type of entity where the field is defined
1300      */
1301     Mesh MeshOnEntity(in Result theResult, in string theMeshName, in Entity theEntity);
1302
1303     /*!
1304      * Creates on the basis of a family a mesh  which will be composed of geometrical
1305      * elements, corresponding to the type of cells (node, edge, face or cell) of this family.
1306      * \param theResult   Data generated in other sources. (MED object or file)
1307      * \param theMeshName  One of the meshes presented in MED file
1308      * \param theEntity Type of entity where the field is defined.
1309      */
1310     Mesh FamilyMeshOnEntity(in Result theResult, in string theMeshName,
1311                             in Entity theEntity, in string theFamilyName);
1312
1313     /*!
1314      * Creates a mesh on the basis of a group of families.
1315      * \param theResult   Data generated in other sources. (MED object or file)
1316      * \param theMeshName  One of the meshes presented in MED file
1317      * \param theGroupName Name of the group.
1318      */
1319     Mesh GroupMesh(in Result theResult, in string theMeshName, in string theGroupName);
1320
1321     /*!
1322      * Creates a scalar map presentation.
1323      * \param theResult    Data generated in other sources. (MED object or file)
1324      * \param theMeshName  One of the meshes presented in MED file
1325      * \param theEntity    Type of entity where the field is defined
1326      * \param theFieldName Group of data attributed to the %MESH. The data can be scalar or vector.
1327      * \param theIteration Number of iteration on the field
1328      */
1329     ScalarMap ScalarMapOnField(in Result theResult, in string theMeshName,
1330                                in Entity theEntity, in string theFieldName,
1331                                in double theIteration);
1332
1333     /*!
1334      * Creates a deformed shape presentation.
1335      * \param theResult    Data generated in other sources. (MED object or file)
1336      * \param theMeshName  One of the meshes presented in MED file
1337      * \param theEntity    Type of entity where the field is defined
1338      * \param theFieldName Group of data attributed to the %MESH. The data can be scalar or vector.
1339      * \param theIteration Number of iteration on the field
1340      */
1341     DeformedShape DeformedShapeOnField(in Result theResult, in string theMeshName,
1342                                        in Entity theEntity, in string theFieldName,
1343                                        in double theIteration);
1344
1345     /*!
1346      * Creates a vector presentation.
1347      * \param theResult    Data generated in other sources. (MED object or file)
1348      * \param theMeshName  One of the meshes presented in MED file
1349      * \param theEntity    Type of entity where the field is defined
1350      * \param theFieldName Group of data attributed to the %MESH. The data can be scalar or vector.
1351      * \param theIteration Number of iteration on the field
1352      */
1353     Vectors VectorsOnField(in Result theResult, in string theMeshName,
1354                            in Entity theEntity, in string theFieldName,
1355                            in double theIteration);
1356
1357     /*!
1358      * Creates an iso surface presentation.
1359      * \param theResult    Data generated in other sources. (MED object or file)
1360      * \param theMeshName  One of the meshes presented in MED file
1361      * \param theEntity    Type of entity where the field is defined
1362      * \param theFieldName Group of data attributed to the %MESH. The data can be scalar or vector.
1363      * \param theIteration Number of iteration on the field
1364      */
1365     IsoSurfaces IsoSurfacesOnField(in Result theResult, in string theMeshName,
1366                                    in Entity theEntity, in string theFieldName,
1367                                    in double theIteration);
1368
1369     /*!
1370      * Creates an stream lines presentation.
1371      * \param theResult    Data generated in other sources. (MED object or file)
1372      * \param theMeshName  One of the meshes presented in MED file
1373      * \param theEntity    Type of entity where the field is defined
1374      * \param theFieldName Group of data attributed to the %MESH. The data can be scalar or vector.
1375      * \param theIteration Number of iteration on the field
1376      */
1377     StreamLines StreamLinesOnField(in Result theResult, in string theMeshName,
1378                                    in Entity theEntity, in string theFieldName,
1379                                    in double theIteration);
1380
1381     /*!
1382      * Creates a presentation of cut planes.
1383      * \param theResult    Data generated in other sources. (MED object or file)
1384      * \param theMeshName  One of the meshes presented in MED file
1385      * \param theEntity    Type of entity where the field is defined
1386      * \param theFieldName Group of data attributed to the %MESH. The data can be scalar or vector.
1387      * \param theIteration Number of iteration on the field
1388      */
1389     CutPlanes CutPlanesOnField(in Result theResult, in string theMeshName,
1390                                in Entity theEntity, in string theFieldName,
1391                                in double theIteration);
1392
1393     /*!
1394      * Creates a presentation of cut lines.
1395      * \param theResult    Data generated in other sources. (MED object or file)
1396      * \param theMeshName  One of the meshes presented in MED file
1397      * \param theEntity    Type of entity where the field is defined
1398      * \param theFieldName Group of data attributed to the %MESH. The data can be scalar or vector.
1399      * \param theIteration Number of iteration on the field
1400      */
1401     CutLines CutLinesOnField(in Result theResult, in string theMeshName,
1402                              in Entity theEntity, in string theFieldName,
1403                              in double theIteration);
1404
1405     /*!
1406      * Creates a Plot3D presentation.
1407      * \param theResult    Data generated in other sources. (MED object or file)
1408      * \param theMeshName  One of the meshes presented in MED file
1409      * \param theEntity    Type of entity where the field is defined
1410      * \param theFieldName Group of data attributed to the %MESH. The data can be scalar or vector.
1411      * \param theIteration Number of iteration on the field
1412      */
1413     Plot3D Plot3DOnField(in Result theResult, in string theMeshName,
1414                          in Entity theEntity, in string theFieldName,
1415                          in double theIteration);
1416
1417     /*!
1418      * Creates a table presentation.
1419      * \param theTableEntry The entry of the table which will be displayed.
1420      */
1421     Table CreateTable(in string theTableEntry);
1422
1423     /*!
1424      * Creates a curve on the basis of points, whose values are taken from the table.
1425      * \param theTable  Table containing the data for construction of curves.
1426      * \param HRow  Index of the row in the table:  abscissa of the point.
1427      * \param VRow  Index of the row in the table:  ordinate of the point.
1428      */
1429     Curve CreateCurve(in Table theTable, in long theHRow, in long theVRow);
1430
1431     /*!
1432      * Creates a presentation form containing an array of references to the curves.
1433      */
1434     Container CreateContainer();
1435
1436     /*! Creates an animation in the 3D view.
1437      * \param theView3d The 3D view, where the animation will be rendered.
1438      */
1439     Animation CreateAnimation(in View3D theView3d);
1440
1441     void DeleteResult(in Result theResult);
1442
1443     void DeletePrs3d(in Prs3d thePrs3d);
1444   };
1445
1446   /*! \brief %View interface
1447    *
1448    * Contains a set of methods used by the %View frame, which can be one of
1449    * the following types: 3d, Table, XY plot.
1450    * %View interface is a base for all types of %view interfaces.
1451    */
1452   interface View: Base {
1453
1454     /*! \brief %ViewRepresentation enumeration
1455      *
1456      * displaying part ("ALL" isn't setable)
1457      */
1458     enum ViewRepresentation {
1459       OBJECTBROWSER,
1460       VIEWER,
1461       PYTHON,
1462       MESSAGES
1463     };
1464
1465     void ShowPart (in ViewRepresentation ViewRepr, in boolean state );
1466
1467     boolean IsPartShown( in ViewRepresentation ViewRepr );
1468
1469     /*!
1470      *  New methods for view parameters management.
1471      */
1472
1473     /*! \brief Split workarea of this view.
1474      *
1475      *  Horizontally split workarea of this view.
1476      *  This view is moved in a new right area.
1477      */
1478     void SplitRight();
1479
1480     /*! \brief Split workarea of this view.
1481      *
1482      *  Horizontally split workarea of this view.
1483      *  This view stays in an old left area, others are moved in a new right area.
1484      */
1485     void SplitLeft();
1486
1487     /*! \brief Split workarea of this view.
1488      *
1489      *  Vertically split workarea of this view.
1490      *  This view is moved in a new bottom area.
1491      */
1492     void SplitBottom();
1493
1494     /*! \brief Split workarea of this view.
1495      *
1496      *  Vertically split workarea of this view.
1497      *  This view stays in an old top area, others are moved in a new bottom area.
1498      */
1499     void SplitTop();
1500
1501     /*!
1502      *  Put this view window on top of its work area.
1503      */
1504     void OnTop();
1505
1506     /*!
1507      *  Put \a theView in workarea of this view right after it.
1508      *  If \a theView was alone in its workarea, workarea of \a theView will be destroyed.
1509      *  If \a theView was in the same workarea with this view, simple reordering will take place.
1510      *  \param theView A view window to be attracted to this one.
1511      */
1512     void Attract (in View theView);
1513
1514     /*!
1515      *  Put all the view windows from workarea of \a theView in workarea of this view right after it.
1516      *  Workarea of \a theView will be destroyed.
1517      *  If \a theView was in the same workarea with this view, simple reordering will take place.
1518      *  \param theView A view window to be attracted to this one together with all its workarea.
1519      */
1520     void AttractAll (in View theView);
1521
1522     /*!
1523      *  Set position of this view window relatively its splitter.
1524      *  \param thePosition Desired position of this view window relatively
1525      *         its splitter. Meaningfull values lays in range [0..1].
1526      *
1527      *  Direction of positioning is defined by the splitter orientation.
1528      */
1529     void SetRelativePositionInSplitter (in double thePosition);
1530
1531     /*!
1532      *  Set size of this view window relatively its splitter.
1533      *  \param theSize Desired size of this view window relatively
1534      *         its splitter. Meaningfull values lays in range [0..1].
1535      *
1536      *  Direction of resizing is defined by the splitter orientation.
1537      */
1538     void SetRelativeSizeInSplitter (in double theSize);
1539
1540     /*!
1541      *  Set horizontal position of this view window relatively its workstack.
1542      *  \param thePosition Desired horizontal position of this view window
1543      *         relatively its workstack. Meaningfull values lays in range [0..1].
1544      */
1545     void SetRelativePositionX (in double thePosition);
1546
1547     /*!
1548      *  Set vertical position of this view window relatively its workstack.
1549      *  \param thePosition Desired vertical position of this view window
1550      *         relatively its workstack. Meaningfull values lays in range [0..1].
1551      */
1552     void SetRelativePositionY (in double thePosition);
1553
1554     /*!
1555      *  Set horizontal size of this view window relatively its workstack.
1556      *  \param theSize Desired horizontal size of this view window relatively
1557      *         its workstack. Meaningfull values lays in range [0..1].
1558      */
1559     void SetRelativeSizeX (in double theSize);
1560
1561     /*!
1562      *  Set vertical size of this view window relatively its workstack.
1563      *  \param theSize Desired vertical size of this view window relatively
1564      *         its workstack. Meaningfull values lays in range [0..1].
1565      */
1566     void SetRelativeSizeY (in double theSize);
1567
1568     /*!
1569      *  Old methods for view parameters management, they don't work now
1570      */
1571     void SetViewWidth (in long Width); //setting width of view
1572     void SetViewHeight (in long Height); //setting height of view
1573     long GetViewWidth(); //getting view width
1574     long GetViewHeight(); //getting view height
1575     enum ViewPosition {TOP, CENTER, BOTTOM, RIGHT, LEFT}; //position of the study frame
1576     void SetViewPositionHorizontal (in ViewPosition ViewPosHor); //setting of the horizontal view position
1577     void SetViewPositionVertical (in ViewPosition ViewPosVer); //setting of the vertical view position
1578     void SetRelativePosition( in double x, in double y );
1579     void SetRelativeSize( in double x, in double y );
1580     void Minimize(); // Minimizes to the task bar or to the bottom of the Desktop the %View frame.
1581     void Restore(); // Restores the %View frame.
1582     void Maximize(); // Maximizes the %View frame.
1583
1584     /*!
1585      * Sets the title of the %View frame.
1586      * \param theTitle String parameter defining the title of the %View frame.
1587      */
1588     void SetTitle(in string theTitle);
1589
1590     /*!
1591      * Gets the title of the %View frame.
1592      */
1593     string GetTitle();
1594
1595     /*!
1596      * Sets background color of the %View frame.
1597      * \param theColor Background color defined in <VAR>SALOMEDS::Color</VAR> enumeration.
1598      */
1599     void SetBackground(in SALOMEDS::Color theColor);
1600
1601     /*!
1602      * Gets background color of the %View frame.
1603      */
1604     SALOMEDS::Color GetBackground();
1605
1606     /*!
1607      * Removes all presentations (presentable objects) from the %view.
1608      */
1609     void EraseAll();
1610
1611     /*!
1612      * Displays all presentations (presentable objects) in the %view.
1613      */
1614     void DisplayAll();
1615
1616     /*!
1617      * Removes a definite presentation (presentable object) from the %view.
1618      * \param thePrsObj The presentation (presentable object) which should be deleted.
1619      */
1620     void Erase(in PrsObject thePrsObj);
1621
1622     /*!
1623      * Displays a definite presentation (presentable object) in the %view.
1624      * \param thePrsObj The presentation (presentable object) which should be displayed.
1625      */
1626     void Display(in PrsObject thePrsObj);
1627
1628     /*!
1629      * Allows to display only a definite presentation (presentable object) in the %view.
1630      * All other presentations are removed from the %view.
1631      * \param thePrsObj The presentation (presentable object) which should be displayed.
1632      */
1633     void DisplayOnly(in PrsObject thePrsObj);
1634
1635     /*!
1636      * Updates the view.
1637      */
1638     void Update();
1639
1640     /*!
1641      * Saves the view.
1642      * \param theFileName The name of the file where the view will be saved.
1643      * \return True, if the view have been saved successfully.
1644      */
1645     boolean SavePicture(in string theFileName);
1646   };
1647
1648   //-------------------------------------------------------
1649   /*! \brief 3D view interface
1650    *
1651    *  This interface contains a set of methods necessary for representation of objects in 3D space.
1652    */
1653   interface View3D : View {
1654     /*!
1655      * This enumeration contains a set of elements determining a predefined point of view
1656      *  (position of the camera in 3D space relative to the presentable object).
1657      */
1658     enum ViewType{ FRONT, BACK, LEFT, RIGHT, TOP, BOTTOM};
1659
1660     /*!
1661      * This enumeration contains a set of elements determining the axis
1662      */
1663     enum Axis{ XAxis, YAxis, ZAxis};
1664
1665     /*!
1666      * Data type defining coordinates in 3D space.
1667      */
1668     typedef double XYZ[3];
1669
1670     /*!
1671      * Makes all presentations, which are currently present in the %view, completely visible.
1672      */
1673     void FitAll();
1674
1675     /*!
1676      * Sets a predefined point of view (FRONT, BACK, LEFT, RIGHT, TOP, BOTTOM). (In other words it means
1677      * a predefined position of the camera in 3D space with respect to the object which is represented.)
1678      */
1679     void SetView(in ViewType theType);
1680
1681     /*!
1682      * Sets the position of the camera in 3D space.
1683      * This point is used as the first point of the vector
1684      * defining the view direction of the camera.
1685      */
1686     void SetPointOfView(in XYZ theCoord);
1687
1688     /*!
1689      * Gets the position of the camera in 3D space.
1690      * This point is used as the first point of the vector
1691      * defining the view direction of the camera.
1692      */
1693     XYZ GetPointOfView();
1694
1695     /*!
1696      * Sets the vertical line of the camera in 3D space.
1697      */
1698     void SetViewUp(in XYZ theDir);
1699
1700     /*!
1701      * Gets the vertical line of the camera in 3D space.
1702      */
1703     XYZ GetViewUp();
1704
1705     /*!
1706      * Sets the point of sight of the camera. This point is used as the
1707      * second point of the vector defining the view direction of the camera.
1708      */
1709     void SetFocalPoint(in XYZ theDir);
1710
1711     /*!
1712      * Gets the point of sight of the camera. This point is used as the
1713      * second point of the vector defining the view direction of the camera.
1714      */
1715     XYZ GetFocalPoint();
1716
1717     /*!
1718      * Zooming of the presentable object. Sets the scale.
1719      */
1720     void SetParallelScale(in double theScale);
1721
1722     /*!
1723      * Zooming of the presentable object. Gets the scale.
1724      */
1725     double GetParallelScale();
1726
1727     /*!
1728      * Scaling of the view along a definite axis.
1729      * \param theAxis The axis of the scaling
1730      * \param theParam The coefficient of the scaling
1731      */
1732     void ScaleView(in Axis theAxis, in double theParam);
1733
1734     /*!
1735      * Removes the scaling of the view.
1736      */
1737     void RemoveScale();
1738
1739     /*!
1740      * Saves view parameters.
1741      * \return True if the view parameters have been created, False if the parameters have been modified.
1742      * \param theName The name under which the view parameters will be saved.
1743      */
1744     boolean SaveViewParams(in string theName);
1745
1746     /*! Restores view parameters.
1747      * \return True if the view parameters have been found and applied to the view,
1748      * False if the parameters with this name don't exist.
1749      * \param theName The name of the view parameters which will be restored.
1750      */
1751     boolean RestoreViewParams(in string theName);
1752   };
1753
1754   //-------------------------------------------------------
1755   /*! \brief Interface of the Table view
1756    *
1757    * This interface is used for creation of a view necessary for presentation of a table.
1758    */
1759   interface TableView : View {
1760   };
1761
1762   //-------------------------------------------------------
1763   /*! \brief Interface of the 2D plot view
1764    *
1765    * This interface is used for creation of a view necessary for presentation
1766    * of a XY plot generated on the basis of one or several curve lines.
1767    */
1768   interface XYPlot : View {
1769     /*! Sets the title of the XY plot
1770      * \param theTitle  The title of the XY plot
1771      */
1772     void SetSubTitle(in string theTitle);
1773
1774     /*! Gets the title of the XY plot
1775      */
1776     string GetSubTitle();
1777
1778     /*!
1779      * This enumeration contains a set of elements determining the type
1780      * of the curve lines, which will be displayed in your XY plot.
1781      */
1782     enum CurveType { POINTS, MULTYLINE, SPLINE};
1783
1784     /*! Sets the type of the curve lines.
1785      * \param theType The type of the curve lines taken from <VAR>CurveType</VAR> enumeration.
1786      */
1787     void SetCurveType(in CurveType theType);
1788
1789     /*! Gets the type of the curve lines.
1790      */
1791     CurveType GetCurveType();
1792
1793     /*! Sets the size of the markers (data points) with help of
1794      * which the curve is constructed on the graphics.
1795      * \param theSize Long value defining the size of the markers.
1796      */
1797     void SetMarkerSize(in long theSize);
1798
1799     /*! Gets the size of the markers (data points) with help of
1800      * which the curve is constructed on the graphics.
1801      */
1802     long GetMarkerSize();
1803
1804     /*! Enable/disables X-axis grid of the 2D plot.
1805      */
1806     void EnableXGrid(in boolean theMajor, in long theNumMajor, in boolean theMinor, in long theNumMinor);
1807
1808     /*! Enable/disables Y-axis grid of the 2D plot.
1809      */
1810     void EnableYGrid(in boolean theMajor, in long theNumMajor, in boolean theMinor, in long theNumMinor);
1811
1812     /*! Sets horizontal scaling of the 2D plot.
1813      * \param theScaling Type of scaling taken from <VAR>Scaling</VAR> enumeration.
1814      */
1815     void SetHorScaling(in Scaling theScaling);
1816
1817     /*! Gets the type horizontal scaling of the 2D plot.
1818      */
1819     Scaling GetHorScaling();
1820
1821     /*! Sets vertical scaling of the 2D plot.
1822      * \param theScaling Type of scaling taken from <VAR>Scaling</VAR> enumeration.
1823      */
1824     void SetVerScaling(in Scaling theScaling);
1825
1826     /*! Gets the type vertical scaling of the 2D plot.
1827      */
1828     Scaling GetVerScaling();
1829
1830     /*! Sets the title of the X-axis of the plot.
1831      * \param theTitle String value defining the title of the X-axis of the plot.
1832      */
1833     void SetXTitle(in string theTitle);
1834
1835     /*! Gets the title of the X-axis of the plot.
1836      */
1837     string GetXTitle();
1838
1839     /*! Sets the title of the Y-axis of the plot.
1840      * \param theTitle String value defining the title of the X-axis of the plot.
1841      */
1842     void SetYTitle(in string theTitle);
1843
1844     /*! Gets the title of the Y-axis of the plot.
1845      */
1846     string GetYTitle();
1847
1848     /*! Shows/hides the legend (description) of the 2D plot.
1849      */
1850     void ShowLegend(in boolean theShowing);
1851
1852     /*! Shrinks and enlarges the 2D plot to fit the 2D viewer.
1853      */
1854     void FitAll();
1855   };
1856
1857   //-------------------------------------------------------
1858   /*! \brief Interface of the %ViewManager
1859    *
1860    * The ViewManager is necessary for work with view windows (creation and deletion).
1861    */
1862   interface ViewManager: Base {
1863     /*! \brief Getting an active %View Frame
1864      *
1865      * Returns an object reference to the active %View Frame.
1866      * Type of the %View must be checked.
1867      * \note <BR>Returns nil if there are no views currently opened.
1868      */
1869     View GetCurrentView();
1870
1871     /*! \brief Creation of a 3d %View.
1872      *
1873      * Returns an object reference to the newly created 3D %View.
1874      */
1875     View3D Create3DView();
1876
1877     /*! \brief Creation of a Table %View.
1878      *
1879      * Returns an object reference to the newly created Table %View.
1880      */
1881     TableView CreateTableView(in Table theTable);
1882
1883     /*! \brief Creation of a 2D plot %View.
1884      *
1885      * Returns an object reference to the newly created 2D plot %View.
1886      */
1887     XYPlot CreateXYPlot();
1888
1889     /*! Deletes a definite view.
1890      * \param theView The view which should be deleted.
1891      */
1892     void Destroy(in View theView);
1893   };
1894 };
1895
1896 #endif