0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Substance 3D Painterにメニューを追加する

Last updated at Posted at 2025-03-07

環境

  • Windows
  • Adobe Substance 3D Painter 10.1.2

メニューを追加する

メニューを追加する方法として、ここではスタートアッププラグインで追加する方法を紹介します。

スタートアッププラグインの配置先

プラグインの配置場所について説明します。
ユーザー用のプラグインのディレクトリのデフォルトの場所は下記になります。

%USERPROFILE%\Documents\Adobe\Adobe Substance 3D Painter\python

また環境変数 SUBSTANCE_PAINTER_PLUGINS_PATH を使用することで、任意のディレクトリをプラグインの検索パスに追加できます。

プラグインディレクトリについては3つのサブディレクトリ pluginsstartupmodules があり、startup ディレクトリに配置されたファイルはスタートアッププラグイン (起動時に読み込まれるプラグイン) として認識されます。
(サブディレクトリの詳細については substance_painter_plugins に記載がありますので、そちらを参照してください。)

スタートアッププラグインの記述方法

Hello Plugin のサンプルを例に説明します。

重要なのは下記3点です。

  • start_plugin 関数
  • close_plugin 関数
  • エントリーポイント

start_plugin 関数

プラグイン起動時に呼び出される関数です。この関数に起動時に実行したい処理を記述します。

close_plugin 関数

プラグイン停止時に呼び出される関数です。Hello Pluginの例では追加されたウィジェットをクリーンアップする処理が記述されています。

エントリーポイント

エントリーポイントで start_plugin 関数を呼び出します。

プラグインのサンプル

サンプルコード

以下のコードは説明のわかりやすさを重視したものです。コーディングのベストプラクティスを示したものではありませんのでご注意ください。

from PySide6 import QtGui, QtWidgets

import substance_painter as sp

plugin_widgets = []


class SampleMenu(QtWidgets.QMenu):
    def __init__(self, title):
        super().__init__(title)

        action1 = QtGui.QAction("Action1", self)
        action1.triggered.connect(self.callback_action1)
        self.addAction(action1)

        action2 = QtGui.QAction("Action2", self)
        action2.triggered.connect(self.callback_action2)
        self.addAction(action2)

    def callback_action1(self):
        print("Action1")

    def callback_action2(self):
        print("Action2")


def start_plugin():
    menu = SampleMenu("Sample")
    sp.ui.add_menu(menu)
    plugin_widgets.append(menu)


def close_plugin():
    for widget in plugin_widgets:
        sp.ui.delete_ui_element(widget)
    plugin_widgets.clear()


if __name__ == "__main__":
    start_plugin()

sp_menu_00.jpg

説明

サンプルコードでポイントとなるのは start_plugin 関数で呼び出している ui.add_menu 関数のみです。
ui.add_menu 関数は指定したメニューをメインウインドウに追加する関数で、引数として PySide6.QtWidgets.QMenu を指定するだけでメニューを追加することができます。
サブメニューやコールバック関数の追加に関しては Qt for Python で実装するやり方と違いはありません。
ウィジェットのクリーンアップの処理については先に触れた Hello Plugin を参考に実装してください。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?