예제 #1
0
 def showroute(self, acid):
     ''' Toggle show route for this aircraft '''
     if not stack.sender():
         self.route_all = acid
         self.client_route.clear()
     else:
         self.client_route[stack.sender()] = acid
     return True
예제 #2
0
    def pan(self, *args):
        ''' Move center of display, relative of to absolute position lat,lon '''
        lat, lon = 0, 0
        absolute = False
        if args[0] == "LEFT":
            lon = -0.5
        elif args[0] == "RIGHT":
            lon = 0.5
        elif args[0] == "UP":
            lat = 0.5
        elif args[0] == "DOWN":
            lat = -0.5
        else:
            absolute = True
            lat, lon = args

        sender = stack.sender()
        if sender:
            if absolute:
                self.client_pan[sender] = (lat, lon)
            else:
                ll = self.client_pan.get(sender) or self.def_pan
                self.client_pan[sender] = (lat + ll[0], lon + ll[1])
        else:
            self.def_pan = (lat, lon) if absolute else (lat + self.def_pan[0],
                                                        lon + self.def_pan[1])
            self.client_pan.clear()

        bs.sim.send_event(b'PANZOOM', dict(pan=(lat, lon), absolute=absolute))
예제 #3
0
    def pan(self, *args):
        ''' Move center of display, relative of to absolute position lat,lon '''
        lat, lon = 0, 0
        absolute = False
        if args[0] == "LEFT":
            lon = -0.5
        elif args[0] == "RIGHT":
            lon = 0.5
        elif args[0] == "UP":
            lat = 0.5
        elif args[0] == "DOWN":
            lat = -0.5
        else:
            absolute = True
            lat, lon = args

        sender    = stack.sender()
        if sender:
            if absolute:
                self.client_pan[sender] = (lat, lon)
            else:
                ll = self.client_pan.get(sender) or self.def_pan
                self.client_pan[sender] = (lat + ll[0], lon + ll[1])
        else:
            self.def_pan = (lat,lon) if absolute else (lat + self.def_pan[0],
                                                       lon + self.def_pan[1])
            self.client_pan.clear()

        bs.sim.send_event(b'PANZOOM', dict(pan=(lat,lon), absolute=absolute))
예제 #4
0
    def getviewbounds(self):
        # Get appropriate lat/lon/zoom/aspect ratio
        sender = stack.sender()
        lat, lon = self.client_pan.get(sender) or self.def_pan
        zoom = self.client_zoom.get(sender) or self.def_zoom
        ar = self.client_ar.get(sender) or 1.0

        lat0 = lat - 1.0 / (zoom * ar)
        lat1 = lat + 1.0 / (zoom * ar)
        lon0 = lon - 1.0 / (zoom * np.cos(np.radians(lat)))
        lon1 = lon + 1.0 / (zoom * np.cos(np.radians(lat)))
        return lat0, lat1, lon0, lon1
예제 #5
0
    def zoom(self, zoom, absolute=True):
        sender    = stack.sender()
        if sender:
            if absolute:
                self.client_zoom[sender] = zoom
            else:
                self.client_zoom[sender] = zoom * self.client_zoom.get(sender, self.def_zoom)
        else:
            self.def_zoom = zoom * (1.0 if absolute else self.def_zoom)
            self.client_zoom.clear()

        bs.sim.send_event(b'PANZOOM', dict(zoom=zoom, absolute=absolute))
예제 #6
0
    def getviewbounds(self):
        # Get appropriate lat/lon/zoom/aspect ratio
        sender   = stack.sender()
        lat, lon = self.client_pan.get(sender) or self.def_pan
        zoom     = self.client_zoom.get(sender) or self.def_zoom
        ar       = self.client_ar.get(sender) or 1.0

        lat0 = lat - 1.0 / (zoom * ar)
        lat1 = lat + 1.0 / (zoom * ar)
        lon0 = lon - 1.0 / (zoom * np.cos(np.radians(lat)))
        lon1 = lon + 1.0 / (zoom * np.cos(np.radians(lat)))
        return lat0, lat1, lon0, lon1
예제 #7
0
    def zoom(self, zoom, absolute=True):
        sender    = stack.sender()
        if sender:
            if absolute:
                self.client_zoom[sender] = zoom
            else:
                self.client_zoom[sender] = zoom * self.client_zoom.get(sender, self.def_zoom)
        else:
            self.def_zoom = zoom * (1.0 if absolute else self.def_zoom)
            self.client_zoom.clear()

        bs.sim.send_event(b'PANZOOM', dict(zoom=zoom, absolute=absolute))
예제 #8
0
 def send_event(self, name, data=None, target=None):
     # On the sim side, target is obtained from the currently-parsed stack command
     self.event_io.send_multipart([
         stack.sender() or b'*', name,
         msgpack.packb(data, default=encode_ndarray, use_bin_type=True)
     ])
예제 #9
0
 def getviewctr(self):
     return self.client_pan.get(stack.sender()) or self.def_pan
예제 #10
0
 def showroute(self, acid):
     ''' Toggle show route for this aircraft '''
     self.route_acid[stack.sender()] = acid
     return True
예제 #11
0
 def getviewctr(self):
     return self.client_pan.get(stack.sender()) or self.def_pan
예제 #12
0
 def send_event(self, name, data=None, target=None):
     # On the sim side, target is obtained from the currently-parsed stack command
     self.event_io.send_multipart([stack.sender() or b'*', name, msgpack.packb(data, default=encode_ndarray, use_bin_type=True)])
예제 #13
0
 def showroute(self, acid):
     ''' Toggle show route for this aircraft '''
     self.route_acid[stack.sender()] = acid
     return True