レンダラーの進行状況バーに関連する[レンダリング効果](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 の作成」チュートリアルを参照してください。