Simulinkモデル内のブロック名/信号ラベル/ブロック注釈の位置の取得方法
6 views (last 30 days)
Show older comments
MATLAB 2022aのMATLABのコードから、Simulinkモデル内のブロック名/信号ラベル/ブロック注釈の位置の取得する方法教えていただきたいです。取得する方法がなければ無いとお答えいただきたいです。
1 Comment
Atsushi Ueno
on 21 Aug 2024
(普通の直接的な)取得方法は無いです。なぜならモデルは冗長でない最低限の情報だけを含む仕様だからです。
「当該ブロックの位置・サイズ」「ブロックの向き」「フォントサイズ」「名前の位置(通常/反転)」などの情報から「ブロック名/ブロック注釈の位置」を計算する必要があります。
信号ラベルはもっと複雑で「Src/Dstブロックの位置・サイズ・向き・端子番号・信号名の位置(Src側/中央/Dst側・上/下)・折れ線情報(どこで曲がるか)」など多岐に渡る情報が必要です、https://stackoverflow.com/questions/19852758/how-to-get-location-of-signal-name-on-signal-line-matlab-simulink
「ブロック名/信号ラベル/ブロック注釈の位置」を計算出来た暁には、貴方はもうモデルビューアを作れる様になっている!かもしれません。
% 適当なサンプルモデルを開く(Simulinkモデルのサンプルといえばファン・デル・ポール振動子)
openExample('simulink_general/VanDerPolOscillatorExample','supportingFile','vdp');
% モデル内のブロックを得る
hBlcks = find_system('vdp','FindAll','on','Type','block');
% ブロックの位置・サイズ: [left top right bottom]
get_param(hBlcks, 'Position')
% ブロックの向き: {'right'} | 'left' | 'up' | 'down'
get_param(hBlcks, 'Orientation')
% ブロック名の位置: {'normal'} | 'alternate'
get_param(hBlcks, 'NamePlacement')
% 信号ラベルはもっと大変!まずはモデル内の信号を得る
hLines = find_system('vdp','FindAll','on','Type','line');
% 御後が宜しいようで...兎に角情報を集めて演算するしか方法が無い!
あとマニアックな方法として、MATLABのベースにあるJava環境から直接描画関連データを参照する事が出来ると思います。あまり詳しい事は知りません。https://undocumentedmatlab.com/
Answers (0)
See Also
Categories
Find more on ビッグ データの処理 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!