File: ccScaleDlg.cpp

package info (click to toggle)
cloudcompare 2.10.1-2
  • links: PTS
  • area: main
  • in suites: buster
  • size: 55,916 kB
  • sloc: cpp: 219,837; ansic: 29,944; makefile: 67; sh: 45
file content (89 lines) | stat: -rw-r--r-- 2,959 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//##########################################################################
//#                                                                        #
//#                              CLOUDCOMPARE                              #
//#                                                                        #
//#  This program is free software; you can redistribute it and/or modify  #
//#  it under the terms of the GNU General Public License as published by  #
//#  the Free Software Foundation; version 2 or later of the License.      #
//#                                                                        #
//#  This program is distributed in the hope that it will be useful,       #
//#  but WITHOUT ANY WARRANTY; without even the implied warranty of        #
//#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the          #
//#  GNU General Public License for more details.                          #
//#                                                                        #
//#                    COPYRIGHT: Daniel Girardeau-Montaut                 #
//#                                                                        #
//##########################################################################

#include "ccScaleDlg.h"

//semi persistent parameters
static CCVector3d s_lastScales(1.0, 1.0, 1.0);
static bool s_allAtOnce = true;
static bool s_keepInPlace = false;
static bool s_rescaleGlobalShift = true;

ccScaleDlg::ccScaleDlg(QWidget* parent/*=0*/)
	: QDialog(parent)
	, Ui::ScaleDialog()
{
	setupUi(this);

	connect(sameForAllCheckBox, SIGNAL(toggled(bool)), this, SLOT(allDimsAtOnceToggled(bool)));
	connect(fxSpinBox, SIGNAL(valueChanged(double)), this, SLOT(fxUpdated(double)));

	//restore semi-persistent parameters
	sameForAllCheckBox->setChecked(s_allAtOnce);
	keepInPlaceCheckBox->setChecked(s_keepInPlace);
	rescaleGlobalShiftCheckBox->setChecked(s_rescaleGlobalShift);
	fzSpinBox->setValue(s_lastScales.z);
	fySpinBox->setValue(s_lastScales.y);
	fxSpinBox->setValue(s_lastScales.x); //always last in case 'same for all' is checked!
}

void ccScaleDlg::saveState()
{
	s_allAtOnce = sameForAllCheckBox->isChecked();
	s_lastScales = getScales();
	s_keepInPlace = keepInPlace();
	s_rescaleGlobalShift = rescaleGlobalShift();
}

void ccScaleDlg::fxUpdated(double val)
{
	if (sameForAllCheckBox->isChecked())
	{
		fySpinBox->setValue(val);
		fzSpinBox->setValue(val);
	}
}

CCVector3d ccScaleDlg::getScales() const
{
	return CCVector3d(
		fxSpinBox->value(),
		fySpinBox->value(),
		fzSpinBox->value()
		);
}

bool ccScaleDlg::keepInPlace() const
{
	return keepInPlaceCheckBox->isChecked();
}

bool ccScaleDlg::rescaleGlobalShift() const
{
	return rescaleGlobalShiftCheckBox->isChecked();
}

void ccScaleDlg::allDimsAtOnceToggled(bool state)
{
	if (state)
	{
		fySpinBox->setValue(fxSpinBox->value());
		fzSpinBox->setValue(fxSpinBox->value());
	}
	fySpinBox->setEnabled(!state);
	fzSpinBox->setEnabled(!state);
}