2017-01-01 84 views
0

我想要繼承內置的控件,如axes;但是,就我所知,MATLAB不允許以這種方式通過文檔記錄的方式。爲了解決這個問題,我創建了一個名爲MyAxes的類,如下所示。執行屬性獲取方法時執行的構造函數

MyAxes具有稱爲MATLABAxes一項所定義的屬性,其存儲一個matlab.graphics.axis.Axes對象。該軸對象在構造時創建。將每個軸屬性動態添加到正在構建的MyAxes對象中,創建應簡單重定向到MATLABAxes屬性的包裝屬性。

每個包裝屬性的get方法被設置爲一個方法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函數。問題中的代碼現在已修復。