Matlab 专题八——Matlab 图形用户界面设计

 在Matlab中,所有的图形操作都是针对图形对象而言的,如坐标轴、曲线、曲面、文本等

每个对象在创建时,就被赋予唯一的标识,这种标识就是该图形对象的句柄

以后可以通过句柄访问该图形对象的属性

关于对象精辟介绍:Matlab的图形系统是面向图形对象的,对象是用来描述客观事物的实体,是构成系统的基本单位。图形对象是用于显示图形和用户界面的基本要素。

一、图形窗口与坐标轴

1、图形对象的句柄

 (1)句柄的概念

        在Matlab中,用句柄来标识对象,通过句柄来访问相应对象的属性


%绘制多个图形,并保存图形句柄
clear
clc
t = 0:pi/10:2*pi;
h1 = plot3(t+pi,t-2*pi,sin(t),'r'); %h1 是曲线的句柄
hold on;
[x,y] = meshgrid(t);
z = sin(x);
h2 = mesh(t-2*pi,t+pi,z);   %h2 是曲面的句柄
[x3,y3,z3] =cylinder(t);
h3 = surf(x3,y3,z3);    %h3 是圆锥的句柄

(2)访问图形对象 

        对象句柄.属性名

%绘制图形,并访问图形对象
x = 0:pi/10:2*pi;
y = sin(x);
h0 = plot(x,y);
grid on;
h0.Color
h0.LineWidth = 2;
h0.LineStyle = '-.';

(3)获取特定图形对象句柄的函数

gcf:获取当前图形窗口的句柄。

gca:获取当前坐标轴的句柄。

gco:获取最近被选中的图形对象的句柄。

findobj:按照指定的属性来获取图形对象的句柄。

2、图形对象的属性

(1)图形对象的常用公共属性

Children属性:该对象的所有子对象的句柄组成的一个向量。

Parent属性:该对象的父对象的句柄。

Type属性:对象的类型,这是一个只读属性。

Tag属性:用于给对象定义一个标识符。

clear
clc
%图一绘制螺旋线
subplot(1,2,1); 
h1 = fplot(@(t)t.*sin(t),@(t)t.*cos(t),[0,6*pi]);   %句柄h1,表示曲线
axis equal;
%图二绘制山峰图
subplot(1,2,2);
[x,y,z] = peaks(20);
h2 = mesh(x,y,z);   %句柄h2,表示曲面
% h10 = h1.Parent;
% h10.Color = 'y';
% h1.Color = 'r';
% h2.Parent.Color = 'cyan';

h1.Color = 'g';
h1.Parent.Color = 'y';
h2.Parent.Color = 'cyan';

(2)图形对象的常用动态属性

KeyPressFcn属性:定义按下键盘按键事件的响应。

CreatFcn属性:定义创建图形对象时做出的响应。

DeleteFcn属性:定义取消图形对象时做出的响应。

WindowButtonDownFcn或ButtonDownFcn属性:定义单击鼠标左键事件的响应。 

3、图形窗口的操作

(1)建立图形窗口对象

使用figure函数,其调用格式为:

句柄变量=figure(属性1,属性值1,属性2,属性值2,...)其中,属性用于设置图形窗口的特征。

句柄变量=figure

figure(窗口句柄)

(2)图形窗口属性

MenuBar属性:控制图形窗口是否具有菜单条,其取值为‘none’或‘figure’。

Name属性:指定图形窗口的标题。

Number Title属性:决定着在图形窗口的标题中是否以 “Figure n:”为标题前缀。

Color属性:设定图形窗口背景的颜色。

Position属性:定义了图形窗口对象在屏幕上的位置和大小,值是一个4元行向量[x,y,w,h]。

Units属性:定义图形窗口使用的长度单位。

%建立一个图形窗口
hf = figure;    %按默认属性建立一个图形窗口
hf.Color = [0,1,1];     %设置背景色
hf.Position = [500,500,300,150];    %设置屏幕位于左下角,宽度和高度分别为300像素点和150像素点
hf.Name = '图形窗口示例';     %设置标题
hf.NumberTitle = 'off';     %设置标题不显示前缀
hf.MenuBar = 'none';        %设置图形窗口没有菜单条
hf.ButtonDownFcn = 'gtext("Hello,World!")';  %单击左键显示文本“Hello World!”
hf.KeyPressFcn = 'gtext("Sun!")';   %按键盘任意建,显示Sun!

4、坐标轴对象的操作

坐标轴对象时图形对象的父对象,即当作图形对象的容器。

(1)建立坐标轴对象

使用axes函数,其调用格式为:

句柄变量 = axes(属性1,属性值1,属性2,属性值2,...)         其中,属性用于设置坐标轴的特征。

句柄变量 = axes

axes(坐标轴句柄)

%利用坐标轴实现图形窗口的分割
ha1 = axes('Position',[0.1,0.1,0.7,0.7]);
contour(peaks(20)); %等高线图
ha1.Title = title('等高线');
ha1.YLabel = ylabel('南北向');
ha1.XLabel = xlabel('东西向');
ha2 = axes('Position',[0.65,0.7,0.28,0.28]);
surf(peaks(20));    %峰图
ha2.View=[-30,45];  %设置当前坐标轴的视点位置。

(2)坐标轴对象的属性

%利用坐标轴实现图形窗口的分割
ha1 = axes('Position',[0.1,0.1,0.7,0.7]);
contour(peaks(20)); %等高线图
ha1.Title = title('等高线');
ha1.YLabel = ylabel('南北向');
ha1.XLabel = xlabel('东西向');
ha2 = axes('Position',[0.65,0.7,0.28,0.28]);
surf(peaks(20));    %峰图
ha2.View=[-30,45];  %设置当前坐标轴的视点位置。

二、曲线与曲面对象

1、曲线对象

 line函数的调用格式为:

        句柄变量=line(x,y,z,属性1,属性值1,属性2,属性值2,...)

其中,x、y、z在存储数据点的坐标,与plot、plot3函数含义相同。(与plot不同的是:line()函数不会覆盖原图形显示界面,会在原来图形的基础上叠加图形)

 

2、曲面对象

 surfacei函数的调用格式为:

        句柄变量= surface(x,y,z,c,属性1,属性值1,属性2,属性值2,...)

其中,x、y、z存储数据点的坐标,与surf函数含义相同;c用于指定在不同高度下的曲面颜色。

%绘制立体圆环
r = linspace(0,2*pi,60);
[u,v] = meshgrid(r);
x = (8 + 3*cos(v)).*cos(u);
y = (8 + 3*cos(v)).*sin(u);
z = 3*sin(v);

% surf(x,y,z);

axes('view',[-37.5,30])     %设置视点
hs = surface(x,y,z);    %调用surface()按默认属性绘制曲面
axis equal;

%让曲面的颜色过度看起来更加平滑
hs.EdgeColor = 'none';
hs.FaceColor = 'interp';

3、光照处理

 (1)创建光源对象

        light函数的调用格式为:

                对象句柄 = light(属性1,属性值1,属性2,属性值2,...)

其中,属性指定光源的特性。

(2)光源对象的属性

 (3)设置光照模式

lighting命令格式为:

        lighting 选项

其中,选项可取值为:flat、gouraud、phong、none。

%绘制光照处理后的圆环面,并观察不同光照模式下的效果
r=linspace(0,2*pi,60); [u,v]=meshgrid(r);
x=(8+3*cos(v)).*cos(u); y=(8+3*cos(v)).*sin(u); z=3*sin(v);
%绘制圆环
axes('Position',[0.05,0.675,1.0,0.3],  'View',[-37.5,30]);
hs1=surface(x,y,z); axis equal;
hs1.EdgeColor='none';  hs1.FaceColor='interp';
%绘制圆环 
axes('Position',[0.05,0.35,1.0,0.3],  'View',[-37.5,30]);
hs2=surface(x,y,z); axis equal;
hs2.EdgeColor='none';  hs2.FaceColor='interp';
%光照处理
light('Position',[0,0,8])
lighting  flat
%绘制圆环
axes('Position',[0.05,0.025,1.0,0.3],  'View',[-37.5,30]);
hs3=surface(x,y,z); axis equal;
hs3.EdgeColor='none';  hs3.FaceColor='interp';
%光照处理
light('Position',[0,0,8])
lighting  phong

4、图形对象的反射特征

 

%绘制具有不同反射特性的圆环面并观察反射特性对图形效果的影响
r=linspace(0,2*pi,60);  [u,v]=meshgrid(r);
x=(8+3*cos(v)).*cos(u); y=(8+3*cos(v)).*sin(u); z=3*sin(v);
%第一个圆环
axes('Position',[0.05,0.675,1.0,0.3],'View',[-37.5,30]);
hs1=surface(x,y,z);axis equal;
hs1.EdgeColor='none';hs1.FaceColor='interp';
light('Position',[0,0,8]) ;lighting  phong
hs1.SpecularStrength=0.1;%反射参数设置
%第二个圆环
axes('Position', [0.05,0.35,1.0,0.3],'View',[-37.5,30]);
hs2=surface(x,y,z);axis equal;
hs2.EdgeColor='none';hs2.FaceColor='interp';
light('Position',[0,0,8]) ;lighting  phong
hs2.SpecularStrength=0.5;%反射参数设置
%第三个圆环
axes('Position', [0.05,0.025,1.0,0.3],'View',[-37.5,30]);
hs3=surface(x,y,z);axis equal;
hs3.EdgeColor='none';hs3.FaceColor='interp';
light('Position',[0,0,8]) ;lighting  phong ;

三、图形用户界面设计方法

图形用户界面:用户与计算机进行信息交流的窗口。

设计图形用户界面的方法

        调用建立用户界面控件的函数、使用MATLAB提供的GUIDE工具进行可视化设计。

1、控件对象及其操作

(1)常用控件

输入和输出类控件:编辑框、静态文本、列表框、滑动条等。

实施确认、选择操作类控件:按钮、双位按钮、单选按钮、复选框等。

(2)建立控件对象

uicontrol函数用于建立控件对象,其调用格式为:

        句柄变量 = uncontrol(图形窗口句柄,属性1,属性值1,属性2,属性值2,…)

其中,属性及其取值决定了控件的特征。若省略图形窗口句柄,默认在当前图形窗口建立控件对象。

(3) 控件对象的基本控制属性

 回调函数的定义格式:

        function 函数名(source, eventdata)

                ...

        end

参数source是发生事件的源控件对象句柄,eventdata存储事件数据

2、建立菜单对象

(1)uimenu函数

uimenu函数用于创建、设置、修改菜单,其调用格式为:

一级菜单项句柄 = uimenu(图形窗口句柄,属性1,属性值1,属性2,属性值2,....)

子菜单项句柄 = uimenu(上级菜单项句柄,属性1,属性值1,属性2,属性值2,...)

(2)菜单属性

Label属性:用于定义菜单项的名字。

Accelertor属性:用于定义菜单项的快捷键。

Checked属性:指示菜单项是否已选中。

Enable属性:控制菜单项的可选择性。

Separator属性:用于在菜单中添加分隔线。


%{
 在例1的界面中添加“图形选项”菜单项,其中包括一个二级菜单项“线型”,
其下又有3个子菜单项,分别为“实线”、“虚线”、“双划线”。
%}

hopt=uimenu(gcf,'Label','图形选项','Accelerator','L');
hLStyle=uimenu(hopt,'Label','线型','Tag','LStyle', 'Enable','off');
hL_Solid=uimenu(hLStyle,'Label','实线',...
    'Tag','Solid','Callback', @MLine_Type);
hL_Dotted=uimenu(hLStyle,'Label','虚线',...
    'Tag','Dotted','Callback', @MLine_Type);
hL_Dashed=uimenu(hLStyle,'Label','双划线',...
    'Tag','Dashed','Callback', @MLine_Type);
%例2,回调函数,由例1修改而来
% plot_sin.m文件

function plot_sin(source, callbackdata)
    t=-pi:pi/20:pi;
    plot(t,sin(t));
    h1=findobj('Tag','LStyle');
    h1.Enable='On';    %使得 “线型”菜单项可用
end


% Mline_Type.m函数文件

function MLine_Type(source,callbackdata)
    hline=findobj('Type','line');
    if strcmp(source.Tag,'Solid' )==1
        hline.LineStyle='-';
    elseif strcmp(source.Tag,'Dotted' )==1
        hline.LineStyle=':';  
    elseif strcmp(source.Tag,'Dashed' )==1
        hline.LineStyle='--';   
    end
end

四、用户界面设计工具

即将淘汰的用户界面编辑工具

五、APP设计工具

六、图形用户界面应用举例

 

猜你喜欢

转载自blog.csdn.net/weixin_41949409/article/details/120371518