この記事では、QuickDropの機能のおさらいと、これを使ってよりLabVIEWを使いやすくするためのカスタマイズの方法を紹介しています。
プログラム開発環境であるLabVIEWについて、「自分好みのショートカット」を追加する方法の一つとしてQuickDropのカスタマイズがあります。
Ctrl + EなどのLabVIEWに最初からある基本的なショートカットも便利ですが、ショートカットを自作することで、より使いやすいLabVIEWプログラム開発環境を整えることができます。
そんな自作のショートカットもLabVIEWプログラムとして作ることができ、本記事では実際に簡単なショートカットの実装例をいくつか紹介しています。
QuickDropとは
QuickDropとは、その名の通り、「素早く」関数を「ドロップ」、つまり配置するための機能です。
関数を、と書きましたが、ブロックダイアグラム上だけで使える機能ではなく、フロントパネルでも制御器や表示器に対して使用できます。
かなり前のLabVIEW8.6から実装されているので、最近のLabVIEWでは当たり前の機能となっています。
このクイックドロップ上で関数名を入力すれば関数パレットを開かなくても目的の関数をブロックダイアグラムに置けるので、関数パレットを開くことなくプログラムを書く、なんてこともできます。

ただ、QuickDropの機能はこれだけにとどまらず、専用のショートカットも用意されています。
これらは、QuickDropを表示した状態で特定のキーボード入力をすることで使うことができるショートカットで、あまり知られていないながらも実用的な機能が揃っていたりします。
特に有用な機能の一つは、ワイヤの自動配線のためのショートカットで、選択した複数の関数どうしでデータタイプが一致するワイヤ、例えばリファレンスのためのワイヤやエラーワイヤを自動的に配線してくれます。
このショートカットは(QuickDropを出した状態で)Ctrl + Wとキー入力すればできます。

他にも、フロントパネル上で使用することで、コネクタペーンの通りにフロントパネル上の制御器や表示器を並べてくれるショートカットも存在します。
こちらはCtrl + Fというキーボードショートカットが割り当てられています。

これらは実際にはこういった動作をするプログラムが裏で走ることで実現されている処理であり、QuickDropを出した後に表示される構成の画面から種類や走っているプログラムの場所(プラグインパス)を確認することができます。

QuickDropショートカットを自作する
QuickDropショートカットは上で書いたように実際にはLabVIEWのviとして作られています。
つまり、作ろうと思えば自作のショートカットを作ることができます。
QuickDropで使えるショートカットの元となるプログラムは以下のパスにあります。(32bit版LabVIEWの場合)
C:\Program Files (x86)\National Instruments\<LabVIEW version>\resource\dialog\QuickDrop\plugins
例えばこのパスにあるWire Multiple Objects Together.viというプログラムは、上で紹介した、ワイヤ配線を自動的に行ってくれるショートカットを押した際に実行されるプログラムです。

中身を見ても結構複雑なことをしていそうですが、自作するショートカットは何も複雑なものを作らなければいけないわけではありません。
それに、QuickDropショートカットプログラムにはテンプレートが存在し、そこに既にいくつかの役立つ機能が実装済みになっています。
あとはこのテンプレートをベースに、自分で実装したい機能をプログラムで表現することによってより使いやすいLabVIEW環境を構築することができます。
テンプレートは以下のパスにあります。(テンプレートファイルなので拡張子が.viではなく.vitになっています)
C:\Program Files (x86)\National Instruments\<LabVIEW version>\resource\dialog\QuickDrop\QuickDrop Plugin Template.vit
このテンプレートを開いたら、まずはviを保存しておきます。
以下ではテスト用ということでMyTestQD.viとしておきます。
保存先はpluginsフォルダにしておくことで実際にLabVIEW viの中ですぐに使用できます。

保存し終えたらviを編集していくのですが、その前にVIプロパティのドキュメントを見ておきます。
ここに書いた内容が、実際にQuickDrop構成の画面を表示したときに見える説明文となります。
またこの時点でQcuikDropショートカットのキーの設定が行えます。
説明文はいつでも変えられるので、この部分を正式に書くのはプログラムを作り終えてからでも問題ありませんが、どこかのタイミングで忘れずにやっておくことで、後から見返したときにどのような操作のためのショートカットなのかを確認できるようになるため、作りたいものが決まっているのであれば早めに書いておきます。
ショートカットキーは、既にあるものとはかぶらないように注意します。

ここまで終わったらいよいよプログラムを編集していきますが、まずフロントパネルはほとんどそのままにしておきます。
唯一触るものがあるとすればUndo Nameという文字列制御器の部分で、ここがQuickDrop操作をUndo、つまり取り消ししたいときに、その操作の名前として表示される文字になります。
(変更した場合には、制御器を右クリックして「データ操作」から「現在の値をデフォルト設定にする」を選択しておきます)

テンプレートの中に既に存在している制御器や表示器は、たとえ使わなかったとしても削除せずにそのままにしておきます。
また、基本的にはこのショートカットに対して追加した制御器へ値を渡すことはないため、フロントパネルの様子およびコネクタペーンの様子はテンプレートの状態から変わることはありません。

ブロックダイアグラムを見るといくつかの機能が揃っていることがわかります。
見慣れないものばかりだと思いますが、それぞれの役割を簡単に紹介します。
まずはTransaction.Begin Undoです。
これは残しておくことで取り消し(Ctrl + Z)が効くようになります。
必ずしもなくてはいけない機能ではないですが、取り消し機能があった方がいいタイプの機能(プログラムに直接何らかの変更を加えるような機能)は取り消しを行えると便利だと思うので、これはこのまま残しておくのがオススメです。
ショートカット操作でプログラムに直接は影響を与えないような操作も考えられますが、これは後の具体例で紹介していきます。
Viの後半にEnd Undoというものがありますが、とりあえず、取り消したい処理の対象にするためにはBegin UndoとEnd Undoの間に処理を入れる、と認識しておけばOKです。

QD Combo Box Refは、このリファレンスをプロパティノードに配線し値プロパティを取得すれば、クイックドロップ表示時にユーザーが入力した文字列を取得できるようになります。
これにより複雑な操作やユーザーの入力によって場合分けが可能になります。
試しに以下のようにプログラムを書いて保存しQuickDropでこのプログラムに対して設定したショートカットを使用するとQuickDropのボックスに入力した文字がダイアログ表示されます。

テンプレートviの中で使用されているサブviについては、QuickDropの操作がフロントパネル上で行われたかあるいはブロックダイアグラム上で行われたかを識別します。
今度は以下のようにプログラムを組んで確認してみます。

Shift pressed?のブールは文字通りショートカット操作時にShiftキーが押されたかを識別できるようにする機能であり、これによりショートカット動作としてShiftを押したときと押していない時とで微妙に機能を変えるようなことが可能です。
こちらもまた以下のような簡単なプログラムを組んで動作を確認します。

これらの機能は使っても使わなくてももちろん構わないのですが、多くの場合にはショートカットを呼び出したときのviの状態に対して何か処理を加えるようなプログラムを実装することになるため、何かしらは使用することが多い印象です。
自作QuickDropショートカットの具体例
テンプレートのviにある制御器の使い方がわかったところで、じゃあ実際にどのようなことができるか、については、既存の(LabVIEWインストール時に入っている)ショートカット用のプログラムの中身を見るのが一番です。
ただ、結構複雑に作られているものもあるので、もう少し気軽に、少し便利だなくらいのショートカットを実装したいという場合にはかえってあまり参考にならないかもしれません。
そこで、比較的手軽に実装できて、少し便利、くらいのショートカットをいくつか考え作ったのでその例を紹介します。
値を付けた状態で待機関数や次のミリ秒倍数まで待機関数を配置する
ループの速度の制御を行うためにタイミング関数である待機関数や次のミリ秒倍数まで待機関数を使用する頻度は多いのですが、関数パレットから関数を出してさらに定数を配線してというのは地味にめんどくさかったりします。
そこで、QuickDropの画面で指定した時間の定数を付けた状態でこれらの関数を呼び出せるようなショートカットを作りました。
複数のループを選択していたらすべてに一律タイミング制御の関数を配置します。

また、Shiftを押しているかどうかで待機関数か次のミリ秒倍数まで待機関数のどちらを配置するかを決定します。
そんなプログラムは以下のように組めます。
ユーザーが選択したもの(今回でいえばループ構造)に対するリファレンスをSelList[]の部分で取得し、Forループの中で、ループかそれ以外かを場合分けしています。
ケースストラクチャの中ではVIスクリプトの機能を使用してタイミング関数を配置しています。

なお、VIスクリプトについては若干の慣れが必要かと思います。
VIスクリプトがそもそもよくわからない、という方は、以下の記事が参考になるかもしれません。
複数の定数の色を変更する
何かの目印として特定の定数を強調するときに、視覚的にすぐに判定しやすいように背景色をいじることがあったのですが、複数の対象がある場合にちまちまやるのは面倒なので、複数選択してまとめてできるようにしました。
ただし背景色を変えられるのは全てのデータタイプの定数ではなく、例えばパス定数は背景色を変えられない(プロパティノードに選択肢がない)ので、実際に有用なのは文字列定数と数値定数になるかと思います。

ブロックダイアグラムは以下の通りです。
フロントパネル上でショートカットを実行しても特に何も起こらないようにしています。

特に何も指定しないデフォルト状態では背景色を赤にしますが、QuickDropで色を英語名で指定すればその色を背景色にできるようにしています。
こちらもVIスクリプトの機能を利用しています。

ni.comで情報を探すショートカット
何かエラーが起きた時、あるいは関数の使い方がわからない時などにネットで検索するという場面は頻繁にあると思います。
そこで、LabVIEWからni.comに進み、ついでに検索したいワードを指定できると便利です。

これをQuickDropショートカットで表現するには例えば以下のようにします。
この処理はUndoの必要はないため、Transactionに関する処理は削除しています。
とてもシンプルに作れるので、ni.com以外の方法で調べるときに文字列を変えて実装してみてください。

ファイルパスや文字列の情報からエクスプローラを開く
何かデータを保存したときに、保存先はファイルパス表示器として表示していても、これをすぐに確認したいというときに、いちいちファイルパス表示器の文字をコピーしてファイルエクスプローラに貼り付けて開くのが面倒な時があります。
そこで、ファイルパス制御器や表示器、定数、あるいはファイルパスの情報が入った文字列(の制御器や表示器や定数)を選択してショートカットキーを押せば、そのパスをファイルエクスプローラで表示してくれる機能を作りました。
Shiftを押せば、複数選択したときに複数のファイルエクスプローラを同時に開けるようにしています。
また、クイックドロップのウィンドウでパスを入力した場合でもそのパスを開きます。

この処理もUndoは必要ないのでTransactionに関する処理は削除しています。
まずは、クイックドロップのウィンドウに文字が入力されているかどうかを判断し、入力されていない場合には選択された制御器や表示器、定数を調べます。
入力されている場合にはファイルシステムで表示関数を直接使っています。

パスの情報を持ちうるのは、パス制御器やパス表示器、パス定数が挙げられるので、選択されたオブジェクトのクラスがこれらPathやPathConstantに該当する場合にはその値を元にフォルダを開きます。

他に文字列制御器や文字列表示器、文字列定数もパスの情報を持ちうるので、これらに対しても似たような操作を行います。

今回紹介したプログラムの中では最も実装するべき処理が多いですが、やっていることは単純です。
作るのが面倒な場合にはダウンロードしよう
具体例を紹介しましたが、もし世の中の誰かが既に自分が実装したいと思っていた機能を作ってくれているかもしれないので探したい、あるいはそもそも作るのが面倒、という場合にはコミュニティのサンプルを見てみるのも手です。
niが公式に出しているものではないため、もしクイックドロップの動作が期待したものでなくても自力で何とかするしかないですが、どれも一応動作自体は確認済みかと思います。
ここから入手できるプログラムをベースに手を加えて自分の使いやすいようなショートカットにすることができれば、一から作るより効率的になることもあるかと思います。
本記事ではQuickDropのショートカットを自作する方法を紹介しました。
複雑なショートカットを行う場面はあまり多くないと思いますが、頻繁に行う操作などはショートカットとして作っておくとプログラム作りがとても楽になったりします。
プログラミング開発環境を自分の使いやすいようにカスタマイズする際の参考になればうれしいです。
ここまで読んでいただきありがとうございました。
コメント