diff --git a/src/Gui/TaskView/TaskImage.cpp b/src/Gui/TaskView/TaskImage.cpp
index 27ef04949c..69642bb011 100644
--- a/src/Gui/TaskView/TaskImage.cpp
+++ b/src/Gui/TaskView/TaskImage.cpp
@@ -288,6 +288,9 @@ void TaskImage::onPreview()
// NOLINTNEXTLINE
void TaskImage::restoreAngles(const Base::Rotation& rot)
{
+ Base::Vector3d vec(0, 0, 1);
+ rot.multVec(vec, vec);
+
double yaw {};
double pitch {};
double roll {};
@@ -300,32 +303,49 @@ void TaskImage::restoreAngles(const Base::Rotation& rot)
const double angle2 = 180.0;
auto isTopOrBottom = [=](bool& reverse) {
- if (fabs(pitch) < tol && (fabs(roll) < tol || fabs(roll - angle2) < tol)) {
- if (fabs(roll - angle2) < tol) {
- reverse = true;
- }
+ if (std::fabs(vec.z - 1.0) < tol) {
+ return true;
+ }
+ if (std::fabs(vec.z + 1.0) < tol) {
+ reverse = true;
return true;
}
return false;
};
- auto isFrontOrRear = [=](bool& reverse) {
- if (fabs(roll - angle1) < tol && (fabs(yaw) < tol || fabs(yaw - angle2) < tol)) {
- if (fabs(yaw - angle2) < tol) {
- reverse = true;
+
+ auto isFrontOrRear = [&](bool& reverse) {
+ if (std::fabs(vec.y + 1.0) < tol) {
+ if (std::fabs(yaw - angle2) < tol) {
+ pitch = -angle2 - pitch;
}
return true;
}
+ if (std::fabs(vec.y - 1.0) < tol) {
+ if (std::fabs(yaw) < tol) {
+ pitch = -angle2 - pitch;
+ }
+ reverse = true;
+ return true;
+ }
return false;
};
- auto isRightOrLeft = [=](bool& reverse) {
- if (fabs(roll - angle1) < tol && (fabs(yaw - angle1) < tol || fabs(yaw + angle1) < tol)) {
- if (fabs(yaw + angle1) < tol) {
- reverse = true;
+
+ auto isRightOrLeft = [&](bool& reverse) {
+ if (std::fabs(vec.x - 1.0) < tol) {
+ if (std::fabs(yaw + angle1) < tol) {
+ pitch = -angle2 - pitch;
}
return true;
}
+ if (std::fabs(vec.x + 1.0) < tol) {
+ if (std::fabs(yaw - angle1) < tol) {
+ pitch = -angle2 - pitch;
+ }
+ reverse = true;
+ return true;
+ }
return false;
};
@@ -396,6 +416,10 @@ void TaskImage::updatePlacement()
else if (ui->YZ_radioButton->isChecked()) {
rot.setYawPitchRoll(90. - dir, -angle, 90.);
}
+ else if (!feature.expired()) {
+ Base::Placement plm = feature->Placement.getValue();
+ rot = plm.getRotation();
+ }
// NOLINTEND
Base::Vector3d offset = Base::Vector3d(ui->spinBoxX->value().getValue(),
diff --git a/src/Gui/TaskView/TaskImage.ui b/src/Gui/TaskView/TaskImage.ui
index 589d949f81..37aac262c7 100644
--- a/src/Gui/TaskView/TaskImage.ui
+++ b/src/Gui/TaskView/TaskImage.ui
@@ -27,9 +27,6 @@
XY-Plane
-
- true
-
-