MATLAB系列09:图形句柄

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=figureHandl = Figure (1) - 属性:Number: 1Name: ''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.5000Marker: 'none'MarkerMode: 'auto'MarkerSize: 6MarkerEdgeColor: 'auto'MarkerFaceColor: 'none'Clipping: onMarkerIndices: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21]AlignVertexCenters: offLineJoin: 'round'Children: [0×0 GraphicsPlaceholder]Parent: [1×1 Axes]Visible: onHandleVisibility: 'on'ButtonDownFcn: ''ContextMenu: [0×0 GraphicsPlaceholder]BusyAction: 'queue'BeingDeleted: offInterruptible: onCreateFcn: ''DeleteFcn: ''Type: 'line'Tag: ''UserData: []Selected: offSelectionHighlight: onHitTest: onPickableParts: 'visible'DisplayName: ''Annotation: [1×1 matlab.graphics.eventdata.Annotation]SeriesIndex: 1DataTipTemplate: [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.rhkb.cn/news/430734.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode面试经典150题-39.组合总数进阶:40.组合总和II

本题是扩展题,真实考过,看这个题之前先看一下39题 Leetcode面试经典150题-39.组合总数-CSDN博客 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数…

E2VPT: An Effective and Efficient Approach for Visual Prompt Tuning

论文汇总 存在的问题 1.以前的提示微调方法那样只关注修改输入,而应该明确地研究在微调过程中改进自注意机制的潜力,并探索参数效率的极限。 2.探索参数效率的极值来减少可调参数的数量? 解决办法 提示嵌入进行transformer中 提示剪枝 Token-wise …

004_动手实现MLP(pytorch)

import torch from torch import nn from torch.nn import init import numpy as np import sys import d2lzh_pytorch as d2l # 1.数据预处理 mnist_train torchvision.datasets.FashionMNIST(root/Users/w/PycharmProjects/DeepLearning_with_LiMu/datasets/FashionMnist, t…

DevExpress WPF中文教程:如何解决行焦点、选择的常见问题?

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

0-1开发自己的obsidian plugin DAY 2

今天上午解决了三个问题 1. typescript长得丑/一片飘红/格式检查太严格 在vscode的settings里搜索下面这个然后false掉: "typescript.validate.enable": false 就不会一片飘红了(其他下载第三方插件如TSLint和typescript hero的方法都不好使&…

虚幻引擎的三种输入模式和将控件显示到屏幕上

首先要知道一个概念 , HUD 和 Input 都是由 PlayerController 来控制的 而虚幻的Input控制模式有三种 Set Input Mode Game Only (设置输入模式仅限游戏): 视角会跟着鼠标旋转 , 就是正常游戏的模式 , 这也是游戏默认输入模式 Set Input Mode UI Only (设置输入模式仅限UI): …

DHCP协议原理(网络协议)

DHCP简介 定义 DHCP(动态主机配置协议)是一种网络管理协议,能够自动为局域网中的每台计算机分配IP地址及其他网络配置参数,包括子网掩码、默认网关和DNS服务器等。这一机制极大简化了网络管理,尤其在大型局域网中&am…

sheng的学习笔记-AI-K-摇臂赌博机(K-armed bandit)

AI目录:sheng的学习笔记-AI目录-CSDN博客 强化学习 sheng的学习笔记-AI-强化学习(Reinforcement Learning, RL)-CSDN博客 基础知识 单步强化学习任务 先考虑比较简单的情形:最大化单步奖赏,即仅考虑一步操作。需注意…

使用API有效率地管理Dynadot域名,注册域名服务器(NS)信息

前言 Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮箱&…

GPU共享技术深度剖析与总结

在人工智能和深度学习领域,GPU(图形处理器)已成为不可或缺的计算工具。随着深度学习模型的规模和复杂性的增加,单个GPU已经难以满足所有训练需求,GPU共享技术应运而生,成为提高训练效率的重要手段。本文将深…

聊聊AUTOSAR:基于Vector MICROSAR的TC8测试开发方案

技术背景 车载以太网技术作为汽车智能化和网联化的重要组成部分,正逐步成为现代汽车网络架构的核心,已广泛应用于汽车诊断(如OBD)、ECU软件更新、智能座舱系统、高清摄像头环视泊车系统等多个领域。 在这个过程中,ET…

oklink爬虫逆向分析

目标网站 aHR0cHM6Ly93d3cub2tsaW5rLmNvbS96aC1oYW5zL2tsYXl0bi9ibG9jay1saXN0L3BhZ2UvMg 一、抓包分析 请求头有很多加密参数,不过经过观察,发现只有X-Apikey是检测的 二、逆向分析 发包类型不是XMLHttpRequest,不能下xhr断点 打开启动器…

【项目案例】物联网比较好的10+练手项目推荐,附项目文档/源码/视频

练手项目推荐 1 智能小车 项目功能介绍: 本项目由三部分组成:应用端(微信小程序)、设备端(Hi3861)、驱动端(UPS)。 1. 应用端,采用微信小程序作为应用端控制界面。在开…

spring里面内置的非常实用的工具

一 、请求数据记录 Spring Boot提供了一个内置的日志记录解决方案,通过 AbstractRequestLoggingFilter 可以记录请求的详细信息。 AbstractRequestLoggingFilter 有两个不同的实现类,我们常用的是 CommonsRequestLoggingFilter。 通过 CommonsRequestL…

CSS | 如何来避免 FOUC(无样式内容闪烁)现象的发生?

一、什么是 FOUC(无样式内容闪烁)? ‌FOUC(Flash of Unstyled Content)是指网页在加载过程中,由于CSS样式加载延迟或加载顺序不当,导致页面出现闪烁或呈现出未样式化的内容的现象。‌ 这种现象通常发生在HTML文档已经加载&…

WPF DataGrid 动态修改某一个单元格的样式

WPF DataGrid 动态修改某一个单元格的样式 <DataGrid Name"main_datagrid_display" Width"1267" Height"193" Grid.Column"1"ItemsSource"{Binding DataGridModels}"><DataGrid.Columns><!--ElementStyle 设…

旷视科技ShuffleNetV1代码分析[pytorch版]

一、前述 旷视科技针对于ShuffleNet系列网络在GitHub网站上已开源&#xff0c;其链接&#xff1a;https://github.com/megvii-model/ShuffleNet-Series 在这个系列中&#xff0c;包括了ShuffleNetV1/V2网络&#xff0c;如下图所示。 我们点开ShuffleNetV1文件夹&#xff0…

python爬虫:从12306网站获取火车站信息

代码逻辑 初始化 (init 方法)&#xff1a; 设置请求头信息。设置车站版本号。 同步车站信息 (synchronization 方法)&#xff1a; 发送GET请求获取车站信息。返回服务器响应的文本。 提取信息 (extract 方法)&#xff1a; 从服务器响应中提取车站信息字符串。去掉字符串末尾的…

UML——统一建模语言

序言&#xff1a; 是统一建模语言的简称&#xff0c;它是一种由一整套图表组成的标准化建模语言。UML用于帮助系统开发人员阐明&#xff0c;展示&#xff0c;构建和记录软件系统的产出。UML代表了一系列在大型而复杂系统建模中被证明是成功的做法&#xff0c;是开发面向对象软件…

【计算机基础】用bat命令将Unity导出PC包转成单个exe可执行文件

Unity打包成exe可执行文件 上边连接是很久以前用过的方法&#xff0c;发现操作有些不一样了&#xff0c;并且如果按上述操作比较麻烦&#xff0c;所以写了个bat命令。 图1、导出的pc程序 如图1是导出的pc程序&#xff0c;点击exe文件可运行该程序。 添加pack_project.bat文件 …