<< TOP



既存のスクリプトを自己インストール型プラグインにして
Workgroup配信する >> カスタムコマンド登録


各Writerさん御協力ありがとうございます

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

     まずは便利なVBSスクリプトの御紹介から・・・
              尚、この時点あたりからSoftimageV7.5にて記述しています。

 VBSスクリプトの作成
     このスクリプトは、選択しているClipの開始と終了フレームに 下のタイムレンジを合わせてくれるスクリプトClipInOut_to_Glb.vbsです。
    選択しているClip部分のみの再生が簡単に設定することが出来ます。
    同様の機能で、Clipを右マウスクリックで表示されるポップアップで、インアウト ループの設定というのもありますが、
    これはループモードで使用しますのでサイクリックになっていないクリップでは不便なことがあります。
    そのような時にこのスクリプトが便利です。
     また、これを逆に戻すというスクリプトGlb_to_InOut.vbs も用意していあます。



    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")

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

 ウィザードを使ってプラグインの雛形を作る
     プラグインマネージャからウィザードを使えば簡単に自己インストールプラグイン の雛形が作成できます。
    ファイル>プラグインマネージャ から下図のように表示し、ユーザールート>プラグイン>新規作成>コマンド を選択します。



     すると、カスタムコマンドを作成するウィザードが表示されます。
    コマンド名上記スクリプト名である ClipInOut_to_GlbPlugin を入れると、
    その下のプラグイン名は自動的に Plugin という名前を追加してくれます。
    コーディング言語に VBS を選択し、
    メニューに追加はこの実行ファイルを配置する場所を指定します。
     今回は 3D画面上で Alt+右マウスクリック で表示される コンテキストメニュー に追記されるものとします。
    右側の三角ボタンで siMenu3DViewGeneralContextID を選択します。



     コマンド定義 タブ では、詳細 など入れておきます



     ここまで記述したら、 [コードの生成] ボタンを押します。
    すると ここまでのもの を作成してくれます。 だらだら書いてあるますが、プラグインとして認識してくれる設定が書いてあるはずです。(^_^);;;;;
    あとは 上記にスクリプト 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を再起動せずに、プラグインマネージャから 再ロードをすることができます。 編集 することもここから出来ます。



    同様に作成した 逆に動作するプラグインです。

 Softimage上でツールの動作確認・コマンド登録
     今回、プラグインをメニュー登録した場所は、View画面のコンテキストメニューです。
    何も無いView画面で ALT+右クリックで表示されるメニューの下に ClipInOut_to_Glb / Glb_to_InOut  が登録されていれば成功です。



     任意のClipを選択した状態で  ClipInOut_to_Glb を実行し、動作を確認します。
    スクルプトが正常に動作していると、スクリプトエディターのLog部分には、ClipInOut_to_Glb とログが残っています。
    これがこのスクリプトを動かすのに登録した コマンド名になります。
    つまり、このログに残っているコマンド名を 再度スクルプトエディター下部にコピーして実行すると同じ動作をします。



     これを知っていれば、Workgroup配信したプラグインによって、コマンドも共有することが出来るということが理解できます。
    では Workgroup にPluginを置いて ツールを共通できるか確認してみましょう。

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

    ファイル>プラグインマネージャ から ワークグループ タブ内の [接続...] でボタンを押します。
    ワークグループに接続PPGが表示されるので [SDKのサンプルのワークグループを試してください] ボタンを押すと、
     C:\Softimage\Softimage_7.5\XSISDK\examples\workgroup 
    が記入されるので、[OK] を押します。



    それでは、C:\Softimage\Softimage_7.5\XSISDK\examples\workgroup の所に Application\Plugins までのディレクトリを作成します。
     <つまり全部で、C:\Softimage\Softimage_7.5\XSISDK\examples\workgroup\Application\Plugins >

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






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



    Alt+右マウスクリックで コンテキストメニューを見てみてください。



     すると、今度は メニュの頭が W となっています。これで ワークグループから読み込まれたツールだと解ります。
    つまり、先のを振り返ってみると U と書かれていて、これはユーザー から読み込まれたツールだったと解ります。
     実行してみると、同じ動作をするはずです。
     
    また、プラグインマネージャーで見ると、プラグインはユーザールートの下には無く、ワークグループの下に登録されています。



     このようにして動作確認した後、皆さんが本当に共有している ワークグループ 用のツール置き場にコピーすれば
    皆で使えるツールになります。

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

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


     1) ツールバーに登録して ボタン化して使う
     表示>新規カスタムツールバーを作成しておきます。
    実行時に表示されているコマンドを選択し、ドラッグ&ドロップでツールバー上に持って来ると
    スクリプトのボタンPPGが表示されるので、◎スクリプトボタン を選んで [OK] を押します。



     ボタンのカスタマイズPPGが表示されるので、ボタンに付ける名前を入れて、OK を押します。
    すると [ ClipInOut_to_Glb] ボタンが出来あがります。
    このツールバーにも、 ツールバー上で 右マウスクリップ>名前をつけて保存 (下例では ClipTool) をしておきます。



    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 から 直接ファイルを移動しても構いませんが、
       プラグインマネージャのツリー上でドラッグ&ドロップすると自動的にメニューが更新されます)



      表示>ツールバー を見ると、W が付いた ClipTool になり、ツールバー上にも [workgroup] と書かれています。



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




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






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