Salome HOME
Initial version
[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 //****************************************************************
24 VTKViewer_RenderWindow::VTKViewer_RenderWindow(QWidget* parent, const char* name) :
25 QWidget(parent, name, 
26         Qt::WStyle_NoBorder | Qt::WDestructiveClose | 
27         Qt::WResizeNoErase | Qt::WRepaintNoErase)
28 {
29   myRW = vtkRenderWindow::New();
30 #ifndef WNT
31   myRW->SetDisplayId((void*)x11Display());
32 #endif
33   myRW->SetWindowId((void*)winId());
34   myRW->DoubleBufferOn();
35   setMouseTracking(true);
36 }
37
38 //****************************************************************
39 VTKViewer_RenderWindow::~VTKViewer_RenderWindow() 
40 {
41   myRW->Delete();
42 }
43
44 //****************************************************************
45 void VTKViewer_RenderWindow::paintEvent(QPaintEvent* theEvent) 
46 {
47   myRW->Render();
48 }
49
50 //****************************************************************
51 void VTKViewer_RenderWindow::resizeEvent(QResizeEvent* theEvent) 
52 {
53   int aWidth = myRW->GetSize()[0], aHeight = myRW->GetSize()[1];
54   if(vtkRenderWindowInteractor* aRWI = myRW->GetInteractor())
55     aRWI->UpdateSize(width(), height());
56   if(aWidth != width() || aHeight != height()){
57     vtkRendererCollection * aRenderers = myRW->GetRenderers();
58     aRenderers->InitTraversal();
59     double aCoeff = 1.0;
60     if(vtkRenderer *aRenderer = aRenderers->GetNextItem()){
61       vtkCamera *aCamera = aRenderer->GetActiveCamera();
62       double aScale = aCamera->GetParallelScale();
63       if((aWidth - width())*(aHeight - height()) > 0)
64         aCoeff = sqrt(double(aWidth)/double(width())*double(height())/double(aHeight));
65       else
66         aCoeff = double(aWidth)/double(width());
67       aCamera->SetParallelScale(aScale*aCoeff);
68     }
69   }
70 }
71
72 //****************************************************************
73 void VTKViewer_RenderWindow::mouseMoveEvent(QMouseEvent* event) 
74 {
75   emit MouseMove(event) ;
76 }
77
78 //****************************************************************
79 void VTKViewer_RenderWindow::mousePressEvent(QMouseEvent* event) 
80 {
81   emit MouseButtonPressed( event );
82 }
83
84 //****************************************************************
85 void VTKViewer_RenderWindow::mouseReleaseEvent( QMouseEvent *event )
86 {
87   emit MouseButtonReleased( event );
88 }
89
90 //****************************************************************
91 void VTKViewer_RenderWindow::mouseDoubleClickEvent( QMouseEvent* event )
92 {
93   emit MouseDoubleClicked( event );
94 }
95
96 //****************************************************************
97 void VTKViewer_RenderWindow::keyPressEvent (QKeyEvent* event) 
98 {
99   emit KeyPressed(event) ;
100 }
101
102 //****************************************************************
103 void VTKViewer_RenderWindow::keyReleaseEvent (QKeyEvent * event) 
104 {
105   emit KeyReleased(event) ;
106 }
107
108 //****************************************************************
109 void VTKViewer_RenderWindow::wheelEvent(QWheelEvent* event)
110 {
111   emit WheelMoved(event) ;
112 }
113
114 //****************************************************************
115 void VTKViewer_RenderWindow::onChangeBackgroundColor()
116 {
117   //float red, green, blue;
118   float backint[3];
119
120   vtkRendererCollection * theRenderers = myRW->GetRenderers();
121   theRenderers->InitTraversal();
122   vtkRenderer * theRenderer = theRenderers->GetNextItem();
123   theRenderer->GetBackground(backint);
124
125   QColor selColor = QColorDialog::getColor ( QColor(int(backint[0]*255), int(backint[1]*255), int(backint[2]*255)), NULL );     
126   if ( selColor.isValid() ) {
127     theRenderer->SetBackground( selColor.red()/255., selColor.green()/255., selColor.blue()/255. ); 
128     /* VSR : PAL5420 ---------------------------------------------------
129     SUIT_CONFIG->addSetting( "VTKViewer:BackgroundColorRed",   selColor.red() );
130     SUIT_CONFIG->addSetting( "VTKViewer:BackgroundColorGreen", selColor.green() );
131     SUIT_CONFIG->addSetting( "VTKViewer:BackgroundColorBlue",  selColor.blue() );
132     VSR : PAL5420 --------------------------------------------------- */
133   }
134 }
135
136 //****************************************************************
137 void VTKViewer_RenderWindow::contextMenuEvent ( QContextMenuEvent * e )
138 {
139   if ( e->reason() != QContextMenuEvent::Mouse )
140     emit contextMenuRequested( e );
141 }