我想要繼承內置的控件,如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