Moka Ihm Qt
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
options-ponderation.qt.cc
Go to the documentation of this file.
1 /*
2  * Moka : Un modeleur de 3-G-cartes.
3  * Copyright (C) 2004, Moka Team, Université de Poitiers, Laboratoire SIC
4  * http://www.sic.sp2mi.univ-poitiers.fr/
5  * Copyright (C) 2009, Guillaume Damiand, CNRS, LIRIS,
6  * guillaume.damiand@liris.cnrs.fr, http://liris.cnrs.fr/
7  *
8  * This file is part of Moka
9  *
10  * This program is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation, either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program. If not, see <http://www.gnu.org/licenses/>.
22  */
23 
25 #include "window.qt.hh"
26 #include "HtmlEntities.hh"
27 
28 #include <QtGui/QLabel>
29 #include <QtGui/QVBoxLayout>
30 
31 // Constructeur
32 //-------------
33 OptionsPonderation :: OptionsPonderation ( Window * parent , QTabWidget * parentTab )
34  :
35  QWidget ( parentTab ) ,
36  FParent ( parent ) ,
37  FUpdate ( false )
38 {
39  QBoxLayout * placement = new QBoxLayout ( QBoxLayout::TopToBottom, this ) ;
40 
42  FAffDistance = new QGroupBox ( *HTML::decode("Distance to..."));
43  QVBoxLayout* afd_vbl = new QVBoxLayout(FAffDistance);
44 
45  FSaisieDistance = new QComboBox ;
46  FSaisieDistance -> addItem ( "Vertice" ) ;
47  FSaisieDistance -> addItem ( "Line" ) ;
48  FSaisieDistance -> addItem ( "Plane" ) ;
49 
50  QWidget * WidgetDistance2 = new QWidget ;
51  QBoxLayout * distance2 = new QBoxLayout ( QBoxLayout::LeftToRight,
52  WidgetDistance2 ) ;
53 
54  FAffSommet = new QLabel ( "Vertex :" ) ;
55 
56  for (int i = 0 ; i < 3 ; i++ ) {
57  FSaisieCoefSommet [i] = new FloatSpinBox ( 0.5 ) ;
58  }
59  FRecupSommet = new QPushButton ( "Recover" ) ;
60 
61  FAffCoefSommet [0] = new QLabel ( "X :" ) ;
62  FAffCoefSommet [1] = new QLabel ( "Y :" ) ;
63  FAffCoefSommet [2] = new QLabel ( "Z :" ) ;
64 
65  distance2 -> addWidget ( FAffCoefSommet [0], 0, Qt::AlignLeft ) ;
66  distance2 -> addWidget ( FSaisieCoefSommet [0], 1, Qt::AlignLeft ) ;
67  distance2 -> addSpacing ( 10 ) ;
68  distance2 -> addWidget ( FAffCoefSommet [1], 0, Qt::AlignLeft ) ;
69  distance2 -> addWidget ( FSaisieCoefSommet [1], 1, Qt::AlignLeft ) ;
70  distance2 -> addSpacing ( 10 ) ;
71  distance2 -> addWidget ( FAffCoefSommet [2], 0, Qt::AlignLeft ) ;
72  distance2 -> addWidget ( FSaisieCoefSommet [2], 1, Qt::AlignLeft ) ;
73  distance2 -> addSpacing ( 10 ) ;
74  distance2 -> addWidget ( FRecupSommet ) ;
75 
76 
77  QWidget * WidgetDistance3 = new QWidget ;
78  QBoxLayout * distance3 = new QBoxLayout ( QBoxLayout::LeftToRight, WidgetDistance3 ) ;
79 
80  FAffVecteur = new QLabel ( "Vector :" ) ;
81 
82  for (int i = 0 ; i < 3 ; i++ )
83  FSaisieCoefVecteur [i] = new FloatSpinBox ( 0.5 ) ;
84 
85  FRecupVecteur = new QPushButton ( "Recover" ) ;
86 
87  FAffCoefVecteur [0] = new QLabel ( "X :" ) ;
88  FAffCoefVecteur [1] = new QLabel ( "Y :" ) ;
89  FAffCoefVecteur [2] = new QLabel ( "Z :" ) ;
90 
91  distance3 -> addWidget ( FAffCoefVecteur [0], 0, Qt::AlignLeft ) ;
92  distance3 -> addWidget ( FSaisieCoefVecteur [0], 1, Qt::AlignLeft ) ;
93  distance3 -> addSpacing ( 10 ) ;
94  distance3 -> addWidget ( FAffCoefVecteur [1], 0, Qt::AlignLeft ) ;
95  distance3 -> addWidget ( FSaisieCoefVecteur [1], 1, Qt::AlignLeft ) ;
96  distance3 -> addSpacing ( 10 ) ;
97  distance3 -> addWidget ( FAffCoefVecteur [2], 0, Qt::AlignLeft ) ;
98  distance3 -> addWidget ( FSaisieCoefVecteur [2], 1, Qt::AlignLeft ) ;
99  distance3 -> addSpacing ( 10 ) ;
100  distance3 -> addWidget ( FRecupVecteur ) ;
101 
102 
103  afd_vbl -> addWidget(FSaisieDistance, 0, Qt::AlignCenter);
104  afd_vbl -> addWidget(FAffSommet);
105  afd_vbl -> addWidget(WidgetDistance2);
106  afd_vbl -> addWidget(FAffVecteur);
107  afd_vbl -> addWidget(WidgetDistance3);
108 
110  QWidget * WidgetBas = new QWidget (this) ;
111  QBoxLayout * bas = new QBoxLayout ( QBoxLayout::LeftToRight, WidgetBas ) ;
112 
115  FAffEtalonnageDistance = new QGroupBox ( "Distances calibration" );
116  FAffEtalonnageDistance -> setCheckable(true);
117  FAffEtalonnageDistance -> setChecked(false);
118 
119  QVBoxLayout * aed_vbl = new QVBoxLayout ( FAffEtalonnageDistance ) ;
120 
121  QWidget * WidgetMin1 = new QWidget ;
122  QHBoxLayout * min1 = new QHBoxLayout ( WidgetMin1) ;
123  FAffMinDistance = new QLabel ( "Minimum :" ) ;
124  FSaisieMinDistance = new FloatSpinBox ( 0.5 ) ;
125 
126  min1 -> addWidget ( FAffMinDistance, 0, Qt::AlignRight ) ;
127  min1 -> addWidget ( FSaisieMinDistance, 0, Qt::AlignLeft ) ;
128 
129  QWidget * WidgetMax1 = new QWidget ;
130  QHBoxLayout * max1 = new QHBoxLayout ( WidgetMax1 ) ;
131  FAffMaxDistance = new QLabel ( "Maximum :" ) ;
132  FSaisieMaxDistance = new FloatSpinBox ( 0.5 ) ;
133 
134  max1 -> addWidget ( FAffMaxDistance, 0, Qt::AlignRight ) ;
135  max1 -> addWidget ( FSaisieMaxDistance, 0, Qt::AlignLeft ) ;
136 
137  aed_vbl -> addWidget(WidgetMin1);
138  aed_vbl -> addWidget(WidgetMax1);
139 
142  QWidget * WidgetCentre = new QWidget (this) ;
143  QBoxLayout * centre = new QBoxLayout ( QBoxLayout::LeftToRight, WidgetCentre ) ;
144 
145  FSaisieFonction = new QComboBox ;
146  FSaisieFonction -> addItem ( *HTML::decode("linear") ) ;
147  FSaisieFonction -> addItem ( "quadratic" ) ;
148  FSaisieFonction -> addItem ( "exponential" ) ;
149  FSaisieFonction -> addItem ( "logarithmic" ) ;
150  FSaisieFonction -> addItem ( "sinusoidal" ) ;
151  FSaisieFonction -> addItem ( "cosinusoidal" ) ;
152 
153  centre -> addWidget( new QLabel ( *HTML::decode("Applied function: ") ), 0 , Qt::AlignLeft );
154  centre -> addWidget( FSaisieFonction , 1 , Qt::AlignLeft ) ;
155 
158  FAffEtalonnageResultat =
159  new QGroupBox ( *HTML::decode("Calibration of results") );
160  FAffEtalonnageResultat -> setCheckable(true);
161  FAffEtalonnageResultat -> setChecked(false);
162 
163  QVBoxLayout * aer_vbl = new QVBoxLayout ( FAffEtalonnageResultat ) ;
164 
165  QWidget * WidgetMin2 = new QWidget ;
166  QHBoxLayout * min2 = new QHBoxLayout ( WidgetMin2) ;
167  FAffMinResultat = new QLabel ( "Minimum:" ) ;
168  FSaisieMinResultat = new FloatSpinBox ( 0.5 ) ;
169 
170  min2 -> addWidget ( FAffMinResultat, 0, Qt::AlignRight ) ;
171  min2 -> addWidget ( FSaisieMinResultat, 0, Qt::AlignLeft ) ;
172 
173  QWidget * WidgetMax2 = new QWidget ;
174  QHBoxLayout * max2 = new QHBoxLayout ( WidgetMax2 ) ;
175  FAffMaxResultat = new QLabel ( "Maximum:" ) ;
176  FSaisieMaxResultat = new FloatSpinBox ( 0.5 ) ;
177 
178  max2 -> addWidget ( FAffMaxResultat, 0, Qt::AlignRight ) ;
179  max2 -> addWidget ( FSaisieMaxResultat, 0, Qt::AlignLeft ) ;
180 
181  aer_vbl -> addWidget(WidgetMin2);
182  aer_vbl -> addWidget(WidgetMax2);
183 
184  bas -> addWidget ( FAffEtalonnageDistance ) ;
185  bas -> addWidget ( FAffEtalonnageResultat ) ;
186 
187  placement -> addWidget ( FAffDistance ) ;
188  placement -> addWidget ( WidgetCentre ) ;
189  placement -> addWidget ( WidgetBas ) ;
190 
191 
192 
193  // On definit toutes les actions a effectuer
194  QObject :: connect ( FSaisieDistance ,
195  SIGNAL ( activated ( int ) ) ,
196  this ,
197  SLOT ( callbackDistance ( ) ) ) ;
198  QObject :: connect ( FSaisieFonction ,
199  SIGNAL ( activated ( int ) ) ,
200  this ,
201  SLOT ( callbackFunction ( ) ) ) ;
202  QObject :: connect ( FAffEtalonnageDistance ,
203  SIGNAL ( clicked ( ) ) ,
204  this ,
205  SLOT ( callbackToggleEtalonnageDistances ( ) ) ) ;
206  QObject :: connect ( FAffEtalonnageResultat ,
207  SIGNAL ( clicked ( ) ) ,
208  this ,
209  SLOT ( callbackToggleEtalonnageResultats ( ) ) ) ;
210  QObject :: connect ( FSaisieMinDistance ,
211  SIGNAL ( valueChanged ( double ) ) ,
212  this ,
213  SLOT ( callbackMin1Changed ( ) ) ) ;
214  QObject :: connect ( FSaisieMaxDistance ,
215  SIGNAL ( valueChanged ( double ) ) ,
216  this ,
217  SLOT ( callbackMax1Changed ( ) ) ) ;
218  QObject :: connect ( FSaisieMinResultat ,
219  SIGNAL ( valueChanged ( double ) ) ,
220  this ,
221  SLOT ( callbackMin2Changed ( ) ) ) ;
222  QObject :: connect ( FSaisieMaxResultat ,
223  SIGNAL ( valueChanged ( double ) ) ,
224  this ,
225  SLOT ( callbackMax2Changed ( ) ) ) ;
226 
227  for (int i = 0 ; i < 3 ; i ++ ) {
228  QObject :: connect ( FSaisieCoefSommet [i] ,
229  SIGNAL ( valueChanged ( double ) ) ,
230  this ,
231  SLOT ( callbackVertexChanged ( ) ) ) ;
232 
233  QObject :: connect ( FSaisieCoefVecteur [i] ,
234  SIGNAL ( valueChanged ( double ) ) ,
235  this ,
236  SLOT ( callbackVectorChanged ( ) ) ) ;
237  }
238 
239  QObject :: connect ( FRecupSommet ,
240  SIGNAL ( clicked ( ) ) ,
241  this ,
242  SLOT ( callbackTakeCenter ( ) ) ) ;
243  QObject :: connect ( FRecupVecteur ,
244  SIGNAL ( clicked ( ) ) ,
245  this ,
246  SLOT ( callbackTakeVector ( ) ) ) ;
247 }
248 
249 
250 // Destructeur
251 //------------
253 {
254 }
255 
256 // Mise a jour de l'affichage
257 //---------------------------
259 {
260  FUpdate = true ;
261 
262  CParameterObjectPonderation * p = FParent -> getControler ( ) -> getParameterObjectPonderation ( ) ;
263 
264  FSaisieCoefSommet [ 0 ] -> setValuef ( p -> getPonderationCenter ( ) . getX ( ) ) ;
265  FSaisieCoefSommet [ 1 ] -> setValuef ( p -> getPonderationCenter ( ) . getY ( ) ) ;
266  FSaisieCoefSommet [ 2 ] -> setValuef ( p -> getPonderationCenter ( ) . getZ ( ) ) ;
267 
268  FSaisieCoefVecteur [ 0 ] -> setValuef ( p -> getPonderationVector ( ) . getX ( ) ) ;
269  FSaisieCoefVecteur [ 1 ] -> setValuef ( p -> getPonderationVector ( ) . getY ( ) ) ;
270  FSaisieCoefVecteur [ 2 ] -> setValuef ( p -> getPonderationVector ( ) . getZ ( ) ) ;
271 
272  // Pour distancetype
273  FSaisieDistance -> setCurrentIndex ( p->getPonderationType ( ) ) ;
274 
275  const char * vectorLabs [] = {"", "Direction Vector: ", "Normal Vector: "};
276 
277  for ( int i = 0 ; i < 3 ; ++i )
278  if ( i == p -> getPonderationType ( ) )
279  FAffVecteur -> setText ( vectorLabs [ i ] ) ;
280 
281  for ( int i = 0 ; i < 3 ; ++i )
282  FSaisieCoefVecteur [ i ] -> setEnabled ( p -> getPonderationType ( ) != 0 ) ;
283 
284  FRecupVecteur -> setEnabled ( p -> getPonderationType ( ) != 0 ) ;
285 
286  // pour functiontype
287  FSaisieFonction -> setCurrentIndex ( p->getPonderationFunctionType ( ) ) ;
288 
289  // Pour les min et max
290  FSaisieMinDistance -> setValuef ( p -> getPonderationStretchInMin ( ) ) ;
291  FSaisieMaxDistance -> setValuef ( p -> getPonderationStretchInMax ( ) ) ;
292  FSaisieMinResultat -> setValuef ( p -> getPonderationStretchOutMin ( ) ) ;
293  FSaisieMaxResultat -> setValuef ( p -> getPonderationStretchOutMax ( ) ) ;
294 
295  // Pour activer / desactiver les min et max
296  FAffEtalonnageDistance -> setChecked ( p -> getPonderationStretchIn ( ) ) ;
297  FAffEtalonnageResultat -> setChecked ( p -> getPonderationStretchOut ( ) ) ;
298 
299  FUpdate = false ;
300 }
301 
302 
303 // SLOTS
304 //------
305 
307 {
308  if ( ! FUpdate )
309  setDistanceType ( ( TDistanceType ) FSaisieDistance -> currentIndex ( ) ) ;
310 }
311 //------------------------------------------------------------------------------
313 {
314  if ( ! FUpdate )
315  setFunctionType((TFunctionType) FSaisieFonction -> currentIndex ( ) ) ;
316  update ( ) ;
317 }
318 //------------------------------------------------------------------------------
320 {
321  CVertex center;
322  if ( FParent -> getControler ( ) -> takeCenter ( center ) )
323  setCenter ( center ) ;
324 }
325 //------------------------------------------------------------------------------
327 {
328  CVertex vector;
329  if ( FParent -> getControler ( ) -> takeVector ( vector ) )
330  setVector ( vector ) ;
331 }
332 //------------------------------------------------------------------------------
334 {
335  if ( ! FUpdate )
336  setEtalonnageDistances ( FAffEtalonnageDistance -> isChecked ( ) ) ;
337 }
338 //------------------------------------------------------------------------------
340 {
341  if ( ! FUpdate )
342  setEtalonnageResultats ( FAffEtalonnageResultat -> isChecked ( ) ) ;
343 }
344 //------------------------------------------------------------------------------
346 {
347  if ( ! FUpdate )
348  setCenter ( CVertex ( FSaisieCoefSommet [ 0 ] -> valuef ( ) ,
349  FSaisieCoefSommet [ 1 ] -> valuef ( ) ,
350  FSaisieCoefSommet [ 2 ] -> valuef ( ) ) ) ;
351 }
352 //------------------------------------------------------------------------------
354 {
355  if ( ! FUpdate )
356  setVector ( CVertex ( FSaisieCoefVecteur [ 0 ] -> valuef ( ) ,
357  FSaisieCoefVecteur [ 1 ] -> valuef ( ) ,
358  FSaisieCoefVecteur [ 2 ] -> valuef ( ) ) ) ;
359 }
360 //------------------------------------------------------------------------------
362 {
363  if ( ! FUpdate )
364  setMin1 ( FSaisieMinDistance -> valuef ( ) ) ;
365 }
366 //------------------------------------------------------------------------------
368 {
369  if ( ! FUpdate )
370  setMax1 ( FSaisieMaxDistance -> valuef ( ) ) ;
371 }
372 //------------------------------------------------------------------------------
374 {
375  if ( ! FUpdate )
376  setMin2 ( FSaisieMinResultat -> valuef ( ) ) ;
377 }
378 //------------------------------------------------------------------------------
380 {
381  if ( ! FUpdate )
382  setMax2 ( FSaisieMaxResultat -> valuef ( ) ) ;
383 }
384 
385 
386 // Accesseurs
387 //-----------
388 
389 void OptionsPonderation :: setCenter ( const CVertex & vertex)
390 {
391  FParent -> getControler ( ) -> getParameterObjectPonderation ( ) ->
392  setPonderationCenter ( vertex ) ;
393  update();
394 }
395 //------------------------------------------------------------------------------
396 void OptionsPonderation :: setVector ( const CVertex & vertex )
397 {
398 
399  FParent -> getControler ( ) -> getParameterObjectPonderation ( ) ->
400  setPonderationVector ( vertex ) ;
401  update();
402 }
403 //------------------------------------------------------------------------------
404 void OptionsPonderation :: setDistanceType ( TPonderationType type )
405 {
406  FParent -> getControler ( ) -> getParameterObjectPonderation ( ) ->
407  setPonderationType ( type ) ;
408  update();
409 }
410 //------------------------------------------------------------------------------
411 void OptionsPonderation :: setFunctionType( TFunctionType type )
412 {
413  FParent -> getControler ( ) -> getParameterObjectPonderation ( ) ->
414  setPonderationFunctionType ( type ) ;
415  update();
416 }
417 //------------------------------------------------------------------------------
418 void OptionsPonderation :: setMin1 ( TCoordinate v )
419 {
420  FParent -> getControler ( ) -> getParameterObjectPonderation ( ) ->
421  setPonderationStretchInMin ( v ) ;
422  update();
423 }
424 //------------------------------------------------------------------------------
425 void OptionsPonderation :: setMax1 ( TCoordinate v )
426 {
427  FParent -> getControler ( ) -> getParameterObjectPonderation ( ) ->
428  setPonderationStretchInMax ( v ) ;
429  update();
430 }
431 //------------------------------------------------------------------------------
432 void OptionsPonderation :: setMin2 ( TCoordinate v )
433 {
434  FParent -> getControler ( ) -> getParameterObjectPonderation ( ) ->
435  setPonderationStretchOutMin ( v ) ;
436  update ( ) ;
437 }
438 //------------------------------------------------------------------------------
439 void OptionsPonderation :: setMax2 ( TCoordinate v )
440 {
441  FParent -> getControler ( ) -> getParameterObjectPonderation ( ) ->
442  setPonderationStretchOutMax ( v ) ;
443  update();
444 }
445 //------------------------------------------------------------------------------
447 {
448  FParent -> getControler ( ) -> getParameterObjectPonderation ( ) ->
449  setPonderationStretchIn ( b ) ;
450  update();
451 }
452 //------------------------------------------------------------------------------
454 {
455  FParent -> getControler ( ) -> getParameterObjectPonderation ( ) ->
456  setPonderationStretchOut ( b ) ;
457  update();
458 }
459 //******************************************************************************