ImGui Ideal Rounded Progress Bar

Эксперт
Статус
Оффлайн
Регистрация
30 Дек 2019
Сообщения
1,970
Реакции[?]
958
Поинты[?]
19K
Код:
void ImDrawList::AddCircularProgressBar(const ImVec2& center, float radius, ImU32 col, float progress, int num_segments, float thickness)
{
    if ((col & IM_COL32_A_MASK) == 0 || radius <= 0.0f)
        return;

    // Obtain segment count
    if (num_segments <= 0)
    {
        // Automatic segment count
        num_segments = _CalcCircleAutoSegmentCount(radius);
    }
    else
    {
        // Explicit segment count (still clamp to avoid drawing insanely tessellated shapes)
        num_segments = ImClamp(num_segments, 3, IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX);
    }

    // Because we are filling a closed shape we remove 1 from the count of segments/points
    const float a_max = progress * 6.1f;
    if (num_segments == 12)
        PathArcToFast(center, radius - 0.5f, 0, 12 - 1);
    else
        PathArcTo(center, radius - 0.5f, 0.0f, a_max, num_segments - 1);
    PathStroke(col, ImDrawFlags_None, thickness);
}
Код:
В ImDrawList::_PathArcToN

IM_ASSERT(a_min <= a_max); на IM_ASSERT(a_min <= ImMax(a_max, 0.f));
Код:
И в ImDrawList::_PathArcTo



IM_ASSERT(a_min <= a_max); на IM_ASSERT(a_min <= ImMax(a_max, 0.f));
Рисуется идеальный круг
 
Последнее редактирование:
B.O.M.J
Эксперт
Статус
Оффлайн
Регистрация
19 Май 2017
Сообщения
2,403
Реакции[?]
897
Поинты[?]
3K
Есть не идеальные круги?
Т.е. овал тот же круг, только не идеальный?
Ахуеть не встать, спроси у училки по геометрии про овал, только приловчись увернутся от линейки или циркуля по ебалу
 
Забаненный
Участник
Статус
Оффлайн
Регистрация
23 Сен 2019
Сообщения
1,021
Реакции[?]
190
Поинты[?]
0
Ахуеть не встать, спроси у училки по геометрии про овал, только приловчись увернутся от линейки или циркуля по ебалу
Я просто понять не могу, что означает это его: "идеальный круг"
 
Эксперт
Статус
Оффлайн
Регистрация
30 Дек 2019
Сообщения
1,970
Реакции[?]
958
Поинты[?]
19K
Забаненный
Статус
Оффлайн
Регистрация
10 Дек 2018
Сообщения
308
Реакции[?]
28
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Код:
void ImDrawList::AddCircularProgressBar(const ImVec2& center, float radius, ImU32 col, float progress, int num_segments, float thickness)
{
    if ((col & IM_COL32_A_MASK) == 0 || radius <= 0.0f)
        return;

    // Obtain segment count
    if (num_segments <= 0)
    {
        // Automatic segment count
        num_segments = _CalcCircleAutoSegmentCount(radius);
    }
    else
    {
        // Explicit segment count (still clamp to avoid drawing insanely tessellated shapes)
        num_segments = ImClamp(num_segments, 3, IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX);
    }

    // Because we are filling a closed shape we remove 1 from the count of segments/points
    const float a_max = progress * 6.1f;
    if (num_segments == 12)
        PathArcToFast(center, radius - 0.5f, 0, 12 - 1);
    else
        PathArcTo(center, radius - 0.5f, 0.0f, a_max, num_segments - 1);
    PathStroke(col, ImDrawFlags_None, thickness);
}
Код:
В ImDrawList::_PathArcToN

IM_ASSERT(a_min <= a_max); на IM_ASSERT(a_min <= ImMax(a_max, 0.f));
Код:
И в ImDrawList::_PathArcTo



IM_ASSERT(a_min <= a_max); на IM_ASSERT(a_min <= ImMax(a_max, 0.f));
Рисуется идеальный круг
Ты конечно извини, но без сс постить плохо))
 
NotCoder
Пользователь
Статус
Оффлайн
Регистрация
25 Мар 2018
Сообщения
354
Реакции[?]
108
Поинты[?]
0
Код:
void ImDrawList::AddCircularProgressBar(const ImVec2& center, float radius, ImU32 col, float progress, int num_segments, float thickness)
{
    if ((col & IM_COL32_A_MASK) == 0 || radius <= 0.0f)
        return;

    // Obtain segment count
    if (num_segments <= 0)
    {
        // Automatic segment count
        num_segments = _CalcCircleAutoSegmentCount(radius);
    }
    else
    {
        // Explicit segment count (still clamp to avoid drawing insanely tessellated shapes)
        num_segments = ImClamp(num_segments, 3, IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX);
    }

    // Because we are filling a closed shape we remove 1 from the count of segments/points
    const float a_max = progress * 6.1f;
    if (num_segments == 12)
        PathArcToFast(center, radius - 0.5f, 0, 12 - 1);
    else
        PathArcTo(center, radius - 0.5f, 0.0f, a_max, num_segments - 1);
    PathStroke(col, ImDrawFlags_None, thickness);
}
Код:
В ImDrawList::_PathArcToN

IM_ASSERT(a_min <= a_max); на IM_ASSERT(a_min <= ImMax(a_max, 0.f));
Код:
И в ImDrawList::_PathArcTo



IM_ASSERT(a_min <= a_max); на IM_ASSERT(a_min <= ImMax(a_max, 0.f));
Рисуется идеальный круг
1623326581160.png
Код работает, но не полноценно, нужно его чутка допилить (заняло 5 минут) и соска:LUL:
 
Сверху Снизу