質問: matlabコマンドラインから印刷フレームを使用してsimulinkモデルブロック図を印刷することはできますか matlabコマンドラインから,印刷フレームを使用してsimulinkモデルブロック図をpdf出力する方法はありますか? 理由 モデル参照ブロックの中は印刷時の設定において「すべてのシステム」選択しても印刷されないため, 個別にモデルファイルを開いて印刷するように指示があります. モデル参照ブロックの数が少ない場合は手動で実施すれば良いですが,モデル参照ブロックの数が多い場合は非常に手間になります. これに対応する方法として,matlabコマンドラインからモデルを開いてprintコマンドを用いて印刷する方法もあるようですが, 印刷フレームの指定方法が不明です.
回答: yusuke endo 様 モデル参照毎のブロック線図に対して1枚のpdfファイルを生成するプログラムを考えてみました。 r2020aの環境を使用し、手元では期待されるpdfファイルが出力されることを確認しております。 2通りの方法が考えられたので、お試しください。 方法1 : "print" を使った場合 % 最上位モデルを設定(右辺に最上位モデル名を設定してください) topmodel = 'modelname'; % モデル内に含まれるモデル参照の名称をリストします [mymodels,~] = find_mdlrefs(topmodel); % モデル参照数で繰り返し処理 for n = 1:length(mymodels) % モデル参照を開く open_system(mymodels{n}); % 開いたときに"タブ"で下位階層が見えてしまうときがあるのでその判定 % 本来不要と思われますが、r2020aでは下位階層(タブ表示)が開いてしまうことがあったので回避策としてif-else分岐 if isequal(mymodels{n},gcs) % モデル名と現在のシステム(階層)が一致していればpdf出力 print('-s',mymodels{n},'-dpdf'); else % モデル名と現在のシステム(階層)が不一致の場合、再度モデルを開き直す % 確実にモデル参照の最上位階層が開く open_system(mymodels{n}); print('-s',mymodels{n},'-dpdf'); end % 開いているモデルを閉じる close_system(mymodels{n}); end 方法2 : "saveas"を使った場合 % 最上位モデルを設定(右辺に最上位モデル名を設定してください) topmodel = 'modelname'; % モデル内に含まれるモデル参照の名称をリストします [mymodels,~] = find_mdlrefs(topmodel); % モデル参照数で繰り返し処理 for n = 1:length(mymodels) % モデル参照を開く open_system(mymodels{n}); % saveas関数を使ってモデル参照のハンドルを取得し、保存形式をpdfとして保存します saveas(get_param(mymodels{n},'handle'),[mymodels{n},'.pdf']); % 開いているモデルを閉じる close_system(mymodels{n}); end stozaki