Simulinkブロックをすばやく配置したいな
Simulinkモデルを作っていてイヤだなーと思うのが、たとえば「Gainブロックを置きたい!」と思った時に、毎回ライブラリブラウザからGainブロックを探さないといけない点です。
もちろんGainブロックの大よその場所は知っていますが、これを見つけるのに5秒、10秒とかかる事がよくあります。(私だけかな?)
「何かいいブロックないかな~♪」と探している場合には、このライブラリブラウザはとってもステキです。しかし、置きたいブロックが分かっている場合であっても、毎回ライブラリブラウザを探しにいかないといけないというのが何ともはや。
と思いつつR2010bを触っていると。。。
いい感じの右クリックメニュー発見!
R2010bを動かしてみると、右クリックメニューにいい感じのがあるじゃないですか。いつの間に!?
これでたとえば「simulink/Sinks/Display」をクリックすると、ブロックが配置できます。
Displayブロックが配置された
これはいいアイデアですね。ただ、私の理想(=ワガママ)からすると、もうちょい足りません。
こんな感じだといいな
(1)1モーションか、せめて2モーションで置きたい
いまだと、
右クリック ⇒ 「最もよく使用するブロック」をクリック ⇒ 「ブロック名(Displayとか)」をクリック
の3モーション必要です。これでもライブラリブラウザから探すよりかは随分いいんですけど、もうちょい早くしたいです。
いちいちメニューを見るんじゃなくって、ショートカットキーでザクっと配置できれば、私としては最高なんですけどね。
(2)ブロックを選びたい
今のでも全然いいんですけど、モデルによってよく使うブロックが違ったりします。すべての種類のSimulinkブロックをショートカットキーで配置したい、とまでは言いませんが、せめてどのブロックを配置できるようにするのか選べるとうれしいです。
作ってみよう
そんな大したモノじゃないでしょうから、カスタマイズツールを作ってみることにします。仕事で請けるにしても実質10万以下のレベルでイケるでしょう。たぶん。
ただ、最近またやたらと忙しくなってきたので、ちょっと時間がかかるかも。。。
手軽にって思うと大変ですが、こんな感じでどうでしょう。
sl_customization.mに
—
function sl_customization(cm)
cm.addCustomMenuFcn(‘Simulink:ContextMenu’, @getMyMenuItems);
end
function schemaFcns = getMyMenuItems(callbackInfo)
schemaFcns = {@getItem1};
end
function schema = getItem1(callbackInfo)
schema = sl_action_schema;
schema.label = ‘Gain追加’;
schema.userdata = ‘Gain’; % 追加したいブロック名
schema.callback = @myCallback1;
end
function myCallback1(callbackInfo)
block_name = callbackInfo.userdata;
yyy = find_system(gcs, ‘Name’, block_name);
xxx = 0;
while length(yyy) ~= 0
xxx = xxx + 1;
block_name = strcat(callbackInfo.userdata, num2str(xxx));
yyy = find_system(gcs, ‘Name’, block_name);
end
add_block(strcat(‘built-in/’,callbackInfo.userdata), strcat(gcs,’/’,block_name));
end
—
みたいな感じでおいておけば、とりあえず、右クリックでブロックはおけます。
ただ、クリックした場所を検出できないので、必ずモデル左上に配置されてしまうので、
結局、右クリック→メニュー選択→ブロック移動で3ステップにはなりますが・・・
これはすばらしい!
ツールを作るにしても、やっぱり右クリックメニューから攻めていくのが良さそうですね。
クリック位置は、たしか callbackInfo から取れたと思います。そしたら、夢の2ステップが!
アイデアばかりかサンプルコードまでありがとうございます。これをベースに2ステップ化し、こちらのブログで公開いたします。