Графики, которые наследуют от ChartContainer
базовый класс следует тем же правилам сохранения и загрузки, что и другой MATLAB® объекты. Однако в некоторых случаях можно хотеть, чтобы объекты сохраняли и загружали дополнительную информацию. Например, чтобы обеспечить поддержку сохранения и загрузки результата интерактивных изменений, таких как вращение или изменение масштаба, необходимо сохранить измененное представление осей в свойстве вашего класса. Путем определения свойств и методов хранения и извлечения изменений такого рода, пользователи могут сохранять и перезагружать образцы графика с сохраненными изменениями.
Встроенные взаимодействия осей изменяют определенные свойства осей. Например, перетаскивание для поворота 3 -D графика меняет View
свойство. Точно так же прокрутка для масштабирования внутри графика меняет XLim
, YLim
, (и, возможно ZLim
) свойства на осях. Чтобы сохранить изменения при сохранении и перезагрузке графика, добавьте эти компоненты к своему классу:
Задайте защищенное свойство для хранения состояния графика - Это свойство предоставляет место для хранения изменений осей, когда MATLAB сохраняет объект графика. Для примера можно назвать это свойство ChartState
.
Задайте get
метод для извлечения состояния графика - этот метод делает одну из двух вещей в зависимости от того, сохраняет или загружает ли MATLAB объект графика. Когда MATLAB сохраняет объект графика, метод возвращает соответствующие изменения осей, чтобы они могли быть сохранены. Когда MATLAB загружает объект графика, метод возвращает изменения осей, которые хранятся в ChartState
свойство.
Задайте защищенный метод, который обновляет оси - Когда объект графика загружается в MATLAB, этот метод вызывает get
метод для ChartState
и затем обновляет соответствующие свойства осей для графика.
Задайте защищенное свойство для хранения соответствующей информации о осях. Это свойство пустое, за исключением случаев, когда MATLAB задает его значение в процессе сохранения или когда MATLAB загружает сохраненный образец графика. Задайте свойство с именем, которое полезно и легко распознать. Для примера задайте свойство под названием ChartState
.
properties (Access = protected) ChartState = [] end
get
Метод получения состояния графикаОпределите общедоступное get
метод для ChartState
свойство. Как и все set
и get
методы, этот метод автоматически наследует разрешения доступа ChartState
свойство. MATLAB вызывает этот метод при сохранении образца графика.
В рамках этого метода создайте переменную с именем isLoadedStateAvailable
который хранит logical
значение. Это значение true
когда ChartState
свойство не пустое.
Далее напишите условный оператор, который проверяет значение isLoadedStateAvailable
. Разделите оператора на пункты:
if...then
пункт - The isLoadedStateAvailable
значение true
. Возврат содержимого ChartState
свойство.
else
пункт - The isLoadedStateAvailable
значение false
. Создайте структуру и получите объект осей. Добавьте XLim
, YLim
, и ZLim
поля в структуру, только если XLim
, YLim
, и ZLim
изменены свойства осей. Чтобы проверить, изменились ли свойства осей, проверяйте, заданы ли соответствующие свойства mode 'manual'
. Поскольку свойство mode не связано с осями View
свойство, добавить View
поле в структуру, не проверяя ничего.
methods function data = get.ChartState(obj) isLoadedStateAvailable = ~isempty(obj.ChartState); if isLoadedStateAvailable data = obj.ChartState; else data = struct; ax = getAxes(obj); % Get axis limits only if mode is manual. if strcmp(ax.XLimMode,'manual') data.XLim = ax.XLim; end if strcmp(ax.YLimMode,'manual') data.YLim = ax.YLim; end if strcmp(ax.ZLimMode,'manual') data.ZLim = ax.ZLim; end % No ViewMode to check. Store the view anyway. data.View = ax.View; end end end
Задайте защищенный метод под названием loadstate
. В этом методе выполните следующие шаги:
Запросите ChartState
свойство и сохраните возвращенное значение как data
.
Проверяйте существование XLim
, YLim
, ZLim
, и View
поля перед обновлением соответствующих свойств осей.
Очистить содержимое ChartState
свойство.
После создания этого метода вызовите его около конца setup
метод (после создания графических объектов, составляющих ваш график). The setup
метод выполняется, когда MATLAB создает новый образец графика или когда он загружает образец графика.
function loadstate(obj) data=obj.ChartState; ax = getAxes(obj); % Look for states that changed if isfield(data, 'XLim') ax.XLim=data.XLim; end if isfield(data, 'YLim') ax.YLim=data.YLim; end if isfield(data, 'ZLim') ax.ZLim=data.ZLim; end if isfield(data, 'View') ax.View=data.View; end % Reset ChartState to empty obj.ChartState=[]; end
Задайте MeshGradientChart
класс для отображения сетчатого графика с x и y градиентными векторами в точках сетки. Спроектируйте этот класс так, чтобы XLim
, YLim
, ZLim
, и View
свойства осей сохраняются, когда пользователь сохраняет и перезагружает образец графика.
Чтобы определить этот класс, создайте программный файл с именем MeshGradientChart.m
в папке, расположенной в пути MATLAB. Затем реализуйте класс путем следования шагам в таблице.
Шаг | Реализация |
---|---|
Вывод из |
classdef MeshGradientChart < matlab.graphics.chartcontainer.ChartContainer |
Задайте общественную собственность. |
properties
XData (:,:) double = []
YData (:,:) double = []
ZData (:,:) double = []
end |
Задайте частную собственность. Одно свойство хранит |
properties (Access = private,Transient,NonCopyable)
SurfaceObject (1,1) matlab.graphics.chart.primitive.Surface
QuiverObject (1,1) matlab.graphics.chart.primitive.Quiver
end |
Задайте защищенную |
properties (Access = protected)
ChartState = []
end |
Реализуйте |
methods(Access = protected) function setup(obj) ax = getAxes(obj); % Create Mesh and Quiver objects. obj.SurfaceObject=mesh(ax,[],[],[],'FaceColor','none'); hold(ax,'on') obj.QuiverObject=quiver3(ax,[],[],[],[],'Color','r','LineWidth',2); hold(ax,'off') % Load state of the axes. loadstate(obj); end |
Реализуйте |
function update(obj) % Update Mesh data. obj.SurfaceObject.XData = obj.XData; obj.SurfaceObject.YData = obj.YData; obj.SurfaceObject.ZData = obj.ZData; % Update locations of vector tails. obj.QuiverObject.XData = obj.XData; obj.QuiverObject.YData = obj.YData; obj.QuiverObject.ZData = obj.ZData; % Update lengths and directions of vectors. [gradx,grady] = gradient(obj.ZData); obj.QuiverObject.UData = gradx; obj.QuiverObject.VData = grady; obj.QuiverObject.WData = zeros(size(obj.ZData)); end |
Реализуйте |
function loadstate(obj) data=obj.ChartState; ax = getAxes(obj); % Look for states that changed. if isfield(data, 'XLim') ax.XLim=data.XLim; end if isfield(data, 'YLim') ax.YLim=data.YLim; end if isfield(data, 'ZLim') ax.ZLim=data.ZLim; end if isfield(data, 'View') ax.View=data.View; end % Reset ChartState to empty. obj.ChartState=[]; end end |
Реализуйте |
methods function data = get.ChartState(obj) isLoadedStateAvailable = ~isempty(obj.ChartState); % Return ChartState content if loaded state is available. % Otherwise, return current axes state. if isLoadedStateAvailable data = obj.ChartState; else data = struct; ax = getAxes(obj); % Get axis limits only if mode is manual. if strcmp(ax.XLimMode,'manual') data.XLim = ax.XLim; end if strcmp(ax.YLimMode,'manual') data.YLim = ax.YLim; end if strcmp(ax.ZLimMode,'manual') data.ZLim = ax.ZLim; end % No ViewMode to check. Store the view anyway. data.View = ax.View; end end end end |
Затем создайте образец графика. Затем поверните или увеличьте изображение графика и сохраните ее. Объект сохраняет интерактивные изменения, когда вы загружаете график обратно в MATLAB.
[X,Y] = meshgrid(-5:5); Z = X.^2 + Y.^2; c = MeshGradientChart('XData',X,'YData',Y,'ZData',Z);
При создании графика:
The setup
метод вызывает loadstate
способ.
The loadstate
метод выполняет эти задачи, которые в конечном счете не эффекта на объект графика или базовый объект осей.
Вызовите get.ChartState
метод, который возвращает структуру, содержащую текущее значение осей View
свойство.
Сбросьте View
свойство на осях, равное значению, хранящемуся в структуре.
Очистить содержимое ChartState
свойство.
savefig(gcf,'mychart.fig')
Когда вы сохраняете график, MATLAB вызывает get.ChartState
метод, который возвращает структуру, содержащую:
Значения XLim
, YLim
, или ZLim
свойства на осях, но только если они изменились
Значение View
свойство на осях
После извлечения структуры MATLAB сохраняет структуру в ChartState
свойство сохраняемого объекта графика.
openfig('mychart.fig')
Когда вы загружаете график:
The setup
метод вызывает loadstate
способ.
The loadstate
метод выполняет следующие задачи:
Вызовите get.ChartState
метод, который возвращает структуру из ChartState
свойство.
Сбросьте XLim
, YLim
, ZLim
, и View
свойства на осях, но только если структура содержит соответствующие поля.
Очистить содержимое ChartState
свойство.