Mimgui - круг с неполной дугой

lembrooks

Участник
Автор темы
37
17
Версия MoonLoader
.026-beta
Как сделать на мимгуи цветную окружность с неполной дугой?
Мне необходимо, чтобы я указывал радиус в пикселях, дугу в градусах и цвет в RGBA и чтобы окружность начиналась с самой верхней точки.
Например, я могу использовать circle(50, 270, 0xFF0000FF) и у меня нарисуется 3/4 круга красного цвета с радиусом 50 пикселей.
Пример окружности на скриншоте

1684675152970.png
 
Последнее редактирование:
Решение
Как сделать на мимгуи цветную окружность с неполной дугой?
Мне необходимо, чтобы я указывал радиус в пикселях, дугу в градусах и цвет в RGBA и чтобы окружность начиналась с самой верхней точки.
Например, я могу использовать circle(50, 270, 0xFF0000FF) и у меня нарисуется 3/4 круга красного цвета с радиусом 50 пикселей.
Пример окружности на скриншоте

Посмотреть вложение 202267
типо такого:
local imgui = require 'mimgui'
imgui.OnInitialize(function() imgui.GetIO().IniFilename = nil end)
imgui.OnFrame(function() return true end, function()
    imgui.SetNextWindowSize(imgui.ImVec2(150, 150))
    if imgui.Begin("Test", _) then
        circle(50, 270, 0xFF0000FF) -- можно вызвать без аргументов, тогда нарисует белую полную окружность с радиусом 25...

Andrinall

Известный
680
532
Как сделать на мимгуи цветную окружность с неполной дугой?
Мне необходимо, чтобы я указывал радиус в пикселях, дугу в градусах и цвет в RGBA и чтобы окружность начиналась с самой верхней точки.
Например, я могу использовать circle(50, 270, 0xFF0000FF) и у меня нарисуется 3/4 круга красного цвета с радиусом 50 пикселей.
Пример окружности на скриншоте

Посмотреть вложение 202267
типо такого:
local imgui = require 'mimgui'
imgui.OnInitialize(function() imgui.GetIO().IniFilename = nil end)
imgui.OnFrame(function() return true end, function()
    imgui.SetNextWindowSize(imgui.ImVec2(150, 150))
    if imgui.Begin("Test", _) then
        circle(50, 270, 0xFF0000FF) -- можно вызвать без аргументов, тогда нарисует белую полную окружность с радиусом 25
        imgui.End()
    end
end)

function circle(radius, angle, color, thickness, segments)
    local cur = imgui.GetCursorScreenPos()
    local dl = imgui.GetWindowDrawList()
    local up_center = -math.pi / 2
    radius, angle, color, thickness, segments = radius or 25, angle or 360, color or 0xFFFFFFFF, thickness or 1, segments or 16

    dl:PathArcTo(cur + imgui.ImVec2(radius, radius), radius, up_center, up_center + math.rad(angle), segments)
    dl:PathStroke(color, false, thickness)
    dl:PathClear()
end