Skip to content

Commit 3170d77

Browse files
author
Charles PIGNEROL
committed
Fixed an issue regarding zoom management. The view could be good, depending on the distance. This bug was not reproducible between stations.
1 parent fb8ad65 commit 3170d77

8 files changed

Lines changed: 136 additions & 23 deletions

cmake/version.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
#
44

55
set (QT_VTK_MAJOR_VERSION "8")
6-
set (QT_VTK_MINOR_VERSION "9")
7-
set (QT_VTK_RELEASE_VERSION "1")
6+
set (QT_VTK_MINOR_VERSION "10")
7+
set (QT_VTK_RELEASE_VERSION "0")
88
set (QT_VTK_VERSION ${QT_VTK_MAJOR_VERSION}.${QT_VTK_MINOR_VERSION}.${QT_VTK_RELEASE_VERSION})
99

1010

src/QtVtk/QtVtkViewDefinitionDialog.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ if ((0 != dlg) && (0 != parent)) \
3737

3838
QtVtkViewDefinitionDialog::QtVtkViewDefinitionDialog (
3939
QWidget* parent, const string& title, bool modal, const UTF8String& name, const UTF8String& comment,
40-
double position [3], double focal [3], double viewUp [3], double roll,
40+
double position [3], double focal [3], double viewUp [3], double roll, double viewAngle,
4141
vtkRenderer* renderer, const string& helpURL, const string& helpTag)
4242
: QDialog (0, true == modal ? (Qt::WindowFlags)(QtConfiguration::modalDialogWFlags | Qt::WindowStaysOnTopHint) : (Qt::WindowFlags)(QtConfiguration::amodalDialogWFlags | Qt::WindowStaysOnTopHint)), _viewDefinitionPanel (0), _closurePanel (0)
4343
{
@@ -58,7 +58,7 @@ QtVtkViewDefinitionDialog::QtVtkViewDefinitionDialog (
5858
frame->setLayout (frameLayout);
5959
frame->setMargin (QtConfiguration::margin);
6060
frame->setSpacing (QtConfiguration::spacing);
61-
_viewDefinitionPanel = new QtVtkViewDefinitionPanel (frame, title, name, comment, position, focal, viewUp, roll, renderer);
61+
_viewDefinitionPanel = new QtVtkViewDefinitionPanel (frame, title, name, comment, position, focal, viewUp, roll, viewAngle, renderer);
6262
_viewDefinitionPanel->adjustSize ( );
6363
frameLayout->addWidget (_viewDefinitionPanel);
6464

@@ -144,6 +144,13 @@ double QtVtkViewDefinitionDialog::getRoll ( ) const
144144
} // QtVtkViewDefinitionDialog::getRoll
145145

146146

147+
double QtVtkViewDefinitionDialog::getViewAngle ( ) const
148+
{
149+
assert ((0 != _viewDefinitionPanel) && "QtVtkViewDefinitionDialog::getViewAngle : null view definition panel.");
150+
return _viewDefinitionPanel->getViewAngle ( );
151+
} // QtVtkViewDefinitionDialog::getViewAngle
152+
153+
147154
QPushButton* QtVtkViewDefinitionDialog::getApplyButton ( ) const
148155
{
149156
assert ((0 != _closurePanel) && "QtVtkViewDefinitionDialog::getApplyButton : null closure panel.");

src/QtVtk/QtVtkViewDefinitionPanel.cpp

Lines changed: 63 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,17 @@ USE_ENCODING_AUTODETECTION
3434

3535

3636
QtVtkViewDefinitionPanel::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.\nUn angle plus grand permet de voir une plus grande portion de la scène (effet \"grand angle\"),\ntandis qu’un angle plus petit donne un effet de zoom (champ de vision plus étroit).\nLa 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+
199238
void 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+
298351
void 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

src/QtVtk/QtVtkViewPointToolButton.cpp

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ USE_ENCODING_AUTODETECTION
3232
// ======================================================================================================================================
3333

3434
QtVtkViewPointToolButton::VtkViewPoint::VtkViewPoint ( )
35-
: name ( ), comment ( ), roll (0.)
35+
: name ( ), comment ( ), roll (0.), viewAngle (30.)
3636
{
3737
memset (position, 0, 3 * sizeof (double));
3838
memset (focalPoint, 0, 3 * sizeof (double));
@@ -41,7 +41,7 @@ QtVtkViewPointToolButton::VtkViewPoint::VtkViewPoint ( )
4141

4242

4343
QtVtkViewPointToolButton::VtkViewPoint::VtkViewPoint (const QtVtkViewPointToolButton::VtkViewPoint& vp)
44-
: name (vp.name), comment (vp.comment), roll (vp.roll)
44+
: name (vp.name), comment (vp.comment), roll (vp.roll), viewAngle (vp.viewAngle)
4545
{
4646
memcpy (position, vp.position, 3 * sizeof (double));
4747
memcpy (focalPoint, vp.focalPoint, 3 * sizeof (double));
@@ -54,6 +54,7 @@ QtVtkViewPointToolButton::VtkViewPoint& QtVtkViewPointToolButton::VtkViewPoint::
5454
name = vp.name;
5555
comment = vp.comment;
5656
roll = vp.roll;
57+
viewAngle = vp.viewAngle;
5758
memcpy (position, vp.position, 3 * sizeof (double));
5859
memcpy (focalPoint, vp.focalPoint, 3 * sizeof (double));
5960
memcpy (viewUp, vp.viewUp, 3 * sizeof (double));
@@ -65,6 +66,7 @@ QtVtkViewPointToolButton::VtkViewPoint& QtVtkViewPointToolButton::VtkViewPoint::
6566
QtVtkViewPointToolButton::VtkViewPoint& QtVtkViewPointToolButton::VtkViewPoint::operator = (const vtkCamera& camera)
6667
{
6768
roll = ((vtkCamera&)camera).GetRoll ( );
69+
viewAngle = ((vtkCamera&)camera).GetViewAngle ( );
6870
memcpy (position, ((vtkCamera&)camera).GetPosition ( ), 3 * sizeof (double));
6971
memcpy (focalPoint, ((vtkCamera&)camera).GetFocalPoint ( ), 3 * sizeof (double));
7072
memcpy (viewUp, ((vtkCamera&)camera).GetViewUp ( ), 3 * sizeof (double));
@@ -89,10 +91,12 @@ Section* QtVtkViewPointToolButton::viewPointToSection (const QtVtkViewPointToolB
8991
DoubleTripletNamedValue* focalPoint = new DoubleTripletNamedValue (UTF8String ("focalPoint", charset), vp.focalPoint [0], vp.focalPoint [1], vp.focalPoint [2]);
9092
DoubleTripletNamedValue* viewUp = new DoubleTripletNamedValue (UTF8String ("viewUp", charset), vp.viewUp [0], vp.viewUp [1], vp.viewUp [2]);
9193
DoubleNamedValue* roll = new DoubleNamedValue (UTF8String ("roll", charset), vp.roll);
94+
DoubleNamedValue* viewAngle = new DoubleNamedValue (UTF8String ("viewAngle", charset), vp.viewAngle);
9295
section->addNamedValue (position);
9396
section->addNamedValue (focalPoint);
9497
section->addNamedValue (viewUp);
9598
section->addNamedValue (roll);
99+
section->addNamedValue (viewAngle);
96100

97101
return section;
98102
} // QtVtkViewPointToolButton::viewPointToSection
@@ -155,7 +159,17 @@ QtVtkViewPointToolButton::VtkViewPoint QtVtkViewPointToolButton::sectionToViewPo
155159
catch (...)
156160
{
157161
}
158-
162+
163+
try
164+
{
165+
DoubleNamedValue* va = dynamic_cast<DoubleNamedValue*>(&(section.getNamedValue (UTF8String ("viewAngle", charset))));
166+
if (0 != va)
167+
vp.viewAngle = va->getValue ( );
168+
}
169+
catch (...)
170+
{
171+
}
172+
159173
return vp;
160174
} // QtVtkViewPointToolButton::sectionToViewPoint
161175

@@ -305,6 +319,7 @@ void QtVtkViewPointToolButton::applyViewPointCallback ( )
305319
_camera->SetFocalPoint (_viewPoint.focalPoint);
306320
_camera->SetViewUp (_viewPoint.viewUp);
307321
_camera->SetRoll (_viewPoint.roll);
322+
_camera->SetViewAngle (_viewPoint.viewAngle);
308323

309324
if (0 != _renderer)
310325
{
@@ -332,7 +347,7 @@ void QtVtkViewPointToolButton::editViewPointCallback ( )
332347
dlgTitle << "Paramètres de définition de la vue.";
333348

334349
QtVtkViewPointToolButton::VtkViewPoint vp = getViewPoint ( );
335-
QtVtkViewDefinitionDialog viewDialog (this, dlgTitle.utf8 ( ).c_str ( ), true, vp.name, vp.comment, vp.position, vp.focalPoint, vp.viewUp, vp.roll, _renderer);
350+
QtVtkViewDefinitionDialog viewDialog (this, dlgTitle.utf8 ( ).c_str ( ), true, vp.name, vp.comment, vp.position, vp.focalPoint, vp.viewUp, vp.roll, vp.viewAngle, _renderer);
336351
int retVal = viewDialog.exec ( );
337352

338353
if (0 == retVal)
@@ -341,12 +356,13 @@ void QtVtkViewPointToolButton::editViewPointCallback ( )
341356
return;
342357
}
343358

344-
vp.name = viewDialog.getName ( );
345-
vp.comment = viewDialog.getComment ( );
359+
vp.name = viewDialog.getName ( );
360+
vp.comment = viewDialog.getComment ( );
346361
viewDialog.getPosition (vp.position);
347362
viewDialog.getFocalPoint (vp.focalPoint);
348363
viewDialog.getViewUp (vp.viewUp);
349-
vp.roll = viewDialog.getRoll ( );
364+
vp.roll = viewDialog.getRoll ( );
365+
vp.viewAngle = viewDialog.getViewAngle ( );
350366

351367
UTF8String message (charset);
352368
message << "Paramètres de la vues modifiés. "
@@ -356,7 +372,8 @@ void QtVtkViewPointToolButton::editViewPointCallback ( )
356372
<< vp.focalPoint [0] << ", " << vp.focalPoint [1] << ", " << vp.focalPoint [2]
357373
<< ". Direction vers le haut : "
358374
<< vp.viewUp [0] << ", " << vp.viewUp [1] << ", " << vp.viewUp [2]
359-
<< " Roulis : " << vp.roll << " degrés.";
375+
<< ". Roulis : " << vp.roll << " degrés"
376+
<< ". Angle d'ouverture : " << vp.viewAngle << " degrés.";
360377
cout << message << endl;
361378
setViewPoint (vp);
362379
}

src/QtVtk/public/QtVtk/QtVtkViewDefinitionDialog.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,13 @@ class QtVtkViewDefinitionDialog : public QDialog
3030
* @param focale initiale (x, y, z) de la caméra.
3131
* @param direction vers le haut de la caméra
3232
* @param roulis (angle de la caméra par rapport à sa direction (axe position-focale)). En degrés.
33+
* @param angle d'ouverture de la vue (joue sur le zoom). En degrés, de 0 à 180°, valeur par défaut de 30°.
3334
* @param Renderer utilisant la caméra à piloter si non nul (GetActiveCamera sur le renderer est utilisé).
3435
* @param URL de l'aide
3536
* @param Balise de l'aide
3637
*/
3738
QtVtkViewDefinitionDialog (QWidget* parent, const IN_STD string& title, bool modal, const TkUtil::UTF8String& name, const TkUtil::UTF8String& comment,
38-
double position [3], double focal [3], double viewUp [3], double roll, vtkRenderer* renderer,
39+
double position [3], double focal [3], double viewUp [3], double roll, double viewAngle, vtkRenderer* renderer,
3940
const IN_STD string& helpURL ="", const IN_STD string& helpTag = "");
4041

4142
/** Destructeur. */
@@ -59,6 +60,9 @@ class QtVtkViewDefinitionDialog : public QDialog
5960
/** @return le roulis de la caméra. */
6061
virtual double getRoll ( ) const;
6162

63+
/** @param angle d'ouverture de la vue (joue sur le zoom). */
64+
virtual double getViewAngle ( ) const;
65+
6266
/** @return le bouton "Appliquer" de la boite de dialogue. */
6367
virtual QPushButton* getApplyButton ( ) const;
6468

src/QtVtk/public/QtVtk/QtVtkViewDefinitionPanel.h

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
* Panneau Qt permettant de définir interactivement la vue d'un théâtre. Cette vue est définie par l'emplacement et la focale de la caméra.
1818
* Ce panneau peut piloter, optionnellement, une caméra VTK. La caméra est mise à jour avec les derniers paramètres saisis lorsque
1919
* l'utilisateur effectue un retour chariot dans un champ numérique.
20+
*
21+
* @warning La gestion du mode de projection (perspective/parallèle) n'est pas assurée.
2022
*/
2123
class QtVtkViewDefinitionPanel : public QWidget
2224
{
@@ -33,10 +35,11 @@ class QtVtkViewDefinitionPanel : public QWidget
3335
* @param focale initiale (x, y, z) de la caméra.
3436
* @param direction vers le haut (dx, dy, dz) de la caméra.
3537
* @param roulis (angle de la caméra par rapport à sa direction (axe position-focale)). En degrés.
38+
* @param angle d'ouverture de la vue (joue sur le zoom). En degrés, de 0 à 180°, valeur par défaut de 30°.
3639
* @param Renderer utilisant la caméra à piloter si non nul (GetActiveCamera sur le renderer est utilisé).
3740
*/
3841
QtVtkViewDefinitionPanel (QWidget* parent, const IN_STD string& appTitle, const TkUtil::UTF8String& name, const TkUtil::UTF8String& comment,
39-
double position [3], double focal [3], double viewUp [3], double roll, vtkRenderer* renderer);
42+
double position [3], double focal [3], double viewUp [3], double roll, double viewAngle, vtkRenderer* renderer);
4043

4144
/** Destructeur. */
4245
virtual ~QtVtkViewDefinitionPanel ( );
@@ -59,6 +62,9 @@ class QtVtkViewDefinitionPanel : public QWidget
5962
/** @return le roulis de la caméra. */
6063
virtual double getRoll ( ) const;
6164

65+
/** @param angle d'ouverture de la vue (joue sur le zoom). */
66+
virtual double getViewAngle ( ) const;
67+
6268
/** Applique les modification à l'éventuelle caméra. Affecte true à _updated. */
6369
virtual void apply ( );
6470

@@ -94,6 +100,11 @@ class QtVtkViewDefinitionPanel : public QWidget
94100
*/
95101
virtual void setRoll (double roll);
96102

103+
/**
104+
* @param Nouvel angle d'ouverture de la caméra (domaine : 0 - 180°).
105+
*/
106+
virtual void setViewAngle (double viewAngle);
107+
97108
/**
98109
* Affecte le caractère "modifié" (depuis sa construction) à cette instance.
99110
*/
@@ -160,6 +171,9 @@ class QtVtkViewDefinitionPanel : public QWidget
160171
/** Le champ de définition du roulis. */
161172
QtTextField* _rollTextField;
162173

174+
/** Le champ de définition de l'angle d'ouverture. */
175+
QtTextField* _viewAngleTextField;
176+
163177
/** Le renderer utilisant la caméra pilotée. */
164178
vtkRenderer* _renderer;
165179

@@ -175,6 +189,9 @@ class QtVtkViewDefinitionPanel : public QWidget
175189
/** La valeur initiale du roulis. */
176190
double _initialRoll;
177191

192+
/** La valeur initiale de l'angle d'ouverture. */
193+
double _initialViewAngle;
194+
178195
/** La dernière position. */
179196
double _position [3];
180197

@@ -184,9 +201,12 @@ class QtVtkViewDefinitionPanel : public QWidget
184201
/** La direction vers le haut. */
185202
double _viewUp [3];
186203

187-
/** La dernère valeur du roulis. */
204+
/** La dernière valeur du roulis. */
188205
double _roll;
189206

207+
/** La dernière valeur de l'angle d'ouverture. */
208+
double _viewAngle;
209+
190210
/** Les paramètres ont ils été modifiés par l'utilisateur ? */
191211
bool _modified;
192212

0 commit comments

Comments
 (0)