Matlab-句柄图形

句柄图形是对底层图形函数集合的总称,它实际上进行生成图形的工作。可以利用它对图象或图片的外观进行控制。

1 对象句柄

每个图像由一个独一无二的名字,叫句柄(为整数或实数)。

创建句柄Hnd1:

%数据准备
x=-pi:0.1:pi;
y=sin(x);
%创建一个曲线
Hnd1=plot(x,y, 'LineWidth', 2)

1.1 检测任意一个对象的属性

value = get(handle, 'PropertyName'); 
value = get(handle); 

返回这个对象的属性名,域值为属性值。

例如Hnd1的属性:get(Hnd1)

>> get(Hnd1)

Hnd1 = 

  Line - 属性:

              Color: [0 0.4470 0.7410]
          LineStyle: '-'
          LineWidth: 2
             Marker: 'none'
         MarkerSize: 6
    MarkerFaceColor: 'none'
              XData: [1×63 double]
              YData: [1×63 double]
              ZData: [1×0 double]

  显示 所有属性

    AlignVertexCenters: 'off'
            Annotation: [1×1 matlab.graphics.eventdata.Annotation]
          BeingDeleted: 'off'
            BusyAction: 'queue'
         ButtonDownFcn: ''
              Children: [0×0 GraphicsPlaceholder]
              Clipping: 'on'
                 Color: [0 0.4470 0.7410]
             CreateFcn: ''
             DeleteFcn: ''
           DisplayName: ''
      HandleVisibility: 'on'
               HitTest: 'on'
         Interruptible: 'on'
              LineJoin: 'round'
             LineStyle: '-'
             LineWidth: 2
                Marker: 'none'
       MarkerEdgeColor: 'auto'
       MarkerFaceColor: 'none'
         MarkerIndices: [1×63 uint64]
            MarkerSize: 6
                Parent: [1×1 Axes]
         PickableParts: 'visible'
              Selected: 'off'
    SelectionHighlight: 'on'
                   Tag: ''
                  Type: 'line'
         UIContextMenu: [0×0 GraphicsPlaceholder]
              UserData: []
               Visible: 'on'
                 XData: [1×63 double]
             XDataMode: 'manual'
           XDataSource: ''
                 YData: [1×63 double]
           YDataSource: ''
                 ZData: [1×0 double]
           ZDataSource: ''

1.2 设置对象属性

set(handle,'PropertyName1', value1, ...); 

例如设置Hnd1的属性:

%set函数对属性进行修改
set(Hnd1,'LineWidth',4,'LineStyle','--');

1.3 启动属性编辑器

propedit(Hnd1); 
propedit; 

结果:

 1.4 用set函数列出可能的属性值

函数用于提供所有可能的属性值列表。

例如:

%通过set函数列出可能的属性值
set(Hnd1,'LineStyle')

结果:

 5×1 cell 数组

    {'-'   }
    {'--'  }
    {':'   }
    {'-.'  }
    {'none'}

1.5 自定义数据

        除了一个 GUI 对象定义的标准属性以外,程序可以定义所要控制的数据的特殊属性。程序员可以用附加属性把任意类型的数据添加到 GUI 对象中。任意数量的数据可以被存储,并应用于各种目的。

(1)自定义数据:setappdata

setappdata(Hndl, 'DataName', DataValue); 

"DateName"是这个数据的名字;

”DateValue“ 是赋于是这个名字的值,可以是数字,也可以是字符串;

例如:

 %自定义数据,DataValue数据值可以是数字,也可以是字符串
setappdata(Hnd1,'plot_name','plot(sinex)')

(2)调取自定义数据getappdata

value = getappdata(Hndl, 'DataName'); 
struct = getappdata(Hndl); 

"DateName"是要调用的数据的名字

例如:

 %调用自定义数据,返回'plot(sinex)'
value_set=getappdata(Hnd1,'plot_name')
struct=getappdata(Hnd1)

结果:

value_set =

    'plot(sinex)'


struct = 

  包含以下字段的 struct:

    ScribeProxyValue: 7.3863e+05
           plot_name: 'plot(sinex)'

自定义数据相关函数:

 2 对象查找

如果你打算修改你创建的对象的属性,那么请保存对象的句柄,为以后调用函数 get和 set 做准备。

但是如果因为一些原因丢失了句柄,可以i通过函数找回:

- gcf 返回当前图象的句柄,如果这个图象不存在,gcf 将会创建一个
- gca 返回当前图象中当前坐标系的句柄,如果图象不存在,或当前图象中无坐标系
- gco 返回当前对象的句柄
- findobj 寻找指定属性值的图形对象,限定搜索对象的数目能够加快函数运行的速度

形式:

H_obj = gco; 
type = get(H_obj, 'Type') 
Hndls = findobj('PropertyName1',value1, ...) 

举例:

%由于一些原因,丢失了对象的句柄,可以通过函数寻找得到
%获取当前图象的句柄。如果这个图象不存在,gcf 将会创建一个
Hnd1_gcf=gcf
%返回当前图象中当前坐标系的句柄,如果图象不存在,或当前图象中无坐标系,
%那么函数 gca 将创建一个坐标系,并返回它的句柄
Hnd1_gca=gca
%返回当前图象中的当前对象的句柄
Hnd1_gco=gco
%找出含有指定属性,指定值的对象。可以指定多个属性/值,findobj 只返回与之匹配的对象句柄。
H_fig = findobj('Type', 'figure') 

结果:

>> Hnd

Hnd1 = 

  Line - 属性:

              Color: [0 0.4470 0.7410]
          LineStyle: '-'
          LineWidth: 2
             Marker: 'none'
         MarkerSize: 6
    MarkerFaceColor: 'none'
              XData: [1×63 double]
              YData: [1×63 double]
              ZData: [1×0 double]
Hnd1_gcf = 

  Figure (1) - 属性:

      Number: 1
        Name: ''
       Color: [0.9400 0.9400 0.9400]
    Position: [680 678 560 420]
       Units: 'pixels'

  显示 所有属性


Hnd1_gca = 

  Axes - 属性:

             XLim: [-4 4]
             YLim: [-1 1]
           XScale: 'linear'
           YScale: 'linear'
    GridLineStyle: '-'
         Position: [0.1300 0.1100 0.7750 0.8150]
            Units: 'normalized'

  显示 所有属性


Hnd1_gco = 

  Line - 属性:

              Color: [0 0.4470 0.7410]
          LineStyle: '--'
          LineWidth: 4
             Marker: 'none'
         MarkerSize: 6
    MarkerFaceColor: 'none'
              XData: [1×63 double]
              YData: [1×63 double]
              ZData: [1×0 double]

  显示 所有属性


H_fig = 

  Figure (1) - 属性:

      Number: 1
        Name: ''
       Color: [0.9400 0.9400 0.9400]
    Position: [680 678 560 420]
       Units: 'pixels'

  显示 所有属性

3 位置和单位

对象都包含位置”Position“属性,用来指定对象在计算机屏幕的位置和大小。

位置返回向量[left bottom width height]

%获取位置和单位
position=get(gcf,'Position')
units=get(gcf,'Units')

结果:

position =

   680   678   560   420


units =

    'pixels'

说明:

当前图象窗口的左下角距屏幕右边的距离为 680pixel,距屏幕底边的距离为 678pixel。图象的宽度为560pixel,上下高度为 420pixel。注意这是图象的可作图区,包括边界,滚动条,菜单,还有图象的标题区。

单位("units")属性的默认值为像素(pixels);它的属性值还可以为英尺(inches),公分(centimeters),点(points),或归一化坐标(normalixed coordinates);典型的计算机屏幕最小分辨为 640×480;归一化坐标是在0 到1 范围内。在归一化坐标中,屏幕的左下角为[0,0]右上角为[1.0, 1.0];

通常使用归一化的normalized坐标,不用考虑显示器的大小:

H = figure(1)
set(H,'units', 'normalized','position',[0.2 ,0.2 ,0.2, 0.1]) 

例子:

%数据准备
x=-pi:0.1:pi;
y=sin(x);
%创建一个曲线
Hnd1=plot(x,y, 'LineWidth', 2)

H = figure(1)
set(H,'units', 'normalized','position',[0.2 ,0.2 ,0.2, 0.1]) 

%get检测任意一个对象的属性
get(Hnd1)
%set函数对属性进行修改
set(Hnd1,'LineWidth',4,'LineStyle','--');
%打开属性编辑器
propedit(Hnd1);
%通过set函数列出可能的属性值
set(Hnd1,'LineStyle')
% 结果:
%     {'-'   }
%     {'--'  }
%     {':'   }
%     {'-.'  }
%     {'none'}

%返回一个对象的所有属性的所有可能的属性值
set(Hnd1)
 
 %自定义数据,DataValue数据值可以是数字,也可以是字符串
setappdata(Hnd1,'plot_name','plot(sinex)')
 %调用自定义数据,返回'plot(sinex)'
value_set=getappdata(Hnd1,'plot_name')
struct=getappdata(Hnd1)

%由于一些原因,丢失了对象的句柄,可以通过函数寻找得到
%获取当前图象的句柄。如果这个图象不存在,gcf 将会创建一个
Hnd1_gcf=gcf
%返回当前图象中当前坐标系的句柄,如果图象不存在,或当前图象中无坐标系,
%那么函数 gca 将创建一个坐标系,并返回它的句柄
Hnd1_gca=gca
%返回当前图象中的当前对象的句柄
Hnd1_gco=gco
%找出含有指定属性,指定值的对象。可以指定多个属性/值,findobj 只返回与之匹配的对象句柄。
H_fig = findobj('Type', 'figure')  


%获取位置和单位
position=get(gcf,'Position')
units=get(gcf,'Units')

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值