Esempio n. 1
0
class MouseHandler:
    def __init__(self, min_angle=50, max_angle=180):
        self.root = Display().screen().root
        screen_width = self.root.get_geometry().width
        screen_height = self.root.get_geometry().height

        self.stiffness_mapper = interp1d([0, screen_height],
                                         [50, -30])
        self.angle_mapper = interp1d([0, screen_width],
                                     [min_angle, max_angle])

        self.last_command = None
        self.last_update_time = None

    def get_cmd_from_mouse_position(self):
        qp = self.root.query_pointer()
        angle = self.angle_mapper(qp.root_x)
        stiffness = self.stiffness_mapper(qp.root_y)

        if [angle, stiffness] != self.last_command:
            position_changed = True
            self.last_command = [angle, stiffness]
            self.last_update_time = time()
        else:
            position_changed = False
        return angle, stiffness, position_changed

    def continuous_control(self, controller, timeout=float('inf')):
        self.last_update_time = time()
        while time() - self.last_update_time < timeout:
            sleep(0.001)
            angle, stiffness, position_changed = self.get_cmd_from_mouse_position()
            if not position_changed:
                continue
            try:
                controller.send(angle, stiffness)
                print(f'angle: {angle:3.0f}   stiffness: {stiffness:3.0f}')
            except OutOfRangeError:
                print('servo out of range')
Esempio n. 2
0
def primitiveScreenDepth(rcvr, context, vm):
    from Xlib.display import Display
    root = Display().screen().root
    return integer.create(root.get_geometry().depth, vm.memory)