exponenta event banner

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

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

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

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

Где класс определяет метод с именем sliderCallback и obj является экземпляром класса.

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

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

Синтаксис обратного вызова метода

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

@obj.methodName

Определите метод обратного вызова со следующими входными аргументами:

  • Экземпляр определяющего класса в качестве первого аргумента

  • Дескриптор источника события

  • Данные события

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

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.

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

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

Определить SeaLevelSlider как класс дескрипторов со следующими членами:

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

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

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

  • Обратный вызов 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

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

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

load cape X map

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

slaObj = SeaLevelSlider(X,map);

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

Связанные темы