保存和加载图表类的实例
类继承的图表ChartContainer
基类遵循与其他MATLAB相同的保存和加载规则®对象。但是在某些情况下,您可能希望对象保存和加载其他信息。例如,为了支持保存和加载交互更改的结果(如旋转或金宝app缩放),必须将修改后的轴视图存储在类的属性中。通过定义用于存储和检索此类更改的属性和方法,用户可以保存和重新加载图表的实例,并保留其更改。
保存和加载轴的编码模式更改
内置的轴交互改变了轴上的某些属性。例如,拖动以旋转3-D图表将更改视图
财产。类似地,滚动以在图表中缩放也会更改XLim
,YLim
,(也有可能ZLim
)坐标轴上的属性。为了在用户保存和重新加载图表时保存更改,将以下组件添加到类中:
定义一个受保护的属性,用于存储图表状态-此属性提供了一个地方来存储MATLAB保存图表对象时的轴变化。例如,您可以命名此属性
ChartState
.定义一个
得到
检索图表状态的方法-这个方法根据MATLAB是保存还是加载图表对象来做两件事中的任何一件。当MATLAB保存图表对象时,该方法返回相关的轴更改,以便保存它们。当MATLAB加载图表对象时,该方法返回存储在ChartState
财产。定义一个更新坐标轴的受保护方法-当图表对象加载到MATLAB中时,此方法调用
得到
方法。ChartState
属性,然后更新图表的相关轴属性。
定义用于存储图表状态的受保护属性
定义一个受保护的属性来存储相关的轴信息。此属性为空,除非MATLAB在保存过程中设置其值,或者MATLAB加载图表的已保存实例。用一个有用且易于识别的名称定义属性。例如,定义名为ChartState
.
属性(Access = protected) ChartState = []结束
定义一个得到
检索图表状态的方法
定义一个公共得到
方法。ChartState
财产。像所有的集
而且得到
方法时,此方法自动继承的访问权限ChartState
财产。MATLAB在保存图表实例时调用此方法。
在此方法中,创建名为isLoadedStateAvailable
存储逻辑
价值。这个值是真正的
当ChartState
属性不是空的。
接下来,编写一个条件语句,检查的值isLoadedStateAvailable
.将语句分成分句:
如果……
条款-isLoadedStateAvailable
值是真正的
.类的内容ChartState
财产。其他的
条款-isLoadedStateAvailable
值是假
.创建一个结构并获取axis对象。添加XLim
,YLim
,ZLim
字段添加到结构中XLim
,YLim
,ZLim
坐标轴上的属性发生了变化。要测试轴属性是否改变,请检查是否将相应的模式属性设置为“手动”
.因为没有与轴相关的模式属性视图
属性,添加视图
字段到结构,而不检查任何东西。
方法函数data = get.ChartState(obj) isLoadedStateAvailable = ~isempty(obj. chartstate);如果isLoadedStateAvailable data = obj.ChartState;其他的数据= struct;ax = getAxes(obj);仅当模式为手动时获取轴限制。如果比较字符串(ax。XLimMode,“手动”)数据。XLim= ax.XLim;结束如果比较字符串(ax。YLimMode,“手动”)数据。YLim= ax.YLim;结束如果比较字符串(ax。ZLimMode,“手动”)数据。ZLim= ax.ZLim;结束%没有ViewMode检查。不管怎样,存储视图。数据。视图= ax.View;结束结束结束
定义一个更新坐标轴的受保护方法
定义一个受保护的方法loadstate
.在此方法中,需要执行以下步骤:
查询
ChartState
属性并将返回值存储为数据
.的存在性
XLim
,YLim
,ZLim
,视图
字段,然后更新轴上的相应属性。对象的内容
ChartState
财产。
方法的末尾调用该方法设置
方法(在创建组成图表的图形对象之后)。的设置
方法在MATLAB创建图表的新实例或加载图表的实例时执行。
函数loadstate (obj)数据= obj.ChartState;ax = getAxes(obj);查找已更改的状态。如果isfield(数据、“XLim”) ax.XLim = data.XLim;结束如果isfield(数据、“YLim”) ax.YLim = data.YLim;结束如果isfield(数据、“ZLim”) ax.ZLim = data.ZLim;结束如果isfield(数据、“视图”) ax.View = data.View;结束将ChartState重置为空obj.ChartState = [];结束
示例:存储轴限制和视图的3-D图形
定义一个MeshGradientChart
类用于显示网格图x而且y格点上的梯度向量。设计这个类以便XLim
,YLim
,ZLim
,视图
当用户保存和重新加载图表实例时,坐标轴的属性将被保留。
要定义这个类,请创建一个名为MeshGradientChart.m
在MATLAB路径下的文件夹中。然后按照表中的步骤实现该类。
一步 | 实现 |
---|---|
从 |
classdef网格梯度图表< matlab.graphics.chartcontainer.ChartContainer
|
定义公共属性。 |
properties XData (:,:) double = [] YData (:,:) double = [] ZData (:,:) double = []结束
|
定义私有属性。一个属性存储一个 |
SurfaceObject (1,1) matlab.graphics.chart.primitive.Surface QuiverObject (1,1) matlab.graphics.chart.primitive.Quiver . properties (Access = private,Transient,NonCopyable结束
|
定义一个 |
properties (Access = protected) ChartState = []结束
|
实现 |
方法(Access = protected)函数设置(obj) ax = getAxes(obj);创建Mesh和Quiver对象。obj。SurfaceObject =网(ax ,[],[],[],“FaceColor”,“没有”);(ax,“上”obj。QuiverObject = quiver3 (ax ,[],[],[],[],“颜色”,“r”,“线宽”2);(ax,“关闭”)%轴的负载状态。loadstate (obj);结束 |
实现 |
函数更新(obj)更新网格数据。obj.SurfaceObject.XData = obj.XData;obj.SurfaceObject.YData = obj.YData;obj.SurfaceObject.ZData = obj.ZData;更新向量尾部的位置。obj.QuiverObject.XData = obj.XData;obj.QuiverObject.YData = obj.YData;obj.QuiverObject.ZData = obj.ZData;更新向量的长度和方向。[gradx,grady] = gradient(obj.ZData);obj.QuiverObject.UData = gradx;obj.QuiverObject.VData = grady;obj.QuiverObject.WData = 0 (size(obj.ZData));结束 |
实现 |
函数loadstate (obj)数据= obj.ChartState;ax = getAxes(obj);查找已更改的状态。。如果isfield(数据、“XLim”) ax.XLim = data.XLim;结束如果isfield(数据、“YLim”) ax.YLim = data.YLim;结束如果isfield(数据、“ZLim”) ax.ZLim = data.ZLim;结束如果isfield(数据、“视图”) ax.View = data.View;结束将ChartState重置为空。obj.ChartState = [];结束结束 |
实现 |
方法函数data = get.ChartState(obj) isLoadedStateAvailable = ~isempty(obj. chartstate);如果加载状态可用,返回ChartState内容。否则,返回当前轴的状态。如果isLoadedStateAvailable data = obj.ChartState;其他的数据= struct;ax = getAxes(obj);仅当模式为手动时获取轴限制。如果比较字符串(ax。XLimMode,“手动”)数据。XLim= ax.XLim;结束如果比较字符串(ax。YLimMode,“手动”)数据。YLim= ax.YLim;结束如果比较字符串(ax。ZLimMode,“手动”)数据。ZLim= ax.ZLim;结束%没有ViewMode检查。不管怎样,存储视图。数据。视图= ax.View;结束结束结束结束 |
接下来,创建图表的一个实例。然后旋转或放大图表并保存它。当您将图表加载回MATLAB中时,该对象会保留交互更改。
创建图表的实例
[X,Y] = meshgrid(-5:5);Z = x .²+ y .²;c =网格梯度图(“XData”, X,“YData”, Y,“ZData”, Z);
当你创建图表时:
的
设置
方法调用loadstate
方法。的
loadstate
方法执行这些任务,这些任务最终对图表对象或底层轴对象没有影响。调用
得到的。ChartState
方法,该方法返回包含轴的当前值的结构视图
财产。重置
视图
属性对应于结构中存储的值。对象的内容
ChartState
财产。
旋转或放大图表并保存它
savefig (gcf“mychart.fig”)
保存图表时,MATLAB调用得到的。ChartState
方法,该方法返回一个包含以下内容的结构:
的值
XLim
,YLim
,或ZLim
坐标轴上的属性,但前提是它们改变了的值
视图
坐标轴上的性质
MATLAB检索结构后,将结构存储在ChartState
属性所保存的图表对象。
加载您保存的图表
openfig (“mychart.fig”)
当你加载图表时:
的
设置
方法调用loadstate
方法。的
loadstate
方法执行以下任务:调用
得到的。ChartState
方法中的结构返回ChartState
财产。重置
XLim
,YLim
,ZLim
,视图
属性,但仅当结构包含相应的字段时。对象的内容
ChartState
财产。