2016-02-19 144 views
2

我想在子系統上創建一個掩碼,就像枚舉常量的掩碼(如下所示)。正如您在藍色圓圈中看到的那樣,可以使用下拉列表來編輯值。枚舉常在Simulink中創建一個掩碼,編輯字段爲枚舉

Mask of Enumerated Constant

如果要創建一個面具,確實有可能使一個彈出窗口,而不是一個編輯,但這個問題是需要面罩內可以手動創建可能的選擇列表。我想要的是,這個Edit值只顯示某個枚舉的可能選擇,我只想指定一個枚舉。枚舉常量掩碼用一個編輯類型來做到這一點,但即使如此,它仍然有效。

當然,我試圖從這個塊反向工程,但我無法找到Matlab如何做到這一點。

回答

0

我無法弄清楚如何做到這一點,但希望這個答案能讓你走上正軌。

在蒙版上創建兩個彈出窗口,例如'popup1'和'popup2'。將您的類型選項硬編碼爲popup1,並將popup2留空並禁用(因爲它取決於您使用popup1選擇的內容)。然後,您可以在popup1上使用回調來在第一個點擊時填充popup2。您的回調將是這個樣子:

% Grab the value selected from popup1 
value = get_param(gcb, 'popup_1'); 

% Do some sort of check/switch statement to set your options 
if value == 1 
    % Enable popup2 
    set_param(gcb, 'MaskEnables', {'on', 'on'}); 
    % Set the type options for popup2 
    set_param(gcb, 'MaskStyleString', 'popup(1|2|3|4|5),popup(my|new|options)'); 
end if 

看一看在MATLAB/Simulink文檔中thisthis。如果有點不直觀,get_paramset_param是有用的。看起來在Simulink的後續版本中,您可以使用maskObj = Simulink.Mask.create(gcb);方法來執行此類操作,這可能會更簡單。

0

隨着DrBuck的推出,您應該使用maskObj = Simulink.Mask.create(gcb)爲當前選定的塊(gcb)創建一個遮罩或通過maskObj=Simulink.Mask.get(gcb)選擇一個已有的遮罩。然後,將參數添加到它:

par_name = 'foo'; % name 
par_prompt = 'This is my enum constant'; %prompt 
maskObj.addParameter('Prompt',par_prompt,'Name',par_name); % add parameter 

你正在尋找被稱爲TypeOptions領域,但首先你必須找到通過例如正確的參數個數

par_idx = find(strcmp({maskObj.Parameters.Name},par_name)); % index of parameter 

設置屏蔽參數 '彈出',並創建您的枚舉值:

maskObj.Parameters(par_idx).Type = 'popup'; % type 
maskObj.Parameters(par_idx).TypeOptions = {'Option1','Option2'}; % enum options 

有你;)

HTH朱利安