예제 #1
0
 def map_dragged(self, start, end):
     th, u = self._projection.get_xy_rotation(start[0], start[1],
                                              end[0], end[1])
     x, y, z = [c * sin(th/2) for c in u]
     rot = quat(cos(th/2), x, y, z) * self._rotation
     if not any((isnan(c) for c in rot.q)):
         self._rotation = rot
     self.view_map_size_changed(self._view.map_size)
예제 #2
0
    def __init__(self, model, view):
        projections = [SineProjection, FlatProjection]

        self._model = model
        
        self._view = view
        self._view.set_projection_options(projections,
                                          self._set_projection)

        self._rotation = quat(1)
        
        self._view.map_size_changed = self.view_map_size_changed
        self._view.map_dragged = self.map_dragged

        self._set_projection(projections[0])
예제 #3
0
 def _rotate(self, v):
     q = quat(0,v[0],v[1],v[2])
     return ((self._rotation*q)/self._rotation).q[1:4]