Coverage for /builds/ase/ase/ase/gui/rotate.py: 86.36%
22 statements
« prev ^ index » next coverage.py v7.5.3, created at 2025-08-02 00:12 +0000
« prev ^ index » next coverage.py v7.5.3, created at 2025-08-02 00:12 +0000
1# fmt: off
3import ase.gui.ui as ui
4from ase.gui.i18n import _
5from ase.utils import irotate, rotate
8class Rotate:
9 update = True
11 def __init__(self, gui):
12 self.gui = gui
13 win = ui.Window(_('Rotate'), wmtype='utility')
14 win.add(_('Rotation angles:'))
15 self.rotate = [ui.SpinBox(42.0, -360, 360, 1, self.change)
16 for _ in '123']
17 win.add(self.rotate)
18 win.add(ui.Button(_('Update'), self.update_angles))
19 win.add(_('Note:\nYou can rotate freely\n'
20 'with the mouse, by holding\n'
21 'down mouse button 2.'))
22 self.update_angles()
24 def change(self):
25 x, y, z = (float(a.value) for a in self.rotate)
26 self.gui.axes = rotate(f'{x:f}x,{y:f}y,{z:f}z')
27 self.gui.set_frame()
29 def update_angles(self):
30 angles = irotate(self.gui.axes)
31 for r, a in zip(self.rotate, angles):
32 r.value = a