サンプルファイル
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 プラグインのサンプルファイルをご紹介します。