bug fix #14886: matplot save/load failed 79/19179/2
Antoine ELIAS [Sun, 12 Mar 2017 16:49:34 +0000 (17:49 +0100)]
Change-Id: I06af15d8dd91a5cf55c4bd102a16921666947127

scilab/CHANGES.md
scilab/modules/hdf5/src/cpp/handle_properties.cpp
scilab/modules/hdf5/tests/nonreg_tests/bug_14886.tst [new file with mode: 0644]

index 1e16f05..24a5a53 100644 (file)
@@ -347,6 +347,7 @@ the [development mailing list](dev@lists.scilab.org) for a particular toolbox.
 * [#5278](http://bugzilla.scilab.org/show_bug.cgi?id=5278): obsolete `xset()` was still used in scripts, macros, tests and help pages.
 * [#14636](http://bugzilla.scilab.org/show_bug.cgi?id=14636): Xcos model with modelica electrical blocks (created in 5.5.2) crashed Scilab 6.
 * [#14637](http://bugzilla.scilab.org/show_bug.cgi?id=14367): Some Scilab 5.5.2 diagrams didn't simulate properly in Xcos.
+* [#14886](http://bugzilla.scilab.org/show_bug.cgi?id=14886): Matplot save/load failed.
 * [#14910](http://bugzilla.scilab.org/show_bug.cgi?id=14910): The `plot()` example was displayed in overlay to the existing graphics.
 * [#14978](http://bugzilla.scilab.org/show_bug.cgi?id=15006): ode help page still contained 'root' which has been replaced by 'roots'.
 * [#15010](http://bugzilla.scilab.org/show_bug.cgi?id=15010): Coselica did not simulate on Scilab 6.
index 6af00f7..2253ee9 100644 (file)
@@ -1059,25 +1059,27 @@ static int import_handle_matplot(int dataset, int parent)
     rect[2] = tmp;
 
     //data
-    getHandleInt(dataset, "num_x", &row);
-    getHandleInt(dataset, "num_y", &col);
+    int num_x = 0;
+    int num_y = 0;
+    getHandleInt(dataset, "num_x", &num_x);
+    getHandleInt(dataset, "num_y", &num_y);
     double* data = nullptr;
     int data_x = 0;
     int data_y = 0;
     getHandleDoubleVector(dataset, "data", &data_x, &data_y, &data);
 
     int grid[4];
-    grid[0] = col;
+    grid[0] = num_x;
     grid[1] = 1;
-    grid[2] = row;
+    grid[2] = num_y;
     grid[3] = 1;
 
     setGraphicObjectPropertyAndNoWarn(plot, __GO_DATA_MODEL_GRID_SIZE__, grid, jni_int_vector, 4);
 
     double scale[2];
     setGraphicObjectProperty(plot, __GO_MATPLOT_TRANSLATE__, rect, jni_double_vector, 2);
-    scale[0] = (rect[2] - rect[0]) / (col - 1.0);
-    scale[1] = (rect[3] - rect[1]) / (row - 1.0);
+    scale[0] = (rect[2] - rect[0]) / (num_x - 1.0);
+    scale[1] = (rect[3] - rect[1]) / (num_y - 1.0);
     setGraphicObjectProperty(plot, __GO_MATPLOT_SCALE__, scale, jni_double_vector, 2);
 
     setGraphicObjectProperty(plot, __GO_DATA_MODEL_MATPLOT_BOUNDS__, rect, jni_double_vector, 4);
@@ -2728,9 +2730,9 @@ static bool export_handle_matplot(int parent, int uid)
     }
 
     int row = 0;
-    getHandleIntProperty(uid, __GO_DATA_MODEL_NUM_X__, &row);
     int col = 0;
-    getHandleIntProperty(uid, __GO_DATA_MODEL_NUM_Y__, &col);
+    getHandleIntProperty(uid, __GO_DATA_MODEL_NUM_X__, &col);
+    getHandleIntProperty(uid, __GO_DATA_MODEL_NUM_Y__, &row);
     int datatype = 0;
     getHandleIntProperty(uid, __GO_DATA_MODEL_MATPLOT_DATA_TYPE__, &datatype);
     int imagetype = 0;
diff --git a/scilab/modules/hdf5/tests/nonreg_tests/bug_14886.tst b/scilab/modules/hdf5/tests/nonreg_tests/bug_14886.tst
new file mode 100644 (file)
index 0000000..2398a58
--- /dev/null
@@ -0,0 +1,28 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2017 - ESI - Antoine ELIAS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- TEST WITH GRAPHIC -->
+// <-- NO CHECK REF -->
+//
+// <-- Non-regression test for bug 14886 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14886
+//
+// <-- Short Description -->
+// save/load matplot failed ( mistake between rwo/x and cols/y )
+
+Matplot()
+f = gcf();
+save(TMPDIR+"/Matplot.sod","f")
+d0 = gca().children.data;
+xdel()
+load(TMPDIR+"/Matplot.sod")
+d1 = gca().children.data;
+
+assert_checkequal(size(d0), size(d1));
+assert_checkequal(d0, d1);