Gui: implement a static function schemaTranslatePoint to avoid code duplication

This commit is contained in:
wmayer
2020-05-30 16:46:35 +02:00
parent 01e21f2f11
commit c374a6faa9
3 changed files with 68 additions and 112 deletions

View File

@@ -52,7 +52,6 @@
#include "View3DInventorViewer.h"
#include <Base/Console.h>
#include <Base/UnitsApi.h>
#include "SoFCSelection.h"
#include "MainWindow.h"
#include "Selection.h"
@@ -75,6 +74,10 @@
using namespace Gui;
namespace Gui {
std::array<std::pair<double, std::string>,3 > schemaTranslatePoint(double x, double y, double z, double precision);
}
SoFullPath * Gui::SoFCSelection::currenthighlight = NULL;
@@ -403,44 +406,15 @@ SoFCSelection::handleEvent(SoHandleEventAction * action)
const auto &pt = pp->getPoint();
Base::Quantity mmx(Base::Quantity::MilliMetre);
mmx.setValue(fabs(pt[0])>1e-7?(double)pt[0]:0.0);
Base::Quantity mmy(Base::Quantity::MilliMetre);
mmy.setValue(fabs(pt[1])>1e-7?(double)pt[1]:0.0);
Base::Quantity mmz(Base::Quantity::MilliMetre);
mmz.setValue(fabs(pt[2])>1e-7?(double)pt[2]:0.0);
double xfactor, yfactor, zfactor, factor;
QString xunit, yunit, zunit, unit;
QString xval = Base::UnitsApi::schemaTranslate(mmx, xfactor, xunit);
QString yval = Base::UnitsApi::schemaTranslate(mmy, yfactor, yunit);
QString zval = Base::UnitsApi::schemaTranslate(mmz, zfactor, zunit);
if (xfactor <= yfactor && xfactor <= zfactor)
{
factor = xfactor;
unit = xunit;
}
else if (yfactor <= xfactor && yfactor <= zfactor)
{
factor = yfactor;
unit = yunit;
}
else
{
factor = zfactor;
unit = zunit;
}
float xuser = fabs(pt[0])>1e-7 ? pt[0] / factor : 0.0;
float yuser = fabs(pt[1])>1e-7 ? pt[1] / factor : 0.0;
float zuser = fabs(pt[2])>1e-7 ? pt[2] / factor : 0.0;
snprintf(buf,512,"Preselected: %s.%s.%s (%f, %f, %f) %s",documentName.getValue().getString()
,objectName.getValue().getString()
,subElementName.getValue().getString()
,xuser,yuser,zuser,unit.toLatin1().data());
auto pts = schemaTranslatePoint(pt[0], pt[1], pt[2], 1e-7);
snprintf(buf,512,"Preselected: %s.%s.%s (%f, %f, %f) %s"
,documentName.getValue().getString()
,objectName.getValue().getString()
,subElementName.getValue().getString()
,pts[0].first
,pts[1].first
,pts[2].first
,pts[0].second.c_str());
getMainWindow()->showMessage(QString::fromLatin1(buf));
}