Диаграммы, наследующие от 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 пункт - isLoadedStateAvailable значение равно true. Возврат содержимого ChartState собственность.
else пункт - isLoadedStateAvailable значение равно false. Создайте структуру и получите объект оси. Добавить XLim, YLim, и ZLim к структуре, только если XLim, YLim, и ZLim свойства осей изменены. Чтобы проверить, изменились ли свойства осей, проверьте, установлены ли соответствующие свойства режима 'manual'. Поскольку нет свойства режима, связанного с осями 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 (после создания графических объектов, составляющих диаграмму). 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);

При создании диаграммы:
setup метод вызывает loadstate способ.
loadstate метод выполняет эти задачи, которые в конечном итоге не оказывают влияния на объект диаграммы или объект нижележащих осей.
Позвоните в get.ChartState метод, который возвращает структуру, содержащую текущее значение осей View собственность.
Сбросить View свойство на осях к значению, сохраненному в структуре.
Очистить содержимое ChartState собственность.
savefig(gcf,'mychart.fig')При сохранении диаграммы MATLAB вызывает get.ChartState способ, который возвращает структуру, содержащую:
Значения XLim, YLim, или ZLim свойства на осях, но только в случае их изменения
Значение View свойство на осях
После извлечения структуры MATLAB сохраняет структуру в ChartState свойства сохраняемого объекта диаграммы.
openfig('mychart.fig')При загрузке диаграммы:
setup метод вызывает loadstate способ.
loadstate способ выполняет следующие задачи:
Позвоните в get.ChartState , который возвращает структуру из ChartState собственность.
Сбросить XLim, YLim, ZLim, и View свойства на осях, но только если структура содержит соответствующие поля.
Очистить содержимое ChartState собственность.