将 imline 与 uiaxes 一起使用

Using imline with uiaxes

我正在尝试使用 Matlab 2017b 和 appdesigner 设计一个应用程序。我想使用 imline 函数将可移动的线条附加到图像上。但是,appdesigner 似乎使用了一种新类型的对象,uiaxes,而 imline 函数将只使用对象 axes.

有效的命令示例:

figure; taxes = axes;  imline(taxes, [0 0], [0 1]);

无效命令示例:

figure; tuiaxes = uiaxes;  imline(tuiaxes, [0 0], [0 1]);

问题

是否有将 imline 与 appdesigner 一起使用的解决方法?是否仍然可以使用旧的 axes 对象?有没有其他方法可以使用 appdesigner?

在 GUI 上创建交互式行

要访问 uiaxes 的底层 "old axes object",我们需要做的就是 struct(tuiaxes).Axes。继续 - 我尝试在 R2018b 中玩这个,我有一些好消息和一些坏消息。

  • 好消息是可以通过修改imline函数(<MATLAB>\R2018b\toolbox\images\imuitools\imline.m)函数将imline添加到MATLAB图形中有点。
  • 坏消息是它不会拥有您可能习惯的大部分功能。

以下是最基本的步骤:

  1. 创建 imline.m 的副本,我们将其命名为 ui_imline.m
  2. 注释掉第 260-261 行(与 cmenu 相关)和第 317 行(updateAncestorListeners(...))。
  3. 修改你的代码如下:

    uifigure; tuiaxes = uiaxes; ui_imline(struct(tuiaxes).Axes, [0 0], [0 1]);
    

这将导致:

如果您想要除拖动之外的任何其他功能,您可能必须自己重写 imline 中所有与 uifigure 不兼容的部分,或者等待未知的未来版本为您完成。