Графики, которые наследуют от 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 свойство.