patchLevelはLayout上でサブパッチ表示レベルと表示方式を切り替えかえるLScriptです。カレント状態のアイテムの階層を検索し、すべてのカレントアイテムが所属しているツリーのサブパッチ数とVisiblityを変更します。
また、バージョン2ではVisibiltyの選択が可能になり、表示方法(Visibilty)を変えずにサブパッチレベルだけ変更することが可能になりました。この機能により、複数キャラクタのモーション編集時に、アクセラレータ性能に合わせてパッチレベルを変更することが出来ます。
また、スクリプトなので表示方法を違うパターンにカスタマイズすることも出来ます。
2003/11/10 patchLevel3でプラグイン名が間違っていたバグを修正
2003/10/11 バーション2.0公開
変更点
・Level0,Level3でVisibiltyを選択可能に修正。
・カレントアイテムが所属しているオブジェクトすべてのサブパッチレベルとVisibiltyを変更するように修正。
2003/08/05 バージョン1.0公開
patchLevelは3つのスクリプトから構成されています。
スクリプト名 | 内容 | プラグイン種別 |
patchLevel0.ls | サブパッチとVisibilityをLevel0に変更します。 | LScript Layout Genetic |
patchLevel3.ls | サブパッチとVisibilityをLevel3に変更します。 | LScript Layout Genetic |
patchLevelOpt.ls | Level0、Level3のサブパッチ分割数とVisibiltyを指定します。 | LScript Layout Genetic |
インストールは以下の手順で行なってください。
patchLevelOpt.lsを実行すると左図のようなダイアログが表示されます。
Visibility patchLaval0 patchLevel0を実行した場合に変更される表示方法を指定します。
Visibility patchLaval3 patchLevel3を実行した場合に変更される表示方法を指定します。
「Level0」 patchLevel0を実行した時に変更されるサブパッチ表示を指定します。
「Level3」 patchLevel3を実行した時に変更されるサブパッチ表示を指定します。
「Render」 レンダリング時のサブパッチレベルを指定します。これは2つのプラグインで共通です。
設定後、
patchLevel0を実行すると「Level0」 のサブパッチとVisiblityに変更されます。
patchLevel3を実行すると「Level3」 のサブパッチとVisiblityに変更されます。
patchLevelではテンポラリファイルとして「Content」以下の階層にデータファイル"patchoption.txt"を作成します。このファイルを削除してしまった、あるいはない場合はpatchLevelOpt.lsを実行し初期化してください。
Visibilityで「表示しない」と「バウンディングボックス」は現在選択できません。これは階層内で予め非表示になっているもののVisibiltyを変更するのを避ける為です。
このソフトを使用した事で生じた損害などに対して、いっさい責任は持てません。 要望やバグがある場合は以下のアドレスまでメールしてください。
Copyright Noboru Fujiyama 2003/05/27
e-mail : noboyama@yk.rim.or.jp
homepage : http://www.yk.rim.or.jp/~noboyama/
これ以降はスクリプト内部の構造の解説です。カスタマイズの必要がない方やスクリプト作成に興味のない方は読む必要はありません。
このスクリプトはデータファイル"patchoption.txt"作成する為のlayout Geneticスクリプトです。
sTempFile = getdir("Content");
sTempFile += "\\patchoption.txt" ;
上記の部分(ソースコードの8〜9行目)は「Content」ディレクトリ以下に"patchoption.txt"というファイル名をsTempFile変数に代入しています。ここを修正する事でデータファイルのディレクトリの位置を修正できます。getdirには他にもプラグイン階層やインストール時の階層を取得する事が出来ます。ただし getdir("Images")は結構適当な値が返ってくるので注意が必要です。
file = File( sTempFile , "r") ; if( nil != file )
{
sName = file.read();
xMesh = Mesh( sName ) ;
nLevel0 = file.readInt();
nLevel1 = file.readInt();
nRender = file.readInt();
}
else {
xMesh = nil;
nLevel0 = 0;
nLevel1 = 3;
nRender = 3;
}
13〜27行目でファイルを一旦読み込み、データを取得しています。データファイルには
モデル名 文字列
Level0サブパッチレベル 整数
Level3サブパッチレベル 整数
レンダリング時のパッチレベル 整数
の形式で保存されています。これらはすべてアスキーコードです。 また、
xMesh = Mesh( sName )
でダイアログ表示時に初期化されているオブジェクトへのOAを生成しています。
29〜43はダイアログ表示のためのコードです。「LScript Interface Designer」というツールでプロトタイプを作成し組み込んでいます。ツールは以下の階層にインストールされています。
LightWave\Programs\LightWave_Support\LSID.exe
if( nil != file )
{
file.reopen( "w" );
}
else
{
file = File( sTempFile , "w") ;
}
47〜53行目ではファイルがあったならば書き込みモードに変更し、なかったら作成(編集)モードでファイルをオープンします。
file.writeln(xMesh.name);
file.writeln(nLevel0);
file.writeln(nLevel1);
file.writeln(nRender);
最後にファイルにデータを書き込んで終わりです。
patchLevel0.ls/patchLevel3.lsはほとんど同じ構成になっています。
10〜11行目で現在の選択状態を保存して置きます。これはこのプラグイン内部で選択を変更する為です。
scn = Scene();
CurrObj = scn.getSelect();
8〜35行目まではデータファイルの読み込みを行ないます。この部分は上記のpatchLevelOptの解説を参考にしてください。
xMesh = Mesh( sName ) ;
if( nil != xMesh )
{
SelectItem(sName);
}
この中で上記の18〜23行目部分ではModel名が有るか無いかチェックし、有った場合はそのModelを選択状態にしています。後で使用する関数は選択状態になっていないと動かない為、この作業が必要です。
BoneXRay();
SubPatchLevel( nLevel0 , nRender ) ;
ItemVisibility( 5 );
36〜38がこのプラグインの「キモ」になります。たった3行です(^_^;)上記コードでボーンX線表示の切り替え、サブパッチ表示レベルの切り替え、表示方法の選択を行なっています。表示方法の選択ItemVisibility()への入力は以下の様になっています。
1 | ??? |
2 | バウンディングボックス |
3 | 点 |
4 | ワイヤーフレーム |
5 | ワイヤーフレーム(裏面非表示) |
6 | 陰影付きソリッド |
7 | テクスチャ付きソリッド |
最後(39行目)にもともと選択状態にあったItemを選択して終了します。
SelectItem(CurrObj[1].id);