46void EditTransform(
const Camera& camera, matrix_t& matrix)
48 static ImGuizmo::OPERATION mCurrentGizmoOperation(ImGuizmo::ROTATE);
49 static ImGuizmo::MODE mCurrentGizmoMode(ImGuizmo::WORLD);
50 if (ImGui::IsKeyPressed(90))
51 mCurrentGizmoOperation = ImGuizmo::TRANSLATE;
52 if (ImGui::IsKeyPressed(69))
53 mCurrentGizmoOperation = ImGuizmo::ROTATE;
54 if (ImGui::IsKeyPressed(82))
55 mCurrentGizmoOperation = ImGuizmo::SCALE;
56 if (ImGui::RadioButton(
"Translate", mCurrentGizmoOperation == ImGuizmo::TRANSLATE))
57 mCurrentGizmoOperation = ImGuizmo::TRANSLATE;
59 if (ImGui::RadioButton(
"Rotate", mCurrentGizmoOperation == ImGuizmo::ROTATE))
60 mCurrentGizmoOperation = ImGuizmo::ROTATE;
62 if (ImGui::RadioButton(
"Scale", mCurrentGizmoOperation == ImGuizmo::SCALE))
63 mCurrentGizmoOperation = ImGuizmo::SCALE;
64 float matrixTranslation[3], matrixRotation[3], matrixScale[3];
65 ImGuizmo::DecomposeMatrixToComponents(matrix.m16, matrixTranslation, matrixRotation, matrixScale);
66 ImGui::InputFloat3(
"Tr", matrixTranslation, 3);
67 ImGui::InputFloat3(
"Rt", matrixRotation, 3);
68 ImGui::InputFloat3(
"Sc", matrixScale, 3);
69 ImGuizmo::RecomposeMatrixFromComponents(matrixTranslation, matrixRotation, matrixScale, matrix.m16);
71 if (mCurrentGizmoOperation != ImGuizmo::SCALE)
73 if (ImGui::RadioButton(
"Local", mCurrentGizmoMode == ImGuizmo::LOCAL))
74 mCurrentGizmoMode = ImGuizmo::LOCAL;
76 if (ImGui::RadioButton(
"World", mCurrentGizmoMode == ImGuizmo::WORLD))
77 mCurrentGizmoMode = ImGuizmo::WORLD;
79 static bool useSnap(
false);
80 if (ImGui::IsKeyPressed(83))
82 ImGui::Checkbox(
"", &useSnap);
85 switch (mCurrentGizmoOperation)
87 case ImGuizmo::TRANSLATE:
88 snap = config.mSnapTranslation;
89 ImGui::InputFloat3(
"Snap", &snap.x);
91 case ImGuizmo::ROTATE:
92 snap = config.mSnapRotation;
93 ImGui::InputFloat(
"Angle Snap", &snap.x);
96 snap = config.mSnapScale;
97 ImGui::InputFloat(
"Scale Snap", &snap.x);
100 ImGuiIO& io = ImGui::GetIO();
101 ImGuizmo::SetRect(0, 0, io.DisplaySize.x, io.DisplaySize.y);
102 ImGuizmo::Manipulate(camera.mView.m16, camera.mProjection.m16, mCurrentGizmoOperation, mCurrentGizmoMode, matrix.m16, NULL, useSnap ? &snap.x : NULL);
114#ifndef IMGUIZMO_NAMESPACE
115#define IMGUIZMO_NAMESPACE ImGuizmo
124 IMGUI_API void SetDrawlist(ImDrawList* drawlist =
nullptr);
133 IMGUI_API void SetImGuiContext(ImGuiContext* ctx);
144 IMGUI_API bool IsViewManipulateHovered();
165 IMGUI_API void DecomposeMatrixToComponents(
const float* matrix,
float* translation,
float* rotation,
float* scale);
166 IMGUI_API void RecomposeMatrixFromComponents(
const float* translation,
const float* rotation,
const float* scale,
float* matrix);
168 IMGUI_API void SetRect(
float x,
float y,
float width,
float height);
170 IMGUI_API void SetOrthographic(
bool isOrthographic);
173 IMGUI_API void DrawCubes(
const float* view,
const float* projection,
const float* matrices,
int matrixCount);
174 IMGUI_API void DrawGrid(
const float* view,
const float* projection,
const float* matrix,
const float gridSize);
183 TRANSLATE_Y = (1u << 1),
185 ROTATE_X = (1u << 3),
187 ROTATE_Z = (1u << 5),
193 SCALE_XU = (1u << 11),
195 SCALE_ZU = (1u << 13),
206 return static_cast<OPERATION>(
static_cast<int>(lhs) |
static_cast<int>(rhs));
215 IMGUI_API bool Manipulate(
const float* view,
const float* projection, OPERATION operation, MODE mode,
float* matrix,
float* deltaMatrix = NULL,
const float* snap = NULL,
const float* localBounds = NULL,
const float* boundsSnap = NULL);
221 IMGUI_API void ViewManipulate(
float* view,
float length, ImVec2 position, ImVec2 size, ImU32 backgroundColor);
224 IMGUI_API void ViewManipulate(
float* view,
const float* projection, OPERATION operation, MODE mode,
float* matrix,
float length, ImVec2 position, ImVec2 size, ImU32 backgroundColor);
226 IMGUI_API void SetAlternativeWindow(ImGuiWindow* window);
228 [[deprecated(
"Use PushID/PopID instead.")]]
242 IMGUI_API void PushID(
const char* str_id);
243 IMGUI_API void PushID(
const char* str_id_begin,
const char* str_id_end);
244 IMGUI_API void PushID(
const void* ptr_id);
247 IMGUI_API ImGuiID GetID(
const char* str_id);
248 IMGUI_API ImGuiID GetID(
const char* str_id_begin,
const char* str_id_end);
249 IMGUI_API ImGuiID GetID(
const void* ptr_id);
253 IMGUI_API void SetGizmoSizeClipSpace(
float value);
258 IMGUI_API void AllowAxisFlip(
bool value);
261 IMGUI_API void SetAxisLimit(
float value);
263 IMGUI_API void SetAxisMask(
bool x,
bool y,
bool z);
265 IMGUI_API void SetPlaneLimit(
float value);
267 IMGUI_API bool IsOver(
float* position,
float pixelRadius);
#define IMGUI_API
Definition ImGuizmo.h:111
Definition ImGuizmo.cpp:46
Style & GetStyle()
Definition ImGuizmo.cpp:802
COLOR
Definition ImGuizmo.h:270
@ PLANE_Y
Definition ImGuizmo.h:275
@ SCALE_LINE
Definition ImGuizmo.h:280
@ DIRECTION_X
Definition ImGuizmo.h:271
@ TEXT_SHADOW
Definition ImGuizmo.h:285
@ PLANE_Z
Definition ImGuizmo.h:276
@ COUNT
Definition ImGuizmo.h:286
@ PLANE_X
Definition ImGuizmo.h:274
@ ROTATION_USING_BORDER
Definition ImGuizmo.h:281
@ ROTATION_USING_FILL
Definition ImGuizmo.h:282
@ TEXT
Definition ImGuizmo.h:284
@ DIRECTION_Z
Definition ImGuizmo.h:273
@ TRANSLATION_LINE
Definition ImGuizmo.h:279
@ HATCHED_AXIS_LINES
Definition ImGuizmo.h:283
@ DIRECTION_Y
Definition ImGuizmo.h:272
@ INACTIVE
Definition ImGuizmo.h:278
@ SELECTION
Definition ImGuizmo.h:277
OPERATION
Definition ImGuizmo.h:181
@ ROTATE_Z
Definition ImGuizmo.h:187
@ ROTATE
Definition ImGuizmo.h:198
@ BOUNDS
Definition ImGuizmo.h:192
@ TRANSLATE_Y
Definition ImGuizmo.h:183
@ TRANSLATE
Definition ImGuizmo.h:197
@ UNIVERSAL
Definition ImGuizmo.h:201
@ TRANSLATE_X
Definition ImGuizmo.h:182
@ ROTATE_Y
Definition ImGuizmo.h:186
@ SCALE
Definition ImGuizmo.h:199
@ SCALE_ZU
Definition ImGuizmo.h:195
@ SCALE_Z
Definition ImGuizmo.h:191
@ SCALE_YU
Definition ImGuizmo.h:194
@ SCALE_XU
Definition ImGuizmo.h:193
@ SCALE_X
Definition ImGuizmo.h:189
@ SCALEU
Definition ImGuizmo.h:200
@ ROTATE_SCREEN
Definition ImGuizmo.h:188
@ ROTATE_X
Definition ImGuizmo.h:185
@ TRANSLATE_Z
Definition ImGuizmo.h:184
@ SCALE_Y
Definition ImGuizmo.h:190
OPERATION operator|(OPERATION lhs, OPERATION rhs)
Definition ImGuizmo.h:204
MODE
Definition ImGuizmo.h:210
@ WORLD
Definition ImGuizmo.h:212
@ LOCAL
Definition ImGuizmo.h:211
Definition ImGuizmo.h:290
float CenterCircleSize
Definition ImGuizmo.h:300
float HatchedAxisLineThickness
Definition ImGuizmo.h:299
float ScaleLineThickness
Definition ImGuizmo.h:297
ImVec4 Colors[COLOR::COUNT]
Definition ImGuizmo.h:302
float ScaleLineCircleSize
Definition ImGuizmo.h:298
float RotationLineThickness
Definition ImGuizmo.h:295
float TranslationLineArrowSize
Definition ImGuizmo.h:294
float TranslationLineThickness
Definition ImGuizmo.h:293
float RotationOuterLineThickness
Definition ImGuizmo.h:296