Softimage的疑似クラスコマンド化について[Softimage Script][JScript]
先日会社でJScriptで疑似クラスを記述したJSファイルを見かけました。
その内容はエクセルを操作するための汎用的なクラスだったんですが
、他のスクリプトからはeval関数を利用してファイル内の文字列を読み込む形式だったんです。
特にそれ自体には問題ないんですけどね。
会社ではSIのワークグループをTortoiseSVNを使用して管理していたため、
eval関数を利用するとファイルがロックされていると認識されSVNからの更新に失敗してしまうなど、
食い合わせが悪かったのですよ。(=△=;
ということで、疑似クラスを自己インストール型プラグイン化できないかなーと試してみました。
今回使用するクラスは以下。犬クラスです。
※クラスについて詳しくはググってください〜
var oDog = new clDog("ポチ");//クラスをインスタンス化する logmessage(oDog.name); oDog.SetType("雑種"); //犬クラス var clDog = function(in_name) { this.name = in_name;//犬の名前 this.type = ""; //犬種を設定しログを表示 this.SetType = function( in_type ){ this.type = in_type; logmessage(this.name + "の種類は" + this.type + "だよ!"); } }
今まではこのクラスが記述されているjsファイルを別のjsファイルから文字列として読み込むことで
汎用的なコマンドとして使用してたんですね〜。
ではでは、これを自己インストール型のプラグイン化してみます。
function XSILoadPlugin( in_reg ) { in_reg.Author = ""; in_reg.Name = "clDog"; in_reg.Email = ""; in_reg.Help = ""; in_reg.Major = 1; in_reg.Minor = 0; in_reg.RegisterCommand("clDog","clDog");//コマンド return true; } function clDog_Init( in_ctxt ) { //コールバックコンテキストからCommandオブジェクトを取得 var oCmd = in_ctxt.Source; //ArgumentCollectionを取得 var oArgs = oCmd.Arguments; //引数の設定(追加) oArgs.Add("in_name", siArgumentInput,""); return true; } function clDog_Execute( in_name ) { return new clDog(in_name); //クラスをインスタンス化したものを戻してやる //犬クラス本体 var clDog = function(in_name) { this.name = in_name;//犬の名前 this.type = ""; //犬種を設定しログを表示 this.SetType = function( in_type ){ this.type = in_type; logmessage(this.name + "の種類は" + this.type + "だよ!"); } } }
これで疑似クラスをプラグイン化したものが完成っす!
単純にコマンド内に疑似クラス本体を記述して、そのインスタンスを戻しているだけです。
これで、クラス内のメソッドに対して引数を渡す事もできます。
ただし、インスタンス化するための引数だけは自己インストール型の引数の記述をしています。
具体的な使い方は以下のような感じです。
var oDog = clDog("ポチ");//コマンドを実行した戻り値がクラスをインスタンス化されたもの logmessage(oDog.name); oDog.SetType("雑種");
以上です〜。