Методы классов для графических коллбэков

Ссылка на метод

Чтобы использовать метод обычного класса в качестве коллбэка для графического объекта, задайте свойство коллбэка как указатель на функцию, ссылающийся на метод. Для примера,

uicontrol('Style','slider','Callback',@obj.sliderCallback)

Где ваш класс определяет метод, называемый sliderCallback и obj является образцом вашего класса.

Чтобы использовать статический метод в качестве коллбэка, задайте свойство коллбэка как указатель на функцию, который включает имя класса, которое требуется для ссылки на статический метод:

uicontrol('Style','slider','Callback',@MyClass.sliderCallback)

Синтаксис коллбэков метода

Для обычных методов используйте запись через точку для прохождения образца класса, определяющего коллбэк как первый аргумент:

@obj.methodName

Задайте метод коллбэка со следующими входными параметрами:

  • Образец определяющего класса как первый аргумент

  • Указатель на источник события

  • The данных о событиях

Подпись функции будет иметь следующую форму:

function methodName(obj,src,eventData)
   ...
end

Для статических методов необходимое имя класса гарантирует MATLAB® отправляет в метод заданного класса:

@MyClass.methodName

Задайте статический метод коллбэка с двумя входными параметрами - указателем на источник события и данными о событиях

Подпись функции будет иметь следующую форму:

function methodName(src,eventData)

Передача дополнительных аргументов

Если вы хотите передать аргументы в коллбэк в дополнение к аргументам источника и данных о событиях, переданным MATLAB, можно использовать анонимную функцию. Основной синтаксис анонимной функции, которую вы присваиваете графическому объекту Callback свойство включает объект в качестве первого аргумента:

@(src,event)callbackMethod(object,src,eventData,arg1,...argn)

Подпись функции будет иметь следующую форму:

function methodName(obj,src,eventData,varargin)
   ...
end

Используйте метод класса для коллбэка ползунка

В этом примере показано, как использовать метод вашего класса в качестве коллбэка для ползунка uicontrol.

The SeaLevelSlider класс создает ползунок, который изменяет пределы цвета индексированного изображения, чтобы дать иллюзию изменения уровня моря.

Определение класса

Определите SeaLevelSlider как класс handle со следующими представителями:

  • Свойства класса хранят указатели рисунка и осей и рассчитанные пределы цвета.

  • Конструктор классов создает графические объекты и назначает коллбэк ползунка.

  • Функция обратного вызова для ползунка принимает три необходимых аргумента - образец класса, указатель на источник события и данные о событиях. Аргумент данных о событиях пуст и не используется.

  • Обратный коллбэк uicontrol использует запись через точку для ссылки на метод коллбэка: ...'Callback',@obj.sliderCallback.

classdef SeaLevelSlider < handle
   properties
      Figure
      Axes
      CLimit
   end
   
   methods
      function obj = SeaLevelSlider(x,map)
         obj.Figure = figure('Colormap',map,...
            'Position',[100,100,560,580],...
            'Resize','off');
         obj.Axes = axes('DataAspectRatio',[1,1,1],...
            'XLimMode','manual','YLimMode','manual',...
            'Parent',obj.Figure);
         image(x,'CDataMapping','scaled',...
            'Parent',obj.Axes);
         obj.CLimit = get(obj.Axes,'CLim');
         uicontrol('Style','slider',...
            'Parent',obj.Figure,...
            'Max',obj.CLimit(2)-10,...
            'Min',obj.CLimit(1)-1,...
            'Value',obj.CLimit(1),...
            'Units','normalized',...
            'Position',[0.9286,0.1724,0.0357,0.6897],...
            'SliderStep',[0.003,0.005],...
            'Callback',@obj.sliderCallback);
      end
      
      function sliderCallback(obj,src,~)
         minVal = get(src,'Value');
         maxVal = obj.CLimit(2);
         obj.Axes.CLim = [minVal maxVal];
      end
   end
end

Использование класса SeaLevelAdjuster

Класс использует cape изображение, включенное в продукт MATLAB. Чтобы получить данные изображения, используйте load команда:

load cape X map

После загрузки данных создайте SeaLevelSlider объект для изображения:

slaObj = SeaLevelSlider(X,map);

Переместите ползунок, чтобы изменить отображение цвета и визуализировать повышение уровня моря.

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте