gca()无法生成正确的figure_id

时间:2013-12-03 22:07:31

标签: scilab

我无法通过鼠标点击使用gca()函数让Scilab正确回应我选择的图形窗口。每次我用鼠标点击不同的窗口我想让它通过打印0或1或2作为figure_id来响应,但是这个程序保持打印figure_id = 2.

我使用双击右键退出循环。

我在W7盒子上使用Scilab 5.4.0。请帮我解决我的错误逻辑。

x=[0:0.1:2*%pi];
clf(0);
p0=scf(0);
p0.figure_position=[0,0];
plot(sin(x));
xname("First Plot)");

clf(1);
p1=scf(1);
p1.figure_position=[30,30];
plot(sin(2*x));
xname('Second Plot');

clf(2);
p2=scf(2);
p2.figure_position=[60,60];
plot(sin(3*x));
xname('Third Plot');

while (1) do  //until CTRl-d is hit
  [b,xc,yc]=xclick(); //wait til mouse click
  a=gcf();
  scf(a.figure_id);
  mprintf ('You have clicked on graph %d\n',a.figure_id);   //display graph number
  //code to manipulate selected graph here//
  if (b==12) | (b==-1000) then,  //double right click to escape
    break;
  end;
end;  

mprintf('DONE\n'); 

1 个答案:

答案 0 :(得分:0)

问题

我认为gcf()文档不是很清楚,它可能与gce()具有相同的行为。来自the docs of gce()

  

此例程返回最后创建的(并且仍然存在的)实体的句柄。

解决方案

您可以使用xclick返回的窗口标识(iwin)。

[ibutton,xcoord,yxcoord,iwin,cbmenu]=xclick([flag])

工作示例

如果我像这样更新您的代码,它可以工作:

while (1) do  //until CTRl-d is hit
  [b,xc,yc,iwin]=xclick(); //wait til mouse click
  scf(iwin);
  mprintf ('You have clicked on graph %d\n',iwin);   //display graph number
  //code to manipulate selected graph here//
  if (b==12) | (b==-1000) then,  //double right click to escape
    break;
  end;
end;