Skip to content

Commit 97630bd

Browse files
committed
Add more axes for turntable nav
1 parent b316a88 commit 97630bd

File tree

5 files changed

+56
-4
lines changed

5 files changed

+56
-4
lines changed

src/confscreen.cpp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,36 @@ void TextWindow::ScreenChangeTurntableNav(int link, uint32_t v) {
112112
}
113113
}
114114

115+
void TextWindow::ScreenChangeTurntableNavZ(int link, uint32_t v) {
116+
SS.turntableNavZ = true;
117+
SS.turntableNavX = false;
118+
SS.turntableNavY = false;
119+
if(SS.turntableNav) {
120+
SS.GW.AnimateOnto(Quaternion::From(Vector::From(-1, 0, 0), Vector::From(0, 0, 1)),
121+
SS.GW.offset);
122+
}
123+
}
124+
125+
void TextWindow::ScreenChangeTurntableNavY(int link, uint32_t v) {
126+
SS.turntableNavZ = false;
127+
SS.turntableNavX = false;
128+
SS.turntableNavY = true;
129+
if(SS.turntableNav) {
130+
SS.GW.AnimateOnto(Quaternion::From(Vector::From(-1, 0, 0), Vector::From(0, 1, 0)),
131+
SS.GW.offset);
132+
}
133+
}
134+
135+
void TextWindow::ScreenChangeTurntableNavX(int link, uint32_t v) {
136+
SS.turntableNavZ = false;
137+
SS.turntableNavX = true;
138+
SS.turntableNavY = false;
139+
if(SS.turntableNav) {
140+
SS.GW.AnimateOnto(Quaternion::From(Vector::From(0, 0, 0), Vector::From(1, 0, 0)),
141+
SS.GW.offset);
142+
}
143+
}
144+
115145
void TextWindow::ScreenChangeImmediatelyEditDimension(int link, uint32_t v) {
116146
SS.immediatelyEditDimension = !SS.immediatelyEditDimension;
117147
SS.GW.Invalidate(/*clearPersistent=*/true);
@@ -369,6 +399,12 @@ void TextWindow::ShowConfiguration() {
369399
SS.automaticLineConstraints ? CHECK_TRUE : CHECK_FALSE);
370400
Printf(false, " %Fd%f%Ll%s use turntable mouse navigation%E", &ScreenChangeTurntableNav,
371401
SS.turntableNav ? CHECK_TRUE : CHECK_FALSE);
402+
Printf(false, " - %Fd%f%Ll%s around Z%E", &ScreenChangeTurntableNavZ,
403+
SS.turntableNavZ ? RADIO_TRUE : RADIO_FALSE);
404+
Printf(false, " - %Fd%f%Ll%s around Y%E", &ScreenChangeTurntableNavY,
405+
SS.turntableNavY ? RADIO_TRUE : RADIO_FALSE);
406+
Printf(false, " - %Fd%f%Ll%s around X%E", &ScreenChangeTurntableNavX,
407+
SS.turntableNavX ? RADIO_TRUE : RADIO_FALSE);
372408
Printf(false, " %Fd%f%Ll%s edit newly added dimensions%E",
373409
&ScreenChangeImmediatelyEditDimension,
374410
SS.immediatelyEditDimension ? CHECK_TRUE : CHECK_FALSE);

src/mouse.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,13 +135,17 @@ void GraphicsWindow::MouseMoved(double x, double y, bool leftDown,
135135

136136
if(!(shiftDown || ctrlDown)) {
137137
double s = 0.3*(PI/180)*scale; // degrees per pixel
138+
projUp = orig.projUp.RotatedAbout(orig.projRight, s * dy);
138139
if(SS.turntableNav) { // lock the Z to vertical
139-
projRight = orig.projRight.RotatedAbout(Vector::From(0, 0, 1), -s * dx);
140-
projUp = orig.projUp.RotatedAbout(
141-
Vector::From(orig.projRight.x, orig.projRight.y, orig.projRight.y), s * dy);
140+
if (SS.turntableNavY) {
141+
projRight = orig.projRight.RotatedAbout(Vector::From(0, 1, 0), -s * dx);
142+
} else if (SS.turntableNavX) {
143+
projRight = orig.projRight.RotatedAbout(Vector::From(0, 0, 0), -s * dx);
144+
} else {
145+
projRight = orig.projRight.RotatedAbout(Vector::From(0, 0, 1), -s * dx);
146+
}
142147
} else {
143148
projRight = orig.projRight.RotatedAbout(orig.projUp, -s * dx);
144-
projUp = orig.projUp.RotatedAbout(orig.projRight, s * dy);
145149
}
146150

147151
NormalizeProjectionVectors();

src/solvespace.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ void SolveSpaceUI::Init() {
7676
drawBackFaces = settings->ThawBool("DrawBackFaces", true);
7777
// Use turntable mouse navigation
7878
turntableNav = settings->ThawBool("TurntableNav", false);
79+
turntableNavZ = settings->ThawBool("TurntableNavZ", true);
80+
turntableNavY = settings->ThawBool("TurntableNavY", false);
81+
turntableNavX = settings->ThawBool("TurntableNavX", false);
7982
// Immediately edit dimension
8083
immediatelyEditDimension = settings->ThawBool("ImmediatelyEditDimension", true);
8184
// Check that contours are closed and not self-intersecting
@@ -262,6 +265,9 @@ void SolveSpaceUI::Exit() {
262265
settings->FreezeBool("CheckClosedContour", checkClosedContour);
263266
// Use turntable mouse navigation
264267
settings->FreezeBool("TurntableNav", turntableNav);
268+
settings->FreezeBool("TurntableNavZ", turntableNavZ);
269+
settings->FreezeBool("TurntableNavX", turntableNavX);
270+
settings->FreezeBool("TurntableNavY", turntableNavY);
265271
// Immediately edit dimensions
266272
settings->FreezeBool("ImmediatelyEditDimension", immediatelyEditDimension);
267273
// Enable automatic constrains for lines

src/solvespace.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,9 @@ class SolveSpaceUI {
574574
bool showContourAreas;
575575
bool checkClosedContour;
576576
bool turntableNav;
577+
bool turntableNavZ;
578+
bool turntableNavY;
579+
bool turntableNavX;
577580
bool immediatelyEditDimension;
578581
bool automaticLineConstraints;
579582
bool showToolbar;

src/ui.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,9 @@ class TextWindow {
440440
static void ScreenChangeShowContourAreas(int link, uint32_t v);
441441
static void ScreenChangeCheckClosedContour(int link, uint32_t v);
442442
static void ScreenChangeTurntableNav(int link, uint32_t v);
443+
static void ScreenChangeTurntableNavZ(int link, uint32_t v);
444+
static void ScreenChangeTurntableNavY(int link, uint32_t v);
445+
static void ScreenChangeTurntableNavX(int link, uint32_t v);
443446
static void ScreenChangeImmediatelyEditDimension(int link, uint32_t v);
444447
static void ScreenChangeAutomaticLineConstraints(int link, uint32_t v);
445448
static void ScreenChangePwlCurves(int link, uint32_t v);

0 commit comments

Comments
 (0)