4648487d9a0f5247f332fce424f6a151418dcf4d
[scilab.git] / scilab / modules / graphics / tests / nonreg_tests / bug_2935.dia.ref
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2008-2008 - INRIA - Jean-Baptiste Silvy
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7 // <-- TEST WITH GRAPHIC -->
8 // <-- Non-regression test for bug 2935 -->
9 //
10 // <-- Bugzilla URL -->
11 // http://bugzilla.scilab.org/show_bug.cgi?id=2935
12 //
13 // <-- Short Description -->
14 // In the "Bezier surface test 2" demo, an axis is displayed, it should not.
15 function [z]=dup(x,n)
16 // utility
17 // x is a vector this function returns [x,x,x,x...] or [x;x;x;x;..]
18 // depending on x
19   [nr,nc]=size(x)
20   if nr==1 then
21     y=ones(n,1);
22     z= x.*.y ;
23   else
24     if nc<>1 then
25       error("dup : x must be a vector");
26     else
27       y=ones(1,n);
28       z= x.*.y ;
29     end
30   end
31 endfunction
32 function [X,Y,Z]=beziersurface (x,y,z,n)
33 // Compute a Bezier surface. Return {bx,by,bz}.
34   [lhs,rhs]=argn(0);
35   if rhs <= 3 ; n=20;end
36   t=linspace(0,1,n);
37   n=size(x,'r')-1; // i=nonzeros(t~=1);
38   t1=(1-t); t1z= find(t1==0.0); t1(t1z)= ones(t1z);
39   T=dup(t./t1,n)';
40   b1=[((1-t')^n),(T.*dup((n-(1:n)+1)./(1:n),size(t,'c')))];
41   b1=cumprod(b1,'c');
42   if (size(t1z,'c')>0);
43     b1(t1z,:)= dup([ 0*ones(1,n),1],size(t1z,'c'));
44   end
45   n=size(x,'c')-1; // i=nonzeros(t~=1);
46   t1=(1-t); t1z= find(t1==0.0); t1(t1z)= ones(t1z);
47   T=dup(t./t1,n)';
48   b2=[((1-t')^n),(T.*dup((n-(1:n)+1)./(1:n),size(t,'c')))];
49   b2=cumprod(b2,'c');
50   if (size(t1z,'c')>0);
51     b2(t1z,:)= dup([ 0*ones(1,n),1],size(t1z,'c'));
52   end
53   X=b1*x*b2';Y=b1*y*b2';Z=b1*z*b2';
54 endfunction
55 function c1test
56         
57         // first surface'
58         x1=dup(-0.5:0.25:0.5,5);
59         y1=dup([0,0,0,0,1],5);
60         z1=dup(2:0.25:3,5)';
61         [xb1,yb1,zb1]=beziersurface(x1,y1,z1,10);
62         
63         // second surface
64         x2=dup(-0.5:0.25:0.5,5);
65         y2=[(ones(4,5));[0,0,0,0,0]];
66         z2=-dup(-1:0.25:0,5)';
67         [xb2,yb2,zb2]=beziersurface(x2,y2,z2,10);
68         
69         // a surface to link the two previous ones'
70         x=zeros(5,5); y=x; z=x;
71         x(1,:)=x1(1,:); x(2,:)=x(1,:)-(x1(2,:)-x1(1,:));
72         x(5,:)=x2(1,:); x(4,:)=x(5,:)-(x2(2,:)-x2(1,:));
73         x(3,:)=(x(4,:)+x(2,:))/2;
74         y(1,:)=y1(1,:); y(2,:)=y(1,:)-(y1(2,:)-y1(1,:));
75         y(5,:)=y2(1,:); y(4,:)=y(5,:)-(y2(2,:)-y2(1,:));
76         y(3,:)=(y(4,:)+y(2,:))/2;
77         z(1,:)=z1(1,:); z(2,:)=z(1,:)-(z1(2,:)-z1(1,:));
78         z(5,:)=z2(1,:); z(4,:)=z(5,:)-(z2(2,:)-z2(1,:));
79         z(3,:)=(z(4,:)+z(2,:))/2;
80         A=35,T=50,L=" ",EB=[4,2,0];
81         [xb,yb,zb]=beziersurface(x,y,z,10);
82         //drawing
83         my_handle = scf(100001);
84         clf(my_handle,"reset");
85         my_current_axis = gca();
86         drawlater();
87         subplot(2,1,1);
88         title("how two bezier surfaces can be joined","fontsize",3);
89         subplot(2,2,1);
90         plot3d2(xb1,yb1,zb1,-1,A,T,L,EB);
91         subplot(2,2,3);
92         plot3d2(xb2,yb2,zb2,-1,A,T,L,EB);
93         subplot(1,2,2);
94         [n1,p1]=size(xb1);
95         [n2,p2]=size(xb);
96         plot3d2([xb1;xb;xb2],[yb1;yb;yb2],[zb1;zb;zb2],-1,A,T,L,EB);
97         delete(my_current_axis);
98         drawnow();
99         
100 endfunction
101 c1test();
102 // there should be 3 subplots and not 4
103 fig = gcf();
104 if (size(fig.children) <> [3,1]) then bugmes();quit;end
105 clear c1test;
106 clear beziersurface;
107 clear dup;