CG・コンテンツ制作
  1. CG・コンテンツ制作トップ
  2. DAIKIN CG Channel
  3. UsersNotes
  4. スクリプト
  5. 既存のスクリプトを自己インストール型プラグインにしてWorkgroup配信する
SUITE USERS NOTES
既存のスクリプトを自己インストール型プラグインにして
Workgroup配信する

>> カスタムコマンド登録
プロローグ
今回は、便利なスクリプトも紹介しながら、そのVBSを自己インストール型のプラグインに作成し直します。
このプラグインは皆でデータやツールを共有する為に設けたWorkgroupのPluginディレクトリーに置いて配信するのが目的です。
自動的にインストールされるツールであるということは、カスタムのコマンドを設定した事になります。
このカスタムのコマンド使えば、ツールバーのボタンとして登録したり、Xpopというポップアック式のメニューに登録するなど
たくさんの利用方法が考えられます。

まずは便利なVBSスクリプトの御紹介から・・・
尚、この時点あたりからSoftimageV7.5にて記述しています。
SUNdan_ml
各Writerさん御協力ありがとうございます

VBSスクリプトの作成
このスクリプトは、選択しているClipの開始と終了フレームに下のタイムレンジを合わせてくれるスクリプトClipInOut_to_Glb.vbsです。
選択しているClip部分のみの再生が簡単に設定することが出来ます。
同様の機能で、Clipを右マウスクリックで表示されるポップアップで、インアウトループの設定というのもありますが、
これはループモードで使用しますのでサイクリックになっていないクリップでは不便なことがあります。
そのような時にこのスクリプトが便利です。
また、これを逆に戻すというスクリプトGlb_to_InOut.vbsも用意していあます。
ClipInOut_to_Glb_00s
set clp = selection(0)
If typename( clp ) = "Clip" then
inv=clp.TimeControl.Parameters("resin").value
outv=clp.TimeControl.Parameters("resout").value
p_in=GetValue("PlayControl.In")
if inv < p_in then inv=p_in end if
p_out=GetValue("PlayControl.GlobalOut")
if outv > p_out then outv=p_out end if
SetValue "PlayControl.In", inv
SetValue "PlayControl.Out", outv
End if
SetValue "PlayControl.In", GetValue("PlayControl.GlobalIn")
SetValue "PlayControl.Out", GetValue("PlayControl.GlobalOut")


スクリプトは、スクリプト・エディターの下半分にドラッグ&ドロップして表示させ、上中央の実行ボタンを押して動作確認します。
このままでも使えるのですが、よりカッコよく・・・、じゃなくて皆に配信できるような自己インストール型プラグイン化していきましょう。

ウィザードを使ってプラグインの雛形を作る
プラグインマネージャからウィザードを使えば簡単に自己インストールプラグインの雛形が作成できます。
ファイル > プラグインマネージャから下図のように表示し、ユーザールート > プラグイン > 新規作成 > コマンドを選択します。
plugin_wizard_00
すると、カスタムコマンドを作成するウィザードが表示されます。
コマンド名上記スクリプト名であるClipInOut_to_GlbPluginを入れると、
その下のプラグイン名は自動的にPlugin という名前を追加してくれます。
コーディング言語VBSを選択し、
メニューに追加はこの実行ファイルを配置する場所を指定します。
今回は3D画面上でAlt+右マウスクリックで表示されるコンテキストメニューに追記されるものとします。
右側の三角ボタンでsiMenu3DViewGeneralContextIDを選択します。
plugin_wizard_01
コマンド定義タブでは、詳細など入れておきます
plugin_wizard_02
ここまで記述したら、[コードの生成]ボタンを押します。
するとここまでのものを作成してくれます。だらだら書いてあるますが、プラグインとして認識してくれる設定が書いてあるはずです。(^_^);;;;;
あとは上記にスクリプトClipInOut_to_Glb.vbsの内容を追記すればPlugin が完成します。

ClipInOut_to_GlbPlugin
' Initial code generated by XSI SDK Wizard
' Executed Fri Jun 26 11:46:08 UTC+0900 2009 by ritaro
'
' Tip: To add a command to this plug-in, right-click in the
' script editor and choose Tools > Add Command.
'
' Tip: To get help on a callback, highlight the callback name
' (for example, "Init", "Define", or "Execute") and press F1.

function XSILoadPlugin( in_reg )
in_reg.Author = "ritaro"
in_reg.Name = "ClipInOut_to_GlbPlugin"
in_reg.Email = ""
in_reg.URL = ""
in_reg.Major = 1
in_reg.Minor = 0

in_reg.RegisterCommand "ClipInOut_to_Glb","ClipInOut_to_Glb"
in_reg.RegisterMenu siMenu3DViewGeneralContextID, "ClipInOut_to_Glb_Menu", false,false
'RegistrationInsertionPoint - do not remove this line

XSILoadPlugin = true
end function

function XSIUnloadPlugin( in_reg )
dim strPluginName
strPluginName = in_reg.Name
Application.LogMessage strPluginName & " has been unloaded.",siVerbose
XSIUnloadPlugin = true
end function

function ClipInOut_to_Glb_Init( in_ctxt )
dim oCmd
set oCmd = in_ctxt.Source
oCmd.Description = "CLIP no InOut wo FrameNo ni"
oCmd.SetFlag siSupportsKeyAssignment,false
oCmd.ReturnValue = true

ClipInOut_to_Glb_Init = true
end function

function ClipInOut_to_Glb_Execute( )

Application.LogMessage "ClipInOut_to_Glb_Execute called",siVerbose
'
' TODO: Put your command implementation here.
'
ClipInOut_to_Glb_Execute = true
end function

function ClipInOut_to_Glb_Menu_Init( in_ctxt )
dim oMenu
set oMenu = in_ctxt.Source
oMenu.AddCommandItem "ClipInOut_to_Glb","ClipInOut_to_Glb"
ClipInOut_to_Glb_Menu_Init = true
end function


この上の記述部分
' TODO: Put your command implementation here.(ココに貴方のコマンドを埋め込め)
って書いてあるのでここに
ClipInOut_to_Glb_sub
を入れ込み、

function ClipInOut_to_Glb_Execute( )

Application.LogMessage "ClipInOut_to_Glb_Execute called",siVerbose
'
' TODO: Put your command implementation here.
'
ClipInOut_to_Glb_sub

ClipInOut_to_Glb_Execute = true
end function

そのプログラムを下に追記します。

sub ClipInOut_to_Glb_sub()
set clp = selection(0)
If typename( clp ) = "Clip" then
inv=clp.TimeControl.Parameters("resin").value
outv=clp.TimeControl.Parameters("resout").value
p_in=GetValue("PlayControl.In")
if inv < p_in then inv=p_in end if
p_out=GetValue("PlayControl.GlobalOut")
if outv > p_out then outv=p_out end if
SetValue "PlayControl.In", inv
SetValue "PlayControl.Out", outv
End if
end sub

プラグインの完成です。

編集したプラグインはXSIを再起動せずに、プラグインマネージャから再ロードをすることができます。編集することもここから出来ます。
plugin_wizard_03
同様に作成した逆に動作するプラグインです。

Softimage上でツールの動作確認・コマンド登録
今回、プラグインをメニュー登録した場所は、View画面のコンテキストメニューです。
何も無いView画面でALT+右クリックで表示されるメニューの下にClipInOut_to_Glb/Glb_to_InOutが登録されていれば成功です。
plugin_wizard_04
任意のClipを選択した状態でClipInOut_to_Glbを実行し、動作を確認します。
スクルプトが正常に動作していると、スクリプトエディターのLog部分には、ClipInOut_to_Glbとログが残っています。
これがこのスクリプトを動かすのに登録したコマンド名になります。
つまり、このログに残っているコマンド名を再度スクルプトエディター下部にコピーして実行すると同じ動作をします。
ClipInOut_to_Glb_01
これを知っていれば、Workgroup配信したプラグインによって、コマンドも共有することが出来るということが理解できます。
ではWorkgroupにPluginを置いてツールを共通できるか確認してみましょう。

PluginのWorkgroup設定・確認
SoftimageにはSDKサンプルプログラムなどが簡単にWorkgroup設定できるようになっています。
このWorkgroupを仮にネットワーク上共有されているツール置き場と仮定して実験することに使えます。

ファイル > プラグインマネージャからワークグループタブ内の[接続...] でボタンを押します。
ワークグループに接続PPGが表示されるので[SDKのサンプルのワークグループを試してください]ボタンを押すと、
C:\Softimage\Softimage_7.5\XSISDK\examples\workgroup
が記入されるので、[OK]を押します。
SDK_work00
それでは、C:\Softimage\Softimage_7.5\XSISDK\examples\workgroupの所にApplication\Pluginsまでのディレクトリを作成します。
 < つまり全部で、C:\Softimage\Softimage_7.5\XSISDK\examples\workgroup\Application\Plugins > 

TIPS;実際の共有フォルダ;Workgroupの設定
実際に共有フォルダ上にワークグループを作成するには、プラグインマネージャのワークグループにて、ファイル > 作成で作成できます。
この場合は、必要なフォルダ構成も(Application\Pluginsも)作成されます。
new_wg1

new_wg2


上述のプラグイン、ClipInOut_to_GlbPluginGlb_to_InOutPlugin
ユーザルート > プラグインからドラッグ&ドロップで移動します。
(C:\user\ritaro\Autodesk\Softimage_7.5\Application\Pluginsから直接ファイルを移動しても構いませんが、
プラグインマネージャのツリー上でドラッグ&ドロップすると自動的にメニューが更新されます)
MoveUserToWgp
Alt+右マウスクリックでコンテキストメニューを見てみてください。
plugin_wizard_05
すると、今度はメニュの頭がWとなっています。これでワークグループから読み込まれたツールだと解ります。
つまり、先のを振り返ってみるとUと書かれていて、これはユーザーから読み込まれたツールだったと解ります。
実行してみると、同じ動作をするはずです。

また、プラグインマネージャーで見ると、プラグインはユーザールートの下には無く、ワークグループの下に登録されています。
ClipInOut_to_Glb_04
このようにして動作確認した後、皆さんが本当に共有しているワークグループ用のツール置き場にコピーすれば
皆で使えるツールになります。

登録されたコマンドを利用してツールを使う
ワークグループにあるツールから自動的に読み込まれたプラグインは、コマンド登録済みなのは上記の通りです。
スクリプトエディター上でClipInOut_to_Glbと実行すれば、ツールが動作します。(ScriptEditorの言語がVBSであることを確認してください)

つまり、このコマンドを使えば、あとはユーザー側で好きな配置、メニューやボタンを用意して、そのツールを動作させることが出来ます。



1)ツールバーに登録してボタン化して使う
表示 > 新規カスタムツールバーを作成しておきます。
実行時に表示されているコマンドを選択し、ドラッグ&ドロップでツールバー上に持って来ると
スクリプトのボタンPPGが表示されるので、◎スクリプトボタンを選んで[OK] を押します。
ClipInOut_to_Glb_02
ボタンのカスタマイズPPGが表示されるので、ボタンに付ける名前を入れて、OKを押します。
すると[ ClipInOut_to_Glb] ボタンが出来あがります。
このツールバーにも、ツールバー上で右マウスクリップ > 名前をつけて保存(下例ではClipTool) をしておきます。
ClipInOut_to_Glb_03
TIPS;ツールバーもWorkgroup配信できます
実はここで作成したツールバーもWorkgroupの中に用意すれば共有ツールバーとして配信が出来ます。
上記ClipToolという名前保存したツールバーの上には[User]と書かれていることに気が付きます。
名前をつけて保存した時、C:\users\ritaro\Autodesk\Softimage_7.5\Application\toolbarsにClipTool.xsitbとして保存しています。
上記で使ったSDKサンプルのワークグループ
C:\Softimage\Softimage_7.5\XSISDK\examples\workgroup\Applicationにtoolbarsというディレクトリを作成します。
 < つまり全部で、C:\Softimage\Softimage_7.5\XSISDK\examples\workgroup\Application\toolbars > 
(実際にプラグインマネージャから新規にワークグループを作成した場合、Application\toolbarsも自動的に作成されます)

ClipTool.xsitbを、ユーザルート > ツールバーからドラッグ&ドロップで移動します。
(C:\user\ritaro\Autodesk\Softimage_7.5\Application\toolbarsから 直接ファイルを移動しても構いませんが、
プラグインマネージャのツリー上でドラッグ&ドロップすると自動的にメニューが更新されます)
TbMoveToWgp

表示 > ツールバーを見ると、Wが付いたClipToolになり、ツールバー上にも [workgroup]と書かれています。
ClipInOut_to_Glb_05
もう一つTIPS!!
ツールバー上のボタンをそれ自体が動くツールとして配信したい場合は(つまり自己インストールプラグインを使用せず、ボタンで動くツールにしたい場合) 、
上記で紹介した通り、スクリプトをそのままツールバーにドラッグ&ドロップして、スクリプトボタンとして登録します。
この場合、ツールバーだけを配信すればOKです。
その例がこちらになります。>>InOut_Clip.xsitb
scr_button1

scr_button2
注意!!:
ここで、作成したxsitbファイルをそのまま使うのは問題ありませんが、 新たにxsitbを作成するときは、このxsitbファイルをコピーするのではなく、
自分でツールバーを作成し、そこにスクリプトコマンドやスクリプトボタンを埋め込む形をとってください。
xsitbで使用されているIDがかぶるとエラーが起こる場合があります。
( 上記例だと、
clsid="{766FF2A5-1792-4854-867F-23CCAFF120B5}"
id="{7D752FE1-8981-47ED-92F7-12B4ACF8B123}"
の部分です。)





Emi_banner
参考になったところありましたか?
このように色々な使い方が用意出来ると、ワークフローも楽になります。
特に頻発して使うツールなど、うまくまとめて使い勝手を良くすることで、
作業効率もグーんと上がることでしょう!!!!

お気軽にお問い合わせください

Daikin CG News お申し込み

CGクリエイター向けのセミナー・イベントやキャンペーン、製品情報をメールマガジンでお届けします。(登録無料)

Twitter

ページの先頭へ