Refresh

Refresh

導入

v1.0

詳細

ビューポートの位置、およびビュー内のオブジェクトの表示を更新します(すなわち、UI を再描画します)。 たとえば、このコマンドを使用してスクリプトを試用し、スクリプトが適用された場合の変更内容を確認することも可能です(例: すべての変換が実行されるまで表示が更新されないビューで、移動後の結果を確認する)。

注: 一時的な値をすべて削除する SceneRefresh の機能とは異なります(一時的な値とは、これらのパラメータに設定されたアニメーションFカーブと一貫性のない値です)。

ヒント: Refresh コマンドをヒストリ ログに記録せず UI を再描画する場合は、代わりに Desktop.RedrawUI メソッドを使用します。

スクリプト構文

Refresh( [Time] );

パラメータ

パラメータ タイプ 説明
Time Double シーンを更新するフレーム

デフォルト値: 現在のフレーム

VBScript の例

'

' This example demonstrates the effect of the Refresh command by creating a few objects and 

' then translating them all at once without refreshing and then again while refreshing.

'

NewScene , false

' Set up some variables and constants to start

Set oSmarmy = CreateObject( "XSI.Collection" )

iDisplacement = 0

Const MAX_ARMY = 19

' This is just a utility loop that makes it easier adding a lot of elements to the scene

For i = 0 To 19

	' Make a new soldier and add it to the army

	Set oSoldier = ActiveSceneRoot.AddNull()

	oSmarmy.Add oSoldier

	' Get the array of position values for the soldier

	aPos = Array( oSoldier.posx.Value, oSoldier.posy.Value, oSoldier.posz.Value )

	' If we've already made half the army, position them in one direction

	If i >= (MAX_ARMY/2) Then

		oSoldier.posx.Value = aPos(0) + iDisplacement 

		oSoldier.posy.Value = aPos(1) + iDisplacement 

		oSoldier.posz.Value = aPos(2) + iDisplacement 

	Else

		oSoldier.posx.Value = aPos(0) - iDisplacement 

		oSoldier.posy.Value = aPos(1) - iDisplacement 

		oSoldier.posz.Value = aPos(2) - iDisplacement 

	End If

	' When we're half done, we need to reset the displacement counter 

	If iDisplacement = CInt(MAX_ARMY/2) Then

		iDisplacement = 0.1

	Else

		iDisplacement = iDisplacement + 0.2

	End If

Next

' Now that our army is built, let's move them towards us a set at a time for a few steps.

' (The display looks like a bunch of crosses marching steadily forward.)

move3Steps oSmarmy, true

' This will mark the separation between when they are advancing with/without refreshing

For iMark = 0 To 59

	Application.LogMessage " ---------- the army is coming ---------- "

Next

' Do it again, this time without refreshing.

' (The display looks like a bunch of crosses jumping forward at once.)

move3Steps oSmarmy, false

sub move3Steps( in_collection, in_refresh_flag )

	' Local settings

	iStep = 0.25

	Const STEP_LIMIT = 30

	' First clear the selection (just in case we get unwanted members)

	Selection.Clear

	' Then set the selection according to the collection members specified 

	Selection.SetAsText in_collection.GetAsText

	' Now we can move everything at one (using a loop to make it easier)

	For j = 0 To STEP_LIMIT

		Translate , , , +iStep

		' If the refresh flag is set, then refresh the scene

		If in_refresh_flag Then

			Refresh

		End If

	Next

end sub

関連項目

Desktop.RedrawUI SceneRefresh DelayedRefresh