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

1# fmt: off 

2 

3import ase.gui.ui as ui 

4from ase.gui.i18n import _ 

5from ase.utils import irotate, rotate 

6 

7 

8class Rotate: 

9 update = True 

10 

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() 

23 

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() 

28 

29 def update_angles(self): 

30 angles = irotate(self.gui.axes) 

31 for r, a in zip(self.rotate, angles): 

32 r.value = a