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