Salome HOME
Update comments.
[modules/gui.git] / src / VTKViewer / VTKViewer_RenderWindow.cxx
1 #include "VTKViewer_RenderWindow.h"
2
3 #include <qcolordialog.h>
4 #include <qpopupmenu.h>
5
6 #include <stdlib.h>
7 #include <math.h>
8
9 #include <vtkRenderWindowInteractor.h>
10 #include <vtkRendererCollection.h>
11 #include <vtkCamera.h>
12 #ifndef WNT
13 #include <vtkXOpenGLRenderWindow.h>
14 //#include <GL/gl.h>
15 //#include <GL/glu.h>
16 //#include <qgl.h>
17 #endif
18
19 #if QT_VERSION > 300
20 #include <qcursor.h>
21 #endif
22
23 /*!Constructor. Create render window with parant \a parent and name \a name.
24  *\param parent - parent window
25  *\param name   - render window name.
26  */
27 VTKViewer_RenderWindow::VTKViewer_RenderWindow(QWidget* parent, const char* name) :
28 QWidget(parent, name, 
29         Qt::WStyle_NoBorder | Qt::WDestructiveClose | 
30         Qt::WResizeNoErase | Qt::WRepaintNoErase)
31 {
32   myRW = vtkRenderWindow::New();
33 #ifndef WNT
34   myRW->SetDisplayId((void*)x11Display());
35 #endif
36   myRW->SetWindowId((void*)winId());
37   myRW->DoubleBufferOn();
38   setMouseTracking(true);
39 }
40
41 /*!Destructor.*/
42 VTKViewer_RenderWindow::~VTKViewer_RenderWindow() 
43 {
44   myRW->Delete();
45 }
46
47 /*!Call Render method for render window field.*/
48 void VTKViewer_RenderWindow::paintEvent(QPaintEvent* theEvent) 
49 {
50   myRW->Render();
51 }
52
53 /*!Resize render window.*/
54 void VTKViewer_RenderWindow::resizeEvent(QResizeEvent* theEvent) 
55 {
56   int aWidth = myRW->GetSize()[0], aHeight = myRW->GetSize()[1];
57   if(vtkRenderWindowInteractor* aRWI = myRW->GetInteractor())
58     aRWI->UpdateSize(width(), height());
59   if(aWidth != width() || aHeight != height()){
60     vtkRendererCollection * aRenderers = myRW->GetRenderers();
61     aRenderers->InitTraversal();
62     double aCoeff = 1.0;
63     if(vtkRenderer *aRenderer = aRenderers->GetNextItem()){
64       vtkCamera *aCamera = aRenderer->GetActiveCamera();
65       double aScale = aCamera->GetParallelScale();
66       if((aWidth - width())*(aHeight - height()) > 0)
67         aCoeff = sqrt(double(aWidth)/double(width())*double(height())/double(aHeight));
68       else
69         aCoeff = double(aWidth)/double(width());
70       aCamera->SetParallelScale(aScale*aCoeff);
71     }
72   }
73 }
74
75 /*!Emit mouse move event.*/
76 void VTKViewer_RenderWindow::mouseMoveEvent(QMouseEvent* event) 
77 {
78   emit MouseMove(event) ;
79 }
80
81 /*!Emit mouse button press event.*/
82 void VTKViewer_RenderWindow::mousePressEvent(QMouseEvent* event) 
83 {
84   emit MouseButtonPressed( event );
85 }
86
87 /*!Emit mouse button release event.*/
88 void VTKViewer_RenderWindow::mouseReleaseEvent( QMouseEvent *event )
89 {
90   emit MouseButtonReleased( event );
91 }
92
93 /*!Emit mouse button double click event.*/
94 void VTKViewer_RenderWindow::mouseDoubleClickEvent( QMouseEvent* event )
95 {
96   emit MouseDoubleClicked( event );
97 }
98
99 /*!Emit key pressed event.*/
100 void VTKViewer_RenderWindow::keyPressEvent (QKeyEvent* event) 
101 {
102   emit KeyPressed(event) ;
103 }
104
105 /*!Emit key release event.*/
106 void VTKViewer_RenderWindow::keyReleaseEvent (QKeyEvent * event) 
107 {
108   emit KeyReleased(event) ;
109 }
110
111 /*!Emit wheel move event.*/
112 void VTKViewer_RenderWindow::wheelEvent(QWheelEvent* event)
113 {
114   emit WheelMoved(event) ;
115 }
116
117 /*!Reaction on change background color.*/
118 void VTKViewer_RenderWindow::onChangeBackgroundColor()
119 {
120   //float red, green, blue;
121   float backint[3];
122
123   vtkRendererCollection * theRenderers = myRW->GetRenderers();
124   theRenderers->InitTraversal();
125   vtkRenderer * theRenderer = theRenderers->GetNextItem();
126   theRenderer->GetBackground(backint);
127
128   QColor selColor = QColorDialog::getColor ( QColor(int(backint[0]*255), int(backint[1]*255), int(backint[2]*255)), NULL );     
129   if ( selColor.isValid() ) {
130     theRenderer->SetBackground( selColor.red()/255., selColor.green()/255., selColor.blue()/255. ); 
131     /* VSR : PAL5420 ---------------------------------------------------
132     SUIT_CONFIG->addSetting( "VTKViewer:BackgroundColorRed",   selColor.red() );
133     SUIT_CONFIG->addSetting( "VTKViewer:BackgroundColorGreen", selColor.green() );
134     SUIT_CONFIG->addSetting( "VTKViewer:BackgroundColorBlue",  selColor.blue() );
135     VSR : PAL5420 --------------------------------------------------- */
136   }
137 }
138
139 /*!Emit content menu requested.*/
140 void VTKViewer_RenderWindow::contextMenuEvent ( QContextMenuEvent * e )
141 {
142   if ( e->reason() != QContextMenuEvent::Mouse )
143     emit contextMenuRequested( e );
144 }