* Bug #12880 fixed - Graphics: issue a warning when transposing
[scilab.git] / scilab / modules / graphics / macros / checkXYPair.sci
index 6d1eef6..d5b26ab 100644 (file)
@@ -57,8 +57,22 @@ function [X,Y]=checkXYPair(typeOfPlot,x,y,current_figure,cur_draw_mode)
         X=x;
         Y=y;
 
-        if size(X,1)==1, X=X', end;  // si l'un des vecteurs est une ligne
-        if size(Y,1)==1, Y=Y', end;  // on le transpose.
+        XScal = isscalar(X);
+        YScal = isscalar(Y);
+
+        transposeX = %f;
+        transposeY = %f;
+
+        if size(X,1)==1 & ~XScal, X=X', transposeX = %t; end; // Transpose the row vectors,
+        if size(Y,1)==1 & ~YScal, Y=Y', transposeY = %t; end; // but no need to transpose scalars.
+
+        if transposeX == ~transposeY then
+            if transposeX == %t then
+                warning(_("Transposing row vector X to get compatible dimensions"));
+            else
+                warning(_("Transposing row vector Y to get compatible dimensions"));
+            end
+        end
 
         if (size(X)==[0 0])
             ok=%F
@@ -88,8 +102,12 @@ function [X,Y]=checkXYPair(typeOfPlot,x,y,current_figure,cur_draw_mode)
             return;
         end
         if (size(X,2)==1) & (size(Y,2)==size(X,1))
-            // X is a vector
-            Y=Y';
+            // X is a column vector and Y has as many columns as X has rows.
+            // Y cannot be a square matrix here, because it would have fallen in the previous case (above) and returned.
+            if ~YScal then
+                warning(_("Transposing data matrix Y to get compatible dimensions"));
+                Y=Y';
+            end
             ok=%T;
 
             return;
@@ -109,9 +127,13 @@ function [X,Y]=checkXYPair(typeOfPlot,x,y,current_figure,cur_draw_mode)
         if or(size(Y) == 1) then
             if size(X,1) == size(Y,1) then
                 y=Y;
-            elseif size(X,1) == size(Y,2) then
+            elseif size(X,1) == size(Y,2) & ~YScal then
+                // Y has as many columns as X has rows. Transpose Y to fit X.
+                warning(_("Transposing data matrix Y to get compatible dimensions"));
                 y=Y(:);
-            elseif size(X,2) == size(Y,1) then
+            elseif size(X,2) == size(Y,1) & ~YScal & ~XScal then
+                // Y has as many rows as X has columns. Transpose X to fit Y.
+                warning(_("Transposing column vector X to get row vector"));
                 X=X';
                 y=Y(:);
             elseif size(X,2) == size(Y,2) then