15.3.2图形对象

上面解释了图形对象的层次结构体。详见图形结构体导论这里描述了特定的对象,并讨论了这些对象中包含的属性。请记住,图形对象总是从句柄.

层次结构体的顶层和所有地物对象的父对象。使用groot以获得根图形对象的句柄。

图形

一个数字窗口。

一组轴。此对象是图形对象的子对象,可以是线、文本、图像、补丁、曲面或灯光对象的任意一个。

线

二维或三维的线。

文本

文本注释。

形象

位图图像。

色斑

填充多边形,目前仅限于二维。

表面

三维曲面。

用于补丁和曲面上的照明效果的灯光对象。

15.3.2.1创建图形对象

您可以通过调用与对象同名的函数来创建任何图形对象基元;换句话说,图形, axes,线, 文本, 形象, 色斑, 表面函数。这些基本图形对象自动成为当前轴对象的机器,就好像等等已经到位。另外,轴将自动成为当前图形对象的子对象,图形将成为根对象的子节点。

如果不需要此自动加入函数,则重要的是要调用newplot首先准备一个新的图形和轴进行绘制。或者,更简单的方法是调用高级图形子程序,该子程序将创建绘图,然后用低级图形对象填充绘图。而不是调用线使用plot。或者使用冲浪而不是表面。或者使用填满fill3而不是色斑.

 
: axes ()
: axes (property, value, …)
: axes (hpar, property, value, …)
: axes (hax)
: h = axes (…)

创建一个笛卡尔轴对象并返回其控制柄,或者将当前轴设置为hax.

在没有任何参数的情况下调用,或使用属性/value对,构建一个新的轴。可选参数hpar是为新轴指定父轴的图形句柄,可以是图形、uipanel或itab。

使用单轴句柄参数调用hax,函数使hax当前轴(从返回gca). 它还制作了包含hax当前数字(从返回gcf). 最后,它重新装载父对象的儿童属性,以便轴hax显示在列表中所有其他轴句柄之前。这导致hax以显示在任何其他轴对象的顶部(Z顺序堆叠)。此外,它还重新设置与关联的任何图例或颜色对象hax从而它们也是可见的。

编程说明:属性的完整列表记录在轴属性.

详见: gca, set, get.

 
: line ()
: line (x, y)
: line (x, y, z)
: line ("xdata", x, "ydata", y)
: line ("xdata", x, "ydata", y, "zdata", z)
: line (…, property, value)
: line (hax, …)
: h = line (…)

从创建线对象xy(而且可能z)并将其插入当前轴中。

在标准调用形式中,数据x, yz可以是标量、向量或矩阵。在矩阵输入的情况下,线将尝试定向标量和向量,以便绘制结果。这需要向量的一个维度与矩阵的行数或列数相匹配。

在按名称指定数据的低级调用形式(性能提高50%)中(行(“xdata”,x, …))数据必须是伪造的。如果未指定数据(线然后x== y= [0, 1].

可以为行对象指定多个属性值对,但它们必须成对出现。

如果仅使用调用属性/value对,则任何未指定的属性都使用根对象上指定的默认值。

如果第一个参数hax是一个轴句柄,然后绘制到此轴,而不是返回的当前轴gca.

可选返回值h是创建的线对象的图形句柄(或句柄向量)。

编程说明:属性的完整列表记录在线属性.

函数线不同于plot在该行中,对象插入到当前轴,而无需首先清除绘图。

详见: 形象, 色斑, 长方形, 表面, 文本.

 
: patch ()
: patch (x, y, c)
: patch (x, y, z, c)
: patch ("Faces", faces, "Vertices", verts, …)
: patch (…, "prop", val, …)
: patch (…, propstruct, …)
: patch (hax, …)
: h = patch (…)

在当前轴中创建具有顶点的补丁对象(x, y)和彩色c.

如果顶点是大小为MxN的矩阵,则每个多边形patchhas M个顶点,并且将创建总共N个多边形。如果某些多边形没有M个顶点,则使用NaN表示“无顶点”。如果z输入存在,则将创建3D补丁。

颜色参数c可以采取多种形式。为了创建所有共享单一颜色的多边形,使用字符串值(例如。,rforred),一个标量值,按caxis并索引到当前颜色图或具有精确TrueColor的3元素RGB向量中。

如果c是长度为N的向量,则第i个多边形将具有通过缩放条目确定的颜色c(i) 根据caxis并将其分解为当前颜色图。更复杂的着色情况需要直接操作补丁属性/值对。

不是通过矩阵指定多边形xy,可以呈现一个唯一的顶点列表,然后呈现从这些顶点创建的多边形面列表。在这种情况下顶点矩阵将是Nx2(2-D补丁)或Nx3(3-D补丁)。MxN面孔matrix描述了具有N个顶点的M个多边形——每行描述一个多边形,每列条目都是顶点矩阵来识别顶点。可以通过直接传递属性/值对来创建补丁对象顶点/verts, 面孔/面孔愚蠢。

任何属性都可以通过传递aststructure来设置,而不是使用属性/值对propstruct具有相应的字段名称。

如果第一个参数hax是一个轴句柄,然后绘制到此轴,而不是返回的当前轴gca.

可选返回值h是创建的补丁对象的图形句柄。

编程说明:

  1. 完整的属性清单记录在补丁属性。有用的补丁属性包括:cdata, 边缘颜色,面部颜色, 面孔, 顶点facevertexcdata.
  2. 指定补丁几何图形的属性(xdata, ydata,zdata, 面孔, 顶点)应在其他属性之前指定,以避免意外的绘图输出或错误。
  3. 混合定义几何体的x-y-z和面顶点形式可能会返回意外的几何体结果。
  4. 使用可能会返回意外的补丁颜色结果cdata具有面顶点定义的几何体的颜色定义或facecentercdata具有x-y-z定义的几何体的颜色定义。

详见: 填满, get, set.

 
: surface (x, y, z, c)
: surface (x, y, z)
: surface (z, c)
: surface (z)
: surface (…, prop, val, …)
: surface (hax, …)
: h = surface (…)

在给定矩阵的情况下创建曲面图形对象xy从…起网格和一个值矩阵z对应于xy曲面的坐标。

如果xy是向量,则典型的顶点是(xjy(i) ,z(i,j))。因此,的列z对应不同x的值和行z对应不同y价值观如果只有单个输入z则给出x是的1:列(z)y1:行(z).

任何属性/值输入对都将指定给曲面对象。

如果第一个参数hax是一个轴句柄,然后绘制到此轴,而不是返回的当前轴gca.

可选返回值h是createdsurface对象的图形句柄。

编程说明:属性的完整列表记录在表面属性.

详见: 冲浪, 网格, 色斑, 线.

 
: light ()
: light (…, "prop", val, …)
: light (hax, …)
: h = light (…)

在当前轴或为轴创建灯光对象hax.

当灯光对象存在于轴对象中时,以及属性EdgeLightingFaceLighting色斑表面对象的值设置为没有一个,这些对象是用灯光效果绘制的。Lightingproperties支持的值为没有一个(没有照明效果),平的(物体的外观),以及gourud(顶点之间照明效果的线性插值)。如果照明模式设置为平的这个FaceNormals属性用于照明。对于gourud这个顶点法线属性。

每个轴最多支持八个灯光对象。(取决于实施)

照明仅支持OpenGL图形工具包(即。,fltkqt).

灯光对象具有以下属性,这些属性会更改绘图的外观。

颜色光的颜色可以作为

RGB向量(例如。,[1 0 0]对于红色)或作为字符串(例如。,r红色)。默认颜色为白色([1 1 1]).

位置光作为

1x3向量。默认方向为[1 0 1].

风格此字符串定义光是否从

无限远处的光源(极大的)或来自本地点源(地方的). 默认为极大的.

如果第一个参数hax是一个轴控制柄,然后将灯光对象添加到此轴,而不是从返回的当前轴gca.

可选返回值h是创建的灯光对象的图形句柄。

编程说明:属性的完整列表记录在灯光源属性.

详见: 照明, 布料, 色斑, 表面.

15.3.2.2句柄函数

要确定变量是图形对象索引,还是轴或图形的索引,请使用以下函数伊什甘德尔, isgraphics,isaxisfigure.

 
: tf = ishghandle (h)

如果返回trueh是图形句柄,否则为false。

h也可以是句柄的矩阵,在这种情况下,返回的逻辑数组为true,其中的元素为h是图形句柄,不是的地方是false。

详见: isgraphics, isax, isfigure, ishandle.

 
: tf = isgraphics (h)
: tf = isgraphics (h, type)

如果返回trueh是图形句柄(类型为type)和虚假的。

当否type指定的函数等效于伊什甘德尔.

详见: 伊什甘德尔, ishandle, isax, isfigure.

 
: tf = ishandle (h)

如果返回trueh是图形或Java对象的句柄,否则为false。

h也可以是句柄的矩阵,在这种情况下,返回的逻辑数组为true,其中的元素为h是图形或Java对象的句柄,如果不是,则为false。

编程注意事项:测试特定的对象类型通常更有用。要确定控制柄是否属于图形对象,请使用伊什甘德尔isgraphics。要确定句柄是否属于Java对象,请使用isjava.

详见: 伊什甘德尔, isgraphics, isjava.

 
: tf = isaxes (h)

如果返回trueh是轴图形句柄,否则为false。

如果h是一个矩阵,然后返回一个逻辑数组,该数组为true,其中的元素为h是轴图形句柄,不在的地方为false。

详见: isfigure, 伊什甘德尔, isgraphics.

 
: tf = isfigure (h)

如果返回trueh是图形句柄,否则为false。

如果h是一个矩阵,然后返回一个逻辑数组,该数组为true,其中的元素为h是图形句柄,在没有句柄的地方为false。

详见: isax, 伊什甘德尔, isgraphics.

函数gcf返回当前地物对象的索引,如果不存在则创建索引。类似地,gca返回当前轴对象,或创建一个(及其父地物对象)(如果不存在)。

 
: h = groot ()

将控制柄返回到根图形对象。

根图形对象是所有图形对象的最终父对象。

此外,根对象还包含有关图形系统整体的信息,例如屏幕size使用得到(groot)以了解可用的信息。

图形系统作为一个整体的默认值从根图形对象的设置属性指定,以开头默认。例如,要将所有文本对象的默认字体设置为FreeSans,请使用

set(groot,“DefaultTextFontName”,“FreeSans”)

可以使用删除默认属性set具有的specialproperty值去除。要撤消上面的默认字体赋值,请使用

set(groot,“DefaultTextFontName”,“remove”)

编程说明:根图形对象从specialhandle值0标识。在某个时刻,这个唯一的值可能会发生变化,但代码可以通过使用groot保证始终返回根图形对象。

详见: gcf, gca, get, set.

 
: h = gcf ()

将句柄返回到当前图形。

当前图形是图形输出的默认目标。如果存在多个数字,gcf返回最后一个创建的图形或用鼠标单击的最后一个图形。

如果当前地物不存在,请创建一个地物并返回其句柄。然后可以使用句柄来检查或设置图形的属性。例如,

fplot(@sin,[-10,10]);图=gcf();set(图,“numbertitle”,“off”,“name”,“sin-plot”)

绘制一个正弦波,找到当前图形的句柄,然后重命名图形窗口以描述内容。

注意:如果当前地物不存在,则要查找当前地物而不创建新地物,请查询CurrentFigure根图形对象的属性。

get(groot,“currentfigure”);

详见: gca, gco, gcbf, gcbo, get, set.

 
: h = gca ()

将控制柄返回到当前轴对象。

当前轴是图形输出的默认目标。在具有多个轴的图形的情况下,gca返回最后创建的轴或用鼠标单击的最后一个轴。

如果不存在当前轴对象,请创建一个并返回其控制柄。然后可以使用句柄来检查或设置轴的属性。例如,

ax=gca();set(ax,“位置”,[0.5,0.5,0.5,0.5]);

创建一个空轴对象,然后在图形窗口中更改其位置和大小。

注意:若要查找当前轴而不创建新的轴对象(如果该对象不存在),请查询CurrentAxes图形的属性。

get(gcf,“currentaxes”);

详见: gcf, gco, gcbf, gcbo, get, set.

 
: h = gco ()
: h = gco (hfig)

将句柄返回到当前地物的当前对象,或将句柄返回至具有句柄的地物的当前目标hfig.

图形的当前对象是上次单击的对象。它存储在CurrentObject属性。

如果上次鼠标单击没有发生在地物的任何子对象上,则当前对象就是地物本身。

如果目标图形中没有发生鼠标单击,此函数将返回一个空矩阵。

编程注意事项:此函数返回的值不一定与返回的值相同gcbo在回调执行期间。执行回调可能会被另一个回调中断,并且当前对象可能会更改。

详见: gcbo, gca, gcf, gcbf, get, set.

这个getset函数可以用于检查和设置图形对象的属性。例如

得到(groot)⇒ ans={type=root currentfigure=[](0x0)children=[](x0)visible=on…}

返回一个包含根图形对象所有属性的结构体。与Octave中的所有函数一样,结构体是按值返回的,因此修改它不会修改内部根对象。要做到这一点,您必须使用set作用此外,请注意,在这种情况下当前数字属性为空,表示没有当前图形窗口。

这个get函数也可以用于查找单个属性的值。例如

get(gca(),“xlim”)⇒ [ 0 1 ]

返回当前图形中当前轴对象的x轴范围。

要设置图形对象属性,请使用set函数。例如

集合(gca(),“xlim”,[-10,10]);

将当前图形中当前轴对象的x轴范围设置为[-10, 10]’.

如果set函数在没有值参数的情况下被调用。当只给定一个参数(图形)时,将返回一个具有给定对象类型的所有属性的默认值的结构体。例如

集合(gca())

返回一个结构体,该结构体包含轴对象的默认属性值。如果set使用两个参数(一个图形句柄和一个propertyname)调用,则只返回所指定属性的默认值。

 
: val = get (h)
: val = get (h, p)

返回命名属性的值</p>从图形句柄h.

如果</p>如果忽略,则返回的完整属性列表h.

如果h是一个向量,返回一个分别包含属性值orlist的元胞数组。

详见: set.

 
: set (h, property, value, …)
: set (h, {properties}, {values})
: set (h, pv)
: value_list = set (h, property)
: all_value_list = set (h)

为图形句柄(或图形句柄的向量)设置命名属性值h.

提供属性名称和值的方法有三种:

  • 作为逗号分隔的列表属性, value

    每个属性是一个包含属性名称的字符串,每个value是属性的适当类型的值。当中有多个句柄时h,每个都赋值了相同的value例如

    h=绘图([0,1]);set(h,'color','green');
  • 作为字符串的元胞数组属性包含属性名称和元胞数组value包含属性值。

    在这种情况下,的列数value必须与中的元素数量相匹配属性。的第一列value中第一个条目的containsvalues属性,等等的行数value必须为1或与的元素数匹配h。在第一种情况下,中的每个句柄h将被赋值相同的值。在第二种情况下,中的第一个句柄h将被赋值的第一行中的值value等等。例如:

    h=绘图([0,1;1,0]);集合(h,{‘color’},{’green’;‘red’});
  • 作为一个结构体pv

    这与第一种情况相同,其中的字段名pv表示属性名称,字段值提供属性值。与第一种情况一样,只能为一个属性设置一个值,该值将应用于中的所有句柄h例如

    h=绘图([0,1]);props.color='绿色';布景(h,道具);

用于设置属性的三种语法可以任意组合出现。

set还用于查询命名属性将采用的值列表。clist设置h属性将返回的可能值列表属性在数组列表中clist。如果没有使用输出变量,则会格式化列表并将其打印到屏幕上。

如果未指定属性(slist设置h))然后是aststructureslist返回,其中字段名是对象的属性h字段是每个属性的可能值的列表。如果没有使用输出变量,则会格式化列表并将其打印到屏幕上。

查询属性时,仅使用单个图形句柄h对于单个图形对象是允许的。

示例查询

hf=数字();设置(hf,“纸张方向”)⇒  [横向|{纵向}]

显示了paperorientation属性可以采用两个值,defaultbeing肖像.

详见: get.

 
: parent = ancestor (h, type)
: parent = ancestor (h, type, "toplevel")

返回句柄对象的第一个祖先h其类型匹配type这里的type是一个字符串。

如果type是字符串的元胞数组,返回etype与任何给定类型字符串匹配的第一个父字符串。

如果句柄对象h本身就是类型typereturnh.

如果顶层作为第三个参数给出,返回对象层次结构体中与条件匹配的最高父级,而不是第一个(最近的)父级。

详见: findobj, findall, allchild.

 
: h = allchild (handles)

查找图形对象的所有子对象,包括隐藏的子对象。

此函数类似于get(h,“儿童”),但也返回隐藏的对象(HandleVisibility=).

如果句柄是标量,h将是一个向量。否则h将是与相同大小的数组矩阵句柄每个数组将包含一个句柄向量。

详见: findall, findobj, get, set.

 
: findfigs ()

找到当前不在屏幕上的所有可见图形,然后将其移到屏幕上。

详见: allchild, 图形, get, set.

图形可以用多种图形格式打印或保存打印另存为。但是,有时直接保存原始Octave句柄图形可能会很有用,以便进行进一步的修改,例如修改标题或图例。

这可以通过以下函数实现:

fig_struct=hdl2struct(gcf);保存myplot.fig-struct fig_struct;。。。fig_struct=加载(“myplot.fig”);struct2hdl(图struct);
 
: s = hdl2struct (h)

返回一个结构体,s,其字段描述与句柄相关联的对象及其子对象的属性,h.

结构体的字段s类型, 句柄,属性, 儿童特殊的.

详见: 结构体2hdl, hgsave, findobj.

 
: h = struct2hdl (s)
: h = struct2hdl (s, p)
: h = struct2hdl (s, p, hilev)

构造图形句柄对象h从结构体s.

结构体必须包含字段句柄, 类型,儿童, 属性特殊的.

如果指定了现有图形或轴的句柄,</p>,新对象将被创建为该对象的子对象。如果没有提供父句柄,则将使用根对象的默认值构造新图形和必要的子对象。

第三个布尔参数希列夫可以传递以指定函数是否应保留监听器/回调,例如图例或hggroup。默认值为false。

详见: hdl2结构体, hgload, findobj.

 
: hnew = copyobj (horig)
: hnew = copyobj (horig, hparent)

构造与控制柄关联的图形对象的副本horig并返回新句柄hnew到新对象。

如果父句柄hparent(根、图形、轴或hggroup),则复制的对象将创建为的子对象hparent.

如果horig是句柄的向量,并且hparent是标量,则向量中的每个句柄hnew有它的父级对象亲属性设置为hparent相反,如果horig是标量,并且hparent一个向量,则每个父对象将接收的副本horig如果horighparent都是元素数量相同的向量,那么hnew(i)将有父级hparent(i).

详见: 结构体2hdl, hdl2结构体, findobj.


版权所有 © 2024 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号