我正在使用impoly
来允许用户编辑图形上的多边形。现在,我正在使用pause()
来检测用户何时完成,但我宁愿是双击鼠标(类似于roipoly
所做的那样)。
我不能使用roipoly
,因为它不允许绘制初始多边形,这是必要的。
关于如何获得的任何想法?
答案 0 :(得分:2)
impoly
工具似乎会修改{{3}的WindowButtonDownFcn
,WindowButtonMotionFcn
,WindowButtonUpFcn
,WindowKeyPressFcn
和WindowKeyReleaseFcn
回调}}。我原本以为你无法修改其中的任何一个,因为它们会被impoly
用于其功能的回调函数覆盖。但是,事实证明它们仍然可以正确调用。这为您提供了更多选择:
WindowButtonDownFcn
:要添加检测双击的功能,您必须使用figure window回调。例如:
set(gcf, 'WindowButtonDownFcn', @double_click_fcn);
h = impoly();
% Define this function somewhere (nested, local, etc.):
function double_click_fcn(hSource, ~)
if strcmp(get(hSource, 'SelectionType'), 'open')
% Advance to next frame
end
end
WindowScrollWheelFcn
:每当我创建一个GUI,我必须滚动浏览多个时间点/图表/图像时,我喜欢使用WindowButtonDownFcn
回调来推进(向上滚动)或倒回(向下滚动)数据。您可以使用它在帧之间滚动,显示已经绘制的任何多边形(如果有)或允许用户创建新的多边形。例如:
set(gcf, 'WindowScrollWheelFcn', @scroll_fcn)
h = impoly();
% Define this function somewhere (nested, local, etc.):
function scroll_fcn(~, eventData)
if (eventData.VerticalScrollCount < 0)
% Mouse has been scrolled up; move to next frame
else
% Mouse has been scrolled down; move to previous frame
end
end
WindowKeyPressFcn
你也可以使用WindowScrollWheelFcn
回调来允许你使用键盘按钮来推进帧,比如左右箭头键。例如:
set(gcf, 'WindowKeyPressFcn', @keypress_fcn)
h = impoly();
% Define this function somewhere (nested, local, etc.):
function keypress_fcn(~, eventData)
switch eventData.Key
case 'rightarrow'
% Right arrow pressed; move to next frame
case 'leftarrow'
% Left arrow pressed; move to previous frame
end
end
有关创建所有这些回调的详细信息,请WindowKeyPressFcn
。