以与Ginput相同的方式从Ginputc中获取子地块编号(以更快的Ginput回答)



我正在尝试用文件交换中的函数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工具栏时,会有一个缓慢的setupFcnsetupFcn的作用是禁用工具栏,使其在使用ginput时不会显示。

然而,这个工具栏并不是很烦人,为什么要隐藏它呢?因此,我将ginput复制并重命名为ginput_mine,这样我就可以对其进行如下更改:

  1. 我注释了从第221行(禁用AxesToolbar(到第232行(12行(的代码
  2. 我还评论了restoreFcn中第268行(恢复axestoolbar(的第二位,直到第271行(4行(

这样做的作用是停止ginput以将toolbarVisible设置为关闭(以及在2。恢复工具栏(。这会产生更快的功能。我还注意到它工作得更好,因为它改进了我的点击注册,而没有错过那么多。

我不确定经过调整后,ginput的所有功能是否仍然有效,但我认为是这样。我的工具是一个标记图像的注释界面,我真的很高兴为我的用户提供了更流畅的界面:-(

2021年3月28日更新:根据Cris的评论,我认为我可以通过添加额外的步骤来改进我的解决方案。只有当你不再需要图上的工具栏时,这个额外的步骤才是好的。您所做的是(使用上述解决方案(在轧棉机开始时或启动轧棉机之前添加2行,如图所示:

set(Fig, 'MenuBar', 'none')
set(Fig, 'ToolBar', 'none')

我可能会让它更快。

最新更新