UVTexIntegra 310.0.0.3

- メインページ
- 関連ページ
- モジュール
- ネームスペース
- クラス
- ファイル

- 構成
- 構成索引
- クラス階層
- 構成メンバ

全て クラス ネームスペース 関数 変数 列挙型 プロパティ イベント グループ ページ
構成 | Public メソッド | Protected メソッド | プロパティ | すべてのメンバ一覧
クラス UVTexIntegra.Scripting.ScriptMain
UVTexIntegra-Scripting名前空間

プレビュー処理をカスタマイズするスクリプトのベースクラス [詳細]

UVTexIntegra.Scripting.ScriptMainに対する継承グラフ
[凡例]

## 構成
class | Face
| 面情報を取得/設定するための構造体を定義します。 [詳細]
class | Utility
| UVTexIntegraがScriptMainを制御するためのユーティリティクラスです。このクラスは通常スクリプトプログラマが利用するためのものではありません。 [詳細]

## Public メソッド
virtual void | Close ()
| 継承可能な解放処理 [詳細]
virtual void | OnUVOperation (Face[] faces)
| UVの変換処理を行います。 [詳細]
void | Dispose ()
| 破棄処理を行います。内部で virtual な Close() を行った後、 Dispose(bool) メソッドを呼び出します。 [詳細]
bool | IsSerializable ()
| このインスタンスが、すべてのシリアライズ条件を満たしているか判定します。 [詳細]
bool | IsSerializeSave ()
| スクリプトがシリアライズ可能( IsSerializable() == true )で、さらにSerializeSaveAttributeがtrueに設定されるているか取得します。 [詳細]

## Protected メソッド
| ScriptMain ()
| デフォルトコンストラクタ
virtual void | Dispose (bool flag)
| 継承可能な Dispose メソッド [詳細]

## プロパティ
virtual System.String | Name`[get]`
| スクリプトの表示名。 [詳細]

## 説明

プレビュー処理をカスタマイズするスクリプトのベースクラス

DLLあるいはスクリプトの中に、引数なしコンストラクタをパブリックに公開するScriptMain継承クラスを作ると、そのスクリプトオブジェクトのインスタンスがUVTexIntegra上に生成されます。

１つのDLLまたはスクリプトへの複数スクリプト登録
  名前空間を問わずアセンブリ中ですべての ScriptMain 継承クラスが列挙されます。
  1. ScriptMain をPublicに継承している
  2. 少なくとも引数のないデフォルトコンストラクタをPublicに公開している
  条件を満たしたクラス１つに対して１つのインスタンスが生成されます。

継承クラスのプロパティに、UVTexIntegraのプロパティグリッドから入力する。
  ScriptMain継承クラスは、プロパティをパブリックに公開すると、UVTexIntegraからリアルタイムにパラメータを閲覧・編集できます。

OnUVOperation() メソッドをオーバーライドする
  プレビューや保存処理の前にこのメソッドが呼び出されるので、パラメータに渡された UVTexIntegra.Scripting.ScriptMain.Face[] を参照し、Face.Normal などの面情報をもとに Face.Points[].Coordinate または Face.Points[].Color を書き換えていきます。 基本的にはここまでの手順だけでカスタムベイクをプログラムできます。

  なお面ごとの処理だけではなく頂点ごとの処理を行うには OnUVOperation() の処理中に独自に解析バッファを作るか ScriptMain.Face.ShareRelation.GetRelationsSnap() メソッドを使います。 このメソッドは現在UV座標がどのように複数の面に共有されているかリストにします。

プロパティを保存させる
  さらに以下のシリアライズ条件を満たせば、プロパティに入力した値を保存できます。
  1. クラスに明示的にSerializable属性を与えられている
  2. デシリアライズ用コンストラクタ／(SerializationInfo info, StreamingContext stream)を引数としたパブリックコンストラクタを公開している。
  3. ISerializableを実装して、GetObjectData()メソッドを提供している。
  4. クラスにUVTexIntegra.Scripting.SerializeSaveAttribute属性を設定している。
  再コンパイル時に型の名前（名前空間を含むフルネーム）を引き継いでいれば、古いScriptMainインスタンスから、新しいScriptMainインスタンスへの保存内容の引継ぎが行われます。

解放処理の記述方法： Close() / Dispose() メソッドのオーバーライドとその違いについて
  解放には Close() または Dispose(bool) をオーバーライドします。 Close()も Dispose(bool) も基本的には必ず呼び出されます。
  - Dispose() やファイナライズで、常に Close() => Dispose(bool) の順で呼び出される。
  - Close() を継承する時のルール
    1. 複数回呼び出されても問題のない実装にしなければならない。
    2. オーバーライドされた Close() が base.Close() するかはエンドプログラマの裁量にゆだねる
  - Dispose(bool) を継承する時のルール
    1. 複数回呼び出されても問題のない実装にしなければならない。
    2. オーバーライドされた Dispose(bool) は最後に base.Dispose(bool) を必ず呼び出さなくてはならない。
    3. オーバーライドするのは Dispose(bool) （Dispose()はvirtualではありません）。
    4. 呼び出す時は Dispose() に統一する（少なくともDispose(bool)より先にClose()をそれぞれvirtualに呼び出すべきなので、それをDispose()が行っています）。
  - シリアライズによるプロパティ保存処理は、 Close() と Dispose(bool) の間に実施されます。
    1. 古いインスタンスの Close() 処理
    2. 古いインスタンスをシリアライズして、新しいインスタンスにデシリアライズ（バックアップ処理）
    3. 古いインスタンスの Dispose(bool) 処理
  総じて Dispose(bool) の方が強い解放処理であり、一方 Close() はシリアライズ保存処理よりも前に実行されるという特徴があります。

UVTexIntegraでは、アセンブリは実行時にデタッチできません。
  UVTexIntegraでロードしたDLLプログラムを、修正など上書き更新したければメタセコイアを終了する必要があります。

カスタムベイクダイアログはメタセコイア本体に対してモーダルにプレビュー＆保存
  現在のところ、UVTexIntegraは掲題の方針を採っています。したがってカスタムスクリプトがロード～解放される間、メタセコイアの形状やオブジェクトの状態は一定です。

## 関数

virtual void UVTexIntegra.Scripting.ScriptMain.Close | ( | ) |  |
| inline virtual

継承可能な解放処理

Close() の基底の実装は、何もしないメソッドになっています。

Close() がUVTexIntegraからどう呼び出されるかについては、ScriptMain の説明を参照してください。

注意
  Close()の継承は、ひとつのインスタンスに対し複数回 Close の呼び出しを行っても問題のないように記述してください。それ以外は実装依存とします（Disposeに比べると緩やかなルールが導入されます）。

void UVTexIntegra.Scripting.ScriptMain.Dispose | ( | ) |  |
| inline

破棄処理を行います。内部で virtual な Close() を行った後、 Dispose(bool) メソッドを呼び出します。

Dispose(void) は外部からvirtualな Dispose(true) を呼び出すための処理です。

Dispose() は、 Dispose(true) の前に virtual な Close() も呼び出します。

万が一、Dispose()の呼び出しが行われなかった場合はファイナライザ側でDispose()が実行されます。

virtual void UVTexIntegra.Scripting.ScriptMain.Dispose | ( | bool | flag) |  |
| inline protected virtual

継承可能な Dispose メソッド

継承クラスのリソース解放処理を記述する時はこのメソッドをオーバーライドしてください。

引数

  flag | Disposeの呼び出し状態 true：明示的なIDisposable.Dispose()メソッドの呼び出しによるDisposeが実行されています。 false：明示的なDispose呼び出しが一度も無いまま、解放（参照の消滅による自動的なGC）直前に自らDisposeを呼び出しました。

Dispose() がUVTexIntegraからどう呼び出されるかについては、ScriptMain の説明を参照してください。

注意
  このメソッドを継承する時は、継承クラスのリソース解放処理の後、必ず base.Dispose(flag) を呼び出し、ベースクラスのリソース解放も実行してください。 また Dispose は明示的な契機で呼び出せるため、 Dispose の実装は、ひとつのインスタンスに対し複数回 Dispose の呼び出しを行っても問題のないように記述してください （ただし一度でも明示的にDisposeされた後は、ガベージコレクションの解放契機で再びDispose(false)されることはなくなります）。
  public class DerivedClass : ScriptMain {
  [System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptions]
  protected override void Dispose(bool flag) {
  try {
  if ( flag ) {
  // 明示的なIDisposable.Dispose()メソッドに応答する時の処理
  }
  else {
  // Disposeなしのガベージコレクトに応答する時の処理
  }
  // どっちみち応答する処理
  }
  finally { base.Dispose(flag); } // 必ずbase.Dispose(flag);
  }
  };

bool UVTexIntegra.Scripting.ScriptMain.IsSerializable | ( | ) |  |
| inline

このインスタンスが、すべてのシリアライズ条件を満たしているか判定します。

以下の全ての条件を満たすか判定します。

- 基本列挙条件
  1. ScriptMain をPublicに継承している
  2. 引数のないデフォルトコンストラクタをPublicに公開している
- シリアライズ可能条件
  1. クラスに明示的にSerializable属性を与えられている
  2. デシリアライズ用コンストラクタ／(SerializationInfo info, StreamingContext stream)を引数としたパブリックコンストラクタを公開している。
  3. ISerializableを実装して、GetObjectData()メソッドを提供している。

bool UVTexIntegra.Scripting.ScriptMain.IsSerializeSave | ( | ) |  |
| inline

スクリプトがシリアライズ可能( IsSerializable() == true )で、さらにSerializeSaveAttributeがtrueに設定されるているか取得します。

スクリプトクラスをシリアライズ可能なようにコーディングして、さらにSerializeSaveAttributeをtrueに設定しているとき、 UVTexIntegraはプラグインのシリアル化データをメタセコの終了と開始時に保存するようになります。 この値がFalseである時、スクリプトクラスのプロパティは新規にロードするたび初期値にリセットされます。

- 基本列挙条件
  1. ScriptMain をPublicに継承している
  2. 引数のないデフォルトコンストラクタをPublicに公開している
- シリアライズ可能条件
  1. クラスに明示的にSerializable属性を与えられている
  2. デシリアライズ用コンストラクタ／(SerializationInfo info, StreamingContext stream)を引数としたパブリックコンストラクタを公開している。
  3. ISerializableを実装して、GetObjectData()メソッドを提供している。
- シリアライズ実行属性
  1. クラスにUVTexIntegra.Scripting.SerializeSaveAttribute 属性を設定していて、値がtrueになっている。

virtual void UVTexIntegra.Scripting.ScriptMain.OnUVOperation | ( | Face[] | faces) |  |
| inline virtual

UVの変換処理を行います。

引数

  [in,out] | faces | 処理対象のUV座標バッファが渡されます。書き換える事が出来るメンバ一覧は以下です。その他取得可能な情報などの詳細は Face クラスを参照してください。 faces[n].Points[n].Coordinate faces[n].Points[n].Color

## プロパティ

virtual System.String UVTexIntegra.Scripting.ScriptMain.Name
| get

スクリプトの表示名。

標準では名前空間を含む最終的な型名を返しますが、オーバーライドによって自由な表示名を返すことが出来ます。 コンボボックスのプルダウンメニューには、"Nameプロパティの値 ( DLLまたはスクリプトファイル名 )" のように表示されるので、「プラグインの機能を指すフィルター名」というニュアンスで命名するのが良いかと思われます。

このクラスの説明は次のファイルから生成されました:

- K:/Dancer_iMac/UVTexa/UVTexIntegra.CSLib/Scripting/Scripting.ScriptMain.cs