我正在尝试用文件交换中的函数ginputc
替换函数ginput
:来自Jiro的自定义GINPUT。当第一次呼叫时,我发现ginput
启动非常慢。CCD_ 4更快。
我在ginput
中使用的一个功能无法在ginputc
中复制。当鼠标点击它时,我正在获取子地块编号。
此处对ginput
进行了说明:从轧棉中获取子批次编号
但为了更容易,这里有一些简单的代码来复制功能:
figure, hAx_mine(1)=subplot(1, 3, 1); hAx_mine(2)=subplot(1, 3, 2);hAx_mine(3)=subplot(1, 3, 3);
[x, y, button] = ginput(1);
[Lia,Locb]=ismember(gca,hAx_mine);
disp(['Locb gives the subplot number that you have clicked: ' num2str(Locb)])
如果你在ginputc
中尝试同样的操作,无论你点击哪一个子图,它都会给出最后一个子图:
figure, hAx_mine(1)=subplot(1, 3, 1); hAx_mine(2)=subplot(1, 3, 2);hAx_mine(3)=subplot(1, 3, 3);
[x, y, button] = ginputc(1);
[Lia,Locb]=ismember(gca,hAx_mine);
disp(['Locb gives the subplot number that you have clicked: ' num2str(Locb)])
有一个选项可以将斧头作为ginputc
:的额外输出
...
[x, y, button,ax] = ginputc(1);
[Lia,Locb]=ismember(ax,hAx_mine);
...
但这也不起作用。我想ginputc
确实以某种方式改变了gca
,但经过几个小时的尝试,我还没有找到原因和如何修复它。
但是。。。我没有放弃,但我没有对ginputc
进行排序,而是专注于改进ginput
。最初的目标是因为ginput
非常慢,所以为什么不尝试改进它呢?
在该函数中,当它处理新的Matlab工具栏时,会有一个缓慢的setupFcn
。setupFcn
的作用是禁用工具栏,使其在使用ginput
时不会显示。
然而,这个工具栏并不是很烦人,为什么要隐藏它呢?因此,我将ginput
复制并重命名为ginput_mine
,这样我就可以对其进行如下更改:
- 我注释了从第221行(禁用AxesToolbar(到第232行(12行(的代码
- 我还评论了
restoreFcn
中第268行(恢复axestoolbar(的第二位,直到第271行(4行(
这样做的作用是停止ginput
以将toolbarVisible
设置为关闭(以及在2。恢复工具栏(。这会产生更快的功能。我还注意到它工作得更好,因为它改进了我的点击注册,而没有错过那么多。
我不确定经过调整后,ginput
的所有功能是否仍然有效,但我认为是这样。我的工具是一个标记图像的注释界面,我真的很高兴为我的用户提供了更流畅的界面:-(
2021年3月28日更新:根据Cris的评论,我认为我可以通过添加额外的步骤来改进我的解决方案。只有当你不再需要图上的工具栏时,这个额外的步骤才是好的。您所做的是(使用上述解决方案(在轧棉机开始时或启动轧棉机之前添加2行,如图所示:
set(Fig, 'MenuBar', 'none')
set(Fig, 'ToolBar', 'none')
我可能会让它更快。