Я хотел бы подклассы встроенных элементов управления, таких как axes
; однако MATLAB не позволяет это, насколько я могу судить, документально. Чтобы обойти это, я создал класс под названием MyAxes
, показанный ниже.Конструктор, выполненный при выполнении метода получения свойства
MyAxes
имеет одно определенное свойство, называемое MATLABAxes
, в котором хранится объект matlab.graphics.axis.Axes
. Этот объект осей создается при построении. Каждое из свойств осей динамически добавляется к создаваемому объекту MyAxes
, создавая свойства оболочки, которые должны просто перенаправляться на свойства MATLABAxes
.
Метод получения для каждого из свойств обертки установлен в метод MyAxes
, называемый get_axes_property
. Этот метод принимает три аргумента:
- Самого
MyAxes
объект - Ссылка оси управление
- Имя свойства
Этого метод работает хорошо, за исключением того, что создает новую ось для каждого имущество. Я получаю цифру с 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