Skip to content

Commit 52c6e87

Browse files
committed
Add CLI for camera speed (zoom, rotations, and pan)
1 parent 76f2a60 commit 52c6e87

3 files changed

Lines changed: 52 additions & 17 deletions

File tree

include/commandLine.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,10 @@ struct CommandLine
317317
extractArgument(globalAtomAlpha, arguments);
318318
extractArgument(globalBondAlpha, arguments);
319319
extractArgument(videoName, arguments);
320+
extractArgument(cameraZoomSpeed, arguments);
321+
extractArgument(cameraPanSpeed, arguments);
322+
extractArgument(cameraInclineSpeed, arguments);
323+
extractArgument(cameraRotateSpeed, arguments);
320324

321325
#ifdef WITH_FFMPEG
322326
extractArgument(cq, arguments);
@@ -352,6 +356,10 @@ struct CommandLine
352356
Argument<vec<2>> resolution = {"resolution", "Window resolution in pixels.", "", {512, 512}};
353357
Argument<uint64_t> bondFocus = {"bondFocus", "Only draw bonds for this atom.", "", NULL_INDEX};
354358
Argument<uint64_t> focus = {"focus", "Centre on a particular atom.", "", NULL_INDEX};
359+
Argument<float> cameraZoomSpeed = {"cameraZoomSpeed", "Speed of the camera's zoom.", "", 1.0};
360+
Argument<float> cameraRotateSpeed = {"cameraRotateSpeed", "Speed of the camera's rotation", "", 1.0};
361+
Argument<float> cameraInclineSpeed = {"cameraInclineSpeed", "Speed of the camera's inclination.", "", 1.0};
362+
Argument<float> cameraPanSpeed = {"cameraPanSpeed", "Speed of the camera's pan.", "", 1.0};
355363

356364
#ifdef WITH_FFMPEG
357365
Argument<std::string> codec = {"codec", "FFmpeg codec name.", "See ffmpeg -codecs", "libx264"};
@@ -625,6 +633,10 @@ struct CommandLine
625633
<< "\n"
626634
<< sidebyside(argumentHelp(videoName), argumentHelp(fieldOfView), 42)
627635
<< "\n"
636+
<< sidebyside(argumentHelp(cameraRotateSpeed), argumentHelp(cameraInclineSpeed), 42)
637+
<< "\n"
638+
<< sidebyside(argumentHelp(cameraPanSpeed), argumentHelp(cameraZoomSpeed), 42)
639+
<< "\n"
628640
#ifdef WITH_FFMPEG
629641
<< "\n FFMPEG recording options:\n\n"
630642
<< " See here for advice https://trac.ffmpeg.org/wiki/Encode/H.264\n\n"

include/main.h

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -137,40 +137,50 @@ Theme lightTheme()
137137
*
138138
* @param display display to obtain events from.
139139
* @param camera the camera to update.
140+
* @param zoomSpeed multiplier for zoom.
141+
* @param rotateSpeed multiplier for rotation.
142+
* @param inclineSpeed multiplier for inclination.
140143
* @return true if the camera moved.
141144
* @return false if the camera did not move.
142145
*/
143-
bool cameraControls(jGL::DesktopDisplay & display, Camera & camera)
146+
bool cameraControls
147+
(
148+
jGL::DesktopDisplay & display,
149+
Camera & camera,
150+
float zoomSpeed,
151+
float rotateSpeed,
152+
float inclineSpeed
153+
)
144154
{
145155
bool moved = false;
146156
if (display.keyHasAnyEvents(GLFW_KEY_W, {jGL::EventType::PRESS, jGL::EventType::HOLD}))
147157
{
148-
camera.zoom(-dr);
158+
camera.zoom(-dr*zoomSpeed);
149159
moved = true;
150160
}
151161
if (display.keyHasAnyEvents(GLFW_KEY_S, {jGL::EventType::PRESS, jGL::EventType::HOLD}))
152162
{
153-
camera.zoom(dr);
163+
camera.zoom(dr*zoomSpeed);
154164
moved = true;
155165
}
156166
if (display.keyHasAnyEvents(GLFW_KEY_Q, {jGL::EventType::PRESS, jGL::EventType::HOLD}))
157167
{
158-
camera.incline(dtheta);
168+
camera.incline(dtheta*inclineSpeed);
159169
moved = true;
160170
}
161171
if (display.keyHasAnyEvents(GLFW_KEY_E, {jGL::EventType::PRESS, jGL::EventType::HOLD}))
162172
{
163-
camera.incline(-dtheta);
173+
camera.incline(-dtheta*inclineSpeed);
164174
moved = true;
165175
}
166176
if (display.keyHasAnyEvents(GLFW_KEY_A, {jGL::EventType::PRESS, jGL::EventType::HOLD}))
167177
{
168-
camera.rotate(-dphi);
178+
camera.rotate(-dphi*rotateSpeed);
169179
moved = true;
170180
}
171181
if (display.keyHasAnyEvents(GLFW_KEY_D, {jGL::EventType::PRESS, jGL::EventType::HOLD}))
172182
{
173-
camera.rotate(dphi);
183+
camera.rotate(dphi*rotateSpeed);
174184
moved = true;
175185
}
176186
return moved;
@@ -182,6 +192,10 @@ bool cameraControls(jGL::DesktopDisplay & display, Camera & camera)
182192
* @param display the display to get events from.
183193
* @param atoms the Atoms to modify.
184194
* @param emphasisControls key bindings to emphasise elements.
195+
* @param elementMap map elements to indices.
196+
* @param alphaOverrides overriding alpha channels.
197+
* @param deemphasisAlpha alpha for faded atoms.
198+
* @param translateSpeed atom translation speed.
185199
*
186200
* @return true if the Atoms were modified.
187201
* @return false if the Atoms were not modified.
@@ -193,38 +207,39 @@ bool atomControls
193207
std::map<int, Element> & emphasisControls,
194208
std::multimap<Element, uint64_t> & elementMap,
195209
std::vector<float> & alphaOverrides,
196-
float deemphasisAlpha
210+
float deemphasisAlpha,
211+
float translateSpeed
197212
)
198213
{
199214
bool elementsNeedUpdate = false;
200215
if (display.keyHasEvent(GLFW_KEY_LEFT, jGL::EventType::PRESS) || display.keyHasEvent(GLFW_KEY_LEFT, jGL::EventType::HOLD))
201216
{
202-
translate(atoms, {-dr, 0.0, 0.0});
217+
translate(atoms, {-dr*translateSpeed, 0.0, 0.0});
203218
elementsNeedUpdate = true;
204219
}
205220
if (display.keyHasEvent(GLFW_KEY_RIGHT, jGL::EventType::PRESS) || display.keyHasEvent(GLFW_KEY_RIGHT, jGL::EventType::HOLD))
206221
{
207-
translate(atoms, {dr, 0.0, 0.0});
222+
translate(atoms, {dr*translateSpeed, 0.0, 0.0});
208223
elementsNeedUpdate = true;
209224
}
210225
if (display.keyHasEvent(GLFW_KEY_PERIOD, jGL::EventType::PRESS) || display.keyHasEvent(GLFW_KEY_PERIOD, jGL::EventType::HOLD))
211226
{
212-
translate(atoms, {0.0, -dr, 0.0});
227+
translate(atoms, {0.0, -dr*translateSpeed, 0.0});
213228
elementsNeedUpdate = true;
214229
}
215230
if (display.keyHasEvent(GLFW_KEY_SLASH, jGL::EventType::PRESS) || display.keyHasEvent(GLFW_KEY_SLASH, jGL::EventType::HOLD))
216231
{
217-
translate(atoms, {0.0, dr, 0.0});
232+
translate(atoms, {0.0, dr*translateSpeed, 0.0});
218233
elementsNeedUpdate = true;
219234
}
220235
if (display.keyHasEvent(GLFW_KEY_DOWN, jGL::EventType::PRESS) || display.keyHasEvent(GLFW_KEY_DOWN, jGL::EventType::HOLD))
221236
{
222-
translate(atoms, {0.0, 0.0, -dr});
237+
translate(atoms, {0.0, 0.0, -dr*translateSpeed});
223238
elementsNeedUpdate = true;
224239
}
225240
if (display.keyHasEvent(GLFW_KEY_UP, jGL::EventType::PRESS) || display.keyHasEvent(GLFW_KEY_UP, jGL::EventType::HOLD))
226241
{
227-
translate(atoms, {0.0, 0.0, dr});
242+
translate(atoms, {0.0, 0.0, dr*translateSpeed});
228243
elementsNeedUpdate = true;
229244
}
230245

@@ -287,7 +302,7 @@ void loadingScreenFrame
287302
jGLInstance->setClear(theme.background);
288303
jGLInstance->clear();
289304

290-
cameraControls(display, camera);
305+
cameraControls(display, camera, 1.0f, 1.0f, 1.0f);
291306

292307
loadingAtoms.updateCamera(camera);
293308
loadingAtoms.draw(true);

src/main.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,14 @@ int main(int argv, char ** argc)
217217
options.hideInfoText.value = !options.hideInfoText.value;
218218
}
219219

220-
bool cameraMoved = cameraControls(display, camera);
220+
bool cameraMoved = cameraControls
221+
(
222+
display,
223+
camera,
224+
options.cameraZoomSpeed.value,
225+
options.cameraRotateSpeed.value,
226+
options.cameraInclineSpeed.value
227+
);
221228

222229
elementsNeedUpdate = atomControls
223230
(
@@ -226,7 +233,8 @@ int main(int argv, char ** argc)
226233
visualisationState.emphasisControls,
227234
visualisationState.elementMap,
228235
visualisationState.atomEmphasisOverrides,
229-
options.deemphasisAlpha.value
236+
options.deemphasisAlpha.value,
237+
options.cameraPanSpeed.value
230238
);
231239

232240
if (display.keyHasAnyEvents(GLFW_KEY_SPACE, {jGL::EventType::PRESS, jGL::EventType::HOLD}))

0 commit comments

Comments
 (0)