CheckDMXCollision(handle, string[, integer[, integer]])

grandMA3 ユーザマニュアル » プラグイン » Lua 関数 - Object-Free API » CheckDMXCollision(handle, string[, integer[, integer]]) Version 2.2

説明

CheckDMXCollision 関数は、特定のDMXアドレス範囲が利用可能か、またはすでに利用されているかを確認します。

これは、フィクスチャタイプの特定の「DMXモード」のDMXチャンネル数を用いて、指定されたDMX開始アドレスから利用できるDMXチャンネルの数を計算します。

すべてのフィクスチャタイプには少なくとも1つのDMXモードが定義されていますが、複数のモードを持つフィクスチャも多くあります。この Lua 関数は、フィクスチャタイプの特定のDMXモードを使用します。

引数

  • handle:
    DMXモードに対するハンドルです。範囲内で利用可能なDMXチャンネル数を計算するために用いられます。
  • string:
    文字列で表現されたDMXアドレスです。チェック範囲の始まりを指定します。
  • integer (オプション) または nil:
    このオプションの整数値は、チェックすべき後続のDMXモードの数です。デフォルト値は 1 です。
    例えば、指定されたDMXモードのDMXチャンネル数が10で、カウントが5に設定されている場合、肯定的な結果を得るには、開始アドレスから50のパッチされていないDMXチャンネルがなければなりません。
  • integer (オプション):
    このオプションの整数値は、ブレークインデックスを示します。デフォルト値は 0 で、DMXモードで定義された最初のDMXブレークです。すべてのフィクスチャタイプには、少なくとも1つのDMXブレークが定義されています。

戻り値

  • boolean:
    以下の boolean 値を返します。
    • true:
      DMXアドレスは開始アドレスとして使用できます。
    • false:
      DMXアドレスは、計算されたDMXチャンネル数の開始アドレスとして使用できません。

現在選択されている最初のフィクスチャのDMXモードに基づいて、DMXアドレス 1.001 に対するDMX競合チェックの結果を出力します。

Lua
return function()
    -- Set the DMX universe - range 1-1024.
    local myDMXUniverse = 1
    -- Set the DMX address in the universe - range 1-512.
    local myDMXAddress = 1
    -- Set the optional count for the number of fixtures (break_index channel amount) to check.
    local myCount = 1
    -- Set the optional break_index number for fixtures with multiple breaks. 
    -- Default value is 0 to indicate the first break.
    local myBreakIndex = 0

    -- Creates the string used for the DMX address.
    local startOfRange = string.format("%d.%03d", myDMXUniverse, myDMXAddress)

    -- Check if there is a selection and exit if there isn't.
    if SelectionFirst() == nil then
        Printf("Please make a selection and try again.")
        return
    end
    -- This gets the handle for the first fixture a patched generic Dimmers 8-bit mode.
    local myDmxMode = GetSubfixture(SelectionFirst()).ModeDirect

    if myDmxMode == nil then
        -- Exit the function if the DMX mode returns nil.
       
    else
        -- Do the actual collision check and provide useful feedback.
        if CheckDMXCollision(myDmxMode, startOfRange, myCount, myBreakIndex) then
            Printf("The DMX address " .. startOfRange .. " is available.")
            return
        else
            Printf("The DMX address " .. startOfRange .. " cannot be used as a start address for this patch.")
            return
        end
    end
end