【基础知识笔记】019 图形句柄

图形句柄是对底层图形函数集合的总称,它实际上是进行图形生成的工作。这些函数一般隐藏于M文件内部,但是它们非常重要,因为程序员可以利用它们对图形的外观进行控制。

1. 句柄对象

1.1 图形对象

每个图形对象都有一个独立的名字,这个名字叫作句柄。每个图形对象都有它的属性,可以通过修改它的属性来修改图形的表现。

例如,一条曲线是图形对象的一种。曲线对象有x数据、y数据、颜色、线的类型、线宽、符号类型等属性。修改其中的一个属性就会改变图形的表现形式

由图形命令产生的每一件东西都是图形对象。

tQ023.png

在根对象下,有多个图形窗口。每个图形在用于显示图形数据的计算机屏幕上都有一个独立的窗口,每个图形都有它独立的属性。与图形相关的属性有颜色、图形底色、纸张大小、纸张排列方向、指针类型等。

1.2 图形对象句柄

每个图形对象在被创建时都有一个独一无二的名字,这个名字叫作句柄。

MATLAB都为该对象句柄分配了唯一的值。

句柄在MATLAB中是一个独一无二的整数或实数,用于指定对象的身份。

句柄是图形对象的唯一标识符,不同对象的句柄不可能重复和混淆。

gcf函数是获取当前图形窗口的句柄;
gca函数是获取当前坐标轴的句柄;
gco函数是获取最近被单击的图形对象的句柄。

为了以后对图形对象进行操作,可以在建立该对象时保存其句柄。

例如,命令hf=figure是创建一个图形窗口的命令,会自动地返回一个句柄,并将其句柄赋给变量hf保存,以后就可以通过该句柄对图形窗口进行操作。

2.对象属性

2.1 属性名与属性值

MATLAB给每种对象的每一个属性规定了一个名字,称为属性名,而属性名的取值称为属性值。

例如,LineStyle是曲线对象的一个属性名,它的取值决定了线型,取值可以是-、:、-.、--或none

在属性名的写法中,不区分字母的大小写,属性名要用单撇号括起来

2.2 操作属性值

当创建一个对象时,必须给对象的各种属性赋予必要的属性值,否则系统会自动使用默认属性值

用户可以通过set函数重新设置对象属性,同时也可以通过get函数获取这些属性值。

set函数参数只有句柄的时候,将显示出句柄所有的允许属性。

  • set函数:
set(句柄,'属性名1',‘属性值1’,'属性名2',‘属性值2’····)

句柄用于指出要操作的对象。

  • get函数
value=get(句柄,'属性名')%如果在调用get函数时省略属性名,则将返回句柄所有的属性值。
% value==返回的属性值

2.3 对象的公共属性

图形对象具有多种属性,有些属性是所有对象共同具备的,有些则是各对象所特有的。

  1. Children属性。该属性的取值是该对象所有子对象的句柄组成的一个向量
  2. Parent属性。该属性的取值是该对象的父对象的句柄。显然,图形窗口对象的Parent属性总是0。
  3. Tag属性。该属性的取值是一个字符串,它相当于给该对象定义了一个标识符。定义了Tag属性后,在任何程序中都可以通过findobj函数获取该标识符所对应图形对象的句柄。
  4. Type属性。表示该对象的类型。显然,该属性的值是不可改变的。
  5. UserData属性。该属性的取值是一个矩阵,默认值为空矩阵。在程序设计中,可以将一个图形对象有关的比较重要的数据存储在这个属性中,借此可以达到传递数据的目的。具体做法是,先用set函数给某一句柄添加一些附加数据(一个矩阵),如果希望使用这个矩阵,则用get函数调用出来。
  6. Visible属性。该属性的取值是on(默认值)或off。它决定着图形窗口是否在屏幕上显示出来。当它的值为off时,可以用来隐藏该图形窗口的动态变化过程,如窗口大小的变化、颜色的变化等。注意,对象是否存在与对象是否可见是两回事,对象可以存在,同时又是不可见的。
  7. ButtonDownFcn属性。该属性的取值是一个字符串,一般是某个M文件名或一小段MATLAB语句。图形对象决定了一个作用区域,当单击该区域时,MATLAB自动执行该程序段
  8. CreateFcn属性。该属性的取值是一个字符串,一般是某个M文件名或一小段MATLAB语句。当创建该对象时,MATLAB自动执行该程序段。
  9. DeleteFcn属性。该属性的取值是一个字符串,一般是某个M文件名或一小段MATLAB语句。当取消该对象时,MATLAB自动执行该程序段
>> x=0:pi/60:2*pi;
>> y=sin(x);
>> 
>> z=cos(3*x);
>> plot(x,y,'b',x,z,'g');
>> hf=get(gca)% gca当前坐标轴的句柄 %返回当前坐标轴的所有属性名

hf = 
             CameraPosition: [3.5000 0 17.3205]
         CameraPositionMode: 'auto'
               CameraTarget: [3.5000 0 0]
           CameraTargetMode: 'auto'
             CameraUpVector: [0 1 0]
         CameraUpVectorMode: 'auto'
            CameraViewAngle: 6.6086
        CameraViewAngleMode: 'auto'
                       View: [0 90]
                 Projection: 'orthographic'
    LabelFontSizeMultiplier: 1.1000
          AmbientLightColor: [1 1 1]
            DataAspectRatio: [3.5000 1 1]
        DataAspectRatioMode: 'auto'
         PlotBoxAspectRatio: [1 0.4515 0.4515]
     PlotBoxAspectRatioMode: 'auto'
                   FontName: 'Helvetica'
                  FontAngle: 'normal'
                 FontWeight: 'normal'
              FontSmoothing: 'on'
       TickLabelInterpreter: 'tex'
           <mark>  XLim: [0 7]
                   XLimMode: 'auto'
                       YLim: [-1 1]
                   YLimMode: 'auto'
                       ZLim: [-1 1]
                   ZLimMode: 'auto'</mark>
                       XDir: 'normal'
                       YDir: 'normal'
                       ZDir: 'normal'
                       CLim: [0 1]
                   CLimMode: 'auto'
                       ALim: [0 1]
                   ALimMode: 'auto'
                      Layer: 'bottom'
                 TickLength: [0.0100 0.0250]
              GridLineStyle: '-'
         MinorGridLineStyle: ':'
              XAxisLocation: 'bottom'
                     XColor: [0.1500 0.1500 0.1500]
                 XColorMode: 'auto'
                      XTick: [0 1 2 3 4 5 6 7]
                  XTickMode: 'auto'
         XTickLabelRotation: 0
                     XLabel: [1x1 Text]
                     XScale: 'linear'
                 XTickLabel: {8x1 cell}
             XTickLabelMode: 'auto'
                 XMinorTick: 'off'
              YAxisLocation: 'left'
                     YColor: [0.1500 0.1500 0.1500]
                 YColorMode: 'auto'
                      YTick: [-1 -0.5000 0 0.5000 1]
                  YTickMode: 'auto'
         YTickLabelRotation: 0
                     YLabel: [1x1 Text]
                     YScale: 'linear'
                 YTickLabel: {5x1 cell}
             YTickLabelMode: 'auto'
                 YMinorTick: 'off'
                     ZColor: [0.1500 0.1500 0.1500]
                 ZColorMode: 'auto'
                      ZTick: [-1 0 1]
                  ZTickMode: 'auto'
         ZTickLabelRotation: 0
                     ZLabel: [1x1 Text]
                     ZScale: 'linear'
                 ZTickLabel: ''
             ZTickLabelMode: 'auto'
                 ZMinorTick: 'off'
                   BoxStyle: 'back'
                  LineWidth: 0.5000
                      Color: [1 1 1]
              ClippingStyle: '3dbox'
               CurrentPoint: [2x3 double]
                      Title: [1x1 Text]
                      XAxis: [1x1 NumericRuler]
                      ZAxis: [1x1 NumericRuler]
                      XGrid: 'off'
                 XMinorGrid: 'off'
                      YGrid: 'off'
                 YMinorGrid: 'off'
                      ZGrid: 'off'
                 ZMinorGrid: 'off'
                      YAxis: [1x1 NumericRuler]
              UIContextMenu: [0x0 GraphicsPlaceholder]
              ButtonDownFcn: ''
                 BusyAction: 'queue'
               BeingDeleted: 'off'
              Interruptible: 'on'
                  CreateFcn: ''
                  DeleteFcn: ''
                       Type: 'axes'
                        Tag: ''
                   UserData: []
                   Selected: 'off'
         SelectionHighlight: 'on'
                    HitTest: 'on'
              PickableParts: 'visible'
                      Units: 'normalized'
                   Position: [0.1300 0.1100 0.7750 0.8150]
              OuterPosition: [0 0 1 1]
     ActivePositionProperty: 'outerposition'
                 TightInset: [0.0459 0.0836 0.0063 0.0321]
                 ColorOrder: [7x3 double]
            ColorOrderIndex: 1
             LineStyleOrder: '-'
        LineStyleOrderIndex: 1
                  FontUnits: 'points'
                   FontSize: 10
            TitleFontWeight: 'normal'
    TitleFontSizeMultiplier: 1.1000
                 SortMethod: 'childorder'
                    TickDir: 'in'
                TickDirMode: 'auto'
                  GridColor: [0.1500 0.1500 0.1500]
              GridColorMode: 'auto'
             MinorGridColor: [0.1000 0.1000 0.1000]
         MinorGridColorMode: 'auto'
                  GridAlpha: 0.1500
              GridAlphaMode: 'auto'
             MinorGridAlpha: 0.2500
         MinorGridAlphaMode: 'auto'
                   Clipping: 'on'
                   NextPlot: 'replace'
                        Box: 'on'
                   Children: [2x1 Line]
                     Parent: [1x1 Figure]
                    Visible: 'on'
           HandleVisibility: 'on'
>> hf=get(gca,'children')

hf = 

  2x1 Line 数组:

  Line
  Line

>> for k=1:size(hf)
if get(hf(k),'color')==[0 1 0]
hfg=hf(k)
end
end

hfg = 

  Line (具有属性):

              Color: [0 1 0]
          LineStyle: '-'
          LineWidth: 0.5000
             Marker: 'none'
         MarkerSize: 6
    MarkerFaceColor: 'none'
              XData: [1x121 double]
              YData: [1x121 double]
              ZData: [1x0 double]

  显示 所有属性

>> set(hfg,'linestyle',':')

## 图形句柄创建实例

### 3.1 图形窗口

```java
%创建图形窗口对象
h=figure(属性名1,属性值1····)
%创建图形窗口对象
figure(1)

figure

%关闭窗口
close(h)
或者
%关闭当前图形窗口
close(gcf)		
%关闭所有的图形窗口
close all 
%清除当前图形的内容
clf

创建一个图形窗口。该图形窗口没有图形编号,标题名为“我的图形窗口”,起始于屏幕[50,50],宽度和高度分别为700像素点和500像素点

>> hf=figure('numbertitle','off','name','我的图形窗口','position',[50 50 700 500])

hf = 
  Figure (1: 我的图形窗口) (具有属性):

      Number: 1
        Name: '我的图形窗口'
       Color: [0.9400 0.9400 0.9400]
    Position: [50 50 700 500]
       Units: 'pixels'
  显示 所有属性

2.4 坐标轴对象

创建坐标轴对象,使用axes函数

%使用axes函数按MATLAB默认的属性值在当前图形窗口创建坐标轴
axes;
% 或者
hf=axes	%返回句柄变量

调用axes函数将之设定为当前坐标轴,且坐标轴所在的图形窗口自动成为当前图形窗口

axes(hf)
posted @ 2023-02-01 22:42  FE-有限元鹰  阅读(190)  评论(0编辑  收藏  举报