matlab的findobj函数

来源:互联网 发布:linux下的网络编程 编辑:程序博客网 时间:2024/05/18 13:26

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

 

MATLAB图形系统是建立图形对象的等级系统之上,每一个图形对象都有一个独立的名
字,这个名字叫做句柄。每一个图形对象都有它的属性,我们可以通过修改它的属性来修改物
体的行为。例如,一条曲线是图形对象的一种。曲线对象有以下的属性:x 数据,y数据,颜色,
线的类型,线宽,符号类型等等。修改其中的一个属性就会改变图象窗口中的一个图象。
由图形命令产生的每一件东西部是图形对象。例如,图形中的每一个曲线,坐标轴和字符
串是独立的对象(拥有独立的名字句柄,还有形式)。所有的图象对象按子对象和父对象的形式
管理,如图 9.1 所示。当一个子对象被创建时,它可能继承了父对象的许多属性

matlab <wbr>图形句柄(1)

每一个图形可包括四个对象:Uimenu对象,Uicontrol 对象,坐标系对象和 Uicontextmenus
对象。Uimenu 对象,Uicontrol 对象,和 Uicontextmenus对象是专门地用来创建用户图形界面的
对象。坐标系对象是指在用于显示图象的图片中的区域。在一个图象窗口中,它可能含有一个或多个坐标系

 

每一个图象对象都有一个独一无二的名字,这个名字叫做句柄。句柄是在 MATLAB 中的
一个独一无二的整数或实数,用于指定对象的身份。用于创建一个图象对象的任意命令都会自
动地返回一个句柄。例如,命令
>>Hnd1 = figure;
创建一个新的图象,并返回这个图象的句柄到变量 Hnd1。根对象句柄一般为 0,图象(图)
对象的句柄一般是一个小的正整数,例如 1,2,3……而其他的图形(graphic)对象为任意的浮点
数。
我们可以利用 MATLAB函数得到图象,坐标系和其他对象的句柄。例如,函数 gcf返回当前图象窗口的句柄,而函数 gca 则返回在当前图象窗口中的当前坐标系对象的句柄,函数 gco返回当前选择对象的句柄。这些函数将会在后面将会被具体讨论。 为了方便,存储句柄的变量名要在小写字母后面个 H。这样就可以与普通变量(所有的小写变量,大写变量,全局变量)区分开来

 

 

对象属性是一些特殊值,它可以控制对象行为的某些方面。每一个属性都有一个属性名和属性值。

 

9.3.1在创建对象时改变对象的属性

当一个对象被创建时,所有的属性都会自动初始化为默认值。包含有"propertyname(属性名)"的创建函数创建对象时,默认值会被跳过,而跳过的值在创建函数中有。例如,我们在第二章看到,线宽属性可以通过下面的 plot 命令改变。
plot(x, y, 'LineWidth', 2);
录一个曲线被创建时,函数用值 2来替代它的默认值。

9.3.2 对象创建后改变对象的属性

我们可以用随时用 get 函数检测任意一个对象的属性,并用set 函数对它进行修改。get 函
数最常见的形式如下
value = get(handle, 'PropertyName');
value = get(handle);
value是勤句柄指定对象的属性值。如果在调用函数时,只有一个句柄,那么函数将会返
回一个结构,域名为这个对象的属性名,域值为属性值。
set 函数的最常用形式为
set(handle,'PropertyName1', value1, ...);

例:

Hnd1 = plot(x, y);
图象如图 9.2a所示。这个曲线的句柄被存储在变量 Hnd1 内,我们可以利用它检测和修改
这条曲线的属性。函数 get(Hnd1)在一个结构中返回这条曲线所有的属性,每一个属性名都为结
构的一个元素。
>> result=get(Hnd1)
result = 
 
                 Color: [0 0 1]
             EraseMode: 'normal'
             LineStyle: '-'
             LineWidth: 0.5000
                Marker: 'none'
            MarkerSize: 6
       MarkerEdgeColor: 'auto'
       MarkerFaceColor: 'none'
                 XData: [1x21 double]
                 YData: [1x21 double]
                 ZData: [1x0 double]
          BeingDeleted: 'off'
         ButtonDownFcn: []
              Children: [0x1 double]

            。。。。。

 

 

图对象,axes对象,line对象的句柄。图对象的句柄由函数gcf返回,axes 对象的句柄由函数 gca 返回,line对象由plot函数返回

 

set(gcf,'Color',[1 0.8 0.8]);
set(gca,'YGrid','on');
set(Hndl,'Color',[1 0.5 0],'LineWidth',3);

matlab <wbr>图形句柄(1)

 



9.4 用 set函数列出可能属性值

函数用于提供所有可能的属性值列表。如果在调用函数 set 时,只包括属性名而不包括相应
的属性值,那么函数 set 就会返回所有的合法属性值。例如,命令set(Hnd1,"LineStyle")将返
回所有可能的线型,大括号中是默认的线型。
>>set(Hndl,'LineStyle')
[ {-} | -- | : | -. | none ]
这个函数的合法包括和"none",第一个是默认的类型。

>>set(Hndl,'LineWidth')
A line's "LineWidth" property does not have a fixed set of property values.

函数 set(Hnd1)返回一个对象的所有属性的所有可能的属性值。
>> set(Hndl)
 
ans = 
 
                 Color: {}
             EraseMode: {4x1 cell}

           LineStyle: {5x1 cell}
             LineWidth: {}
                Marker: {14x1 cell}
            MarkerSize: {}
       MarkerEdgeColor: {2x1 cell}
       MarkerFaceColor: {2x1 cell}

     LineStyle: {5x1 cell}
             LineWidth: {}
                Marker: {14x1 cell}
            MarkerSize: {}
       MarkerEdgeColor: {2x1 cell}
       MarkerFaceColor: {2x1 cell}
                 XData: {}
                 YData: {}
                 ZData: {}
         ButtonDownFcn: {}

                 .....

 

 

9.5 自定义数据
除了一个 GUI对象定义的标准属性以外,程序可以定义所要控制的数据的特殊属性。程序
员可以用附加属性把任意类型的数据添加到 GUI对象中。任意数量的数据可以被存储,并应用
于各种目的。
自定义数据可以用近似标准属性的形式存储。每一个数据条目都有一个名字和值。数据
变量可以用函数 setappdate 存储在一个对象,并用函数 getappdata 接收。
setappdate 函数的基本形式如下
setappdata(Hndl, 'DataName', DataValue);
其中 Hndl 是数据存入的对象的句柄,"DateName"是这个数据的名字,而 DateValue是赋于
是这个名字的值。注意数据值可以是数字,也可以是字符串。
例如,假设我们要定义两个特殊的数据值,其中一个用于存储发在指定图象中的错误数,
另一个是用于描述最后发现的错误的字符串。 这两个数据值的名字是"ErrorCount"和"LastError"。
我们假设 H1为这个图象的句柄,创建这些数据条目和初始化的命令为
setappdata(Hl,'ErrorCount',0);
setappdata(H1,'LastError','No error');
我们可以用 getappdata 函数随时调用这些数据。getappdata 的两种形式如下
value = getappdata(Hndl, 'DataName');
struct = getappdata(Hndl);
其中,Hnd1 是包含有这个数据的对象句柄,"DateName"是要调用的数据的名字,如果一
个"DateName"被指定,那么与"DateName"相关的值就会被返回。如果没有被指定,那么所有
与这个对象形字相关的自定义值就会以结构的形式被返回。数据条目名就是结构元素名。
对上面的例子来说,getappdata 将会产生下面的结果
>> value = getappdata(Hl, 'ErrorCount')
value = 
        0
>> value = getappdata(Hl);
struct =
      ErrorCount:  0
      LastError:  'No error'
 

 

    gcf  返回当前图象的句柄 
    gca  返回当前图象中当前坐标系的句柄 
    gco  返回当前对象的句柄 (即可以是图的,也可以是坐标系 也可以是图形的)
    findobj  寻找指定属性值的图形对象

函数 gcf返回当前图象的句柄。如果这个图象不存在,gcf 将会创建一个,并返回它的句柄。
函数 gca 返回当前图象中当前坐标系的句柄,如果图象不存在,或当前图象中无坐标系,那么
函数 gca 将创建一个坐标系,并返回它的句柄。函数 gco的形式如下
H_obj = gco;
H_obj = gco(H_fig);
其中,H_obj是一个对象的句柄,H_fig 是一个图象的句柄。这个函数的第一种形式返回当前图象中的当前对象的句柄它的第二种形式返回一指定图象中的当前对象的句柄。当前对象是指用鼠标单击的最一个对象。这个对象可以是除了根对象的任意图形对象。直到鼠标在图象内发生了单击事件,在图象内才有一个当前对象。在单击事件发生之后,函数 gco将返回一个空数组[],不像函数 gcf和 gca,gco 如果不存在就自动创建。一旦我们得知了一个对象的句柄,我们可以通过检测"Type"属性去时来确定对象的类型。"Type"属性是一个字符串,例如"图","line","text"等等。
H_obj = gco;
type = get(H_obj, 'Type')
查找任意一个 MATLAB对象最简单的方法是用 findobj 函数。它的基本形式如下
Hndls = findobj('PropertyName1',value1, ...)
这个命令起始于根对象,并搜索所有的对象,找出含有指定属性,指定值的对象。注意可
以指定多个属性/值,findobj 只返回与之匹配的对象句柄。
例如,假设我们已经创建了图 1 和图 3。那么函数 findobj("Type","图")将会返回结果
>> H_fig = findobj('Type', 'figure')
H_fig =
 3
 1
函数 findobj的这种形式非常的有用,但却比较慢,因为它必须对整个对象树进行搜索。如
果你必须多次用到一对象,只调用一次函数 findobj,为了重复利用句柄,句柄应存储下来。
限定搜索对象的数目能够加快函数运行的速度。它的形式为
Hndls = findobj(SrchHndls, 'PropertyName1', value1, ...)
在这里,只有数组 srchHndls 和它的子数组中的句柄,才在搜索的范围内。例如你想找到图
1 中的虚线。它的命令为
Hndls = findobj(1, 'Type', 'line', 'LineStyle', '--');
 

下接:

http://blog.sina.com.cn/s/blog_647aa00901010lpp.html

 

 

l%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Figure 是 MATLAB 显示图形的窗口,其中包含菜单栏、工具栏、用户接口对象、右键菜单、坐标系及坐标系的子对象等。MATLAB 允许用户同时创建多个图形窗口。
l如果当前尚未创建图形对象(即 Figure 窗口),则调用任意一个绘图函数或图像显示函数(如 plot 函数和 imshow 函数等)均可以自动创建一个图形窗口。如果当前根对象已经包含了一个或多个图形窗口,则总有一个窗口为“当前”窗口,且该窗口为所有当前绘图函数的输出窗口。
当前性(BeingCurrent)。当前的图形对象即为最后创建的图形对象,或最后被鼠标点中的图形对象。
get(0,'CurrentFigure'),获取当前图形窗口对象的句柄;
get(gcf,'CurrentAxes'),获取当前图形窗口对象中当前坐标轴对象的句柄;
get(gcf,'CurrentObject'),获取当前图形窗口对象中当前对象的句柄。

MATLAB 的 findobj 函数可以用于快速遍历对象从属关系表并获取具有特定属性值的对象句柄的方法。如果用户没有指定起始对象,那么 findobj 函数从根对象开始查找。该函数的调用格式为:
h = findobj,返回根对象及其所有的从属句柄,返回值为一个列向量。
h = findobj('PropertyName',PropertyValue,...),返回满足 'PropertyName' 属性的值为 PropertyValue 的所有句柄,可以同时设置多个条件。
h=indobj('PropertyName',PropertyValue,'-logicaloperator','PropertyName',PropertyValue,...),返回所有满足指定表达式的句柄,其中的逻辑操作符可以是 –and、-or、-xor 或 –not。

h = findobj('-regexp','PropertyName','regexp',...),以正则表达式的方式进行条件匹配,相当于将属性 'PropertyName' 的值传递给函数 regexp,得到 regexp(PropertyValue,'regexp')。该语句返回满足匹配的句柄。
h = findobj('-property','PropertyName'),返回所有具有指定属性的句柄。
h = findobj(objhandles,...),在 objhandles 指定的对象及其子对象中查找。
h = findobj(objhandles,'-depth',d,...),指定查找的深度。参数 d 控制查找的深度,如果将 d 设置为 inf,则与默认效果相同,查找所有深度;如果设置 d 为 0,则与使用参数 flat 的效果相同。
h = findobj(objhandles,'flat','PropertyName',PropertyValue,...),限制查找范围,仅查找 objhandles 指定的句柄,而不查找其子句柄。

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

MATLAB在创建每一个图形对象时,都为该对象分配唯一的一个值,称其为图形对象句柄(Handle)。句柄是图形对象的唯一标识符,不同对象的句柄不可能重复和混淆。
计算机屏幕作为根对象由系统自动建立,其句柄值为0,而图形窗口对象的句柄值为一正整数,并显示在该窗口的标题栏,其他图形对象的句柄为浮点数。MATLAB提供了若干个函数用于获取已有图形对象的句柄

对象常用的公共属性:Children属性、Parent属性、Tag属性、Type属性、UserData属性、Visible属性、ButtonDownFcn属性、CreateFcn属性、DeleteFcn属性。

 

图形窗口对象
建立图形窗口对象使用figure函数,其调用格式为:
句柄变量=figure(属性名1,属性值1,属性名2,属性值2,…)
MATLAB通过对属性的操作来改变图形窗口的形式。也可以使用figure函数按MATLAB缺省的属性值建立图形窗口:
figure  或  句柄变量=figure
要关闭图形窗口,使用close函数,其调用格式为:
close(窗口句柄)
另外,close all 命令可以关闭所有的图形窗口,clf命令则是清除当前图形窗口的内容,但不关闭窗口。

 

建立坐标轴对象使用axes函数,其调用格式为:
句柄变量=axes(属性名1,属性值1,属性名2,属性值2,…)
调用axes函数用指定的属性在当前图形窗口创建坐标轴,并将其句柄赋给左边的句柄变量。也可以使用axes 函数按MATLAB缺省的属性值在当前图形窗口创建坐标轴:
axes  或  句柄变量= axes
用axes 函数建立坐标轴之后,还可以调用axes 函数将之设定为当前坐标轴,且坐标轴所在的图形窗口自动成为当前图形窗口:
axes(坐标轴句柄)

MATLAB为每个坐标轴对象提供了很多属性。除公共属性外,其他常用属性如下:Box属性、GridLineStyle属性、Position属性、Units属性、Title属性等。
例10-4  利用坐标轴对象实现图形窗口的任意分割。
利用axes函数可以在不影响图形窗口上其他坐标轴的前提下建立一个新的坐标轴,从而实现图形窗口的任意分割。???????????


曲线对象
建立曲线对象使用line函数,其调用格式为:
句柄变量=line(x,y,z,属性名1,属性值1,属性名2,属性值2,…)
其中对x,y,z的解释与高层曲线函数plot和plot3等一样,其余的解释与前面介绍过的figure和axes函数类似。
每个曲线对象也具有很多属性。除公共属性外,其他常用属性如下:Color属性、LineStyle属性、LineWidth属性、Marker属性、MarkerSize属性等。

 

文字对象
使用text函数可以根据指定位置和属性值添加文字说明,并保存句柄。该函数的调用格式为:
句柄变量=text(x,y,z,'说明文字',属性名1,属性值1,属性名2,属性值2,…)
其中说明文字中除使用标准的ASCII字符外,还可使用LaTeX格式的控制字符。
除公共属性外,文字对象的其他常用属性如下:Color属性、String属性、Interpreter属性、FontSize属性、Rotation属性。

原创粉丝点击