Fix bug 2175
Jean-Baptiste Silvy [Fri, 30 Jan 2009 11:10:40 +0000 (12:10 +0100)]
scilab/modules/graphics/macros/contour.sci
scilab/modules/graphics/macros/contour2d.sci
scilab/modules/graphics/tests/nonreg_tests/bug_2175.dia.ref [new file with mode: 0644]
scilab/modules/graphics/tests/nonreg_tests/bug_2175.tst [new file with mode: 0644]

index 2131e60..bc1e6a1 100644 (file)
@@ -86,6 +86,8 @@ function contour(x,y,z,nz,theta,alpha,leg,flag,ebox,zlev)
     
     cnt = cnt+1
     if stripblanks(fpf)<>'' then
+         // don't clip as in contour2d since we are in 3D here
+         // and stringbox gives data in 2D
       xstring(xc(k+1+n/2),yc(k+1+n/2)," "+msprintf(fpf,level))
       e=gce();e.data(3)=zz;e.clip_state = "off"
       cnt=cnt+1
index f7983c7..a0c654c 100644 (file)
@@ -76,6 +76,9 @@ if ( frameflag == 2 | frameflag == 4 | frameflag == 6 | frameflag == 8 )
   end
   // the rect will be taken into account
   frameflag = frameflag - 1 ;
+elseif (~rectSpecified) then
+  // get rect any way for clipping
+  rect = [min(x),min(y),max(x),max(y)];
 end
 
 k=1;n=yc(k); c=0; level = %inf;
@@ -104,9 +107,17 @@ while k < length(xc)
     cnt = cnt+1
 
    if stripblanks(fpf)<>'' then
-      xstring(xc(k+1+n/2),yc(k+1+n/2)," "+msprintf(fpf,level))
-         e = gce();e.clip_state = "off"
-      cnt=cnt+1;
+      labelText = " " + msprintf(fpf,level);
+         labelPos = [xc(k+1+n/2),yc(k+1+n/2)];
+         labelBox = stringbox(labelText, labelPos(1), labelPos(2));
+         // check that the text is not outside the box
+         // better than clipping to avoid half cut strings
+      if labelBox(1,1) > rect(1) & labelBox(2,1) > rect(2) & ...
+         labelBox(1,3) < rect(3) & labelBox(2,3) < rect(4) then
+        xstring(labelPos(1),labelPos(2),labelText)
+               e = gce();e.clip_state = "off";
+        cnt=cnt+1;
+      end
    end
    k=k+n+1;
 end
diff --git a/scilab/modules/graphics/tests/nonreg_tests/bug_2175.dia.ref b/scilab/modules/graphics/tests/nonreg_tests/bug_2175.dia.ref
new file mode 100644 (file)
index 0000000..a26fd5e
--- /dev/null
@@ -0,0 +1,29 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2009-2009 - Digiteo - Jean-Baptiste Silvy
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- TEST WITH GRAPHIC -->
+// <-- Non-regression test for bug 2175-->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=2175
+//
+// <-- Short Description -->
+// "contour2d" prints level numbers partially outside the rect.
+//
+bounds = [1,1,10,10];
+contour2d(1:10,1:10,rand(10,10),5,rect=bounds);
+// check that texts created by contour2d are inside the box
+axes = gca();
+for compIndex = 1:size(axes.children,'*'),
+  compound = axes.children(compIndex);
+  for hdlIndex = 1:size(compound.children,'*')
+    hdl = compound.children(hdlIndex);
+    if (hdl.type == 'Text') then
+         box = stringbox(hdl);
+         if (  box(1,1) < bounds(1) | box(2,1) < bounds(2) | box(1,3) > bounds(3) | box(2,3) > bounds(4)) then bugmes();quit;end
+       end
+  end
+end
diff --git a/scilab/modules/graphics/tests/nonreg_tests/bug_2175.tst b/scilab/modules/graphics/tests/nonreg_tests/bug_2175.tst
new file mode 100644 (file)
index 0000000..499de11
--- /dev/null
@@ -0,0 +1,33 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2009-2009 - Digiteo - Jean-Baptiste Silvy
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- TEST WITH GRAPHIC -->
+
+// <-- Non-regression test for bug 2175-->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=2175
+//
+// <-- Short Description -->
+// "contour2d" prints level numbers partially outside the rect.
+// 
+
+bounds = [1,1,10,10];
+contour2d(1:10,1:10,rand(10,10),5,rect=bounds);
+
+// check that texts created by contour2d are inside the box
+axes = gca();
+for compIndex = 1:size(axes.children,'*'),
+  compound = axes.children(compIndex);
+  for hdlIndex = 1:size(compound.children,'*')
+    hdl = compound.children(hdlIndex);
+    if (hdl.type == 'Text') then
+         box = stringbox(hdl);
+         if (  box(1,1) < bounds(1) | box(2,1) < bounds(2) | box(1,3) > bounds(3) | box(2,3) > bounds(4)) then pause; end
+       end
+  end
+end