3

在 Matlab 中,如果我要这样做:

lines
lines(1)=plot(1:5,1:5)
lines(2)=plot(1:10,1:10)

线条将被注册为存储线条对象的向量,但是在 App-Designer 中,我做了同样的事情,但它以某种方式将对象解释为双精度而不是线条。在我的属性中,我声明了全局变量行,如下所示:

lines

然后我在与上面相同的单独函数中使用了该属性

app.lines(1)=plot(1:5,1:5)
app.lines(2)=plot(1:10,1:10)

我遇到的问题是将其注册为双精度对象而不是线对象。有人知道为什么吗?如果是这样,是否有任何可能的修复?

4

2 回答 2

2

过去,所有图形句柄都是数字。仅从 R2014b 版本开始,这些都是特殊对象。当他们介绍这些对象时,他们确保旧代码可以继续工作。结果之一是处理图形对象在将它们分配到数字数组时很容易转换为数字。因此,

lines = 0;
lines(1) = plot(1:5,1:5);

将图形对象句柄转换为其等效的数字。

此编号仍可用于访问图形对象。您只需要使用旧的(R2014b 之前的)语法:

set(lines(1),'property',value)
get(lines(1),'property')

为了确保这种转换不会发生,初始化lines为一个空的图形对象数组:

lines = gobjects(0); % empty graphics array object

有关使用该功能的更多方法,请参阅文档。gobjects


转换为数字后,您可以使用以下函数再次获取图形句柄对象handle

lines = handle(lines);
于 2019-06-11T17:01:00.970 回答
0

我想我找到了解决方案:

声明为as graphicslines的属性: appgobjects

properties (Access = private)
    %Declare lines as array of objects of class matlab.graphics.chart.primitive.Line
    %lines matlab.graphics.chart.primitive.Line
    lines = gobjects(0); %Cris Luengo suggestion is better...  
end

您可以通过按“+P”属性按钮添加属性。

App Designer教程代码的相关部分:

classdef tutorialApp < matlab.apps.AppBase

    % Properties that correspond to app components
    properties (Access = public)
        UIFigure              matlab.ui.Figure
        UIAxes                matlab.ui.control.UIAxes
        AmplitudeSliderLabel  matlab.ui.control.Label
        AmplitudeSlider       matlab.ui.control.Slider
    end


    properties (Access = private)
        % lines matlab.graphics.chart.primitive.Line
        lines = gobjects(0); %Cris Luengo suggestion is better...  
    end


    methods (Access = private)

        % Value changed function: AmplitudeSlider
        function AmplitudeSliderValueChanged(app, event)
            value = app.AmplitudeSlider.Value;
            %plot(app.UIAxes, value*peaks)
            app.lines(1) = plot(app.UIAxes, 1:5,1:5);
            app.lines(2) = plot(app.UIAxes, 1:10,1:10);
        end
    end

在命令提示符下显示app.lines(1)(我在行...中放置了一个断点app.lines(2)):

K>> app.lines(1)

ans = 

  Line with properties:

          Color: [0 0.4470 0.7410]
      LineStyle: '-'
      LineWidth: 0.5000
         Marker: 'none'
     MarkerSize: 6
MarkerFaceColor: 'none'
          XData: [1 2 3 4 5]
          YData: [1 2 3 4 5]
          ZData: [1×0 double]
于 2019-06-11T17:06:13.053 回答