Fix bug 4812 : xs2... function doesn't work if the first argument is a handle
Pierre LANDO [Thu, 15 Oct 2009 10:16:07 +0000 (12:16 +0200)]
scilab/CHANGES_5.2.X
scilab/modules/graphic_export/src/c/xs2file.c
scilab/modules/graphic_export/tests/nonreg_tests/bug_4812.dia.ref [new file with mode: 0644]
scilab/modules/graphic_export/tests/nonreg_tests/bug_4812.tst [new file with mode: 0644]

index 46a5855..10ae674 100644 (file)
@@ -609,6 +609,8 @@ Bug fixes:
 
 * bug 4810 fixed - gsort does not manage sparse vectors as sort.
 
+* bug 4812 fixed - xs2... function doesn't work if the first argument is a handle
+
 * bug 4817 fixed - macro savedefaultbrowser (internal) removed (not used in scilab 5.x)
 
 * bug 4828 fixed - completion clears the content of some completed path.
index 007773f..180a4f1 100644 (file)
@@ -45,15 +45,11 @@ int xs2file(char * fname, ExportFileType fileType )
                CheckRhs(2,2);
        }
 
-       if (GetType(1) != sci_matrix)
+       if (GetType(1) != sci_matrix && GetType(1) != sci_handles)
        {
-               Scierror(999,_("%s: Wrong type for input argument #%d: An Integer expected.\n"),fname, 1);
-               return 0;
-       }
-
-       if (!IsAScalar(1))
-       {
-               Scierror(999,_("%s: Wrong size for input argument #%d: An Integer expected.\n"),fname, 1);
+               Scierror(999,_("%s: Wrong type for input argument #%d: An integer or a handle expected.\n"),fname, 1);
+         LhsVar(1) = 0;
+         C2F(putlhsvar)();
                return 0;
        }
 
@@ -66,19 +62,62 @@ int xs2file(char * fname, ExportFileType fileType )
                int out_n = 0;
                int m1 = 0, n1 = 0, l1 = 0;
                int figurenum = -1;
+    sciPointObj* figurePtr = NULL;
                int status = 0;
 
-               /* get figure number */
-               GetRhsVar(1,MATRIX_OF_INTEGER_DATATYPE,&m1,&n1,&l1);
-               figurenum = *istk(l1);
+               /* get handle by figure number */
+    if(GetType(1) == sci_matrix)
+    {
+               GetRhsVar(1,MATRIX_OF_INTEGER_DATATYPE,&m1,&n1,&l1);
+      if(m1*n1 != 1)
+      {
+        Scierror(999,_("%s: Wrong size for input argument #%d: A scalar expected.\n"),fname, 1);        
+                         LhsVar(1) = 0;
+                         C2F(putlhsvar)();
+                         return 0;
+      }
+
+               figurenum = *istk(l1);
+                 if (!sciIsExistingFigure(figurenum))
+                 {
+                         Scierror(999, "%s: Input argument #%d must be a valid figure_id.\n",fname, 1);
+                         LhsVar(1) = 0;
+                         C2F(putlhsvar)();
+                         return 0;
+                 }
+      figurePtr = getFigureFromIndex(figurenum);
+    }
+    /* check given handle */
+    if(GetType(1) == sci_handles)
+    {
+      GetRhsVar(1,GRAPHICAL_HANDLE_DATATYPE,&m1,&n1,&l1);
+      if(m1*n1 != 1)
+      {
+        Scierror(999,_("%s: Wrong size for input argument #%d: A graphic handle expected.\n"),fname, 1);        
+                         LhsVar(1) = 0;
+                         C2F(putlhsvar)();
+                         return 0;
+      }
+      figurePtr = sciGetPointerFromHandle(getHandleFromStack(l1));
+
+      if(figurePtr == NULL)
+      {
+                         Scierror(999, "%s: Input argument #%d must be a valid handle.\n",fname, 1);
+                         LhsVar(1) = 0;
+                         C2F(putlhsvar)();
+                         return 0;        
+      }
+      startFigureDataReading(figurePtr);
+      if(sciGetEntityType(figurePtr)!=SCI_FIGURE)
+      {
+                         Scierror(999, "%s: Input argument #%d must be a handle on a figure.\n", fname, 1);
+                         LhsVar(1) = 0;
+                         C2F(putlhsvar)();
+                         return 0;        
+      }
+      endFigureDataReading(figurePtr);
+    }
 
-               if (!sciIsExistingFigure(figurenum))
-               {
-                       Scierror(999, "%s: Figure with figure_id %d does not exist.\n",fname, figurenum);
-                       LhsVar(1) = 0;
-                       C2F(putlhsvar)();
-                       return 0;
-               }
                /* get file name */
                GetRhsVar(2,MATRIX_OF_STRING_DATATYPE,&m1,&n1,&fileName);
                if (m1*n1 == 1)
@@ -132,7 +171,7 @@ int xs2file(char * fname, ExportFileType fileType )
                        real_filename = expandPathVariable(fileName[0]);
 
                        /* Call the function for exporting file */
-                       status = exportToFile(getFigureFromIndex(figurenum), real_filename, fileType, orientation);
+                       status = exportToFile(figurePtr, real_filename, fileType, orientation);
 
                        /* free pointers no more used */
                        if (real_filename){FREE(real_filename);real_filename = NULL;}
diff --git a/scilab/modules/graphic_export/tests/nonreg_tests/bug_4812.dia.ref b/scilab/modules/graphic_export/tests/nonreg_tests/bug_4812.dia.ref
new file mode 100644 (file)
index 0000000..19f0fd1
--- /dev/null
@@ -0,0 +1,21 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2009 - Digiteo - Pierre Lando
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- TEST WITH GRAPHIC -->
+// <-- Non-regression test for bug 4812 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=4812
+//
+// <-- Short Description -->
+// xs2### function doesn't work if the first argument is 
+// 
+//scf(0);
+plot3d();
+hd=gcf();
+//PNG export for exemple
+xs2png(0,TMPDIR+'/nonreg_test_bug4812a.png');
+xs2png(hd,TMPDIR+'/nonreg_test_bug4812b.png'); // this now work ....
diff --git a/scilab/modules/graphic_export/tests/nonreg_tests/bug_4812.tst b/scilab/modules/graphic_export/tests/nonreg_tests/bug_4812.tst
new file mode 100644 (file)
index 0000000..a00282e
--- /dev/null
@@ -0,0 +1,26 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2009 - Digiteo - Pierre Lando
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- TEST WITH GRAPHIC -->
+// <-- NO CHECK ERROR OUTPUT -->
+
+// <-- Non-regression test for bug 4812 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=4812
+//
+// <-- Short Description -->
+// xs2... function doesn't work if the first argument is a handle
+// 
+
+//scf(0);
+plot3d();
+hd=gcf();
+//PNG export for exemple
+xs2png(0,TMPDIR+'/nonreg_test_bug4812a.png');
+xs2png(hd,TMPDIR+'/nonreg_test_bug4812b.png'); // this now work ....
+