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