ALTITUDEの画像数値による7セグメント表示

datarefは単純な整数なので問題無いように思えるが、Luaではできる右揃えがFlyWithLuaでは出来ない。
下のように5桁の場合は問題ないが、桁が減っていくと左揃えになってしまう。実際の表示は右揃え。

そこで、対策として最初から5桁表示でフォーマットをする。これは出来る。その代わり3桁の場合、200という表示にはならず00200となってしまう。
そこで頭の0を空白画像を作って見えなくする手法をとる。そうすると下の画像のように数値の位置は後ろ揃えで位置が変化しないで問題なく表示される。2の前の00は空白画像に置き換えられている。
58と81行目が空白画像にあたる。

-- 画像県警の初期設定 ----
-- E_Camera Move ----
local image_7seg_0 = float_wnd_load_image(SCRIPT_DIRECTORY .. "/img/7seg_w_0.png")
local image_7seg_1 = float_wnd_load_image(SCRIPT_DIRECTORY .. "/img/7seg_w_1.png")
local image_7seg_2 = float_wnd_load_image(SCRIPT_DIRECTORY .. "/img/7seg_w_2.png")
local image_7seg_3 = float_wnd_load_image(SCRIPT_DIRECTORY .. "/img/7seg_w_3.png")
local image_7seg_4 = float_wnd_load_image(SCRIPT_DIRECTORY .. "/img/7seg_w_4.png")
local image_7seg_5 = float_wnd_load_image(SCRIPT_DIRECTORY .. "/img/7seg_w_5.png")
local image_7seg_6 = float_wnd_load_image(SCRIPT_DIRECTORY .. "/img/7seg_w_6.png")
local image_7seg_7 = float_wnd_load_image(SCRIPT_DIRECTORY .. "/img/7seg_w_7.png")
local image_7seg_8 = float_wnd_load_image(SCRIPT_DIRECTORY .. "/img/7seg_w_8.png")
local image_7seg_9 = float_wnd_load_image(SCRIPT_DIRECTORY .. "/img/7seg_w_9.png")
local image_7seg_point = float_wnd_load_image(SCRIPT_DIRECTORY .. "/img/7seg_w_point.png")
local image_7seg_plus = float_wnd_load_image(SCRIPT_DIRECTORY .. "/img/7seg_w_plus.png")
local image_7seg_minus = float_wnd_load_image(SCRIPT_DIRECTORY .. "/img/7seg_w_minus.png")
local image_7seg_space = float_wnd_load_image(SCRIPT_DIRECTORY .. "/img/7seg_w_space.png")

DataRef("COURSE_7segment", "laminar/B738/autopilot/course_pilot")
DataRef("IAS_MACH_7segment", "laminar/B738/autopilot/mcp_speed_dial_kts_mach")
DataRef("mcp_hdg_dial_7segment", "laminar/B738/autopilot/mcp_hdg_dial")
DataRef("mcp_ALT_dial_7segment", "laminar/B738/autopilot/mcp_alt_dial")
DataRef("ap_Vvi_pos_7segment", "laminar/B738/autopilot/ap_vvi_pos")


---------------------------------------------------------------------------------
view_selector_wnd = float_wnd_create(300, 150, 1, true)
float_wnd_set_position(view_selector_wnd, 300, 100)
float_wnd_set_title(view_selector_wnd, "ALT 7segment Test")
float_wnd_set_imgui_builder(view_selector_wnd, "view_selector_build_wnd")
float_wnd_set_onclose(view_selector_wnd, "on_close")
---------------------------------------------------------------------------------
function view_selector_build_wnd(view_selector_wnd, x, y)
    -------------------- ALTITUDE 7セグメント表示 ------------------------------------------------------------------------------
    --頭揃えになって、後ろに桁が増えるので位置が変化してしまう。最初から一番大きい桁にすると位置が固定になる。ここでは万の数値になるので5桁になる。
    mcp_ALT_dial_7segment = string.format("%05d", mcp_ALT_dial_7segment) --dataref値整数 2300の場合、これで0をつけた5桁で02300と表示されるようになる。
    --後は頭に付く0を空白に変えることになる。

    --桁毎に数値を取り出す
    mcp_ALT_dial_5 = string.sub(mcp_ALT_dial_7segment, 1, 1) --5桁目を取得
    mcp_ALT_dial_4 = string.sub(mcp_ALT_dial_7segment, 2, 2) --4
    mcp_ALT_dial_3 = string.sub(mcp_ALT_dial_7segment, 3, 3) --3
    mcp_ALT_dial_2 = string.sub(mcp_ALT_dial_7segment, 4, 4) --2
    mcp_ALT_dial_1 = string.sub(mcp_ALT_dial_7segment, 5, 5) --1

    imgui.TextUnformatted("A-5 : " .. mcp_ALT_dial_5)        --5桁目
    imgui.TextUnformatted("A-4 : " .. mcp_ALT_dial_4)        --4
    imgui.TextUnformatted("A-3 : " .. mcp_ALT_dial_3)        --3桁目
    imgui.TextUnformatted("A-2 : " .. mcp_ALT_dial_2)        --2
    imgui.TextUnformatted("A-1 : " .. mcp_ALT_dial_1)        --1

    imgui.TextUnformatted("dataref: " ..
        mcp_ALT_dial_5 .. mcp_ALT_dial_4 .. mcp_ALT_dial_3 .. mcp_ALT_dial_2 .. mcp_ALT_dial_1)

    --桁が増えると増えと桁は後ろに下がる、右揃えにしたいがならなかった。
    imgui.SetCursorPosX(100)
    imgui.SetCursorPosY(50)
    if mcp_ALT_dial_5 == "0" then --5桁目
        imgui.Image(image_7seg_space, 17, 29)
    elseif mcp_ALT_dial_5 == "1" then
        imgui.Image(image_7seg_1, 17, 29)
    elseif mcp_ALT_dial_5 == "2" then
        imgui.Image(image_7seg_2, 17, 29)
    elseif mcp_ALT_dial_5 == "3" then
        imgui.Image(image_7seg_3, 17, 29)
    elseif mcp_ALT_dial_5 == "4" then
        imgui.Image(image_7seg_4, 17, 29)
    elseif mcp_ALT_dial_5 == "5" then
        imgui.Image(image_7seg_5, 17, 29)
    elseif mcp_ALT_dial_5 == "6" then
        imgui.Image(image_7seg_6, 17, 29)
    elseif mcp_ALT_dial_5 == "7" then
        imgui.Image(image_7seg_7, 17, 29)
    elseif mcp_ALT_dial_5 == "8" then
        imgui.Image(image_7seg_8, 17, 29)
    elseif mcp_ALT_dial_5 == "9" then
        imgui.Image(image_7seg_9, 17, 29)
    end
    imgui.SameLine(nil, 5)

    if mcp_ALT_dial_4 == "0" then --4桁目
        imgui.Image(image_7seg_space, 17, 29)
    elseif mcp_ALT_dial_4 == "1" then
        imgui.Image(image_7seg_1, 17, 29)
    elseif mcp_ALT_dial_4 == "2" then
        imgui.Image(image_7seg_2, 17, 29)
    elseif mcp_ALT_dial_4 == "3" then
        imgui.Image(image_7seg_3, 17, 29)
    elseif mcp_ALT_dial_4 == "4" then
        imgui.Image(image_7seg_4, 17, 29)
    elseif mcp_ALT_dial_4 == "5" then
        imgui.Image(image_7seg_5, 17, 29)
    elseif mcp_ALT_dial_4 == "6" then
        imgui.Image(image_7seg_6, 17, 29)
    elseif mcp_ALT_dial_4 == "7" then
        imgui.Image(image_7seg_7, 17, 29)
    elseif mcp_ALT_dial_4 == "8" then
        imgui.Image(image_7seg_8, 17, 29)
    elseif mcp_ALT_dial_4 == "9" then
        imgui.Image(image_7seg_9, 17, 29)
    end
    imgui.SameLine(nil, 5)
    if mcp_ALT_dial_3 == "0" then
        imgui.Image(image_7seg_0, 17, 29)
    elseif mcp_ALT_dial_3 == "1" then
        imgui.Image(image_7seg_1, 17, 29)
    elseif mcp_ALT_dial_3 == "2" then
        imgui.Image(image_7seg_2, 17, 29)
    elseif mcp_ALT_dial_3 == "3" then
        imgui.Image(image_7seg_3, 17, 29)
    elseif mcp_ALT_dial_3 == "4" then
        imgui.Image(image_7seg_4, 17, 29)
    elseif mcp_ALT_dial_3 == "5" then
        imgui.Image(image_7seg_5, 17, 29)
    elseif mcp_ALT_dial_3 == "6" then
        imgui.Image(image_7seg_6, 17, 29)
    elseif mcp_ALT_dial_3 == "7" then
        imgui.Image(image_7seg_7, 17, 29)
    elseif mcp_ALT_dial_3 == "8" then
        imgui.Image(image_7seg_8, 17, 29)
    elseif mcp_ALT_dial_3 == "9" then
        imgui.Image(image_7seg_9, 17, 29)
    end
    imgui.SameLine(nil, 5)
    if mcp_ALT_dial_2 == "0" then
        imgui.Image(image_7seg_0, 17, 29)
    elseif mcp_ALT_dial_2 == "1" then
        imgui.Image(image_7seg_1, 17, 29)
    elseif mcp_ALT_dial_2 == "2" then
        imgui.Image(image_7seg, 17, 29)
    elseif mcp_ALT_dial_2 == "3" then
        imgui.Image(image_7seg_3, 17, 29)
    elseif mcp_ALT_dial_2 == "4" then
        imgui.Image(image_7seg_4, 17, 29)
    elseif mcp_ALT_dial_2 == "5" then
        imgui.Image(image_7seg_5, 17, 29)
    elseif mcp_ALT_dial_2 == "6" then
        imgui.Image(image_7seg_6, 17, 29)
    elseif mcp_ALT_dial_2 == "7" then
        imgui.Image(image_7seg_7, 17, 29)
    elseif mcp_ALT_dial_2 == "8" then
        imgui.Image(image_7seg_8, 17, 29)
    elseif mcp_ALT_dial_2 == "9" then
        imgui.Image(image_7seg_9, 17, 29)
    end
    imgui.SameLine(nil, 5)
    if mcp_ALT_dial_1 == "0" then
        imgui.Image(image_7seg_0, 17, 29)
    elseif mcp_ALT_dial_1 == "1" then
        imgui.Image(image_7seg_1, 17, 29)
    elseif mcp_ALT_dial_1 == "2" then
        imgui.Image(image_7seg_2, 17, 29)
    elseif mcp_ALT_dial_1 == "3" then
        imgui.Image(image_7seg_3, 17, 29)
    elseif mcp_ALT_dial_1 == "4" then
        imgui.Image(image_7seg_4, 17, 29)
    elseif mcp_ALT_dial_1 == "5" then
        imgui.Image(image_7seg_5, 17, 29)
    elseif mcp_ALT_dial_1 == "6" then
        imgui.Image(image_7seg_6, 17, 29)
    elseif mcp_ALT_dial_1 == "7" then
        imgui.Image(image_7seg_7, 17, 29)
    elseif mcp_ALT_dial_1 == "8" then
        imgui.Image(image_7seg_8, 17, 29)
    elseif mcp_ALT_dial_1 == "9" then
        imgui.Image(image_7seg_9, 17, 29)
    end
end

function on_close(view_selector_wnd)
end