我正在努力在我的GUI上使用轴,因为它说它没有定义。以下是代码摘要:
function bitirme_OpeningFcn(hObject, eventdata, handles, varargin)
axes(handles.axes1)
imshow('photo1.jpg');
...
function pushbutton1_Callback(hObject, eventdata, handles)
theta=inverseKinematic(...)
...
function [Theta1,Theta2]=inverseKinematic(angle1,angle2,angle3,desCorX,desCorY)
axes(handles.axes1);
....
plot(a,b);
....
在调用函数inverseKinematic之前,一切正常。但是当它被调用时,图像不会变成图形,我在matlab命令窗口看到错误“Undefined variable”处理“或类”handle.axes3“”。为什么我不能在嵌套函数中调用axes(handles.axes1)?它背后的原因是什么?
答案 0 :(得分:0)
每个函数都有自己的工作空间,GUIDE生成的回调共享与所谓的handles structure
相关联的数据。 GUI的每个组件(轴,按钮等)都与它们所在的图形相关联。因此,GUIDE已经提供了回调函数,其中包含句柄结构中存储的所有内容。
但是,嵌套函数不能隐式访问存储在句柄结构中的数据。您需要专门为这些功能提供这些数据。有几个选项可供选择,例如:
1)提供句柄结构作为函数的输入参数。
2)使用getappdata
和setappdata
函数将数据与数字或MATLAB的根相关联
3)手动检索手柄结构""在嵌套函数的最开头,例如:
function [Theta1,Theta2]=inverseKinematic(angle1,angle2,angle3,desCorX,desCorY)
handles = guidata(gcf)
axes(handles.axes1);
....
plot(a,b);
....
%// Save the changes made to the handles structure.
guidata(handles to the figure,handles);
其中gcf
指的是当前数字。您实际上可以使用图形的名称或hObject
。
请注意,使用命令plot
时,您不需要在每次调用之前设置当前轴。您可以使用调用内的Parent
属性绘制图,以选择绘制数据的位置。
示例:
plot(a,b,'Parent',handles.axes1)
我希望这很清楚!