見出し画像

Simulink ブロックをまとめて画像保存 ~ Subsystem 構造をそのままディレクトリとして保存する

まえがき

JUCE に疲れたので息抜きに。

Simulink モデルはキャプチャーとかしなくても、saveas 関数でそのまま画像として保存ができます。

Subsystem もそのままディレクトリ構造として保存できれば便利なときもあるかな、と思って作ってみました。

スクリプト

mdl = uigetfile({'*.slx','*.mdl'});
[~,mdl,~] = fileparts(mdl);  % 拡張子削除
load_system(mdl);  % モデル読み込み
fig = get_param(mdl,'Handle');  % fig ハンドル読み込み
saveas(fig,[ mdl '.png']);  % 親モデル画像保存

BlockPaths = find_system(mdl,'Type','Block');  % 全ブロックパス名取得
BlockTypes = get_param(BlockPaths,'BlockType');  % ブロックタイプ取得
sSystem = contains(BlockTypes,'SubSystem');  % Subsystem 検索
sblk = BlockPaths(sSystem);  % Subsystem パス名取得

for k=1:length(sblk)
    bName = sblk{k};
    [path,name,~] = fileparts(bName);  % パス分離
    [~,~] = mkdir(path);  % パス名ディレクトリ作成
    fig = get_param(bName,'Handle');  % fig ハンドル読み込み
    fname = strrep(bName,newline,'');  % LF 削除
    saveas(fig,[fname '.png']);  % Subsystem 画像保存
end


ディレクトリ作成は、そのディレクトリが既にあっても上書きしています。
気になるようでしたら isfolder とか使って分岐してください。

一部のブロック名は、Simulink 上で複数行表示になるよう LF が含まれています。

ブロック名が2行表示されるブロック

そのままではディレクトリ作成できないので削除しています。

それと、MATLAB Function や CompareTo Constant も 中身は Subsystem なので、それも保存されます。

まあ、いいかな・・。

あとがき

やる気の問題で、JUCE がなかなか進みません。(゚~゚)

ずっと MATLAB で遊んでいたい・・。


この記事が気に入ったらサポートをしてみませんか?