14 #include "ui_dipDirTransformationDlg.h"
25 #include <QFileDialog>
27 #include <QMessageBox>
34 "1.00000000 0.00000000 0.00000000 0.00000000\n0.00000000 1.00000000 "
35 "0.00000000 0.00000000\n0.00000000 0.00000000 1.00000000 "
36 "0.00000000\n0.00000000 0.00000000 0.00000000 1.00000000");
42 public Ui::DipDirTransformationDialog {
52 : QDialog(parent),
Ui::ApplyTransformationDialog() {
55 helpTextEdit->setVisible(
false);
63 connect(buttonBox, &QDialogButtonBox::accepted,
this,
65 connect(buttonBox, &QDialogButtonBox::clicked,
this,
68 connect(matrixTextEdit, &QPlainTextEdit::textChanged,
this,
70 connect(fromFileToolButton, &QToolButton::clicked,
this,
72 connect(fromClipboardToolButton, &QToolButton::clicked,
this,
74 connect(fromDipDipDirToolButton, &QToolButton::clicked,
this,
77 connect(rxAxisDoubleSpinBox,
78 static_cast<void (QDoubleSpinBox::*)(
double)
>(
79 &QDoubleSpinBox::valueChanged),
81 connect(ryAxisDoubleSpinBox,
82 static_cast<void (QDoubleSpinBox::*)(
double)
>(
83 &QDoubleSpinBox::valueChanged),
85 connect(rzAxisDoubleSpinBox,
86 static_cast<void (QDoubleSpinBox::*)(
double)
>(
87 &QDoubleSpinBox::valueChanged),
89 connect(rAngleDoubleSpinBox,
90 static_cast<void (QDoubleSpinBox::*)(
double)
>(
91 &QDoubleSpinBox::valueChanged),
93 connect(txAxisDoubleSpinBox,
94 static_cast<void (QDoubleSpinBox::*)(
double)
>(
95 &QDoubleSpinBox::valueChanged),
97 connect(tyAxisDoubleSpinBox,
98 static_cast<void (QDoubleSpinBox::*)(
double)
>(
99 &QDoubleSpinBox::valueChanged),
101 connect(tzAxisDoubleSpinBox,
102 static_cast<void (QDoubleSpinBox::*)(
double)
>(
103 &QDoubleSpinBox::valueChanged),
106 connect(ePhiDoubleSpinBox,
107 static_cast<void (QDoubleSpinBox::*)(
double)
>(
108 &QDoubleSpinBox::valueChanged),
110 connect(eThetaDoubleSpinBox,
111 static_cast<void (QDoubleSpinBox::*)(
double)
>(
112 &QDoubleSpinBox::valueChanged),
114 connect(ePsiDoubleSpinBox,
115 static_cast<void (QDoubleSpinBox::*)(
double)
>(
116 &QDoubleSpinBox::valueChanged),
118 connect(etxAxisDoubleSpinBox,
119 static_cast<void (QDoubleSpinBox::*)(
double)
>(
120 &QDoubleSpinBox::valueChanged),
122 connect(etyAxisDoubleSpinBox,
123 static_cast<void (QDoubleSpinBox::*)(
double)
>(
124 &QDoubleSpinBox::valueChanged),
126 connect(etzAxisDoubleSpinBox,
127 static_cast<void (QDoubleSpinBox::*)(
double)
>(
128 &QDoubleSpinBox::valueChanged),
133 QString text = matrixTextEdit->toPlainText();
134 if (text.contains(
"[")) {
137 static const QtCompatRegExp squareBracketsFilter(
"\\[([^]]+)\\]");
138 text.replace(squareBracketsFilter,
"");
139 matrixTextEdit->blockSignals(
true);
140 matrixTextEdit->setPlainText(text);
141 matrixTextEdit->blockSignals(
false);
196 matrixTextEdit->blockSignals(
true);
197 matrixTextEdit->setPlainText(matText);
198 matrixTextEdit->blockSignals(
false);
202 rxAxisDoubleSpinBox->blockSignals(
true);
203 ryAxisDoubleSpinBox->blockSignals(
true);
204 rzAxisDoubleSpinBox->blockSignals(
true);
205 rAngleDoubleSpinBox->blockSignals(
true);
206 txAxisDoubleSpinBox->blockSignals(
true);
207 tyAxisDoubleSpinBox->blockSignals(
true);
208 tzAxisDoubleSpinBox->blockSignals(
true);
214 rxAxisDoubleSpinBox->setValue(axis.
x);
215 ryAxisDoubleSpinBox->setValue(axis.
y);
216 rzAxisDoubleSpinBox->setValue(axis.
z);
218 txAxisDoubleSpinBox->setValue(t.
x);
219 tyAxisDoubleSpinBox->setValue(t.
y);
220 tzAxisDoubleSpinBox->setValue(t.
z);
222 rxAxisDoubleSpinBox->blockSignals(
false);
223 ryAxisDoubleSpinBox->blockSignals(
false);
224 rzAxisDoubleSpinBox->blockSignals(
false);
225 rAngleDoubleSpinBox->blockSignals(
false);
226 txAxisDoubleSpinBox->blockSignals(
false);
227 tyAxisDoubleSpinBox->blockSignals(
false);
228 tzAxisDoubleSpinBox->blockSignals(
false);
232 ePhiDoubleSpinBox->blockSignals(
true);
233 eThetaDoubleSpinBox->blockSignals(
true);
234 ePsiDoubleSpinBox->blockSignals(
true);
235 etxAxisDoubleSpinBox->blockSignals(
true);
236 etyAxisDoubleSpinBox->blockSignals(
true);
237 etzAxisDoubleSpinBox->blockSignals(
true);
246 etxAxisDoubleSpinBox->setValue(t.
x);
247 etyAxisDoubleSpinBox->setValue(t.
y);
248 etzAxisDoubleSpinBox->setValue(t.
z);
250 ePhiDoubleSpinBox->blockSignals(
false);
251 eThetaDoubleSpinBox->blockSignals(
false);
252 ePsiDoubleSpinBox->blockSignals(
false);
253 etxAxisDoubleSpinBox->blockSignals(
false);
254 etyAxisDoubleSpinBox->blockSignals(
false);
255 etzAxisDoubleSpinBox->blockSignals(
false);
261 QString matText = matrixTextEdit->toPlainText();
267 if (inverseCheckBox->isChecked()) {
276 QString matText = matrixTextEdit->toPlainText();
282 QMessageBox::warning(
this,
"Invalid matrix",
283 "Matrix is invalid. Make sure to only use white "
284 "spaces or tabulations between the 16 elements");
299 QString currentPath =
303 QString inputFilename = QFileDialog::getOpenFileName(
304 this,
"Select input file", currentPath,
"*.txt");
305 if (inputFilename.isEmpty())
return;
309 matrixTextEdit->setPlainText(mat.
toString());
311 CVLog::Error(QString(
"Failed to load file '%1'").arg(inputFilename));
316 QFileInfo(inputFilename).absolutePath());
321 QClipboard* clipboard = QApplication::clipboard();
323 QString clipText = clipboard->text();
324 if (!clipText.isEmpty())
325 matrixTextEdit->setPlainText(clipText);
332 static double s_dip_deg = 0.0;
333 static double s_dipDir_deg = 0.0;
334 static bool s_rotateAboutCenter =
false;
336 dddDlg.dipDoubleSpinBox->setValue(s_dip_deg);
337 dddDlg.dipDirDoubleSpinBox->setValue(s_dipDir_deg);
338 dddDlg.rotateAboutCenterCheckBox->setChecked(s_rotateAboutCenter);
340 if (!dddDlg.exec()) {
344 s_dip_deg = dddDlg.dipDoubleSpinBox->value();
345 s_dipDir_deg = dddDlg.dipDirDoubleSpinBox->value();
346 s_rotateAboutCenter = dddDlg.rotateAboutCenterCheckBox->isChecked();
360 for (
ccHObject* obj : selectedEntities) {
370 trans = backToOrigin * trans * shiftToCenter;
378 if (buttonBox->buttonRole(button) == QDialogButtonBox::ResetRole) {
380 inverseCheckBox->setChecked(
false);
384 #include "ecvApplyTransformationDlg.moc"
Vector3Tpl< PointCoordinateType > CCVector3
Default 3D Vector.
float PointCoordinateType
Type of the coordinates of a (N-D) point.
QRegularExpression QtCompatRegExp
static bool Warning(const char *format,...)
Prints out a formatted warning message in console.
static bool Error(const char *format,...)
Display an error dialog with formatted message.
const ccHObject::Container & getSelectedEntities() const override
Returns currently selected entities ("read only")
static MainWindow * TheInstance()
Returns the unique instance of this object.
QString toString(int precision=12, QChar separator=' ') const
Returns matrix as a string.
static ccGLMatrixTpl< float > FromToRotation(const Vector3Tpl< float > &from, const Vector3Tpl< float > &to)
Creates a transformation matrix that rotates a vector to another.
void invert()
Inverts transformation.
virtual bool fromAsciiFile(QString filename)
Loads matrix from an ASCII file.
void setTranslation(const Vector3Tpl< float > &Tr)
Sets translation (float version)
static ccGLMatrixTpl< float > FromString(const QString &matText, bool &success)
Converts a 'text' matrix to a ccGLMatrix.
void initFromParameters(T alpha_rad, const Vector3Tpl< T > &axis3D, const Vector3Tpl< T > &t3D)
Inits transformation from a rotation axis, an angle and a translation.
void getParameters(T &alpha_rad, Vector3Tpl< T > &axis3D, Vector3Tpl< T > &t3D) const
Float version of ccGLMatrixTpl.
Double version of ccGLMatrixTpl.
Hierarchical CLOUDVIEWER Object.
virtual ccBBox getBB_recursive(bool withGLFeatures=false, bool onlyEnabledChildren=true)
Returns the bounding-box of this entity and it's children.
std::vector< ccHObject * > Container
Standard instances container (for children, etc.)
static CCVector3 ConvertDipAndDipDirToNormal(PointCoordinateType dip_deg, PointCoordinateType dipDir_deg, bool upward=true)
Vector3Tpl< T > getCenter() const
Returns center.
bool isValid() const
Returns whether bounding box is valid or not.
static const QString CurrentPath()
static const QString LoadFile()
float DegreesToRadians(int degrees)
Convert degrees to radians.
QString defaultDocPath()
Shortcut for getting the documents location path.