Skip to content

Commit 4577634

Browse files
committed
Add "Snap Rotation" drag setting, based on code snippets by BOTAlex
- Add "Snap Rotation" drag setting - Add setRotation() and getRotation() to Matrix4 class - Remove "Force Upright Orientation" drag setting as the same effect can be achieved with rotation snapping
1 parent 060f32f commit 4577634

16 files changed

+174
-23
lines changed

assets/config_default.ini

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,6 @@ LaserPointerHMDKeyCodeLeft=0
132132
LaserPointerHMDKeyCodeRight=0
133133
LaserPointerHMDKeyCodeMiddle=0
134134
LaserPointerHMDKeyCodeDrag=0
135-
DragForceUpright=false
136135
DragAutoDocking=true
137136
DragFixedDistance=false
138137
DragFixedDistanceCM=200
@@ -141,6 +140,11 @@ DragFixedDistanceAutoCurve=true
141140
DragFixedDistanceAutoTilt=true
142141
DragSnapPosition=false
143142
DragSnapPositionSize=10
143+
DragSnapRotation=false
144+
DragSnapRotationX=true
145+
DragSnapRotationY=true
146+
DragSnapRotationZ=true
147+
DragSnapRotationAngle=45
144148

145149
[Mouse]
146150
RenderCursor=true

assets/lang/de.ini

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,10 @@ tstr_OvrlPropsPositionChangeDragSettingsForceDistanceShapeCylinder=Zylinder
412412
tstr_OvrlPropsPositionChangeDragSettingsForceDistanceAutoCurve=Auto-Krümmung
413413
tstr_OvrlPropsPositionChangeDragSettingsForceDistanceAutoTilt=Auto-Neigung
414414
tstr_OvrlPropsPositionChangeDragSettingsSnapPosition=Position einrasten
415+
tstr_OvrlPropsPositionChangeDragSettingsSnapRotation=Drehung einrasten
416+
tstr_OvrlPropsPositionChangeDragSettingsSnapRotationPitch=Nickachse
417+
tstr_OvrlPropsPositionChangeDragSettingsSnapRotationYaw=Gierachse
418+
tstr_OvrlPropsPositionChangeDragSettingsSnapRotationRoll=Rollachse
415419
416420
tstr_OvrlPropsAppearanceWidth=Breite
417421
tstr_OvrlPropsAppearanceCurve=Krümmung

assets/lang/en.ini

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,14 +411,17 @@ tstr_OvrlPropsPositionChangeOffsetRightLeft=Right/Left Offset
411411
tstr_OvrlPropsPositionChangeOffsetForwardBackward=Forward/Backward Offset
412412
tstr_OvrlPropsPositionChangeDragSettings=Drag Settings
413413
tstr_OvrlPropsPositionChangeDragSettingsAutoDocking=Dock to Controller when Near
414-
tstr_OvrlPropsPositionChangeDragSettingsForceUpright=Force Upright Orientation
415414
tstr_OvrlPropsPositionChangeDragSettingsForceDistance=Force Fixed Distance
416415
tstr_OvrlPropsPositionChangeDragSettingsForceDistanceShape=Shape
417416
tstr_OvrlPropsPositionChangeDragSettingsForceDistanceShapeSphere=Sphere
418417
tstr_OvrlPropsPositionChangeDragSettingsForceDistanceShapeCylinder=Cylinder
419418
tstr_OvrlPropsPositionChangeDragSettingsForceDistanceAutoCurve=Auto-Curve
420419
tstr_OvrlPropsPositionChangeDragSettingsForceDistanceAutoTilt=Auto-Tilt
421420
tstr_OvrlPropsPositionChangeDragSettingsSnapPosition=Snap Position
421+
tstr_OvrlPropsPositionChangeDragSettingsSnapRotation=Snap Rotation
422+
tstr_OvrlPropsPositionChangeDragSettingsSnapRotationPitch=Pitch
423+
tstr_OvrlPropsPositionChangeDragSettingsSnapRotationYaw=Yaw
424+
tstr_OvrlPropsPositionChangeDragSettingsSnapRotationRoll=Roll
422425

423426
tstr_OvrlPropsAppearanceWidth=Width
424427
tstr_OvrlPropsAppearanceCurve=Curvature

assets/lang/ja.ini

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,6 @@ tstr_OvrlPropsPositionChangeOffsetRightLeft=右/左 オフセット
401401
tstr_OvrlPropsPositionChangeOffsetForwardBackward=前/後 オフセット
402402
tstr_OvrlPropsPositionChangeDragSettings=ドラッグ設定
403403
tstr_OvrlPropsPositionChangeDragSettingsAutoDocking=近くのコントローラーにドッキング
404-
tstr_OvrlPropsPositionChangeDragSettingsForceUpright=フォースの上方向
405404
tstr_OvrlPropsPositionChangeDragSettingsForceDistance=フォースの距離 固定
406405
tstr_OvrlPropsPositionChangeDragSettingsForceDistanceShape=シャープ
407406
tstr_OvrlPropsPositionChangeDragSettingsForceDistanceShapeSphere=球体

assets/lang/zh_CN.ini

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,6 @@ tstr_OvrlPropsPositionChangeOffsetRightLeft=左右偏移
412412
tstr_OvrlPropsPositionChangeOffsetForwardBackward=前后偏移
413413
tstr_OvrlPropsPositionChangeDragSettings=拖动设置
414414
tstr_OvrlPropsPositionChangeDragSettingsAutoDocking=接近手柄时自动停靠
415-
tstr_OvrlPropsPositionChangeDragSettingsForceUpright=强制竖直方向
416415
tstr_OvrlPropsPositionChangeDragSettingsForceDistance=强制固定距离
417416
tstr_OvrlPropsPositionChangeDragSettingsForceDistanceShape=形状
418417
tstr_OvrlPropsPositionChangeDragSettingsForceDistanceShapeSphere=球

src/DesktopPlusUI/TextureManager.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ bool TextureManager::LoadAllTexturesAndBuildFonts()
157157

158158
//Extra characters used by the UI directly
159159
builder.AddText(k_pch_bold_exclamation_mark);
160+
builder.AddText(k_pch_degree_symbol);
160161

161162
builder.AddRanges(io.Fonts->GetGlyphRangesDefault());
162163
builder.BuildRanges(&ranges);

src/DesktopPlusUI/TranslationManager.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,6 @@ const char* TranslationManager::s_StringIDNames[tstr_MAX] =
378378
"tstr_OvrlPropsPositionChangeOffsetRightLeft",
379379
"tstr_OvrlPropsPositionChangeOffsetForwardBackward",
380380
"tstr_OvrlPropsPositionChangeDragSettings",
381-
"tstr_OvrlPropsPositionChangeDragSettingsForceUpright",
382381
"tstr_OvrlPropsPositionChangeDragSettingsAutoDocking",
383382
"tstr_OvrlPropsPositionChangeDragSettingsForceDistance",
384383
"tstr_OvrlPropsPositionChangeDragSettingsForceDistanceShape",
@@ -387,6 +386,10 @@ const char* TranslationManager::s_StringIDNames[tstr_MAX] =
387386
"tstr_OvrlPropsPositionChangeDragSettingsForceDistanceAutoCurve",
388387
"tstr_OvrlPropsPositionChangeDragSettingsForceDistanceAutoTilt",
389388
"tstr_OvrlPropsPositionChangeDragSettingsSnapPosition",
389+
"tstr_OvrlPropsPositionChangeDragSettingsSnapRotation",
390+
"tstr_OvrlPropsPositionChangeDragSettingsSnapRotationPitch",
391+
"tstr_OvrlPropsPositionChangeDragSettingsSnapRotationYaw",
392+
"tstr_OvrlPropsPositionChangeDragSettingsSnapRotationRoll",
390393
"tstr_OvrlPropsAppearanceWidth",
391394
"tstr_OvrlPropsAppearanceCurve",
392395
"tstr_OvrlPropsAppearanceOpacity",

src/DesktopPlusUI/TranslationManager.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,6 @@ enum TRMGRStrID
376376
tstr_OvrlPropsPositionChangeOffsetRightLeft,
377377
tstr_OvrlPropsPositionChangeOffsetForwardBackward,
378378
tstr_OvrlPropsPositionChangeDragSettings,
379-
tstr_OvrlPropsPositionChangeDragSettingsForceUpright,
380379
tstr_OvrlPropsPositionChangeDragSettingsAutoDocking,
381380
tstr_OvrlPropsPositionChangeDragSettingsForceDistance,
382381
tstr_OvrlPropsPositionChangeDragSettingsForceDistanceShape,
@@ -385,6 +384,10 @@ enum TRMGRStrID
385384
tstr_OvrlPropsPositionChangeDragSettingsForceDistanceAutoCurve,
386385
tstr_OvrlPropsPositionChangeDragSettingsForceDistanceAutoTilt,
387386
tstr_OvrlPropsPositionChangeDragSettingsSnapPosition,
387+
tstr_OvrlPropsPositionChangeDragSettingsSnapRotation,
388+
tstr_OvrlPropsPositionChangeDragSettingsSnapRotationPitch,
389+
tstr_OvrlPropsPositionChangeDragSettingsSnapRotationYaw,
390+
tstr_OvrlPropsPositionChangeDragSettingsSnapRotationRoll,
388391
tstr_OvrlPropsAppearanceWidth,
389392
tstr_OvrlPropsAppearanceCurve,
390393
tstr_OvrlPropsAppearanceOpacity,

src/DesktopPlusUI/UIManager.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ class UITextureSpaces
6262
};
6363

6464
static const char* const k_pch_bold_exclamation_mark = "\xE2\x9D\x97";
65+
static const char* const k_pch_degree_symbol = "\xc2\xb0";
6566

6667
class UIManager
6768
{

src/DesktopPlusUI/WindowOverlayProperties.cpp

Lines changed: 53 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2216,13 +2216,6 @@ void WindowOverlayProperties::UpdatePagePositionChange(bool only_restore_setting
22162216
IPCManager::Get().PostConfigMessageToDashboardApp(configid_bool_input_drag_auto_docking, auto_docking);
22172217
}
22182218

2219-
bool& force_upright = ConfigManager::GetRef(configid_bool_input_drag_force_upright);
2220-
2221-
if (ImGui::Checkbox(TranslationManager::GetString(tstr_OvrlPropsPositionChangeDragSettingsForceUpright), &force_upright))
2222-
{
2223-
IPCManager::Get().PostConfigMessageToDashboardApp(configid_bool_input_drag_force_upright, force_upright);
2224-
}
2225-
22262219
ImGui::Unindent();
22272220

22282221
//Fixed Size
@@ -2319,6 +2312,59 @@ void WindowOverlayProperties::UpdatePagePositionChange(bool only_restore_setting
23192312
if (!snap_position)
23202313
ImGui::PopItemDisabled();
23212314

2315+
ImGui::NextColumn();
2316+
2317+
//Rotation Snapping
2318+
bool& snap_rotation = ConfigManager::GetRef(configid_bool_input_drag_snap_rotation);
2319+
bool& snap_rotation_x = ConfigManager::GetRef(configid_bool_input_drag_snap_rotation_x);
2320+
bool& snap_rotation_y = ConfigManager::GetRef(configid_bool_input_drag_snap_rotation_y);
2321+
bool& snap_rotation_z = ConfigManager::GetRef(configid_bool_input_drag_snap_rotation_z);
2322+
int& snap_rotation_angle = ConfigManager::GetRef(configid_int_input_drag_snap_rotation_angle);
2323+
2324+
//This checkbox is somewhat redundant and is mostly there for aesthetical reasons
2325+
if (ImGui::Checkbox(TranslationManager::GetString(tstr_OvrlPropsPositionChangeDragSettingsSnapRotation), &snap_rotation))
2326+
{
2327+
IPCManager::Get().PostConfigMessageToDashboardApp(configid_bool_input_drag_snap_rotation, snap_rotation);
2328+
}
2329+
ImGui::NextColumn();
2330+
2331+
if (!snap_rotation)
2332+
ImGui::PushItemDisabled();
2333+
2334+
vr_keyboard.VRKeyboardInputBegin( ImGui::SliderWithButtonsGetSliderID("SnapRotationAngle") );
2335+
if (ImGui::SliderWithButtonsInt("SnapRotationAngle", snap_rotation_angle, 5, 1, 1, 359, "%i\xc2\xb0")) //using k_pch_degree_symbol here
2336+
{
2337+
snap_rotation_angle = clamp(snap_rotation_angle, 1, 359);
2338+
2339+
IPCManager::Get().PostConfigMessageToDashboardApp(configid_int_input_drag_snap_rotation_angle, snap_rotation_angle);
2340+
}
2341+
vr_keyboard.VRKeyboardInputEnd();
2342+
2343+
ImGui::NextColumn();
2344+
ImGui::NextColumn();
2345+
2346+
//Arranged in Y-X-Z order to result in hopefully more intuitive Yaw-Pitch-Roll checkboxes
2347+
if (ImGui::Checkbox(TranslationManager::GetString(tstr_OvrlPropsPositionChangeDragSettingsSnapRotationYaw), &snap_rotation_y))
2348+
{
2349+
IPCManager::Get().PostConfigMessageToDashboardApp(configid_bool_input_drag_snap_rotation_y, snap_rotation_y);
2350+
}
2351+
ImGui::SameLine();
2352+
2353+
if (ImGui::Checkbox(TranslationManager::GetString(tstr_OvrlPropsPositionChangeDragSettingsSnapRotationPitch), &snap_rotation_x))
2354+
{
2355+
IPCManager::Get().PostConfigMessageToDashboardApp(configid_bool_input_drag_snap_rotation_x, snap_rotation_x);
2356+
}
2357+
ImGui::SameLine();
2358+
2359+
if (ImGui::Checkbox(TranslationManager::GetString(tstr_OvrlPropsPositionChangeDragSettingsSnapRotationRoll), &snap_rotation_z))
2360+
{
2361+
IPCManager::Get().PostConfigMessageToDashboardApp(configid_bool_input_drag_snap_rotation_z, snap_rotation_z);
2362+
}
2363+
ImGui::SameLine();
2364+
2365+
if (!snap_rotation)
2366+
ImGui::PopItemDisabled();
2367+
23222368
ImGui::Columns(1);
23232369

23242370
ImGui::EndChild();

src/Shared/ConfigManager.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -535,14 +535,18 @@ bool ConfigManager::LoadConfigFromFile()
535535
m_ConfigInt[configid_int_input_laser_pointer_hmd_device_keycode_drag] = config.ReadInt( "Input", "LaserPointerHMDKeyCodeDrag", 0);
536536

537537
m_ConfigBool[configid_bool_input_drag_auto_docking] = config.ReadBool("Input", "DragAutoDocking", true);
538-
m_ConfigBool[configid_bool_input_drag_force_upright] = config.ReadBool("Input", "DragForceUpright", false);
539538
m_ConfigBool[configid_bool_input_drag_fixed_distance] = config.ReadBool("Input", "DragFixedDistance", false);
540539
m_ConfigFloat[configid_float_input_drag_fixed_distance_m] = config.ReadInt( "Input", "DragFixedDistanceCM", 200) / 100.0f;
541540
m_ConfigInt[configid_int_input_drag_fixed_distance_shape] = config.ReadInt( "Input", "DragFixedDistanceShape", 0);
542541
m_ConfigBool[configid_bool_input_drag_fixed_distance_auto_curve] = config.ReadBool("Input", "DragFixedDistanceAutoCurve", true);
543542
m_ConfigBool[configid_bool_input_drag_fixed_distance_auto_tilt] = config.ReadBool("Input", "DragFixedDistanceAutoTilt", true);
544543
m_ConfigBool[configid_bool_input_drag_snap_position] = config.ReadBool("Input", "DragSnapPosition", false);
545544
m_ConfigFloat[configid_float_input_drag_snap_position_size] = config.ReadInt( "Input", "DragSnapPositionSize", 10) / 100.0f;
545+
m_ConfigBool[configid_bool_input_drag_snap_rotation] = config.ReadBool("Input", "DragSnapRotation", false);
546+
m_ConfigBool[configid_bool_input_drag_snap_rotation_x] = config.ReadBool("Input", "DragSnapRotationX", true);
547+
m_ConfigBool[configid_bool_input_drag_snap_rotation_y] = config.ReadBool("Input", "DragSnapRotationY", true);
548+
m_ConfigBool[configid_bool_input_drag_snap_rotation_z] = config.ReadBool("Input", "DragSnapRotationZ", true);
549+
m_ConfigInt[configid_int_input_drag_snap_rotation_angle] = config.ReadInt( "Input", "DragSnapRotationAngle", 45);
546550

547551
m_ConfigBool[configid_bool_input_mouse_render_cursor] = config.ReadBool("Mouse", "RenderCursor", true);
548552
m_ConfigBool[configid_bool_input_mouse_render_intersection_blob] = config.ReadBool("Mouse", "RenderIntersectionBlob", false);
@@ -1511,14 +1515,18 @@ void ConfigManager::SaveConfigToFile()
15111515
config.WriteInt( "Input", "LaserPointerHMDKeyCodeDrag", m_ConfigInt[configid_int_input_laser_pointer_hmd_device_keycode_drag]);
15121516

15131517
config.WriteBool("Input", "DragAutoDocking", m_ConfigBool[configid_bool_input_drag_auto_docking]);
1514-
config.WriteBool("Input", "DragForceUpright", m_ConfigBool[configid_bool_input_drag_force_upright]);
15151518
config.WriteBool("Input", "DragFixedDistance", m_ConfigBool[configid_bool_input_drag_fixed_distance]);
15161519
config.WriteInt( "Input", "DragFixedDistanceCM", int(m_ConfigFloat[configid_float_input_drag_fixed_distance_m] * 100.0f));
15171520
config.WriteInt( "Input", "DragFixedDistanceShape", m_ConfigInt[configid_int_input_drag_fixed_distance_shape]);
15181521
config.WriteBool("Input", "DragFixedDistanceAutoCurve", m_ConfigBool[configid_bool_input_drag_fixed_distance_auto_curve]);
15191522
config.WriteBool("Input", "DragFixedDistanceAutoTilt", m_ConfigBool[configid_bool_input_drag_fixed_distance_auto_tilt]);
15201523
config.WriteBool("Input", "DragSnapPosition", m_ConfigBool[configid_bool_input_drag_snap_position]);
15211524
config.WriteInt( "Input", "DragSnapPositionSize", int(m_ConfigFloat[configid_float_input_drag_snap_position_size] * 100.0f));
1525+
config.WriteBool("Input", "DragSnapRotation", m_ConfigBool[configid_bool_input_drag_snap_rotation]);
1526+
config.WriteBool("Input", "DragSnapRotationX", m_ConfigBool[configid_bool_input_drag_snap_rotation_x]);
1527+
config.WriteBool("Input", "DragSnapRotationY", m_ConfigBool[configid_bool_input_drag_snap_rotation_y]);
1528+
config.WriteBool("Input", "DragSnapRotationZ", m_ConfigBool[configid_bool_input_drag_snap_rotation_z]);
1529+
config.WriteInt( "Input", "DragSnapRotationAngle", m_ConfigInt[configid_int_input_drag_snap_rotation_angle]);
15221530

15231531
config.WriteBool("Mouse", "RenderCursor", m_ConfigBool[configid_bool_input_mouse_render_cursor]);
15241532
config.WriteBool("Mouse", "RenderIntersectionBlob", m_ConfigBool[configid_bool_input_mouse_render_intersection_blob]);

src/Shared/ConfigManager.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,14 @@ enum ConfigID_Bool
9494
configid_bool_input_laser_pointer_block_input,
9595
configid_bool_input_laser_pointer_hmd_device,
9696
configid_bool_input_drag_auto_docking,
97-
configid_bool_input_drag_force_upright,
9897
configid_bool_input_drag_fixed_distance,
9998
configid_bool_input_drag_fixed_distance_auto_curve,
10099
configid_bool_input_drag_fixed_distance_auto_tilt,
101100
configid_bool_input_drag_snap_position,
101+
configid_bool_input_drag_snap_rotation,
102+
configid_bool_input_drag_snap_rotation_x,
103+
configid_bool_input_drag_snap_rotation_y,
104+
configid_bool_input_drag_snap_rotation_z,
102105
configid_bool_windows_auto_focus_scene_app_dashboard,
103106
configid_bool_windows_winrt_auto_focus,
104107
configid_bool_windows_winrt_keep_on_screen,
@@ -155,6 +158,7 @@ enum ConfigID_Int
155158
configid_int_input_mouse_dbl_click_assist_duration_ms,
156159
configid_int_input_mouse_input_smoothing_level,
157160
configid_int_input_drag_fixed_distance_shape, //0 = Sphere, 1 = Cylinder
161+
configid_int_input_drag_snap_rotation_angle,
158162
configid_int_input_global_shortcuts_max_count,
159163
configid_int_input_laser_pointer_hmd_device_keycode_toggle,
160164
configid_int_input_laser_pointer_hmd_device_keycode_left,

src/Shared/Matrices.cpp

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,14 @@
2323
#include <sstream>
2424
#include "Matrices.h"
2525

26-
const float DEG2RAD = 3.141593f / 180;
27-
const float EPSILON = 0.00001f;
28-
26+
constexpr float DEG2RAD = 3.141593f / 180;
27+
constexpr float RAD2DEG = 180 / 3.141593f;
28+
constexpr float EPSILON = 0.00001f;
2929

30+
float clampf(float value, float value_min, float value_max)
31+
{
32+
return std::max(value_min, std::min(value, value_max));
33+
}
3034

3135
///////////////////////////////////////////////////////////////////////////////
3236
// transpose 2x2 matrix
@@ -161,6 +165,22 @@ Matrix4::Matrix4(const std::string str)
161165
identity();
162166
}
163167

168+
void Matrix4::setRotation(float x, float y, float z)
169+
{
170+
//Compute cosine and sine for each angle
171+
float cx = cosf(x * DEG2RAD);
172+
float sx = sinf(x * DEG2RAD);
173+
float cy = cosf(y * DEG2RAD);
174+
float sy = sinf(y * DEG2RAD);
175+
float cz = cosf(z * DEG2RAD);
176+
float sz = sinf(z * DEG2RAD);
177+
178+
//Refill the the matrix. Any scaling is lost here
179+
m[0] = cy * cz + sy * sx * sz; m[4] = -cy * sz + sy * sx * cz; m[8] = sy * cx;
180+
m[1] = cx * sz; m[5] = cx * cz; m[9] = -sx;
181+
m[2] = cy * sx * sz - sy * cz; m[6] = sy * sz + cy * sx * cz; m[10] = cy * cx;
182+
}
183+
164184

165185
///////////////////////////////////////////////////////////////////////////////
166186
// transpose 4x4 matrix
@@ -473,6 +493,21 @@ std::string Matrix4::toString() const
473493
return ss.str();
474494
}
475495

496+
Vector3 Matrix4::getRotation() const
497+
{
498+
Vector3 rot;
499+
rot.x = std::asin(-clampf(m[9], -1.0f, 1.0f)); //Pitch
500+
rot.z = std::atan2(m[1], m[5]); //Roll
501+
rot.y = std::atan2(clampf(m[8], -1.0f, 1.0f), m[10]); //Yaw
502+
503+
//Convert to degrees
504+
rot.x *= RAD2DEG;
505+
rot.y *= RAD2DEG;
506+
rot.z *= RAD2DEG;
507+
508+
return rot;
509+
}
510+
476511
bool Matrix4::isZero() const
477512
{
478513
for (size_t i = 0; i < 15; ++i)

src/Shared/Matrices.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,15 +168,17 @@ class Matrix4
168168
void setColumn(int index, const Vector3& v);
169169

170170
void setTranslation(const Vector3 & v);
171+
void setRotation(float x, float y, float z); //Set rotation with euler angles (ZYX rotation order). Resets scale to 1, if any
171172

172173
const float* get() const;
173-
const float* getTranspose(); // return transposed matrix
174+
const float* getTranspose(); // return transposed matrix
174175
float getDeterminant();
175176
vr::HmdMatrix34_t toOpenVR34() const;
176177
std::string toString() const;
177178

178179

179180
Vector3 getTranslation() const;
181+
Vector3 getRotation() const; //Returns rotation in euler angles (ZYX rotation order)
180182
bool isZero() const; // return if the matrix is a zero matrix
181183

182184
Matrix4& identity();

0 commit comments

Comments
 (0)