プラグイン

Plugin
Python スクリプトを用いて neoEBV に機能を追加します

概要

プラグインファイルを作成し、プラグインディレクトリ($EBV_CONFIG_DIR/plugins。初期値では ~/.config/ncs/nebv/plugins)に配置することで neoEBV に機能を追加、使用することができます。

プラグインファイルには「プラグインクラス」を一つ以上定義することができ、「プラグインクラス」一つ毎に機能が定義できます。

作成方法

  • プラグインファイルは python3 で記述します。
  • プラグインファイルのファイル名は拡張子 .py で終わっている必要があります。
  • プラグインクラスは基礎クラス pynebv.Plugin を継承する必要があります。
  • プラグインクラスは配置位置 location を定義する必要があります。
  • プラグインクラスは表示用ラベル label を定義する必要があります。これはメニュー項目名として使用されます。
  • プラグインクラスは作成者連絡先 contact を定義する必要があります。
  • プラグインクラスは動作 exec をメソッドとして実装する必要があります。
    • 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 の示すリストのアイテムを右クリック(または右範囲選択)した場合に表示されるメニュー ツールバーには表示されません
スクリーンコンテキストメニュー スクリーンを右クリック(または右範囲選択)した場合に表示されるメニュー ツールバーには表示されません

exec メソッドに渡される params

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 メソッドの実装

exec メソッドにはプラグインで実現したい機能を記述します。

こちらの pynebv リファレンスページを参照ください。

読み込み状況の確認とリロード

メインメニューの Help/About... より表示されるバージョン情報ダイアログ内、Plugins タブにて現在の読み込み状況が表示されます。

About Dialog Plugin Tab

また、同タブ内には Relaod Plugin ボタンもあります。同ボタンを押すことでプラグインをリロードすることが可能です。プラグイン開発時などにご活用ください。

使用方法

GUI からの実行

location で決まる配置場所に応じてメニューに項目 Plugins が追加され、その中に label がプラグイン実行メニュー名として追加されます。場合によってはツールバーにボタンも追加されます。

Plugin

同項目を選択することでプラグインクラスの exec メソッドが呼び出され、プラグインが実行されます。

プラグインからの計算などの出力には標準出力と標準エラー出力が使用できます。 GUI からの実行時、出力した内容は neoEBV の Console Panel に出力されます。

Others フィルタを ON にしていないと表示されないことに注意してください。

Plugin

Python スクリプトからの実行

登録したプラグインは起動時に読み込まれるため、neoEBV の python スクリプト機能中で以下のようにして実行可能です。

pynebv.plugin['SamplePlugin1'].exec({})

この場合、標準出力と標準エラーへの出力はスクリプトからの出力として扱われます。 つまり GUI なしでの実行中(起動時に --headless オプションを指定した場合) に出力した場合はそのまま端末に出力され、GUI がある状態で出力された場合 (起動時に --headless オプションを指定しなかった場合) は Python Panel に出力されます。

制限事項

  • プラグインの実行には neoEBV からの Python 実行が必要です。
    • 環境への python のインストールが必要となるほか、ライセンスによる制約(Photomask ライセンスが必要)もあります。
  • GUI からのプラグイン機能の実行に長時間かかるものは想定しておりません。
    • 具体的には実行に10分以上かかると不正とみなし、タイムアウトとなります。
    • Python スクリプトから実行時にはタイムアウトは適用されません。GUI からのプラグイン実行時のみ適用されます。

サンプルファイル

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

最終更新 28.04.2025