9.7 用鼠标选择对象第九章图形句柄第261页
-
gcf 返回当前图像的句柄
-
gca 返回当前图像中当前坐标系的句柄
-
gco 返回当前对象的句柄
-
findobj 寻找指定属性值的图形对象函数
你知道吗?gcf不仅仅返回当前图像的句柄,如果这个图像不存在,它会创建一个新的,并返回这个新生的句柄,真是贴心!类似地,gca函数返回当前图像中当前坐标系的句柄,如果没有图像或者当前图像中没有坐标系,gca也会主动创建一个,并返回它的句柄。
至于gco,情况稍有不同。它有两种形式:
H_obj = gco;
H_obj = gco(H_fig);
H_obj是对象的句柄,H_fig是图像的句柄。第一种形式返回当前图像中的当前对象的句柄,而第二种形式则返回指定图像中的当前对象的句柄。当前对象是指用鼠标最后一次点击的对象,这个对象可以是除了根对象之外的任何图形对象。不过要注意,只有在图像内发生了点击事件,图像内才有一个当前对象。在点击事件发生之后,gco会返回一个空数组[],不像gcf和gca那样如果不存在就自动创建。
如何确定一个对象的类型呢?我们可以通过检测其"Type"属性:
H_obj = gco;
type = get(H_obj, 'Type');
"Type"属性是一个字符串,比如"figure"、"line"、"text"等。
寻找任意一个MATLAB对象最简单的方法是用findobj函数。它的基本形式如下:
Hndls = findobj('PropertyName1',value1, ...);
这个命令从根对象开始,搜索所有对象,找出含有指定属性和值的对象。你可以指定多个属性/值,findobj只返回匹配的对象句柄。假设我们已经创建了figure1和figure3,那么
H_fig = findobj('Type', 'figure');
将返回
H_fig = 3 1;
不过这种搜索形式虽然有用,但速度较慢,因为它需要遍历整个对象树。如果你需要多次使用某个对象,只调用一次findobj,然后存储句柄,可以提高效率。限定搜索对象的数量也能加快函数运行速度:
Hndls = findobj(SrchHndls, 'PropertyName1', value1, ...);
找到图1中的虚线:
Hndls = findobj(1, 'Type', 'line', 'LineStyle', '--');
限定搜索范围是一个好习惯,这将能加快函数的运行速度。
有关更多MATLAB句柄编程技巧,可以参考MATLAB句柄编程技巧详解,详细内容还包括图形对象属性和图形用户界面组件。你也可以看看MATLAB图形对象句柄详解,来更好地理解这些概念。更深层次的知识,还可以从matlab图形句柄学习讲义获取。
暂无评论