MATLAB系列09:图形句柄

news2025/3/12 19:26:25

MATLAB系列09:图形句柄

  • 9. 图形句柄
    • 9.1 MATLAB图形系统
    • 9.2 对象句柄
    • 9.3 对象属性的检测和更改
      • 9.3.1 在创建对象时改变对象的属性
      • 9.3.2 对象创建后改变对象的属性
    • 9.4 用 set 函数列出可能属性值
    • 9.5 自定义数据
    • 9.6 对象查找
    • 9.7 用鼠标选择对象
    • 9.8 位置和单位
      • 9.8.1 图像(figure)对象的位置
      • 9.8.2 坐标系对象和 uicontrol 对象的位置
      • 9.8.3 文本(text)对象的位置
    • 9.9 打印位置
    • 9.10 默认和 factory 属性

9. 图形句柄

9.1 MATLAB图形系统

MATLAB 图形系统是建立在图形对象的等级系统之上, 每一个图形对象都有一个独立的名字, 这个名字叫做句柄。 每一个图形对象都有它的属性, 我们可以通过修改它的属性来修改物体的行为。 例如, 一条曲线是图形对象的一种。 曲线对象有以下的属性: x 数据, y 数据, 颜色, 线的类型, 线宽, 符号类型等等。 修改其中的一个属性就会改变图象窗口中的一个图像。

图形对象的层次结构如下:

image-20240916145838176

在 MATLAB 中最高层次的图形对象被称为根对象, 我们可以通过它对整个计算机屏幕进行控制。 当 MATLAB 启动时, 根对象会被自动创建, 它一直存在直到 MATLAB 被关闭。与根对象相关的属性是应用于所用 MATLAB 窗口的默认属性。

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

9.2 对象句柄

句柄是在 MATLAB 中的一个独一无二的整数或实数, 用于指定对象的身份。 用于创建一个图象对象的任意命令都会自动地返回一个句柄。示例:

>> Handl=figure

Handl = 

  Figure (1) - 属性:

      Number: 1
        Name: ''
       Color: [0.9400 0.9400 0.9400]
    Position: [573 444 560 420]
       Units: 'pixels'

  显示 所有属性

图像(图)对象的句柄一般是一个小的正整数, 例如 1, 2, 3……而其他的图形(graphic)对象为任意的浮点数。我们可以利用 MATLAB 函数得到图像, 坐标系和其他对象的句柄。 例如, 函数 gcf 返回当前图像窗口的句柄, 而函数 gca 则返回在当前图像窗口中的当前坐标系对象的句柄, 函数gco 返回当前选择对象的句柄。 为了方便, 存储句柄的变量名要在小写字母后面个H。 这样就可以与普通变量(所有的小写变量, 大写变量, 全局变量)区分开来。

9.3 对象属性的检测和更改

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

当一个对象被创建时, 所有的属性都会自动初始化为默认值。 包含有"propertyname(属性名)"的创建函数创建对象时, 默认值会被跳过, 而跳过的值在创建函数中有。

plot(x, y, 'LineWidth', 2);

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

我们可以用随时用 get 函数检测任意一个对象的属性, 并用 set 函数对它进行修改。

示例:

>> x = 0:0.1:2;
y = x .^2;
Hnd1 = plot(x, y);
>> result=get(Hnd1)

result = 

  包含以下字段的 struct:

                 XData: [0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1] (1×21 double)
             XDataMode: 'manual'
             XVariable: ''
                 YData: [0 0.0100 0.0400 0.0900 0.1600 0.2500 0.3600 0.4900 0.6400 0.8100 1] (1×21 double)
             YDataMode: 'manual'
             YVariable: ''
                 ZData: [1×0 double]
             ZDataMode: 'auto'
             ZVariable: ''
           XDataSource: ''
           YDataSource: ''
           ZDataSource: ''
                 Color: [0 0.4470 0.7410]
             ColorMode: 'auto'
             LineStyle: '-'
         LineStyleMode: 'auto'
             LineWidth: 0.5000
                Marker: 'none'
            MarkerMode: 'auto'
            MarkerSize: 6
       MarkerEdgeColor: 'auto'
       MarkerFaceColor: 'none'
              Clipping: on
         MarkerIndices: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21]
    AlignVertexCenters: off
              LineJoin: 'round'
              Children: [0×0 GraphicsPlaceholder]
                Parent: [1×1 Axes]
               Visible: on
      HandleVisibility: 'on'
         ButtonDownFcn: ''
           ContextMenu: [0×0 GraphicsPlaceholder]
            BusyAction: 'queue'
          BeingDeleted: off
         Interruptible: on
             CreateFcn: ''
             DeleteFcn: ''
                  Type: 'line'
                   Tag: ''
              UserData: []
              Selected: off
    SelectionHighlight: on
               HitTest: on
         PickableParts: 'visible'
           DisplayName: ''
            Annotation: [1×1 matlab.graphics.eventdata.Annotation]
           SeriesIndex: 1
       DataTipTemplate: [1×1 matlab.graphics.datatip.DataTipTemplate]
           SourceTable: [0×0 table]
      AffectAutoLimits: on

得到的图像:

image-20240916151426210

更改线宽:

>> set(Hnd1,'LineWidth',4,'LineStyle','--')
image-20240916151514916

我们还可以使用属性编辑器来改变图像属性,启动命令为:

propedit(HandleList);
propedit;

这个函数第一个形式用于编辑所列出的句柄的属性, 而这个函数的第二种形式用于编辑当前图象的属性。

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

函数用于提供所有可能的属性值列表。 如果在调用函数 set 时, 只包括属性名而不包括相应的属性值, 那么函数 set 就会返回所有的合法属性值。

>> set(Hnd1,'LineStyle')
  5×1 cell 数组

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

函数 set(Hnd1)返回一个对象的所有属性的所有可能的属性值。

>> set(Hnd1)
      AffectAutoLimits: {[on]  [off]}
    AlignVertexCenters: {[on]  [off]}
            BusyAction: {'queue'  'cancel'}
         ButtonDownFcn: {}
              Children: {}
              Clipping: {[on]  [off]}
                 Color: {1×0 cell}
             ColorMode: {'auto'  'manual'}
           ContextMenu: {}
             CreateFcn: {}
             DeleteFcn: {}
           DisplayName: {}
      HandleVisibility: {'on'  'callback'  'off'}
               HitTest: {[on]  [off]}
         Interruptible: {[on]  [off]}
              LineJoin: {'chamfer'  'miter'  'round'}
             LineStyle: {'-'  '--'  ':'  '-.'  'none'}
         LineStyleMode: {'auto'  'manual'}
             LineWidth: {}
                Marker: {1×16 cell}
       MarkerEdgeColor: {'auto'  'none'}
       MarkerFaceColor: {'auto'  'none'}
         MarkerIndices: {}
            MarkerMode: {'auto'  'manual'}
            MarkerSize: {}
                Parent: {}
         PickableParts: {'visible'  'none'  'all'}
              Selected: {[on]  [off]}
    SelectionHighlight: {[on]  [off]}
           SeriesIndex: {'none'}
           SourceTable: {}
                   Tag: {}
              UserData: {}
               Visible: {[on]  [off]}
                 XData: {}
             XDataMode: {'auto'  'manual'}
           XDataSource: {}
             XVariable: {}
                 YData: {}
             YDataMode: {'auto'  'manual'}
           YDataSource: {}
             YVariable: {}
                 ZData: {}
             ZDataMode: {'auto'  'manual'}
           ZDataSource: {}
             ZVariable: {}

9.5 自定义数据

除了一个 GUI 对象定义的标准属性以外, 程序可以定义所要控制的数据的特殊属性。程序员可以用附加属性把任意类型的数据添加到 GUI 对象中。 任意数量的数据可以被存储,并应用于各种目的。自定义数据可以用近似标准属性的形式存储。 每一个数据条目都有一个名字和值。 数据变量可以用函数 setappdate 存储在一个对象, 并用函数 getappdata 接收。setappdate 函数的基本形式如下

setappdata(Hndl, 'DataName', DataValue);

与自定义数据相关的函数:

image-20240916154330981

9.6 对象查找

每一个新的图象在从创建开始时就有它们自已的句柄, 句柄可以由创建函数返回。假设我们由于一些原因, 丢失了对象的句柄。 我们如何检测和图形对象呢?MATLAB 提供了四个专门的函数, 用来帮助寻找对象的句柄。

  • gcf返回当前图象的句柄
  • gca返回当前图象中当前坐标系的句柄
  • gco返回当前对象的句柄
  • findobj寻找指定属性值的图形对象

函数 gcf 返回当前图象的句柄。 如果这个图象不存在, gcf 将会创建一个, 并返回它的句柄。 函数 gca 返回当前图象中当前坐标系的句柄, 如果图象不存在, 或当前图象中无坐标系, 那么函数 gca 将创建一个坐标系, 并返回它的句柄。

当前对象是指用鼠标单击的最后一个对象。 这个对象可以是除了根对象的任意图形对象。直到鼠标在图象内发生了单击事件, 在图象内才有一个当前对象。 在单击事件发生之后, 函数 gco 将返回一个空数组[], 不像函数 gcf 和 gca, gco 如果不存在就自动创建。

9.7 用鼠标选择对象

函数 gco 将返回当前对象, 当前对象是指用鼠标最后一次单击的对象。 每一个对象都有一个与之相关的可选择区, 在可选择区内任意一个单击都可以看作对这个对象的单击。 对于细小的对象(例如线, 点)来说, 这种特性是非常重要的。 可选择区的宽度和形状由对象的类型确定。

如果一个用户单击了两个或多个对象的所在点, 例如两线的交插点将会有什么事情发生。 这取决于每一个对象堆垛顺序(stacking order)。 堆垛顺序是 MATLAB 选择对象的顺序。 在一个图象中所有的"子对象"属性句柄顺序就是堆垛顺序。 如果单击了两个或多个对象的所在点, 在堆垛顺序的优先权高的将会被选择。

当选择图形对象时, 我们有时可以调用 MATLAB 内建函数 waitforbuttonpress。 这个函数的形式为

k = waitforbuttonpress

当这个函数运行时, 它将会暂停程序, 直到任意键按下或鼠标单击事件发生后, 程序才恢复运行。 如果按下了鼠标键函数将会返回 0, 按下任意键, 函数将会 1。函数经常用于暂停程序。 当鼠标单击事件发生后, 程序将会用 gco 函数恢复选择对象的句柄。

9.8 位置和单位

9.8.1 图像(figure)对象的位置

一个图象(图)的位置(“position”)用一个 4 元素行向量指定在计算机屏幕内的位置。 在这个向量中的值为[left bottom width height], 其中 left 是指图象的左边界, bottom 是指图象的底边界, width 是指图象的宽度, height 是指图象的高度。 它的这些位置值的单位可以用对象的"Units"属性指定。 例如, 与当前图象的位置和单位可以用下面的语句得到。

>> get(gcf,'Position')

ans =

  573.0000  443.6667  560.0000  420.0000

>> get(gcf,'Units')

ans =

    'pixels'

单位(“units”)属性的默认值为像素(pixels), 但是它的属性值还可以为英尺(inches), 公分(centimeters), 点(points), 或归一化坐标(normalixed coordinates)。 像素代表了屏幕像素,即在屏幕上可表示出来的最小的对象。因为像素数因机算机屏幕的不同而不同, 所以指定对象的大小也会随之改变。归一化坐标是在 0 到 1 范围内。在归一化坐标中,屏幕的左下角为[0, 0]右上角为[1.0, 1.0]。

如果对象的位置归一化坐标系的形式描述, 那么不同分辨率的显示器上对象的相对位置是固定的。 例如, 下面的语句创建了一个图象, 把图象放置在屏幕的上部, 而不用考虑显示器的大小。

H = figure(1)
set(H,'units', 'normalized','position',[0 .5 .5 .45])

9.8.2 坐标系对象和 uicontrol 对象的位置

坐标系对象和 uicontrol 对象的位置同样可以用一个 4 元素向量表示, 但它是相对于figure 对象的位置。 一般说来, 所有子对象的"position"属性都与它的父对象相关。默认地, 坐标系对象在一图象内的位置是有归一化单位指定的, (0, 0)代表图象的左下角, (1, 1)代表图象的右上角。

9.8.3 文本(text)对象的位置

与其他对象不同, 文本(text)对象有一个位置属性, 包含两个或三个元素。 这些元素为坐标系对象中文本对象的 x, y 和 z 轴。 注意都显示在坐标轴上。放置在某一特定点的文本对象的位置可由这个对象的 HorizontalAlignment 和VerticalAlignment 属性控制HorizontalAlignment 的属性可以是{Left}。 Center, 或 Right。VerticalAlignment 的属性值可以为 Top, cap, {Middle}, Baseline 或 Bottom。文本对象的大小由字体大小和字符数决定, 所以没有高度和宽度值与之相连。

9.9 打印位置

属性"Position"和"Units"用来指定图象在计算机屏幕上的位置。 还有其他的五个属性用于指定图象在打印纸上的位置。

image-20240917093940564

9.10 默认和 factory 属性

MATLAB 允许你修改默认值本身,所以当他们被创建时, 所有的对象都会继承所有正确的属性值。默认值的设置要用一个字符串, 这个字符串由"Default", 对象类型和属性名组成。 所以默认图象颜色可以通过属性"DefaultFigureColor"来设置, 默认的坐标轴颜色可以通过属性"DefaultAxesColor"设置。 下面是设置默认值的一些例子:

image-20240917094540527

如果你想要定制 MATLAB, 每一次都有不同的默认值, 那么每次当 MATLAB 启动时你必须对根对象设置默认值。 最简单的方法是把默认值存入 startup.m 文件, 每次 MATLAB 启动时都会自动执行。 例如, 假设你经常使用 A4 纸, 并在图象中经常加入网格线。 那么你可以把下面的语句加入到 startup.m 文件中。

set(0, 'DefaultFigurePaperType', 'a4letter');
set(0, 'DefaultAxesXGrid', 'on');
set(0, 'DefaultAxesYGrid', 'on');
set(0, 'DefaultAxesZGrid', 'on');

有三种特殊值字符串用于句柄图形:“remove”, “factory"和"default”。 如果你已经为一个属性设置了默认值, 那么"remove"值将会删除你所设置的默认值。 例如, 假设你设置默认的图象颜色为黄色。

set(0, 'DefaultFigureColor', 'y');

调用下面的函数将会取消当前的默认值并恢复先前的默认值。

set(0, 'DefaultFigureColor', 'remove');

字符串"factory"允许临时跳过当前的默认值, 并使用原来的 MATLAB 的默认值。

figure('Color', 'factory');

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2147878.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux相关概念和重要知识点(4)(自举、vim)

1.语言和编译器的发展 (1)汇编语言的出现 计算机只能看懂二进制,但是用二进制实现一个功能就太难了,人们需要发明一种高效的语言。人们抽象出一套编程逻辑,定义了一系列操作,接下来就需要实现它。最初人们…

假期学习笔记总结--iOS 自动释放池

iOS 自动释放池 https://juejin.cn/post/6844904094503567368#heading-23 ARC和MRC 苹果在 iOS 5 中引入了ARC(Automatic Reference Counting)自动引用计数内存管理技术,通过LLVM编译器和Runtime协作来进行自动管理内存。LLVM编译器会在编…

Linux进阶命令-重定向

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 经过上一章Linux日志的讲解,我们对Linux系统自带的日志服务已经有了一些了解。我们接下来将讲解一些进阶命令&am…

我的创作纪念日-20240919

何尝不是一种纪念。 话说,毕业之后和大学同学去深圳,后面回家考编制,现在在家里的中国邮政的代理金融网点上班。

C++:布尔类型,引用,堆区空间

1.布尔类型 #include <iostream>using namespace std;int main() {bool b13;bool b20;cout << "b1" <<b1<< endl;cout << "b2" <<b2<< endl;cout <<boolalpha<< "b1" <<b1<<…

CGE:基于Causal LLM的Code Embedding模型

近日&#xff0c;CodeFuse-CGE 项目在外滩大会展出&#xff0c;吸引了众多技术、产品从业者的到访&#xff0c;部分参观者表示“文搜代码”令人耳目一新&#xff0c;期待模型后续的表现。 以下是 CodeFuse-CGE 项目的相关开源介绍&#xff0c;如果对这部分内容感兴趣&#xff…

Qt 窗口事件机制

在 Qt 开发中&#xff0c;窗口的关闭、隐藏、显示等事件是常见且重要的功能。不同的事件触发条件、处理方式不同&#xff0c;了解和掌握这些事件有助于我们更好地控制窗口行为。本文将详细讲解这些事件的使用方法&#xff0c;并通过代码实例来展示其应用。 1. done(int r) — 关…

9.19总结

这几天学习了网络流 1&#xff0c;EK ek的主要思路是不断通过bfs找到增广路&#xff0c;找到增广路再建立反向边&#xff0c;直到不能再bfs到汇点&#xff0c;为什么可以通过建反向边呢&#xff1f;以上图举例&#xff0c;上图走完第一条增广路建立了一条反向边&#xff0c;当…

fps pve制作

1 导入素材 将人物模型和骨骼导入&#xff08;直接将fps拖进去&#xff0c;选择正确的骨骼即可&#xff09; 将枪支模型导入&#xff0c;取消创建骨骼&#xff0c;将静态网格体导入其中 2创建角色蓝图&#xff0c;也就是我们玩家控制的对象 然后在角色的组件中找到网格体并使…

几何 | 数学专项

日期内容2024.9.19创建 { d > 0 , 递增数列 d < 0 , 递减数列 d 0 &#xff0c;常数列 \begin{cases} d>0,递增数列\\ d<0,递减数列\\ d0&#xff0c;常数列 \end{cases} ⎩ ⎨ ⎧​d>0,递增数列d<0,递减数列d0&#xff0c;常数列​ 【2010.13】 【1.历年真…

【算法题】46. 全排列-力扣(LeetCode)

【算法题】46. 全排列-力扣(LeetCode) 1.题目 下方是力扣官方题目的地址 46. 全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3…

漏件、丢件常发生?海外仓智能化管理来解决

随着海外仓业务的迅猛发展&#xff0c;一些仓库在日常运营中出现了出入库操作不规范、库存管理不够严格等问题。这些问题多数源于高度依赖人工操作及随意性较强的管理方式&#xff0c;导致了库存数据不准确、货物遗漏或丢失等情况的发生。长此以往&#xff0c;不仅会增加客户的…

让自动驾驶系统无限逼近人类?最新混合规划器实现高度安全的实车导航

导读&#xff1a; 本篇文章针对基于学习的规划器难以保证安全闭环驾驶这一问题&#xff0c;提出了一种新型的混合运动规划器&#xff0c;其结合了基于学习和基于优化的技术。通过仿真实验和实车实验&#xff0c;证明了本文规划器的有效性和鲁棒性。©️【深蓝AI】编译 1. 摘…

【已解决】Uncaught RangeError: Maximum depth reached

【已解决】Uncaught RangeError: Maximum depth reached 在JavaScript编程中&#xff0c;Uncaught RangeError: Maximum depth reached 是一个常见的错误&#xff0c;通常与递归调用深度过大有关。递归是一种编程技巧&#xff0c;它允许函数直接或间接地调用自身。然而&#xf…

2024年轻人驯化AI指南

或许Python编程是答案 我为您精心准备了一份全面的Python学习大礼包&#xff0c;完全免费分享给每一位渴望成长、希望突破自我现状却略感迷茫的朋友。无论您是编程新手还是希望深化技能的开发者&#xff0c;都欢迎加入我们的学习之旅&#xff0c;共同交流进步&#xff01; &…

OpenAI GPT o1技术报告阅读(2)- 关于模型安全性的测试案例

✨报告阅读&#xff1a;使用大模型来学习推理(Reason) 首先是原文链接&#xff1a;https://openai.com/index/learning-to-reason-with-llms/ 接下来我们看一个简单的关于模型安全性的测试&#xff0c;当模型被问到一个有风险的话题时&#xff0c;会如何思考并回答用户呢&…

saltstack入门

一、saltstack入门 一、saltstack介绍 1、saltstack简述 SaltStack 是一种基于 C/S 架构的服务器基础架构集中化管理平台&#xff0c;管理端称为 Master&#xff0c;客户端称为 Minion。SaltStack 具备配置管理、远程执行、监控等功能&#xff0c;一般可以理解为是简化版的 Pup…

安卓Settings值原理源码剖析存储最大的字符数量是多少?

背景&#xff1a; 平常做rom相关开发时候经常需要与settings值打交道&#xff0c;需要独立或者存储一个settings的场景&#xff0c;群里有个学员朋友就问了一个疑问&#xff0c;那就是Settings的putString方式来存储字符&#xff0c;那么可以存储的最大字符是多少呢&#xff1…

初始c++:入门基础(完结)

打字不易&#xff0c;留个赞再走吧~~~ 目录 一函数重载二引用1 引⽤的概念和定义2引⽤的特性3引⽤的使⽤三inline四nullptr 一函数重载 C⽀持在同⼀作⽤域中出现同名函数&#xff0c;但是要求这些同名函数的形参不同&#xff0c;可以是参数个数不同或者 类型不同。这样C函数调⽤…

【数据结构-差分】【hard】力扣995. K 连续位的最小翻转次数

给定一个二进制数组 nums 和一个整数 k 。 k位翻转 就是从 nums 中选择一个长度为 k 的 子数组 &#xff0c;同时把子数组中的每一个 0 都改成 1 &#xff0c;把子数组中的每一个 1 都改成 0 。 返回数组中不存在 0 所需的最小 k位翻转 次数。如果不可能&#xff0c;则返回 -…