@@ -34,16 +34,17 @@ USE_ENCODING_AUTODETECTION
3434
3535
3636QtVtkViewDefinitionPanel::QtVtkViewDefinitionPanel (QWidget* parent, const string& appTitle, const UTF8String& name, const UTF8String& comment,
37- double position [3 ], double focal [3 ], double viewUp [3 ],double roll, vtkRenderer* renderer)
38- : QWidget (parent), _appTitle (appTitle), _positionPanel (0 ), _focalPanel (0 ), _rollTextField (0 ), _renderer (renderer), _modified (false ), _updated (true )
37+ double position [3 ], double focal [3 ], double viewUp [3 ],double roll, double viewAngle, vtkRenderer* renderer)
38+ : QWidget (parent), _appTitle (appTitle), _positionPanel (0 ), _focalPanel (0 ), _rollTextField (0 ), _viewAngleTextField ( 0 ), _renderer (renderer), _modified (false ), _updated (true )
3939{
4040 for (int i = 0 ; i < 3 ; i++)
4141 {
4242 _initialPosition [i] = _position [i] = position [i];
4343 _initialFocal [i] = _focal [i] = focal [i];
4444 _initialViewUp [i] = _viewUp [i] = viewUp [i];
4545 } // for (int i = 0; i < 3; i++)
46- _initialRoll = _roll = roll;
46+ _initialRoll = _roll = roll;
47+ _initialViewAngle = _viewAngle = viewAngle;
4748
4849 // Creation de l'ihm :
4950 QVBoxLayout* layout = new QVBoxLayout (this );
@@ -120,7 +121,7 @@ QtVtkViewDefinitionPanel::QtVtkViewDefinitionPanel (QWidget* parent, const strin
120121 label->setFixedSize (label->sizeHint ( ));
121122 rollLayout->addWidget (label);
122123 _rollTextField = new QtTextField (rollGroupBox);
123- _rollTextField->setVisibleColumns (4 );
124+ _rollTextField->setVisibleColumns (8 );
124125 _rollTextField->setMaxLength (4 );
125126 _rollTextField->setFixedSize (_rollTextField->sizeHint ( ));
126127 _rollTextField->setMaximumSize (_rollTextField->sizeHint ( ));
@@ -135,7 +136,37 @@ QtVtkViewDefinitionPanel::QtVtkViewDefinitionPanel (QWidget* parent, const strin
135136 rollGroupBox->adjustSize ( );
136137 layout->addWidget (rollGroupBox);
137138
139+ // Angle d'ouverture :
140+ UTF8String tooltip (" L'angle d’ouverture vertical définit la hauteur du cône de vision.\n Un angle plus grand permet de voir une plus grande portion de la scène (effet \" grand angle\" ),\n tandis qu’un angle plus petit donne un effet de zoom (champ de vision plus étroit).\n La valeur par défaut est de 30°." , charset);
141+ QtGroupBox* viewAngleGroupBox = new QtGroupBox (" Angle d'ouverture" , this );
142+ QHBoxLayout* viewAngleLayout = new QHBoxLayout (viewAngleGroupBox);
143+ viewAngleGroupBox->setLayout (viewAngleLayout);
144+ viewAngleGroupBox->setSpacing (QtConfiguration::spacing);
145+ viewAngleGroupBox->setMargin (QtConfiguration::margin);
146+ viewAngleLayout->setSizeConstraint (QLayout::SetMinimumSize);
147+ label = new QLabel (" Angle :" , viewAngleGroupBox);
148+ label->setFixedSize (label->sizeHint ( ));
149+ label->setToolTip (UTF8TOQSTRING (tooltip));
150+ viewAngleLayout->addWidget (label);
151+ _viewAngleTextField = new QtTextField (viewAngleGroupBox);
152+ _viewAngleTextField->setVisibleColumns (8 );
153+ _viewAngleTextField->setMaxLength (4 );
154+ _viewAngleTextField->setFixedSize (_viewAngleTextField->sizeHint ( ));
155+ _viewAngleTextField->setMaximumSize (_viewAngleTextField->sizeHint ( ));
156+ _viewAngleTextField->setText (QString::number (viewAngle));
157+ _viewAngleTextField->setValidator (new QDoubleValidator (0 ., 180 ., 4 , _viewAngleTextField));
158+ _viewAngleTextField->setToolTip (UTF8TOQSTRING (tooltip));
159+ connect (_viewAngleTextField, SIGNAL (returnPressed ( )), this , SLOT (viewFieldValidatedCallback ( )));
160+ connect (_viewAngleTextField, SIGNAL (textChanged (const QString&)), this , SLOT (viewFieldModifiedCallback (const QString&)));
161+ viewAngleLayout->addWidget (_viewAngleTextField);
162+ label = new QLabel (QSTR (" (Domaine : 0 à 180 degrés)" ), viewAngleGroupBox);
163+ label->setToolTip (UTF8TOQSTRING (tooltip));
164+ label->setMinimumSize (label->sizeHint ( ));
165+ viewAngleLayout->addWidget (label);
166+ viewAngleGroupBox->adjustSize ( );
167+ layout->addWidget (viewAngleGroupBox);
138168 layout->activate ( );
169+
139170 setMinimumSize (layout->sizeHint ( ));
140171} // QtVtkViewDefinitionPanel::QtVtkViewDefinitionPanel
141172
@@ -196,6 +227,14 @@ void QtVtkViewDefinitionPanel::setRoll (double roll)
196227} // QtVtkViewDefinitionPanel::setRoll
197228
198229
230+ void QtVtkViewDefinitionPanel::setViewAngle (double angle)
231+ {
232+ assert ((0 != _viewAngleTextField) && " QtVtkViewDefinitionPanel::setViewAngle : null viewAngle text field." );
233+ _viewAngleTextField->setText (QString::number (angle));
234+ _updated = false ;
235+ } // QtVtkViewDefinitionPanel::setViewAngle
236+
237+
199238void QtVtkViewDefinitionPanel::updateData ( )
200239{
201240 bool modified = false ;
@@ -238,6 +277,12 @@ void QtVtkViewDefinitionPanel::updateData ( )
238277 modified = true ;
239278 } // if (_roll != getRoll ( ))
240279
280+ if (_viewAngle != getViewAngle ( ))
281+ {
282+ _viewAngle = getViewAngle ( );
283+ modified = true ;
284+ } // if (_viewAngle != getViewAngle ( ))
285+
241286 if (false == modified)
242287 return ;
243288
@@ -295,6 +340,14 @@ double QtVtkViewDefinitionPanel::getRoll ( ) const
295340} // QtVtkViewDefinitionPanel::getRoll
296341
297342
343+ double QtVtkViewDefinitionPanel::getViewAngle ( ) const
344+ {
345+ assert ((0 != _viewAngleTextField) && " QtVtkViewDefinitionPanel::getViewAngle : null viewAngle text field." );
346+ bool ok = true ;
347+ return _viewAngleTextField->text ( ).toDouble (&ok);
348+ } // QtVtkViewDefinitionPanel::getViewAngle
349+
350+
298351void QtVtkViewDefinitionPanel::apply ( )
299352{
300353 if (true == isUpdated ( ))
@@ -309,17 +362,18 @@ void QtVtkViewDefinitionPanel::apply ( )
309362 double position [3 ] = { 0 ., 0 ., 0 . };
310363 double focal [3 ] = { 0 ., 0 ., 0 . };
311364 double viewUp [3 ] = { 0 ., 0 ., 0 . };
312- double roll = getRoll ( );
365+ double roll = getRoll ( );
366+ double viewAngle = getViewAngle ( );
313367 getPosition (position);
314368 getFocalPoint (focal);
315369 getViewUp (viewUp);
316370 camera->SetPosition (position);
317371 camera->SetFocalPoint (focal);
318372 camera->SetViewUp (viewUp);
319373 camera->SetRoll (roll);
320- // ResetCameraClippingRange : en son absence il y a de bonnes chances
321- // que certains objets ne soient plus affiches bien qu'ils devraient etre
322- // visibles.
374+ camera-> SetViewAngle (viewAngle);
375+ // ResetCameraClippingRange : en son absence il y a de bonnes chances que
376+ // certains objets ne soient plus affichés bien qu'ils devraient être visibles.
323377 _renderer->ResetCameraClippingRange ( );
324378 if (0 != _renderer->GetRenderWindow ( ))
325379 _renderer->GetRenderWindow ( )->Render ( );
@@ -337,6 +391,7 @@ void QtVtkViewDefinitionPanel::reset ( )
337391 setFocalPoint (_initialFocal);
338392 setViewUp (_initialViewUp);
339393 setRoll (_initialRoll);
394+ setViewAngle (_initialViewAngle);
340395 apply ( );
341396 setModified (false );
342397} // QtVtkViewDefinitionPanel::reset
0 commit comments