-
Автор темы
- #1
Привет. Вопрос таков.
К примеру у меня есть ImGui::Text("Aboba");
Как мне его повернуть на 90 градусов?
Есть пару решений (Нашёл на просторах интернета)
Он постоянно поворачивает текст (вертит им как хочет). Я делал так чтобы он был фиксированным, но он считает не в градусах, а в радианах.
Если я через
перевожу в градусы, то поворот текста в принципе перестаёт работать.
Подскажите, как же всё таки поворачивать текст именно в градусах...
К примеру у меня есть ImGui::Text("Aboba");
Как мне его повернуть на 90 градусов?
Есть пару решений (Нашёл на просторах интернета)
C++:
int rotation_start_index;
void ImRotateStart()
{
rotation_start_index = ImGui::GetWindowDrawList()->VtxBuffer.Size;
}
ImVec2 ImRotationCenter()
{
ImVec2 l(FLT_MAX, FLT_MAX), u(-FLT_MAX, -FLT_MAX); // bounds
const auto& buf = ImGui::GetWindowDrawList()->VtxBuffer;
for (int i = rotation_start_index; i < buf.Size; i++)
l = ImMin(l, buf[i].pos), u = ImMax(u, buf[i].pos);
return ImVec2((l.x+u.x)/2, (l.y+u.y)/2); // or use _ClipRectStack?
}
ImVec2 operator-(const ImVec2& l, const ImVec2& r) { return{ l.x - r.x, l.y - r.y }; }
void ImRotateEnd(float rad, ImVec2 center = ImRotationCenter())
{
float s=sin(rad), c=cos(rad);
center = ImRotate(center, s, c) - center;
auto& buf = ImGui::GetWindowDrawList()->VtxBuffer;
for (int i = rotation_start_index; i < buf.Size; i++)
buf[i].pos = ImRotate(buf[i].pos, s, c) - center;
}
void ImRotateDemo()
{
ImRotateStart();
ImGui::Text("Текст");
ImRotateEnd(0.005f*::GetTickCount()*!ImGui::IsItemHovered());
}
Если я через
C++:
void ImRotateEnd(float degrees, ImVec2 center = ImRotationCenter()) {
float radians = degrees * (IM_PI / 180.0f);
float s = sin(radians), c = cos(radians);
center = ImRotate(center, s, c) - center;
auto& buf = ImGui::GetWindowDrawList()->VtxBuffer;
for (int i = rotation_start_index; i < buf.Size; i++)
buf[i].pos = ImRotate(buf[i].pos, s, c) - center;
}
Подскажите, как же всё таки поворачивать текст именно в градусах...