Interface margins and axes bounds properties.
[scilab.git] / scilab / modules / renderer / src / cpp / subwinDrawing / Camera.h
1 /*------------------------------------------------------------------------*/
2 /* file: Camera.h                                                         */
3 /* Copyright INRIA 2007                                                   */
4 /* Authors : Jean-Baptiste Silvy                                          */
5 /* desc : File used to position viewpoint and rendering zone in the       */
6 /*        canvas.                                                         */
7 /*------------------------------------------------------------------------*/
8
9
10 #ifndef _CAMERA_H_
11 #define _CAMERA_H_
12
13 #include "CameraBridge.h"
14
15 namespace sciGraphics
16 {
17   
18 class Camera
19 {
20 public:
21   
22   Camera( void ) ;
23
24   virtual ~Camera( void ) ;
25   
26   /**
27    * Set the viewing zone for a subwin.
28    * @param axesBounds axesBounds (WRECT) of the subwin. This a a vector [x_left,y_up,w,h].
29    * @param margins inside the axes bounds, set a surface to use.
30    *                This is a vector [margin_left, margin_right, margin_top, margin_bottom].
31    */
32   void setViewingArea( double axesBounds[4], double margins[4] ) ;
33
34   /**
35    * Set the rotation angles of the camera.
36    */
37   void setRotationAngles( double alpha, double theta ) ;
38
39   /**
40    * Specify the axes box to render.
41    * @param bounds [Xmin,Xmax,Ymin,Ymax,Zmin,Zmax] vector.
42    */
43   void setSubwinBox( double bounds[6] ) ;
44
45   /**
46    * Specify the farthest distance from the camera in order to specify zNear and zFar
47    */
48   void setFarthestDistance( double maxDist ) ;
49
50   /**
51    * Position the view and view area accordingly to previous calls.
52    */
53   void renderPosition( void ) ;
54
55   /**
56    * Set the camera bridge
57    */
58   void setBridge( CameraBridge * bridge ) { m_pImp = bridge; }
59
60 protected:
61
62   /*-----------------------------------------------------*/
63   /**
64    * Get the center of the watched subwin.
65    */
66   void getSubwinCenter( double center[3] ) ;
67
68   /**
69    * Compute the eye position which will be able to wtch the whole subwin
70    */
71   void computeEyePosition( double eyePosition[3] ) ;
72   /*-----------------------------------------------------*/
73
74   /** bridge for driver dependent algorithms */
75   CameraBridge * m_pImp;
76
77   /** specify the axis box */
78   double m_aAxesBox[6];
79
80   /** Rotation angle around axe Z */
81   double m_dTheta;
82   /** Rotation around axe Y */
83   double m_dAlpha;
84
85   /*-----------------------------------------------------*/
86
87 };
88
89 }
90
91 #endif /* _CAMERA_H_ */
92