2020年1月6日月曜日

scriptsフォルダ内の構造

MEL で色々と機能を追加していくと、スクリプトフォルダ内がファイルで一杯になって来てしまいます。
プロジェクト間で環境を移行する場合、どれを使用していて、なにが不要なのかも分からなくなり、.melファイルを一個一個確認しないといけなくなったりする羽目に・・・。
そんな場合の Tips 。



まぁ、単にフォルダを追加してあげれば、といった単純なものだったりするのですが・・・。

分類方法に工夫が必要だったりしますが、GUIの無いスクリプトは utils、有れば tools みたいに、まずは単純な振り分け方をして更にサブフォルダを掘るみたいな?
汎用的なものとプロジェクト固有のものとを分けておけば移行も楽になると思います。
Python のパッケージみたいな感覚でしょうか。

構成的にはこんな感じになりますかね。


tryTools, tryUtils, tryMenuCreate.mel, userSetup.mel などは個人的なスクリプト類なので、バージョン管理のフォルダではなく、マイドキュメント内のフォルダに置くことになるんですけどね。

こうしておけば、scriptsフォルダ内がスッキリするのですが、スタートアップ時に、それぞれのフォルダ内にある.melファイルを source しないといけないので、スクリプトを作成する身としては面倒くさくなります。

で、いっそのことフォルダを指定して source するスクリプトを作ってしまえば解決です。
trySourceFolder.mel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
proc _sourceFiles(
 string $path )                      ///< 調べるパス
/**************************************************************************//**
 @private
 @brief $path 内の.melファイルを source する
 ******************************************************************************/
{
 // .melファイルを取得する
 string $files[]=`getFileList -fld $path -fs "*.mel"`;
  
 for( $file in $files ) evalEcho("source \""+$path+"/"+$file+"\"");
  
}
 
 
proc int _seachFolder(
 string $path )                      ///< 調べるパス
/**************************************************************************//**
 @private
 @brief $path が存在するか調べる。
 @retval 0 無かった
 @retval 1 有った
 ******************************************************************************/
{
 // フォルダの確認
 if(`filetest -d $path`)
 {
  _sourceFiles($path);
  return 1;
   
 }
  
 return 0;
  
}
 
 
global proc trySourceFolder(
 string $folder )                    ///< フォルダ名
/**************************************************************************//**
 @brief $folder 下の.melファイルを source する。
 ******************************************************************************/
{
 if(""==$folder) error -n "Null argument.";
  
 string $scriptPath =`getenv "MAYA_SCRIPT_PATH"`;
 string $paths[]= python("'"+$scriptPath+"'.split(';')");
  
 for( $path in $paths )
 {
  if(`_seachFolder ($path+"/"+$folder)`) break;
   
 }
  
}
これを scriptsフォルダ直下に追加し、スタートアップファイルから実行すれば、sourceの完了です。
11行目の evalEcho は確認用なので、ログを汚したくない場合は eval へ変更しておくとよいでしょう。
サブフォルダは、.res.melをオーバーライドしてしまわないようにする為あえてチェックしていません。複雑になりますしね。


リガーの場合は、追加の Tips が必要だったりするのですが次の機会に・・・。


0 件のコメント:

コメントを投稿