Salome HOME
Porting to Mandrake 10.1 and new products:
[modules/kernel.git] / src / VTKViewer / VTKViewer_Trihedron.h
1 //  SALOME VTKViewer : 
2 //
3 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
5 // 
6 //  This library is free software; you can redistribute it and/or 
7 //  modify it under the terms of the GNU Lesser General Public 
8 //  License as published by the Free Software Foundation; either 
9 //  version 2.1 of the License. 
10 // 
11 //  This library is distributed in the hope that it will be useful, 
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of 
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
14 //  Lesser General Public License for more details. 
15 // 
16 //  You should have received a copy of the GNU Lesser General Public 
17 //  License along with this library; if not, write to the Free Software 
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
19 // 
20 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
21 //
22 //
23 //
24 //  File   : VTKViewer_Trihedron.h
25 //  Author : Alexey PETROV
26 //  Module : SALOME
27 //  $Header: 
28
29 #ifndef VTKViewer_Trihedron_H
30 #define VTKViewer_Trihedron_H
31
32 #include <vtkObject.h>
33 #include <vtkFollower.h>
34
35 class vtkActorCollection;
36 class VTKViewer_Axis;
37 class vtkRenderer;
38 class vtkPolyDataMapper;
39 class vtkLineSource;
40 class vtkConeSource;
41 class VTKViewer_VectorText;
42 class vtkCamera;
43 class vtkProperty;
44
45 //==============================================================================
46
47 class VTKViewer_UnScaledActor: public vtkFollower{
48   VTKViewer_UnScaledActor(const VTKViewer_UnScaledActor&);
49
50 public:
51   vtkTypeMacro(VTKViewer_UnScaledActor,vtkFollower);
52   static VTKViewer_UnScaledActor *New();
53
54   virtual void SetSize(int theSize);
55   virtual void Render(vtkRenderer *theRenderer);
56
57 protected:
58   VTKViewer_UnScaledActor();
59   ~VTKViewer_UnScaledActor(){}
60   int mySize;
61 };
62
63 //==============================================================================
64
65 class VTKViewer_LineActor: public vtkFollower{
66   VTKViewer_LineActor(const VTKViewer_LineActor&);
67
68 public:
69   vtkTypeMacro(VTKViewer_LineActor,vtkFollower);
70   static VTKViewer_LineActor *New();
71
72   void SetLabelActor(VTKViewer_UnScaledActor* theLabelActor);
73   void SetArrowActor(VTKViewer_UnScaledActor* theLabelActor);
74   virtual void Render(vtkRenderer *theRenderer);
75
76 protected:
77   VTKViewer_LineActor(){
78     LabelActor = NULL;
79     ArrowActor = NULL;
80   }
81   ~VTKViewer_LineActor(){
82     SetLabelActor(NULL);
83     SetArrowActor(NULL);
84   }
85
86   VTKViewer_UnScaledActor* LabelActor;
87   VTKViewer_UnScaledActor* ArrowActor;
88 };
89
90 //================================================
91
92 class VTKViewer_Trihedron : public vtkObject{
93  protected:
94   VTKViewer_Trihedron();
95   VTKViewer_Trihedron(const VTKViewer_Trihedron&);
96   virtual ~VTKViewer_Trihedron();
97  public:
98   vtkTypeMacro(VTKViewer_Trihedron,vtkObject);
99   static VTKViewer_Trihedron *New();
100   
101   virtual void SetSize(float theSize);
102   virtual float GetSize() { return mySize;}
103
104   enum TVisibility{eOff, eOn, eOnlyLineOn};
105   virtual void SetVisibility(TVisibility theVis);
106   virtual void VisibilityOff() { SetVisibility(eOff);}
107   virtual void VisibilityOn() { SetVisibility(eOn);}
108   virtual TVisibility GetVisibility();
109
110   virtual void AddToRender(vtkRenderer* theRenderer);
111   virtual void RemoveFromRender(vtkRenderer* theRenderer);
112
113   virtual int GetVisibleActorCount(vtkRenderer* theRenderer);
114   
115 protected:
116   vtkActorCollection* myPresent;
117   VTKViewer_Axis* myAxis[3];
118   float mySize;
119 };
120
121 //==============================================================================
122 // The base class for concreate Axis
123 // Its only duty is to give correct initialization and destruction
124 //   of its pipe-lines
125 class VTKViewer_Axis : public vtkObject{
126 protected:
127   VTKViewer_Axis();
128   VTKViewer_Axis(const VTKViewer_Axis&);
129   virtual ~VTKViewer_Axis();
130  public:
131   vtkTypeMacro(VTKViewer_Axis,vtkObject);
132
133   virtual void AddToRender(vtkRenderer* theRenderer);
134
135   virtual void SetVisibility(VTKViewer_Trihedron::TVisibility theVis);
136   virtual VTKViewer_Trihedron::TVisibility GetVisibility() { return myVisibility; }
137
138   virtual void SetCamera(vtkCamera* theCamera);
139   virtual void SetProperty(vtkProperty* theProperty);
140   virtual void SetSize(float theSize);
141
142   virtual VTKViewer_UnScaledActor* GetLabel(){ return myLabelActor; }
143   virtual VTKViewer_UnScaledActor* GetArrow(){ return myArrowActor; }
144
145 protected:
146   VTKViewer_Trihedron::TVisibility myVisibility;
147   float myDir[3], myRot[3];
148
149   VTKViewer_LineActor *myLineActor;
150   //vtkActor *myLineActor;
151   VTKViewer_UnScaledActor *myArrowActor;
152   VTKViewer_UnScaledActor *myLabelActor;
153
154   vtkPolyDataMapper *myMapper[3];
155   vtkLineSource *myLineSource;
156   vtkConeSource *myConeSource;
157   VTKViewer_VectorText* myVectorText;
158 };
159
160 #endif