サンプルファイル
Python プラグインのサンプルファイルをご紹介します。

プラグインファイルを作成し、プラグインディレクトリ($EBV_CONFIG_DIR/plugins。初期値では ~/.config/ncs/nebv/plugins)に配置することで neoEBV に機能を追加、使用することができます。
プラグインファイルには「プラグインクラス」を一つ以上定義することができ、「プラグインクラス」一つ毎に機能が定義できます。
.py で終わっている必要があります。pynebv.Plugin を継承する必要があります。location を定義する必要があります。label を定義する必要があります。これはメニュー項目名として使用されます。contact を定義する必要があります。exec をメソッドとして実装する必要があります。
self のほか params が必要です。location で指定した位置にメニューとして追加されます。# Please change the class name to something appropriate
class SamplePlugin1(pynebv.Plugin):
# Specifies where to add the plugin
# By intentionally specifying incorrectly, you can see a list of possible locations in the error message
location = 'file_panel/panel_menu'
# Specifies the name displayed on the menu and tool button
label = 'Sample Plugin 1'
# Specifies the plugin creator's contact information
contact = 'sample creator'
# Describes the process when executing the plugin
def exec(self, params):
print('Hello, world!')
files = pynebv.file.list()
if len(files) == 0:
return
files.color = 'Blue'
error_files = pynebv.file.items('*error*')
if len(error_files) == 0:
return
error_files.hatch = 'Blank'
error_files.bold = True
error_files.color = 'Red'
location で指定可能なプラグイン追加位置は以下の通りです:
| location | プラグインの種類 |
|---|---|
| main_window/global_menu | グローバルメニュー |
| file_panel/panel_menu | パネルメニュー |
| file_panel/item_menu | アイテムメニュー |
| calculation_panel/panel_menu | パネルメニュー |
| calculation_panel/item_menu | アイテムメニュー |
| registration_panel/panel_menu | パネルメニュー |
| registration_panel/item_menu | アイテムメニュー |
| inspection_panel/panel_menu | パネルメニュー |
| inspection_panel/item_menu | アイテムメニュー |
| mark_panel/panel_menu | パネルメニュー |
| mark_panel/item_menu | アイテムメニュー |
| matching_template_panel/panel_menu | パネルメニュー |
| matching_template_panel/figure_item_menu | アイテムメニュー |
| matching_template_panel/measurement_item_menu | アイテムメニュー |
| measurement_panel/panel_menu | パネルメニュー |
| measurement_points_tab/tab_menu | パネルメニュー |
| measurement_points_tab/item_menu | アイテムメニュー |
| measurement_alignments_tab/item_menu | アイテムメニュー |
| ls_detect_dialog/dialog_menu | パネルメニュー |
| ls_detect_dialog/item_menu | アイテムメニュー |
| screen/context_menu | スクリーンコンテキストメニュー |
| mini_map_panel/context_menu | パネルメニュー |
| console_panel/panel_menu | パネルメニュー |
| python_panel/panel_menu | パネルメニュー |
| note_panel/panel_menu | パネルメニュー |
| help_panel/panel_menu | パネルメニュー |
location で決まる「プラグインの種類」によって決まる追加先の詳細は以下の通りです。
| プラグインの種類 | メニュー項目が追加される場所 | 実行ボタンが追加される場所 |
|---|---|---|
| グローバルメニュー | アプリ右上のハンバーガーメニュー | メインツールバー |
| パネルメニュー | location の示すパネル(または Tab 面)右上の … メニュー |
対応するパネルのツールバー(対応するツールバーが無い場合は追加されません) |
| アイテムメニュー | location の示すリストのアイテムを右クリック(または右範囲選択)した場合に表示されるメニュー | ツールバーには表示されません |
| スクリーンコンテキストメニュー | スクリーンを右クリック(または右範囲選択)した場合に表示されるメニュー | ツールバーには表示されません |
location で決まる「プラグインの種類」によって実行時(exec メソッド呼び出し時)に与えられる params 引数の内容が決まります。
コンテキストメニュー(アイテムメニュー、スクリーンメニュー)では以下の情報が設定されます。
| params の内容 | 設定される値 | 設定されるプラグインの種類 |
|---|---|---|
| items | 選択された(または選択された範囲内の)アイテムのリスト | アイテムメニュー、スクリーンコンテキストメニュー |
| point | マウスが離された位置(um 単位)。(<x>,<y>) |
スクリーンコンテキストメニュー |
| area | マウスで選択された範囲(um 単位)。(<x1>,<y1>,<x2>,<y2>) |
スクリーンコンテキストメニュー |
| start_end | マウスが押下された位置と離された位置(um 単位)。(<start x>,<start y>,<end x>,<end y>) |
スクリーンコンテキストメニュー |
params 引数はディクショナリであり、例えばスクリーンコンテキストメニューの場合には以下のようになります。
params = {"items" : [item1, item2], "point" : (<x>,<y>), "area" : (<x1>,<y1>,<x2>,<y2>), "start_end" : (<start x>,<start y>,<end x>,<end y>)}
直接実行可能なメニュー(グローバルメニュー、パネルメニュー)の場合は空となります。
params = {}
exec メソッドにはプラグインで実現したい機能を記述します。
こちらの pynebv リファレンスページを参照ください。
メインメニューの Help/About... より表示されるバージョン情報ダイアログ内、Plugins タブにて現在の読み込み状況が表示されます。

また、同タブ内には Relaod Plugin ボタンもあります。同ボタンを押すことでプラグインをリロードすることが可能です。プラグイン開発時などにご活用ください。
location で決まる配置場所に応じてメニューに項目 Plugins が追加され、その中に label がプラグイン実行メニュー名として追加されます。場合によってはツールバーにボタンも追加されます。

同項目を選択することでプラグインクラスの exec メソッドが呼び出され、プラグインが実行されます。
プラグインからの計算などの出力には標準出力と標準エラー出力が使用できます。 GUI からの実行時、出力した内容は neoEBV の Console Panel に出力されます。
Others フィルタを ON にしていないと表示されないことに注意してください。

登録したプラグインは起動時に読み込まれるため、neoEBV の python スクリプト機能中で以下のようにして実行可能です。
pynebv.plugin['SamplePlugin1'].exec({})
この場合、標準出力と標準エラーへの出力はスクリプトからの出力として扱われます。
つまり GUI なしでの実行中(起動時に --headless オプションを指定した場合) に出力した場合はそのまま端末に出力され、GUI がある状態で出力された場合 (起動時に --headless オプションを指定しなかった場合) は Python Panel に出力されます。
Python プラグインのサンプルファイルをご紹介します。