Add new headers.
[scilab.git] / scilab / modules / graphics / macros / contour.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA
3 // This file must be used under the terms of the CeCILL.
4 // This source file is licensed as described in the file COPYING, which
5 // you should have received as part of this distribution.  The terms
6 // are also available at    
7 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
8
9 function contour(x,y,z,nz,theta,alpha,leg,flag,ebox,zlev)
10   
11         rhs=argn(2);
12         if rhs == 0 then   // demo
13         
14                 title_demo = [
15                         '';
16                         'Demo of contour()';
17                         '========================================';
18                         ''];
19                 
20                 s_mat=[
21                         'deff(''[z]=Surf1(x,y)'',''z=x^2+y^3'');';
22                         'x=-1:0.1:1; y=x;'
23                         'subplot(211);contour(x,y,Surf1,10);'
24                         'deff(''[z]=Surf2(x,y)'',''z=x^2+y^2'');';
25                         'z=eval3d(Surf2,x,y)'
26                         'subplot(212);plot3d(x,y,z);contour(x,y,z+0.1,10,flag=[0 2 4]);'];
27                 
28                 write(%io(2),title_demo);
29                 write(%io(2),s_mat);
30                 write(%io(2),' ');
31                 execstr(s_mat);
32                 return
33         end
34
35   
36   if rhs<4, error('contour requires at least 4 arguments'),end;
37   levels=[]
38
39   opts=[]
40   if exists('theta','local')==1 then opts=[opts,'theta=theta'],end
41   if exists('alpha','local')==1 then opts=[opts,'alpha=alpha'],end
42   if exists('leg'  ,'local')==1 then opts=[opts,'leg=leg']    ,end
43   if exists('ebox' ,'local')==1 then opts=[opts,'ebox=ebox']  ,end
44   if exists('flag' ,'local')==0 then flag=[2 2 3], end
45   if exists('zlev' ,'local')==0 then zlev=0  ,end
46   
47   if or(type(z)==[11 13]) then 
48     fun=z;clear z //to avoid redfinition warning
49     if type(fun)==11 then comp(fun),end
50     z=feval(x,y,fun)
51   end
52   
53   job=flag(1)
54   if rhs==4|job==2 then  
55     contour2d(x,y,z,nz);
56     return,
57   end
58   
59   if  get('figure_style')=='old' then 
60     opts=strcat([opts,"flag=flag"],',')
61     execstr('oldcontour(x,y,z,nz,'+opts+')')
62     return,
63   end
64     
65   if size(nz,'*')==1 then
66     style=1:nz,
67   else
68     style=1:size(nz,'*')
69   end
70   
71   opts=strcat([opts,'flag=flag(2:3)'],',');
72
73   [xc,yc]=contour2di(x,y,z,nz);
74
75
76   fig=gcf();
77   autoc=fig.auto_clear;
78   if autoc=="on" then, xbasc(),end
79   a=gca();
80   fg=a.foreground
81   v=fig.immediate_drawing;
82   fig.immediate_drawing="off"
83   fig.auto_clear="off"
84   cnt=0
85
86   fpf=xget("fpf");if fpf=='' then fpf='%.2g',end
87   k=1;n=yc(k); c=0; level = %inf;
88   while k < length(xc)
89     n = yc(k)
90     if xc(k) ~= level then 
91       c = c+1; level = xc(k),levels=[level levels];
92       a.foreground=c;
93       if cnt>0 then glue(a.children(1:cnt)),cnt=0,end
94     end
95     
96     if job==1 then zz=zlev,else zz=level,end
97     execstr('param3d(xc(k+(1:n)),yc(k+(1:n)),zz*ones(1,n),'+opts+')')
98     
99     cnt = cnt+1
100     if stripblanks(fpf)<>'' then
101       xstring(xc(k+1+n/2),yc(k+1+n/2)," "+msprintf(fpf,level))
102       e=gce();e.data(3)=zz
103       cnt=cnt+1
104     end
105     k=k+n+1;
106   end
107   if cnt>0 then glue(a.children(1:cnt)),cnt=0,end
108   set('current_obj',a);
109   a.foreground=fg
110   if flag(3) == 0 then
111     a.axes_visible='off';
112     a.box='off';
113   elseif flag(3) == 1 then
114     a.axes_visible='off';
115     a.box='off';
116   elseif flag(3) == 2 then
117     a.axes_visible='off';
118     a.box='back_half';
119   elseif flag(3)==3 then
120     a.axes_visible='off';
121     a.box='on';
122    elseif flag(3)>=4 then
123     a.axes_visible='on';
124     a.box='on';
125   end
126   fig.immediate_drawing=v;
127   fig.auto_clear=autoc;
128 endfunction
129