Bug 7739 fixed: Invalid axis position in log modes 22/13222/2
Calixte DENIZET [Mon, 25 Nov 2013 13:55:30 +0000 (14:55 +0100)]
Change-Id: I88548b25c96d94340437bb4d9043845dec702749

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

index 5635e03..7576cc7 100644 (file)
@@ -34,7 +34,7 @@ Scilab Bug Fixes
 
 * Bug #4401 fixed - isnum did not recognize all constants or some complex numbers.
 
-* Bug #4649 fixed - Fix a license issue in the xs2ppm help page.
+* Bug #4649 fixed - License issue in the xs2ppm help page fixed.
 
 * Bug #4965 fixed - Setting links property for a handle of type legend did not work.
 
@@ -55,8 +55,7 @@ Scilab Bug Fixes
 
 * Bug #7047 fixed - milk_drop is now obsolete. It will be removed in Scilab 5.5.1, but will be kept as a demo.
 
-* Bug #7084 fixed - Remove old, not documented and deprecated the gr_menu
-                    function.
+* Bug #7084 fixed - Old, not documented and deprecated gr_menu function removed.
 
 * Bug #7133 fixed - help_from_sci with no input argument now launches a full demonstration.
 
@@ -67,6 +66,8 @@ Scilab Bug Fixes
 * Bug #7705 fixed - In the Genetic algorithms help pages, documented the
                     "dimension", "minbounds" and "maxbounds" fields.
 
+* Bug #7739 fixed - Axis position was invalid in log modes.
+
 * Bug #7858 fixed - variance and variancef can now return the mean of the input
                     in a new output argument and take the a priori mean as input.
 
diff --git a/scilab/modules/graphics/tests/nonreg_tests/bug_7739.tst b/scilab/modules/graphics/tests/nonreg_tests/bug_7739.tst
new file mode 100644 (file)
index 0000000..30e6cf4
--- /dev/null
@@ -0,0 +1,33 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - 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 7739 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/7739
+//
+// <-- Short Description -->
+// Invalid axis position in log modes
+
+clf();
+x=linspace(1,7,50);
+plot2d(x,100+(x-3).^3);
+a=gca();
+drawaxis(dir="u",tics="r",y=170,x=[1 7 6],sub_int=5);
+
+// axis should stay at the "same" place
+a.log_flags="lnn";
+
+// axis should stay at the "same" place
+a.log_flags="nln";
+
+// axis should stay at the "same" place
+a.log_flags="lln";
\ No newline at end of file
index 259233c..d032871 100644 (file)
@@ -25,6 +25,7 @@ import org.scilab.modules.graphic_objects.axis.Axis;
 import org.scilab.modules.graphic_objects.textObject.FormattedText;
 import org.scilab.modules.renderer.JoGLView.util.ColorFactory;
 import org.scilab.modules.renderer.JoGLView.util.FormattedTextSpriteDrawer;
+import org.scilab.modules.renderer.JoGLView.util.ScaleUtils;
 
 import java.text.DecimalFormat;
 import java.util.Collections;
@@ -60,6 +61,7 @@ public class AxisDrawer {
         rulerModel.setSpriteDistance(SPRITE_DISTANCE);
         rulerModel.setSubTicksLength(SUB_TICKS_LENGTH);
         rulerModel.setTicksLength(TICKS_LENGTH);
+        boolean[] logFlags = new boolean[] {axes.getXAxisLogFlag(), axes.getYAxisLogFlag(), axes.getZAxisLogFlag()};
 
         Double[] xTicksValues;
         Double[] yTicksValues;
@@ -85,10 +87,13 @@ public class AxisDrawer {
             rulerModel.setUserGraduation(new AxisGraduation(axis, xTicksValues, xMinAndMax));
         }
 
-        xMinAndMax[0] = xMinAndMax[0] * factors[0][0] + factors[1][0];
-        xMinAndMax[1] = xMinAndMax[1] * factors[0][0] + factors[1][0];
-        yMinAndMax[0] = yMinAndMax[0] * factors[0][1] + factors[1][1];
-        yMinAndMax[1] = yMinAndMax[1] * factors[0][1] + factors[1][1];
+        Vector3d start = new Vector3d(xMinAndMax[0], yMinAndMax[0], 0);
+        Vector3d end = new Vector3d(xMinAndMax[1], yMinAndMax[1], 0);
+        start = ScaleUtils.applyLogScale(start, logFlags);
+        end = ScaleUtils.applyLogScale(end, logFlags);
+
+        start = new Vector3d(start.getX() * factors[0][0] + factors[1][0], start.getY() * factors[0][1] + factors[1][1], start.getZ() * factors[0][2] + factors[1][2]);
+        end = new Vector3d(end.getX() * factors[0][0] + factors[1][0], end.getY() * factors[0][1] + factors[1][1], end.getZ() * factors[0][2] + factors[1][2]);
 
         // TODO : RulerModel should be an interface.
         rulerModel.setAutoTicks(false);
@@ -97,11 +102,9 @@ public class AxisDrawer {
         rulerModel.setLineVisible(axis.getTicksSegment());
         rulerModel.setColor(ColorFactory.createColor(drawerVisitor.getColorMap(), axis.getTicksColor()));
 
-
-        rulerModel.setPoints(new Vector3d(xMinAndMax[0], yMinAndMax[0], 0), new Vector3d(xMinAndMax[1], yMinAndMax[1], 0));
+        rulerModel.setPoints(start, end);
         rulerModel.setTicksDirection(computeTicksDirection(axis.getTicksDirectionAsEnum()));
 
-
         DrawingTools drawingTools = drawerVisitor.getDrawingTools();
 
         RulerDrawer rulerDrawer = new RulerDrawer(drawerVisitor.getCanvas().getTextureManager());