我想要继承内置的控件,如axes
;但是,就我所知,MATLAB不允许以这种方式通过文档记录的方式。为了解决这个问题,我创建了一个名为MyAxes
的类,如下所示。执行属性获取方法时执行的构造函数
MyAxes
具有称为MATLABAxes
一项所定义的属性,其存储一个matlab.graphics.axis.Axes
对象。该轴对象在构造时创建。将每个轴属性动态添加到正在构建的MyAxes
对象中,创建应简单重定向到MATLABAxes
属性的包装属性。
每个包装属性的get方法被设置为一个方法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