Bug 13640 fixed: Graphics in isoview mode were too small when in subplots 28/16228/2
Calixte DENIZET [Tue, 24 Mar 2015 10:22:45 +0000 (11:22 +0100)]
Change-Id: I78dbec0d0b7e50e3ecca078a89d8239365900c74

scilab/CHANGES_5.5.X
scilab/modules/graphics/tests/nonreg_tests/bug_13640.tst [new file with mode: 0644]
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/axes/AxesDrawer.java

index ef3bd80..3444cac 100644 (file)
@@ -82,6 +82,8 @@ Scilab Bug Fixes
 
 * Bug #13619 fixed - xstringl returned wrong first point.
 
+* Bug #13640 fixed - Graphics in isoview mode were too small when in subplots.
+
 * Bug #13673 fixed - Anti-aliasing of xpoly marks did not render correctly.
 
 * Bug #13674 fixed - User .wgetrc configuration file is now by-passed when ATOMS does not use a proxy.
diff --git a/scilab/modules/graphics/tests/nonreg_tests/bug_13640.tst b/scilab/modules/graphics/tests/nonreg_tests/bug_13640.tst
new file mode 100644 (file)
index 0000000..46883cc
--- /dev/null
@@ -0,0 +1,29 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Calixte DENIZET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- TEST WITH GRAPHIC -->
+
+// <-- INTERACTIVE TEST -->
+
+// <-- Non-regression test for bug 13640 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13640
+//
+// <-- Short Description -->
+// Graphics in isoview mode were too small when in subplots
+
+// check that the two graphics don't seem too small
+
+set(gcf(),"axes_size",[800 400])
+x=-1:0.1:1;
+subplot(1,2,1)
+mesh(x,x,x'*x)
+set(gca(),"isoview","on")
+subplot(1,2,2)
+mesh(x,x,x'*x)
+set(gca(),"isoview","on")
index b4da513..76fa620 100644 (file)
@@ -630,10 +630,17 @@ public class AxesDrawer {
         // Scale projected data to fit in the cube.
         Transformation isoScale;
         if (axes.getIsoview()) {
-            double w = zone.getWidth();
-            double h = zone.getHeight();
-            double minScale = Math.min(tmpX * w, tmpY * h);
-            isoScale = TransformationFactory.getScaleTransformation(minScale / w, minScale / h, tmpZ);
+            Double[] axesBounds = axes.getAxesBounds();
+            Double[] margins = axes.getMargins();
+            double w = (1 - margins[0] - margins[1]) * axesBounds[2];
+            double h = (1 - margins[2] - margins[3]) * axesBounds[3];
+            double minScale;
+            if (h > w) {
+                minScale = Math.min(tmpX, tmpY * (h / w));
+            } else {
+                minScale = Math.min(tmpX * (w / h), tmpY);
+            }
+            isoScale = TransformationFactory.getScaleTransformation(minScale, minScale, tmpZ);
         } else {
             isoScale = TransformationFactory.getScaleTransformation(tmpX, tmpY, tmpZ);
         }
@@ -642,7 +649,6 @@ public class AxesDrawer {
         return transformation;
     }
 
-
     /**
      * Computes and sets the reversed bounds of the given Axes.
      * @param axes the given {@see Axes}.