MATLAB - 检测双击鼠标图

时间:2017-11-30 20:48:33

标签: matlab image-processing matlab-figure video-processing figure

我正在使用impoly来允许用户编辑图形上的多边形。现在,我正在使用pause()来检测用户何时完成,但我宁愿是双击鼠标(类似于roipoly所做的那样)。

我不能使用roipoly,因为它不允许绘制初始多边形,这是必要的。

关于如何获得的任何想法?

1 个答案:

答案 0 :(得分:2)

impoly工具似乎会修改{{3}的WindowButtonDownFcnWindowButtonMotionFcnWindowButtonUpFcnWindowKeyPressFcnWindowKeyReleaseFcn回调}}。我原本以为你无法修改其中的任何一个,因为它们会被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