アクションファイルを解析してマッピングテンプレート作成


アクションファイルを読み込む際に、読み込む先に要素が存在しない場合
マッピングテンプレートのUIが出て確認を求められるのがすご〜く邪魔でした。
特に自動処理とかの場合はそこでとまってしまって処理が先に進まないのが問題。
(なぜか無視して強制的に進ませるオプションは用意されてない…。)

ということで、

 アクションファイルを直接解析
   ↓↓
 読み込み先のモデルヌル以下と比較
   ↓↓
 モデルヌル以下に存在しないものは無視できるようにマッピングテンプレートを作成する

という関数を作りました。
これで邪魔なUIとはオサラバ!!ヾ(@⌒▽⌒@)ノワーイ!

使い方は

 MakeMappingTemplate(oModel,ActionFile)
oModel:アクション読み込みモデルのオブジェクト
ActionFile:読み込むアクションファイルのパス)



という感じ。
ファイルを解析してるだけなので、dotXSI形式(テキスト)にのみ対応してます。
(ファイルを見てエラー処理とかしてないので、必要だったら追加してください)

もちろんアクションを読み込んでから比較しても良かったんですが、
ImportActionAndAddClipコマンドを使いたかったのでこういう形にしてみました。



関数は↓↓↓です。
必要な人はそんないないと思いますが、必要でしたらドゾー!!!



//マッピングテンプレートを作る関数(本体)
function MakeMappingTemplate(oModel,ActionFile)
	//空のマッピングテンプレートを作成
	vtcol = CreateEmptyConnectionMap( oModel, null );
	var oMappingTemplate = vtcol.Value("MappingTemplate");

	//アクションファイルからFカーブ要素を取得
	var ObjList = GetObjectList_forActionFile(ActionFile);

	if(!ObjList)return null;

	//インポート先に存在しないものだけテンプレートに追加していく
	for(var i = 0; i < ObjList.length; i++){
		var oParam = Dictionary.getobject(Selection(0) + "." + ObjList[i],false);
		if(oParam == null)AddMappingRule( ObjList[i],  ,null )
	}
	return oMappingTemplate;
}

//*******************************************************************************************************************

//アクションファイルを解析、Fカーブの要素リストを戻す
function GetObjectList_forActionFile(in_FilePath){

	var objFso = new ActiveXObject("Scripting.FileSystemObject");

	//リストストック用
	var ObjList = new Array();

	if (!objFso.FileExists(in_FilePath))return false;

	//ファイルを開く
	var objTs = objFso.OpenTextFile(in_FilePath,1,false);
	
	//ファイル末尾まで繰り返す
	var flg = false;
	while (!objTs.AtEndOfStream){
	
		var Line = objTs.ReadLine();//1行読み込む
		Line = trim(Line);//空白の削除
		if(Line.indexOf("SI_FCurve") != -1)flg = true;//Fカーブの要素が来たら処理開始
		if(flg == false)continue;
		
		//Fカーブ要素内のデータが2つ溜まるまで読み込む
		var FCurveData = "";
		while (FCurveData.split(",").length < 3){
			FCurveData  += trim(objTs.ReadLine());//1行読み込む
		}
		
		//余計な物を削除してリストに加える
		ObjList.push(FCurveData.split(",")[1].replace(/\"/g,""));
		
		var flg = false;
	}
	objTs.Close();
	
	return ObjList

}

//*******************************************************************************************************************

//トリム
function trim(argValue){
	//半角スペース 全角スペース タブ を文字列から排除する
	var stg = String(argValue).replace(/[  	]*/g, "");
	//『/* */』こんなコメントを削除
	stg = String(stg).replace(/\/\*.+\*\//, "");
	//『//』こんなコメントを削除
	stg = String(stg).replace(/\/\/.+/, "");
	return stg
}