fix bug #15057: update .data of matplot does not take care of dimension >2 78/19178/3
Antoine ELIAS [Sun, 12 Mar 2017 16:02:49 +0000 (17:02 +0100)]
http://bugzilla.scilab.org/show_bug.cgi?id=15057

Change-Id: I036ba0bfc11626981a0fb9680d84078f9bd7e38f

scilab/CHANGES.md
scilab/modules/graphics/src/cpp/set_data_property.cpp
scilab/modules/graphics/tests/nonreg_tests/bug_15057.tst [new file with mode: 0644]

index 8467217..1e16f05 100644 (file)
@@ -355,6 +355,7 @@ the [development mailing list](dev@lists.scilab.org) for a particular toolbox.
 * [#15023](http://bugzilla.scilab.org/show_bug.cgi?id=15023): `clf()` wrongly reset `figure_id`.
 * [#15052](http://bugzilla.scilab.org/show_bug.cgi?id=15052): `getpid` wasn't available anymore
 * [#15054](http://bugzilla.scilab.org/show_bug.cgi?id=15054): The callbacks of `wfir_gui()` were not prioritary.
+* [#15057](http://bugzilla.scilab.org/show_bug.cgi?id=15057): Matplot .data assignation did not take care of >2 dimension
 * [#15060](http://bugzilla.scilab.org/show_bug.cgi?id=15060): `fplot3d` did not draw because of an addition with an empty matrix which now returns an empty matrix.
 
 ### Bugs fixed in 6.0.0:
index 55a62a2..1523faa 100644 (file)
@@ -189,15 +189,15 @@ int set_data_property(void* _pvCtx, int iObjUID, void* _pvData, int valueType, i
                     plottype = buildMatplotType(MATPLOT_Char, (DataOrder)dataorder, (ImageType)imagetype);
                     bRGB = true;
                 }
-                else if (piDimsArray[2] != 1 && (DataType)datatype != MATPLOT_HM1_Char)
+                else if (piDimsArray[2] == 1 && (DataType)datatype != MATPLOT_HM1_Char)
                 {
                     plottype = buildMatplotType(MATPLOT_HM1_Char, (DataOrder)dataorder, (ImageType)imagetype);
                 }
-                else if (piDimsArray[2] != 3 && (DataType)datatype != MATPLOT_HM3_Char)
+                else if (piDimsArray[2] == 3 && (DataType)datatype != MATPLOT_HM3_Char)
                 {
                     plottype = buildMatplotType(MATPLOT_HM3_Char, (DataOrder)dataorder, (ImageType)imagetype);
                 }
-                else if (piDimsArray[2] != 4 && (DataType)datatype != MATPLOT_HM4_Char)
+                else if (piDimsArray[2] == 4 && (DataType)datatype != MATPLOT_HM4_Char)
                 {
                     plottype = buildMatplotType(MATPLOT_HM4_Char, (DataOrder)dataorder, (ImageType)imagetype);
                 }
@@ -212,15 +212,15 @@ int set_data_property(void* _pvCtx, int iObjUID, void* _pvData, int valueType, i
                     plottype = buildMatplotType(MATPLOT_UChar, (DataOrder)dataorder, (ImageType)imagetype);
                     bRGB = true;
                 }
-                else if ((DataType)datatype != MATPLOT_HM1_Char)
+                else if (piDimsArray[2] == 1 && (DataType)datatype != MATPLOT_HM1_UChar)
                 {
                     plottype = buildMatplotType(MATPLOT_HM1_UChar, (DataOrder)dataorder, (ImageType)imagetype);
                 }
-                else if (piDimsArray[2] != 3 && (DataType)datatype != MATPLOT_HM3_UChar)
+                else if (piDimsArray[2] == 3 && (DataType)datatype != MATPLOT_HM3_UChar)
                 {
                     plottype = buildMatplotType(MATPLOT_HM3_UChar, (DataOrder)dataorder, (ImageType)imagetype);
                 }
-                else if (piDimsArray[2] != 4 && (DataType)datatype != MATPLOT_HM4_UChar)
+                else if (piDimsArray[2] == 4 && (DataType)datatype != MATPLOT_HM4_UChar)
                 {
                     plottype = buildMatplotType(MATPLOT_HM4_UChar, (DataOrder)dataorder, (ImageType)imagetype);
                 }
@@ -286,15 +286,15 @@ int set_data_property(void* _pvCtx, int iObjUID, void* _pvData, int valueType, i
                 {
                     plottype = buildMatplotType(MATPLOT_Double, (DataOrder)dataorder, (ImageType)imagetype);
                 }
-                else if ((DataType)datatype != MATPLOT_HM1_Double)
+                else if (piDimsArray[2] == 1 && (DataType)datatype != MATPLOT_HM1_Double)
                 {
                     plottype = buildMatplotType(MATPLOT_HM1_Double, (DataOrder)dataorder, (ImageType)imagetype);
                 }
-                else if (piDimsArray[2] != 3 && (DataType)datatype != MATPLOT_HM3_Double)
+                else if (piDimsArray[2] == 3 && (DataType)datatype != MATPLOT_HM3_Double)
                 {
                     plottype = buildMatplotType(MATPLOT_HM3_Double, (DataOrder)dataorder, (ImageType)imagetype);
                 }
-                else if (piDimsArray[2] != 4 && (DataType)datatype != MATPLOT_HM4_Double)
+                else if (piDimsArray[2] == 4 && (DataType)datatype != MATPLOT_HM4_Double)
                 {
                     plottype = buildMatplotType(MATPLOT_HM4_Double, (DataOrder)dataorder, (ImageType)imagetype);
                 }
diff --git a/scilab/modules/graphics/tests/nonreg_tests/bug_15057.tst b/scilab/modules/graphics/tests/nonreg_tests/bug_15057.tst
new file mode 100644 (file)
index 0000000..677c353
--- /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 15057 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/15057
+//
+// <-- Short Description -->
+// update of data of matplot does not take care of dimension >2
+
+a = uint8(zeros(480,640,3));
+a(:,:,1) = uint8(255);
+a(:,:,2) = uint8(180);
+a(:,:,3) = uint8(60);
+Matplot(a);
+e = gce();
+
+//change `data` values to be sure data are updated
+e.data = a + 1;
+assert_checkequal(e.data, a+1);