チュートリアル - DotNet を使用して MAXScript 関数を定期的に呼び出す

このチュートリアルでは、MAXScript のタイマ UI コントロールの代わりに、System.Windows.Forms.Timer dotNetObject を使用する方法を示します。MAXScript コントロールの代わりに、この DotNet オブジェクト バージョンを使用すれば、特定の時間間隔で MAXScript 関数を実行するために MAXScript ユーザ インタフェースを作成して開く必要がありません。

関連項目:

MAXScript における DotNet

dotNetObject

dotNetObject:System.Windows.Forms.Timer

全体の流れ

DotNet タイマ オブジェクトが存在しない場合は、作成します。

関数の呼び出し回数を示すカウンタを定義します。

タイマによって定期的に呼び出される MAXScript 関数を定義します。

関数を呼び出すイベント ハンドラを登録します。

タイマ間隔を設定します。

タイマを開始します。

if theTimer == undefined then (    
    theTimer = dotNetObject "System.Windows.Forms.Timer"
    counter = 20
    fn printTime = (
        counter-=1
        if counter < 1 then (
            print "stopping"
            theTimer.stop()
            theTimer = undefined
        )
        else (        
            print localTime
        )
    )
    dotnet.addEventHandler theTimer "tick" printTime
    theTimer.interval = 1000
    theTimer.start()
)

リスナー出力の例:

undefined
OK
"2022-07-05 2:57:07 PM"
"2022-07-05 2:57:08 PM"
"2022-07-05 2:57:09 PM"
"2022-07-05 2:57:10 PM"
"2022-07-05 2:57:11 PM"
"2022-07-05 2:57:12 PM"
"2022-07-05 2:57:13 PM"
"2022-07-05 2:57:14 PM"
"2022-07-05 2:57:15 PM"
"2022-07-05 2:57:16 PM"
"2022-07-05 2:57:17 PM"
"2022-07-05 2:57:18 PM"
"2022-07-05 2:57:19 PM"
"2022-07-05 2:57:20 PM"
"2022-07-05 2:57:21 PM"
"2022-07-05 2:57:22 PM"
"2022-07-05 2:57:23 PM"
"2022-07-05 2:57:24 PM"
"2022-07-05 2:57:25 PM"
"stopping"
if theTimer == undefined then (    

theTimer が既に定義されているかどうかを確認します(スクリプトが既に実行されている場合など)。確認しない場合、新しいタイマ オブジェクトに theTimer が再割り当てされ、オリジナル オブジェクトへの参照が失われます。

theTimer = dotNetObject "System.Windows.Forms.Timer"

タイマを作成します。

counter = 20

20 ティックのタイマを実行します。

    fn printTime = (
        counter-=1
        if counter < 1 then (
            print "stopping"
            theTimer.stop()
            theTimer = undefined
        )
        else (        
            print localTime
        )
    )

タイマによって呼び出される MAXScript 関数を定義します。この関数はカウンタを減少させ、カウンタが 0 になったらタイマを停止します。

dotnet.addEventHandler theTimer "tick" printTime

関数を呼び出す ON TICK イベント ハンドラを追加します。

theTimer.interval = 1000

ティック間隔を 1 秒 (1000 ミリ秒) に設定します。

theTimer.start()

タイマを開始します。