From f54f96666330c39c21dca14c7cf80fc32d87b495 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Tue, 18 Dec 2018 11:50:22 +0100
Subject: [PATCH] Sidebar matrix field behavior for single full object
 selection

---
 src/slic3r/GUI/GUI_ObjectManipulation.cpp | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/src/slic3r/GUI/GUI_ObjectManipulation.cpp b/src/slic3r/GUI/GUI_ObjectManipulation.cpp
index 5c049144e..4f63fb61f 100644
--- a/src/slic3r/GUI/GUI_ObjectManipulation.cpp
+++ b/src/slic3r/GUI/GUI_ObjectManipulation.cpp
@@ -390,12 +390,20 @@ void ObjectManipulation::change_scale_value(const Vec3d& scale)
 
     if (needs_uniform_scale)
     {
-        double min = scaling_factor.minCoeff();
-        double max = scaling_factor.maxCoeff();
-        if (min != 100.0)
-            scaling_factor = Vec3d(min, min, min);
-        else if (max != 100.0)
-            scaling_factor = Vec3d(max, max, max);
+        Vec3d abs_scale_diff = (scale - cache_scale).cwiseAbs();
+        double max_diff = abs_scale_diff(X);
+        Axis max_diff_axis = X;
+        if (max_diff < abs_scale_diff(Y))
+        {
+            max_diff = abs_scale_diff(Y);
+            max_diff_axis = Y;
+        }
+        if (max_diff < abs_scale_diff(Z))
+        {
+            max_diff = abs_scale_diff(Z);
+            max_diff_axis = Z;
+        }
+        scaling_factor = Vec3d(scale(max_diff_axis), scale(max_diff_axis), scale(max_diff_axis));
     }
 
     scaling_factor *= 0.01;