文档

图形句柄现在是对象,而不是double

图形句柄是对象句柄

在以前的版本中,图形句柄是类型的数字句柄。从R2014b开始,图形句柄是各种类型的对象句柄,具体取决于图形对象的类。图形对象现在的行为与其他MATLAB类似®对象。

大多数为数字句柄编写的代码仍然适用于对象句柄。例如,您可以访问图形对象属性,并且可以将图形对象组合成数组,即使这些对象属于不同的类。但是,您不应该执行假设或要求图形句柄为数值的操作,例如:

  • 对句柄执行算术运算

  • 直接在逻辑语句中使用句柄,而不转换为逻辑值

  • 在逻辑语句中依赖根对象的数值(0)或数字句柄(整数)

  • 将句柄与数字数组中的数据组合

  • 使用任何依赖于句柄为数字的程序逻辑

  • 将句柄转换为字符向量或在字符向量操作中使用句柄

访问图形对象的属性

有两种方法可以访问具有对象句柄的图形对象的属性:

  • 使用点符号来指代一个特定的对象和属性。使用点表示法时,属性名区分大小写。例如,此代码设置颜色一行的属性“红色”

    H = plot(1:10);h.Color =“红色”

  • 使用得到函数,用于访问对象数组的属性。例如,此代码设置线宽属性用于多行。

    H = plot(rand(4));集(h,“线宽”2);

图形句柄数组

从R2014b开始,使用gobject函数,而不是0函数。Preallocating与0仍然运行没有错误,但可能很慢。

的语法gobject和for的语法一样吗0

H = objects(3,1);% preallocateH(1) =图;H (2) = plot(1:10);H (3) = gca;
您可以将图形句柄组合到数组中,即使这些句柄是不同的类。MATLAB将数组强制转换为一个公共基类。
类(h)
ans = matlab.graphics.Graphics

测试图形句柄的有效性

从R2014b开始,使用isgraphics函数而不是ishghandle

X = 1:10;Y = sin(x);P = plot(x,y);Ax = gca;isgraphics ((p, ax))
Ans = 1 1

通过整数句柄引用数字

从R2014b开始,您可以通过其对象句柄或整数句柄引用图形。整数句柄是new中的值数量图形的性质。

H =图;%对象句柄fignum = h;%整数句柄
整数句柄,fignum,是有效的数字句柄。
isgraphics (fignum)%测试句柄有效性
Ans = 1

删除多个图形对象

从R2014b开始删除函数只接受一个输入参数。要删除多个图形对象,请向函数传递单个句柄数组,而不是使用多个参数。

H1 =注释(“行”);H2 =注释(“椭圆”);H3 =注释“矩形”);删除((h1, h2, h3))

带有图形句柄的逻辑表达式

从R2014b开始,您不能在逻辑表达式中使用图形句柄或依赖MATLAB返回非零值或空双精度[]。使用以下函数isemptyisgraphics,isequal代替。

  • 要确定是否存在现有图形,请使用isempty。新大的命令引用根对象。

    如果~ isempty (get(大的,“CurrentFigure”) disp (“有现成的数据。”其他的disp (没有现成的数据。结束

  • 若要确定是否有带有特定标记的图形对象,请使用isempty

    如果~ isempty (findobj (“标签”“myFigures”) disp (“有些东西有这个标签。”其他的disp (“没有带这个标签的物品。”结束

  • 要确定句柄是否为有效的图形句柄,请使用isgraphics这个物体类型

    如果isgraphics (h,“图”) disp (“这是一个有效的数字句柄。”其他的disp (“这不是一个有效的数字句柄。”结束

  • 要确定句柄是否是根句柄,请使用new大的命令。

    如果isequal (h, groot) disp (“h是根句柄”其他的disp (“h不是根句柄”结束

转换图形句柄的单元格数组

从R2014b开始,您不能使用cell2mat在图形句柄的单元格数组上创建数字数组。而是从单元格数组创建一个对象数组。

P = plot(magic(3));Par = get(p,“父”);Objarray = [par{:}]';谁objarray
名称大小字节数类属性objarray 3x1 128 matlab.graphics.axis.Axes

测试图形处理的平等性

从R2014b开始,使用==isequal

  • 要确定句柄是否引用同一对象,因此是否为同一句柄,请使用==

    P1 = plot(1:10);P2 = p1;P2 == p1
    Ans = 1

  • 要确定句柄是否引用具有相同属性值的同一类的对象,但不一定是同一对象,请使用isequal

    L1 = line;L2 = line;isequal (l1, l2)
    Ans = 1

从cellfun和arrayfun函数返回图形对象

要使用cellfunarrayfun函数返回图形对象,设置UniformOutput

例如:

T = num2str(rand);Fh = @(t) text(1,1,t);= cellfun(fh,{t},“UniformOutput”、假);

保存图形对象

从R2014b开始,如果在mat文件中保存图形对象,使用保存函数,则mat文件包含重新生成对象所需的所有信息。在以前的版本中,保存函数将对象存储为双精度类型,并且在加载mat文件时无法重新生成对象。

避免使用保存函数。使用保存在R2014b或更高版本中保存图形使mat文件在早期版本的MATLAB中无法访问。如果你使用保存若要保存图形,则该功能将显示警告消息。使用savefig函数来代替。

写作mex files

如果编写mex文件或构建引擎应用程序,则mexGetmexSet函数不能在图形对象句柄上工作。使用mxGetPropertymxSetProperty函数在C/ c++或Fortran矩阵库中代替。

这个话题有帮助吗?