Statistiques
| Révision :

root / ase / gui / rotate.py @ 16

Historique | Voir | Annoter | Télécharger (1,5 ko)

1 1 tkerber
import numpy as np
2 1 tkerber
import gtk
3 1 tkerber
4 1 tkerber
from ase.gui.widgets import pack
5 1 tkerber
from ase.utils import rotate, irotate
6 1 tkerber
7 1 tkerber
8 1 tkerber
class Rotate(gtk.Window):
9 1 tkerber
    update = True
10 1 tkerber
11 1 tkerber
    def __init__(self, gui):
12 1 tkerber
        gtk.Window.__init__(self)
13 1 tkerber
        angles = irotate(gui.axes)
14 1 tkerber
        self.set_title('Rotate')
15 1 tkerber
        vbox = gtk.VBox()
16 1 tkerber
        pack(vbox, gtk.Label('Rotation angles:'))
17 1 tkerber
        self.rotate = [gtk.Adjustment(value=a, lower=-360, upper=360,
18 1 tkerber
                                      step_incr=1, page_incr=10)
19 1 tkerber
                       for a in angles]
20 1 tkerber
        pack(vbox, [gtk.SpinButton(a, climb_rate=0, digits=1)
21 1 tkerber
                    for a in self.rotate])
22 1 tkerber
        for r in self.rotate:
23 1 tkerber
            r.connect('value-changed', self.change)
24 1 tkerber
        button = pack(vbox, gtk.Button('Update'))
25 1 tkerber
        button.connect('clicked', self.update_angles)
26 1 tkerber
        pack(vbox, gtk.Label('Note:\nYou can rotate freely\n'
27 1 tkerber
                             'with the mouse, by holding\n'
28 1 tkerber
                             'down mouse botton 2.'))
29 1 tkerber
        self.add(vbox)
30 1 tkerber
        vbox.show()
31 1 tkerber
        self.show()
32 1 tkerber
        self.gui = gui
33 1 tkerber
34 1 tkerber
    def change(self, adjustment):
35 1 tkerber
        if self.update:
36 1 tkerber
            x, y, z = [float(a.value) for a in self.rotate]
37 1 tkerber
            self.gui.axes = rotate('%fx,%fy,%fz' % (x, y, z))
38 1 tkerber
            self.gui.set_coordinates()
39 1 tkerber
        return True
40 1 tkerber
41 1 tkerber
    def update_angles(self, button):
42 1 tkerber
        angles = irotate(self.gui.axes)
43 1 tkerber
        self.update = False
44 1 tkerber
        for r, a in zip(self.rotate, angles):
45 1 tkerber
            r.value = a
46 1 tkerber
        self.update = True