Fix test win64b: test_run('graphics', 'contour2d')
[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