第 4章 Matlab的图形功能七、图形对象的有关概念图形用户界面 ( Graphic User Interface) 是指包含图形对象的用户界面,是 MATLAB句柄图形 系统的子系统。它包含两类图形对象:一是用户界面 控件对象 ( Uicontrol) ;
一是用户界面 菜单对象 ( Uimenu) 。
1.句柄图形
句柄图形 ( Handle Graphics) 是 一 种 面 向 对 象
( Object-Oriented) 的 绘图系统概念,它提供了创建计算机图形所必须的各种软件,所支持的指令可以直接创建 线,
文字,面以及图形用户界面 。
句柄图形基于这样的概念:一幅图的每一个组成部分都是一个 对象 ( Object),每一个对象有 一系列句柄
( Handle) 和它相关 。
2.图形对象和句柄图形的结构层次
图形对象 包括图形窗口或者图形,还有坐标系,线条,
曲面,文本等 。 这些对象按 父对象和子对象 组成
MATLAB 图形体系的层次结构 。
每个图形对象 都由若干可以被独立操作的对象构成,它不必包含全部对象,但是必须具备 根屏幕 ( Root) 和 图形窗 ( Figure) 。
每个父对象可以 包含一个或多个子对象 。 除了控件对象
( Uicontrol) 和 菜单对象 ( Uimenu) 外,所有的对象都是 坐标轴 的子对象,并且在这些坐标轴上显示 。 所有创建对象的函数当父对象不存在时,都会创建它们 。
第 4章 Matlab的图形功能第 4章 Matlab的图形功能句柄图形体系的对象层次结构图第 4章 Matlab的图形功能
3.对象句柄
句柄( Handle) 是分配给每一个 对象的数字标识 (
Identifier),每创建一个对象时,就为它建立一个惟一的句柄。 句柄是存取图形对象的惟一规范识别符,不同对象的句柄不可能重复和混淆。
每台计算机的根对象是 根屏幕 ( Root),其 句柄 总是数字 0;而 图形窗口 ( Figure ) 的 句柄 总是 正整数,用它来标识图形窗的序号 。 除根对象和图对象外,其余对象的句柄 则是 双精度浮点数 。
除了 根对象 外,所有的对象都由与之相对应的 内置函数
( Build-in Function) 创建,每个函数在创建对象的同时,还可以返回该 对象的句柄 h。
第 4章 Matlab的图形功能创建图形对象的底层函数第 4章 Matlab的图形功能获取图形对象句柄的函数有一些函数可以用来 获取对象的句柄 。
第 4章 Matlab的图形功能
4,图形对象的操作在获取图形句柄后,即可对 图形对象进行各种操作 。
a,删除图形对象的 delete 命令调用格式为:
delete(h)
该命令可以删除句柄 h 所指的 对象及其所有的子对象 。
例如 delete(gca)将删除当前轴和它所有的子对象 。
由于该命令不提供确认,直接执行,用户在使用时应 谨慎进行 。
第 4章 Matlab的图形功能
b,函数 findobj
快速地 遍历 对象层,并 获取 指定属性的 对象句柄 。
调用方式如下:
h=findobj(’propertyname’,propertyvalue,… ),在所有的对象层中查找符合指定属性值的对象,返回句柄值 h;
h=findobj(ObjectHandle,'propertyname',propertyvalue,… ),查找范围限制在句柄,ObjectHandle”指定的对象及其子对象中;
h=findobj(ObjectHandles,'flat','propertyname',propertyvalue,… ):
把查找的范围限制在句柄,ObjectHandle”指定的对象中,但不包括其子对象;
h=findobj,返回根对象和所有子对象的句柄值;
h=findobj(ObjectHandles),返回,ObjectHandle”指定的对象和其所有子对象的句柄值 。
第 4章 Matlab的图形功能创建一个图形对象,并寻求图形对象的句柄值。
mesh(peaks(30)); %创建山峰的网格图
text(30,20,2,'\leftarrowpeak') %给图形对象加上文本,图形对象中包括坐标轴,线条和文本标注
h=findobj(gcf) %求当前图形窗口的句柄
h= %返回句柄值赋予变量
1.0000
99.0010
101.0006
100.0016
句柄中的元素排列顺序决定于各个对象在整个对象 层次结构 中的位置。
h(1)=1 为 图形对象( Figure) 的句柄;
h(2)=99.001 为图的下一级子对象 坐标轴 的句柄;
h(3)=101.0006 为坐标轴的下一级子对象 线条 的句柄;
h(4)=100.0016 为坐标轴的下一级子对象 文本 的句柄。
第 4章 Matlab的图形功能
c,函数 copyobj
把对象 从一个父对象中复制到另一个父对象中 。若 复制的对象中含有子对象,则把所有的子对象一并复制。
调用格式如下:
C=copyobj(H,P),H 和 P 都是向量,H 和 P 的长度必须相等,向量的 元素 为对象的 句柄 。 H 中的句柄 对应的图形对象 都被复制到 P 中 相应句柄的图形 元素之下,分别成为这些父对象的子对象 。 新对象的句柄将赋值给 向量 C 中的相应元素;
C=copyobj(H,p),H 是向量,p 是标量 。 H 中的 每一个句柄 对应的图形对象都将被复制到 句柄 p 的图形对象之下,成为这个 父对象 p的子对象 。 新子对象的句柄将赋给 向量 C 中的相应元素;
C=copyobj(h,P),h 是标量,P 是向量。 句柄 h 的图形对象将被复制到向量 P 中的 每个句柄 对应的图形对象之下,分别成为这些父对象的子对象。新子对象的句柄将赋给 向量 C 中的对应元素。
第 4章 Matlab的图形功能函数 copyobj 的用法。
mesh(peaks(30));
text(30,20,2,'\leftarrowpeak');
hh=findobj(gcf)
在上述程序之后加入如下内容:
h=findobj('string','\leftarrowpeak') %将文字对象的句柄值返回给变量 h
figure %重新建立一个图形对象
mesh(peaks(20)); %在 20*20的区域创建图形内容使用 copyobj命令进行对象的复制,在上述程序后加上如下内容:
ha=copyobj(h,gca) %将 文本对象 ( h 句柄所指的对象 ) 复制到 新 区域 图形中
hh = %程序输出结果
1.0000
99.0013
101.0011
100.0038
h =
101.0011
ha =
200.0004
第 4章 Matlab的图形功能
5.图形对象属性的获取及其设置
所有的对象都有 属性 ( Property),对象的属性可包括诸如对象的 位置,颜色,类型,父对象,子对象及其他内容 。 可通过设定这些属性来定义和修改对象的特征 。
对象属性包括 属性名 ( 字符串,识别属性时不分大小写 )
和相应的 属性值 。
涉及到各 对象属性的文件和查阅 方法
阅读或者打印以下 PDF文件:
help\pdf_doc\matlab\graphg.pdf; help\pdf_doc\matlab\ref\refbook2.pdf
用 命令 help 查看有关对象的资料在命令窗口中键入 help figure,直接获得有关图形对象的属性描述;
在 帮助窗口 中,键入关键字 ( 如 Graphic Property) 搜索,查询关于对象属性的文件;
利用 get,set 命令 在 命令窗口中直接查询对象的属性。
第 4章 Matlab的图形功能
get 函数用于 获取指定对象的属性 。
调用方法:
◆ v = get(H,’PropertyName’),返回句柄为 H 的对象中名为
,PropertyName”属性的值 。 H 是向量,将同时返回向量 H 中 每个句柄 对应图形对象的指定属性值,H 是标量,返回 句柄为 H的对象的所有属性名及其当前取值;
◆ v = get(h),h 是标量,返回一个 结构,结构的 每个域名 就是句柄为
h的对象的 属性名,每个域又包括属性的值;
◆ v = get(0,’factory<objecttype><propertyname>’),对于所有类型的对象,返回所有可以由用户设定的属性的,出厂值,( 即未经过任何用户改动的最初缺省值 ),尖括号内的内容表示可选 。
◆ v = get(h,’default<ObjectType><PropertyName>’),返回 缺省的属性值 。 句柄 h必须是标量,尖括号内的内容表示可选,如果这两个内容都不选,那么该函数返回句柄为 h 的对象所有属性的缺省值 。
set 函数用来 设置对象属性值 。
调用方法:
◆ set(H,’PropertyName’,PropertyValue),把句柄为 H的对象中名为 PropertyName的属性值 设置为,Property-
Value”。 H为向量时,函数为 所有对象 设置属性值;
◆ set(h,a),a 是结构,其域名就是对象的属性名,属性值包括在域中 。 把 属性值 赋给和 域名相同的属性 。 句柄
h 为标量;
◆ set(H,PN,PV),PN和 PV都是 n× 1维的数组,PN中的元素为需要设置的 属性名,PV中的元素是设置的 属性值 ;
◆ set(H,’PropertyName1’,PropertyValue1,’PropertyName2
’,PropertyValue2,...):
用一条语句 同时设置多个属性值 。
第 4章 Matlab的图形功能第 4章 Matlab的图形功能创建一个图形对象,练习和体会 set 和 get 函数的用法。
x=0:0.1:2*pi;
y1=sin(x); %创建一个正弦函数
H1_sin=plot(x,y1,'*') %画图并返回图像的句柄值
set(H1_sin,'color',[1,0.5,0],'Linewidth',1) %调用函数 set 设置正弦曲线的颜色和线宽
y2=cos(x);
hold on
H1_cos=plot(x,y2)
set(H1_cos,'color',[0.25 0 1])
title('正弦和余弦函数曲线 ','fontsize',16,'color','blue')
H_sin_color=get(H1_sin,'color') %调用 get 函数返回具有句柄 H1_sin 的对象的颜色程序执行结果如下
H1_sin =
3.0010
H1_cos =
101.0009
H_sin_color =
1.0000 0.5000 0
第 4章 Matlab的图形功能八、用 GUI 设计工具集 创建用户菜单和 控制对象
GUI 设计工具集可以通过 命令 guide 启动,也可以由 文件创建 。其窗口具有 菜单栏、工具栏、工作区 等栏目,包括了 编辑图形属性,设计 GUI 菜单 和 GUI 控制对象 等工具。
1.图形属性编辑器
属性检查器( Property Inspector) 可以对 所有图形对象的 所有属性 进行交互式编辑。
属性检查器显示了 当前对象的所有属性值,各种对象按层次排列。最上面的按钮表示所显示属性所属的 对象名称,
编辑器下面为 属性内容,其中,左侧为对象的所有属性名称,右侧为当前该属性的取值,用户可在此栏对属性的值进行修改和添加。
第 4章 Matlab的图形功能第 4章 Matlab的图形功能
2.用户菜单对象 ( unimenu)
由 GUI 窗口上 【 Tools】 ->【 Menu Editer】 命令,或者 工具栏上的按钮,即可打开菜单编辑器。
最上面的主要功能按钮为:
New Menu,新建一个菜单;
New Menu Item,新建一个子菜单项;
New Contextmenu,新建一个上下文菜单;
Delete Selected Item,删除选定的菜单栏 。
左边窗口给出当前图形中的 菜单项列表,右边给出相应的 对象属性,
分别是菜单项的 标注( Label),标记( Tag) 和回调程序( Callback)
的内容。用户可直接对之进行修改和添加。
第 4章 Matlab的图形功能菜单对象的属性
Label和 Callback是菜单对象的 基本属性,编写一个具有基本功能的菜单对象必须要设置 Label 和 Callback 属性 。
Label 是在 菜单项上显示的标注文本 。 可以在相应字符的前加上符号,&” 为 Label定义 快捷键,以便使用组合键
‘ Alt+字符 ’来打开相应的菜单项 。
Callback属性用来 设置菜单项 的回调程序,其内容可以是
MATLAB 的函数,命令和可执行的表达式,也可调用自己编写的函数 。
Checked 属性用于设置是否 在菜单项前添加选中标记,
设为,on”表示添加,,off”表示不添加 。
Separator属性用于设置是否 在菜单项前添加分隔线,设为,on”表示添加,,off”表示不添加 。
第 4章 Matlab的图形功能例:编制一个由 draw,colormap和 axis组成的多项选择菜单
1)在 菜单编辑器 中设置各级菜单项的
Lable项,Tag
项和 Callback
项;
2)设置 各个回调函数 的内容;
第 4章 Matlab的图形功能
% --------------------------------------------------------------------
function varargout = Draw_Callback(h,eventdata,handles,varargin)
% --------------------------------------------------------------------
function varargout = membrance_Callback(h,eventdata,handles,varargin)
membrane
% --------------------------------------------------------------------
function varargout = peaks_Callback(h,eventdata,handles,varargin)
peaks
% --------------------------------------------------------------------
function varargout = Sinc_Callback(h,eventdata,handles,varargin)
[x,y]=meshgrid(-5:0.5:5);
r=sqrt(x.^2+y.^2)+eps;
z=sin(r)./r;
surf(x,y,z);
axis tight
% --------------------------------------------------------------------
function varargout = Colormap_Callback(h,eventdata,handles,varargin)
% --------------------------------------------------------------------
function varargout = Hot_Callback(h,eventdata,handles,varargin)
colormap(hot);
% --------------------------------------------------------------------
function varargout = Cool_Callback(h,eventdata,handles,varargin)
colormap(cool);
% --------------------------------------------------------------------
function varargout = Defaults_Callback(h,eventdata,handles,varargin)
colormap('default');
% --------------------------------------------------------------------
function varargout = Axis_Callback(h,eventdata,handles,varargin)
% --------------------------------------------------------------------
function varargout = Axis_on_Callback(h,eventdata,handles,varargin)
axis on;
% --------------------------------------------------------------------
function varargout = Axis_off_Callback(h,eventdata,handles,varargin)
axis off;
第 4章 Matlab的图形功能第 4章 Matlab的图形功能第 4章 Matlab的图形功能
3,用户界面控制对象 ( Uicontrol)
控制对象的 类型及 style属性控制对象的 其他属性:
a,Value 属性,控制对象的当前值,格式为标量或向量 。
复选框,选中时,Value的值为属性 Max中设置的值; 未选中时,
Value的值为属性 Min 中设置的值;
列表框,被 选中选项的序号,当有多个选项被选中时,Value 属性的值为向量 。 最上面的选项序号为 1,第二个选项序号为 2,…
弹出式菜单,和列表框类似,也是被 选中选项的序号,只是弹出式菜单 Value属性的值为标量;
单选按钮,被 选中时 Value 的值为属性 Max 中设置的值; 未选中 时
Value的值为属性 Min 中设置的值;
滑动条,Value的值等于 滑块指定的值 ;
双位按钮 当双位按钮 按下 时,Value 的值为属性 Max 中设置的值; 放开 时,Value的值为属性 Min中设置的值;
单功能按钮,可编辑文本框,区域框和静态文本框,不设置属性的这个值 。
第 4章 Matlab的图形功能第 4章 Matlab的图形功能
b,Max 属性,指定 Value 属性中设置的最大值,为标量。
复选框,为复选框 被选中 Value 属性 的取值;
编辑框,如果 Max 的值减去 Min 的值大于 1,编辑框可以接受 多行输入文本 ; 否则 编辑框只能接受 一行输入文本 ;
列表框,如果 Max 的值减去 Min 的值大于 1,允许选取多个选项 ; 否则 只能选取一个选项;
无线电按钮,当无线电按钮 被选中时 Value 属性的取值 ;
滑动条,滑动条的 最大值,缺省值是 1;
双位按钮,当按钮为,开,( 被选中 ) 时 Value 属性的取值 。 缺省值为 1;
文本框,弹出式菜单,单功能按钮和静态文本框 不使用
Max 属性 。
第 4章 Matlab的图形功能
c,Min 属性,指定 Value 属性中设置的最小值,为标量。
复选框,为复选框 未被选中的 Value 属性的取值 ;
编辑框,如果 Max的值减去 Min的值大于 1,编辑框可以接受多行输入文本;否则编辑框只能接受一行输入文本;
列表框,如果 Max 的值减去 Min 的值大于 1,允许选取多个选项;否则只能选取一个选项;
无线电按钮,当无线电按钮 未被选中时 Value属性的取值 ;
滑动条,滑动条的 最小值,缺省值是 0;
双位按钮,当按钮为,关,( 未被选中 ) 时 Value 属性的取值 。 缺省值为 0;
文本框、弹出式菜单、单功能按钮和静态文本框 不使用
Min 属性。
用户控制对象的创建建立控制对象并设置基本属性设置对齐方式编写回调程序
GUI 设计工具集窗口的左侧便是各种类型的 控制对象按钮栏 。单击要添加的控制对象 按钮,在图形窗口中,画出”
所需要的位置和大小即可。
例:创建一个图形用户界面,使之包含 静态文本,无线电选择开关,双选按键 和 控制对象区域框 四种控制对象。
第 4章 Matlab的图形功能第 4章 Matlab的图形功能第 4章 Matlab的图形功能
% --------------------------------------------------------------------
function varargout = radiobutton1_Callback(h,eventdata,handles,varargin)
if get(gcbo,‘value’) %获得当前对象属性值
hr1=findobj('Tag','radiobutton1');
hr2=findobj('Tag','radiobutton2');
ht=findobj('Tag','title')
set(ht,'fontangle','normal');
set(hr1,'value',1);
set(hr2,'value',0);
end
% --------------------------------------------------------------------
function varargout = radiobutton2_Callback(h,eventdata,handles,varargin)
if get(gcbo,‘value’) %获得当前对象属性值
hr1=findobj('Tag','radiobutton1');
hr2=findobj('Tag','radiobutton2');
ht=findobj('Tag','title')
set(ht,'fontangle','italic');
set(hr1,'value',0);
set(hr2,'value',1);
end
% --------------------------------------------------------------------
function varargout = pushbutton1_Callback(h,eventdata,handles,varargin)
grid;
% --------------------------------------------------------------------
function varargout = axes1_CreateFcn(h,eventdata,handles,varargin)
t=0:pi/50:2*pi;
y=sin(t);
plot(t,y);
axis([0 2*pi -1 1]);
第 4章 Matlab的图形功能