From c855083b0ca5375cb59ef96286ab8fdeb904480b Mon Sep 17 00:00:00 2001 From: tarman3 Date: Mon, 12 May 2025 08:01:32 +0300 Subject: [PATCH] CAM: Simulator - Improve camera limits --- .../CAM/PathSimulator/AppGL/SimDisplay.cpp | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/Mod/CAM/PathSimulator/AppGL/SimDisplay.cpp b/src/Mod/CAM/PathSimulator/AppGL/SimDisplay.cpp index 0ee439c3ad..72af76b8dc 100644 --- a/src/Mod/CAM/PathSimulator/AppGL/SimDisplay.cpp +++ b/src/Mod/CAM/PathSimulator/AppGL/SimDisplay.cpp @@ -31,7 +31,7 @@ #include "SimDisplay.h" #include "linmath.h" #include "OpenGlWrapper.h" - +#include namespace MillSim { @@ -506,19 +506,28 @@ void SimDisplay::RotateEye(float rotStep) void SimDisplay::MoveEye(float x, float z) { + // Exponential calculate maxValue + // https://forum.freecad.org/viewtopic.php?t=96939 + const float arg1 = 124.938; + const float arg2 = 578.754; + const float arg3 = -20.7993; + float maxValueX = arg1 + arg2 * exp(arg3 * mEyeDistFactor); + float maxValueZ = maxValueX * 0.4; + mEyeX += x; - if (mEyeX > 300) { - mEyeX = 300; + if (mEyeX > maxValueX) { + mEyeX = maxValueX; } - else if (mEyeX < -300) { - mEyeX = -300; + else if (mEyeX < -maxValueX) { + mEyeX = -maxValueX; } mEyeZ += z; - if (mEyeZ > 300) { - mEyeZ = 300; + + if (mEyeZ > maxValueZ) { + mEyeZ = maxValueZ; } - else if (mEyeZ < -300) { - mEyeZ = -300; + else if (mEyeZ < -maxValueZ) { + mEyeZ = -maxValueZ; } updateDisplay = true; }