RenderEffect 進行状況コールバック機能

レンダラーの進行状況バーに関連する[レンダリング効果](Rendering Effects)メイン ダイアログ ボックスの進行状況バーを制御することができます。レンダラーの進行状況バーは、on apply ハンドラと、進行状況コールバック インタフェース オブジェクトの progressCB を使用します。

これは次の構文を使って行います。

on apply <bitmap> progressCB: do <fn>

最初の引数は、効果によって修正されるビットマップ値です。progressCB は、進行状況コールバック インタフェース オブジェクトです。このインタフェースには、ビットマップの処理中に呼び出すことができるメソッドが組み込まれています。このメソッドによって、進行状況バーが制御され、ユーザによるキャンセルがチェックされます。

メソッド

progressCB.setTitle <string>

進行状況バーのタイトルを設定します。

progressCB.progress <done> <total>

レンダリングの進行状況を定義します。両方の引数は整数です。done は完了したレンダリングの数を示し、total はレンダリングの総数を示します。たとえば、ビットマップのすべてのラインを通過するレンダリング効果のメイン ループでは、done は進行中の現在のライン番号に、total はビットマップ内のラインの数(その垂直方向の解像度)に設定される必要があります。

このメソッドを呼び出すと、効果が[レンダリング効果](Rendering Effects)ダイアログ ボックスによって更新される場合はレンダリング効果の進行状況メインバーが更新され、レンダラーによって呼び出される場合はレンダラー進行状況バーが更新されて、この進行状況が反映されます。

この関数ではブール値も返します。true は、[Esc]が押されて、効果のレンダリングがキャンセルされたことを示します。

progressCB.check()

[Esc]キーが押されて、効果のレンダリングがキャンセルされたかどうかを示します。この関数は、ブール値を返します。処理を継続する必要がある場合は false、レンダリングがキャンセルされた場合は true です。

例:

    on apply bm progressCB: do
    (
    ...
    progressCB.setTitle "My Effect Pass1"
    ...
    oldEscapeEnable = escapeEnable -- get old state of escape processing
    escapeEnable = false -- turn off MAXScript escape processing
    total = bm.height -- define total as the height of the bitmap
    for i in ...
    (
    <the effect rendering loop>
    ...
    if progressCB.progress i total then exit --i lines done out of total
    )--end i loop
    ...
    escapeEnable = oldEscapeEnable --restore original state
    ...
    )--end on apply

進行状況バーは、メイン処理ループ内で更新され、ユーザによるキャンセルは同一呼び出しでチェックされます。この例では、ループが未完了のまま終了します。

RenderEffect Progress Callback の使用方法の実用的な例については、「チュートリアル - MonoChrome RenderEffect の作成」チュートリアルを参照してください。