【基础知识笔记】019 图形句柄
图形句柄是对底层图形函数集合的总称,它实际上是进行图形生成的工作。这些函数一般隐藏于M文件内部,但是它们非常重要,因为程序员可以利用它们对图形的外观进行控制。
1. 句柄对象
1.1 图形对象
每个图形对象都有一个独立的名字,这个名字叫作句柄。每个图形对象都有它的属性,可以通过修改它的属性来修改图形的表现。
例如,一条曲线是图形对象的一种。曲线对象有x数据、y数据、颜色、线的类型、线宽、符号类型等属性。修改其中的一个属性就会改变图形的表现形式
由图形命令产生的每一件东西都是图形对象。
在根对象下,有多个图形窗口。每个图形在用于显示图形数据的计算机屏幕上都有一个独立的窗口,每个图形都有它独立的属性。与图形相关的属性有颜色、图形底色、纸张大小、纸张排列方向、指针类型等。
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 对象的公共属性
图形对象具有多种属性,有些属性是所有对象共同具备的,有些则是各对象所特有的。
- Children属性。该属性的取值是该对象所有子对象的句柄组成的一个向量
- Parent属性。该属性的取值是该对象的父对象的句柄。显然,图形窗口对象的Parent属性总是0。
- Tag属性。该属性的取值是一个字符串,它相当于给该对象定义了一个标识符。定义了Tag属性后,在任何程序中都可以通过findobj函数获取该标识符所对应图形对象的句柄。
- Type属性。表示该对象的类型。显然,该属性的值是不可改变的。
- UserData属性。该属性的取值是一个矩阵,默认值为空矩阵。在程序设计中,可以将一个图形对象有关的比较重要的数据存储在这个属性中,借此可以达到传递数据的目的。具体做法是,先用set函数给某一句柄添加一些附加数据(一个矩阵),如果希望使用这个矩阵,则用get函数调用出来。
- Visible属性。该属性的取值是on(默认值)或off。它决定着图形窗口是否在屏幕上显示出来。当它的值为off时,可以用来隐藏该图形窗口的动态变化过程,如窗口大小的变化、颜色的变化等。注意,对象是否存在与对象是否可见是两回事,对象可以存在,同时又是不可见的。
- ButtonDownFcn属性。该属性的取值是一个字符串,一般是某个M文件名或一小段MATLAB语句。图形对象决定了一个作用区域,当单击该区域时,MATLAB自动执行该程序段
- CreateFcn属性。该属性的取值是一个字符串,一般是某个M文件名或一小段MATLAB语句。当创建该对象时,MATLAB自动执行该程序段。
- 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)
本文来自博客园,作者:FE-有限元鹰,转载请注明原文链接:https://www.cnblogs.com/aksoam/p/17084389.html