matlab函数getline(图像处理工具箱)通过双击或按返回键或空格键返回折线(之前已使用光标定义)的位置。
由于我的黄油手指和不小心双击,我想删除双击结束的能力。
我需要更改哪些部分,或者我应该注意哪些功能,我无法找到如何在matlab中定义双击。
干杯!
答案 0 :(得分:2)
MATLAB将“回调”函数与图形对象相关联,图形对象定义了单击鼠标,按下按键等时要执行的操作。在getline()
中,要查看的部分是NextButtonDown()
子功能。这是在第一次鼠标按下以启动该行后,与后续鼠标按下相关联的回调。关键是检查SelectionType
数字属性,双击将为open
。在这种情况下,它会关闭数字。因此,要禁用该功能,只需删除额外的案例并检查逻辑。这是我的r2009b版本的差异:
306,310d305
< selectionType = get(GETLINE_FIG, 'SelectionType');
< if (~strcmp(selectionType, 'open'))
< % We don't want to add a point on the second click
< % of a double-click
<
322,328d316
<
< end
<
< if (~strcmp(get(GETLINE_FIG, 'SelectionType'), 'normal'))
< % We're done!
< set(GETLINE_H1, 'UserData', 'Completed');
< end
答案 1 :(得分:1)
@JohnColby提供的答案通过编辑GETLINE.m函数文件解决了您的问题。基本上,您会注释掉检查是否执行了双击的每一行。通过查询'SelectionType'
数字属性获得此信息。
或者,如果您像我一样并且您讨厌对内置函数进行更改,请考虑以下不涉及更改任何现有函数的解决方案。以下是我们如何使用它的示例:
h = addlistener(handle(gcf), 'WindowButtonDownFcn', 'PostSet', @changedWBDFcn);
[x,y] = getline();
delete(h)
plot(x,y, 'Color','r')
我们的想法是创建一个在'WindowButtonDownFcn'
figure属性更改时触发的事件侦听器。我们使用它来插入一个在之前设置的回调函数之前被调用的函数(实际上我们用我们自己的函数替换回调,该函数在最后调用旧函数)。
这允许我们插入一个部分来检查是否通过双击触发了呼叫,并且只是跳过这样的事件。
这必须完成两次,因为GETLINE在第一次点击时首先调用FirstButtonDown
,这会在后续点击时调用NextButtonDown
,因此使用flag
变量来区分两种情况之间。
上述事件监听器函数的代码:
function changedWBDFcn(src,ev,flag)
hFig = ev.AffectedObject; %# figure handle
currFcn = ev.NewValue; %# current callback function
delete(src); %# delete event listener
if nargin < 3, flag = false; end %# determine flag
%# hijack WindowButtonDownFcn function
set(hFig, 'WindowButtonDownFcn',{@wbdFcn,currFcn,flag})
%# callback function
function wbdFcn(o,e,currFcn,flag)
%# skip anything but single-clicks
if ~strcmpi(get(hFig,'SelectionType'),'normal')
return
end
%# evaluate previous callback function
hgfeval(currFcn) %# getline('FirstButtonDown'),getline('NextButtonDown')
%# repeat process after first click
if flag
addlistener(handle(hFig), 'WindowButtonDownFcn', ...
'PostSet', {@changedWBDFcn,true});
end
end
end