def handle_scroll(self, window, x_offset, y_offset): # require model if not self.model: return # get current window size width, height = glfw.get_framebuffer_size(window) # scroll self.gui_lock.acquire() mjlib.mjv_moveCamera(C.MOUSE_ZOOM, 0, (-20 * y_offset), byref(self.cam), width, height) self.gui_lock.release()
def handle_mouse_move(self, window, xpos, ypos): # no buttons down: nothing to do if not self.button_left_pressed \ and not self.button_middle_pressed \ and not self.button_right_pressed: return # compute mouse displacement, save dx = int(self.scale * xpos) - self.last_mouse_x dy = int(self.scale * ypos) - self.last_mouse_y self.last_mouse_x = int(self.scale * xpos) self.last_mouse_y = int(self.scale * ypos) # require model if not self.model: return # get current window size width, height = glfw.get_framebuffer_size(self.window) # get shift key state mod_shift = glfw.get_key(window, glfw.KEY_LEFT_SHIFT) == glfw.PRESS \ or glfw.get_key(window, glfw.KEY_RIGHT_SHIFT) == glfw.PRESS # determine action based on mouse button action = None if self.button_right_pressed: action = C.MOUSE_MOVE_H if mod_shift else C.MOUSE_MOVE_V elif self.button_left_pressed: action = C.MOUSE_ROTATE_H if mod_shift else C.MOUSE_ROTATE_V else: action = C.MOUSE_ZOOM self.gui_lock.acquire() mjlib.mjv_moveCamera(action, dx, dy, byref(self.cam), width, height) self.gui_lock.release()