2013-01-09 84 views
2

我想连接两个axes.handles,这样当鼠标单击一个时,另一个也会做第一个操作。我有一个外部函数执行我想要做的事情,当点击鼠标时。我只需要更新GUI中的两个句柄,以便在单击一个轴时它将执行相同的操作。在Matlab中连接两个手柄

在主界面

function testminiproj_OpeningFcn(hObject, ~, handles, varargin) 
handles.output = hObject; 
handles.done=0; 
guidata(hObject, handles); 

setappdata(0,'figureHandle',gcf); 

setappdata(gcf,'axesHandle1',handles.axes6); 

setappdata(gcf,'axesHandle2',handles.axes7); 

这是我的外部函数是回调到主界面,通过调用MOUSEMOTION;

function varargout = mousemotion(this,varargin) 

%// get the figure handle from the application main data 
figureHandle = getappdata(0,'figureHandle'); 

%// get the axes handle from the figure data 
axesHandle1 = getappdata(figureHandle,'axesHandle1'); 

%// get the axes handle from the figure data 
axesHandle2 = getappdata(figureHandle,'axesHandle2'); 

global rdata; 
if nargin<1 
    set(gcf,'WindowButtonDownFcn','mousemotion(''down'')'); 
    set(gcf,'WindowButtonUpFcn','mousemotion(''up'')'); 
    set(gcf,'WindowButtonMotionFcn',''); 

感谢任何帮助。我试图把问题放在一边很糟糕。希望有人能帮助。谢谢。

+0

您想写set(axesHandles,...)而不是set(axesHandle1,..)和set(axesHandle2,..)。我对吗? – HebeleHododo

+0

是的。我想链接这两个轴手柄,以便当我对其中一个执行一个动作时,另一个也会跟随。 – user1953847

回答

0

您可以制作一个手柄矢量。像这样:

axesHandles = [axesHandles1; axesHandles2]; 
set(axesHandles, 'PropertyName', PropertyValue); 

这样,两个轴的属性值将被设置为PropertyValue

+0

当我尝试使用时出现此错误:'使用hg.axes/set的错误 'WindowButtonDownFcn'不是类'axes'的实例的可访问属性。' – user1953847

+0

@ user1953847这是因为'WindowButtonDownFcn'是一个[图形属性](http://www.mathworks.com/help/matlab/ref/figure_props.html),而不是[axes属性](http://www.mathworks.com/help/matlab/ref/axes_props。 HTML)。 – HebeleHododo

+0

如果它是一个数字属性,那么我该如何去操纵它。因为我想用axisHandles替换gcf。 – user1953847

0

您需要解决和手动找出哪些轴被点击。

这其实并不难。 只需使用图形和坐标轴的Position属性。

+0

它在handles.axes6中被点击。实际上,哪些轴被点击应该没有关系。当其中一个被点击时,另一个会按照相同的动作,同时对应被点击的轴。我如何使用它? – user1953847