2017-01-01 1 views
0

Я хотел бы подклассы встроенных элементов управления, таких как axes; однако MATLAB не позволяет это, насколько я могу судить, документально. Чтобы обойти это, я создал класс под названием MyAxes, показанный ниже.Конструктор, выполненный при выполнении метода получения свойства

MyAxes имеет одно определенное свойство, называемое MATLABAxes, в котором хранится объект matlab.graphics.axis.Axes. Этот объект осей создается при построении. Каждое из свойств осей динамически добавляется к создаваемому объекту MyAxes, создавая свойства оболочки, которые должны просто перенаправляться на свойства MATLABAxes.

Метод получения для каждого из свойств обертки установлен в метод MyAxes, называемый get_axes_property. Этот метод принимает три аргумента:

  1. Самого MyAxes объект
  2. Ссылка оси управление
  3. Имя свойства

Этого метод работает хорошо, за исключением того, что создает новую ось для каждого имущество. Я получаю цифру с 131 дочерней осью! Похоже, что это происходит из-за создания осей в конструкторе MyAxes. Обходной путь этой проблемы заключается в том, чтобы сначала создать оси MATLAB и передать их в качестве аргумента конструктору. Это довольно неудобно.

Как сохранить создание осей в конструкторе MyAxes без создания более чем одной оси? Конечно, если я ухожу с пути, и есть лучший способ встроенных элементов подкласса, я бы хотел услышать об этом.

classdef Axes < handle & dynamicprops 

    properties 
     MATLABAxes; 
    end 

    methods 

     function obj = Axes 
      obj.MATLABAxes = axes; 
      axesPropertyList = properties(obj.MATLABAxes); 
      for property = axesPropertyList(:)' 
       propertyName = property{1}; 
       obj.addprop(propertyName); 
       propertyInstance = obj.findprop(propertyName); 
       propertyInstance.GetMethod = @(x,y)obj.get_axes_property(obj.MATLABAxes, propertyName); 
      end 
     end 

     function value = get_axes_property(obj, control, propertyName) 
      value = control.(propertyName); 
     end 

    end 

end 

ответ

0

Сделал это снова - ответил на мой вопрос, когда писал вопрос. Это была орфографическая ошибка. Я применил первый аргумент метода get_axes_property в определении дескриптора функции как axes вместо obj.MATLABAxes. Это выполняло функцию axes каждый раз, когда было получено свойство. Код в вопросе теперь исправлен.

 Смежные вопросы

  • Нет связанных вопросов^_^