Merge pull request #17282 from mwganson/points

[Points WB] fix issue where points are inaccurately imported when the…
This commit is contained in:
Max Wilfinger
2024-12-08 20:43:05 +01:00
committed by GitHub

View File

@@ -24,6 +24,7 @@
#ifndef _PreComp_
#include <Inventor/events/SoMouseButtonEvent.h>
#include <QInputDialog>
#include <QMessageBox>
#include <algorithm>
#endif
@@ -98,6 +99,38 @@ void CmdPointsImport::activated(int iMsg)
commitCommand();
updateActive();
/** check if boundbox contains the origin, offer to move it to the origin if not
* addresses issue #5808 where an imported points cloud that was far from the
* origin had inaccuracies in the relative positioning of the points due to
* imprecise floating point variables used in COIN
**/
auto* pcFtr = dynamic_cast<Points::Feature*>(doc->getDocument()->getActiveObject());
if (pcFtr) {
auto points = pcFtr->Points.getValue();
auto bbox = points.getBoundBox();
auto center = bbox.GetCenter();
if (!bbox.IsInBox(Base::Vector3d(0, 0, 0))) {
QMessageBox msgBox;
msgBox.setIcon(QMessageBox::Question);
msgBox.setWindowTitle(QObject::tr("Points not at Origin"));
msgBox.setText(QObject::tr(
"The Bounding Box of the imported points does not contain the origin. "
"Do you want to translate it to the origin?"));
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::Yes);
auto ret = msgBox.exec();
if (ret == QMessageBox::Yes) {
Points::PointKernel translatedPoints;
for (const auto& point : points) {
translatedPoints.push_back(point - center);
}
pcFtr->Points.setValue(translatedPoints);
}
}
}
}
}