目次に戻る
ShadeプラグインでのC-Partsの利用
2002/09/29 update.

エクス・ツールス社の「Shade」のプラグインとしてC-Partsを利用することにより、 Shadeのプラグインとしては実現の難しいGUIを使った複雑なダイアログの作成が可能になります。
また、独自のデザイン(配置・色)でGUI部品を配置することができるため、プラグインに個性を生み出すことができるようになります。

ShadeR5におけるプラグインのダイアログ(例:旧 ParticleDance)


エディットボックス・コンボボックス・チェックボックス・グループ以外は配置できない(プッシュボタンは「OK」「キャンセル」「リセット」のみ)。 また、配置位置も自由に決めることができない。



C-Partsを使ったプラグインのダイアログ


さまざまなGUI部品の配置が可能。また、任意の位置に部品を配置することができる。
ShadeプラグインからC-Partsを使用する
ShadeプラグインからC-Partsを利用するのは以下のような流れになります。
以下は、Windows環境の場合の概念図です。Mac OS Xの場合は、Windows環境でいう「CPartsLib.dll」がプラグインに完全にリンクされています。
イベントの流れとしては、Windows/Mac OS X共に同じです。



  1. 常駐プラグインとして読み込み

    Shadeプラグインは常駐プラグイン(プラグインのグローバル関数「is_resident()」でtrueを返すようにする)として作成します。
    こうすることで、Shadeが起動したときにこのプラグインも同時に読み込まれます。

  2. C-Parts初期化処理

    「C-Parts - Shadeブリッジ」のグローバル関数「CPartsSI_Initialize()」を 各インターフェースの「scene_opened」で呼びます。
    こうすることで、Shadeが起動してプラグインが読み込まれたときにC-Partsの初期化処理が行われます。

  3. C-Parts本体がメモリに常駐 (Windows環境のみ)

    上記の処理を行うことで、C-Parts本体である「CPartsLib.dll」がメモリに常駐します。
    なお、複数のプラグインからC-Partsを使用する場合でも、ロードされた1つの「CPartsLib.dll」を共有します。

    Mac OS Xの場合は、「CPartsLib.dll」に相当するライブラリが、プラグインと完全にリンク(スタティックリンク)されている状態になっています。
    このため、C-Parts本体は個々のプラグインで個別に持っていることになります。

  4. C-Partsでのダイアログ生成

    C-Partsのダイアログ作成・GUI部品の配置を行います。ここで、ユーザーはどのGUI部品をどこに配置するのか、イベントのコールバックはどこ(どのstatic関数)に返すのか、などの情報を指定します。

  5. イベントの取得

    C-Partsの「CPWindow::DoModal()」メソッドを呼び出すことにより、モーダルダイアログのメッセージループに入ります。
    C-PartsはShadeのイベントループに介入し(実際は横取り)、独自のイベント処理を行います。

  6. イベントをコールバックで返す

    プッシュボタンがおされた・マウスが移動した・キーボードが押された、などのイベントが発生したときに、 指定のstatic関数に、イベントを飛ばします。

  7. C-Parts終了処理

    プラグインのデストラクタで「C-Parts - Shadeブリッジ」のグローバル関数「CPartsSI_Terminate()」を呼び出します。
    こうすることにより、Shade終了時にC-Partsの後処理(メモリの解放など)が行われます。
C-Partsを使用したShadeプラグインを動作させるには (Windows環境のみ)
C-Partsを使用したShadeプラグインを動作させるためには、C-Parts本体である「CPartsLib.dll」 をShadeの実行ファイルがあるフォルダにコピーしてください。
後は、普通のプラグインと同じように「plugins」フォルダにプラグインを配置するだけです。

Mac OS Xの場合は、上記のようなDLLの配置は不要です。