def atwptStack(self, idx, *args): # args: all arguments of addwpt # AT acid, wpinroute [DEL] ALT/SPD spd/alt" # args = wpname,SPD/ALT, spd/alt(string) if len(args) < 1: return False, "AT needs at least an aicraft id and a waypoint name" else: name = args[0] if name in self.wpname: wpidx = self.wpname.index(name) # acid AT wpinroute: show alt & spd constraints at this waypoint # acid AT wpinroute SPD: show spd constraint at this waypoint # acid AT wpinroute ALT: show alt constraint at this waypoint if len(args) == 1 or \ (len(args) == 2 and not args[1].count("/") == 1): txt = name + " : " # Select what to show if len(args)==1: swalt = True swspd = True else: swalt = args[1].upper()=="ALT" swspd = args[1].upper() in ("SPD","SPEED") # To be safe show both when we do not know what if not (swalt or swspd): swalt = True swspd = True # Show altitude if swalt: if self.wpalt[wpidx] < 0: txt += "-----" elif self.wpalt[wpidx] > 4500 * ft: fl = int(round((self.wpalt[wpidx] / (100. * ft)))) txt += "FL" + str(fl) else: txt += str(int(round(self.wpalt[wpidx] / ft))) if swspd: txt += "/" # Show speed if swspd: if self.wpspd[wpidx] < 0: txt += "---" else: txt += str(int(round(self.wpspd[wpidx] / kts))) # Type if swalt and swspd: if self.wptype[wpidx] == Route.orig: txt += "[orig]" elif self.wptype[wpidx] == Route.dest: txt += "[dest]" return True, txt elif args[1].count("/")==1: # acid AT wpinroute alt"/"spd success = True # Use parse from stack.py to interpret alt & speed alttxt, spdtxt = args[1].split('/') # Edit waypoint altitude constraint if alttxt.count('-') > 1: # "----" = delete self.wpalt[wpidx] = -999. else: parser = Argparser(['alt'], [False], alttxt) if parser.parse(): self.wpalt[wpidx] = parser.arglist[0] else: success = False # Edit waypoint speed constraint if spdtxt.count('-') > 1: # "----" = delete self.wpspd[wpidx] = -999. else: parser = Argparser(['spd'], [False], spdtxt) if parser.parse(): self.wpspd[wpidx] = parser.arglist[0] else: success = False if not success: return False,"Could not parse "+args[1]+" as alt / spd" # If success: update flight plan and guidance self.calcfp() self.direct(idx, self.wpname[self.iactwp]) #acid AT wpinroute ALT/SPD alt/spd elif len(args)==3 : swalt = args[1].upper()=="ALT" swspd = args[1].upper() in ("SPD","SPEED") # Use parse from stack.py to interpret alt & speed # Edit waypoint altitude constraint if swalt: parser = Argparser(['alt'], [False], args[2]) if parser.parse(): self.wpalt[wpidx] = parser.arglist[0] else: return False,'Could not parse "' + args[2] + '" as altitude' # Edit waypoint speed constraint elif swspd: parser = Argparser(['spd'], [False], args[2]) if parser.parse(): self.wpspd[wpidx] = parser.arglist[0] else: return False,'Could not parse "' + args[2] + '" as speed' # Delete a constraint (or both) at this waypoint elif args[1]=="DEL" or args[1]=="DELETE": swalt = args[2].upper()=="ALT" swspd = args[2].upper() in ("SPD","SPEED") both = args[2].upper() in ("ALL","BOTH") if swspd or both: self.wpspd[wpidx] = -999. if swalt or both: self.wpalt[wpidx] = -999. else: return False,"No "+args[1]+" at ",name # If success: update flight plan and guidance self.calcfp() self.direct(idx, self.wpname[self.iactwp]) # Waypoint not found in route else: return False, name + " not found in route " + bs.traf.id[idx] return True
def atwptStack(self, idx, *args): # args: all arguments of addwpt # AT acid, wpinroute [DEL] ALT/SPD spd/alt" # args = wpname,SPD/ALT, spd/alt(string) if len(args) < 1: return False, "AT needs at least an aicraft id and a waypoint name" else: name = args[0] if name in self.wpname: wpidx = self.wpname.index(name) # acid AT wpinroute: show alt & spd constraints at this waypoint # acid AT wpinroute SPD: show spd constraint at this waypoint # acid AT wpinroute ALT: show alt constraint at this waypoint if len(args) == 1 or \ (len(args) == 2 and not args[1].count("/") == 1): txt = name + " : " # Select what to show if len(args) == 1: swalt = True swspd = True else: swalt = args[1].upper() == "ALT" swspd = args[1].upper() in ("SPD", "SPEED") # To be safe show both when we do not know what if not (swalt or swspd): swalt = True swspd = True # Show altitude if swalt: if self.wpalt[wpidx] < 0: txt += "-----" elif self.wpalt[wpidx] > 4500 * ft: fl = int(round((self.wpalt[wpidx] / (100. * ft)))) txt += "FL" + str(fl) else: txt += str(int(round(self.wpalt[wpidx] / ft))) if swspd: txt += "/" # Show speed if swspd: if self.wpspd[wpidx] < 0: txt += "---" else: txt += str(int(round(self.wpspd[wpidx] / kts))) # Type if swalt and swspd: if self.wptype[wpidx] == Route.orig: txt += "[orig]" elif self.wptype[wpidx] == Route.dest: txt += "[dest]" return True, txt elif args[1].count("/") == 1: # acid AT wpinroute alt"/"spd success = True # Use parse from stack.py to interpret alt & speed alttxt, spdtxt = args[1].split('/') # Edit waypoint altitude constraint if alttxt.count('-') > 1: # "----" = delete self.wpalt[wpidx] = -999. else: parser = Argparser(['alt'], [False], alttxt) if parser.parse(): self.wpalt[wpidx] = parser.arglist[0] else: success = False # Edit waypoint speed constraint if spdtxt.count('-') > 1: # "----" = delete self.wpspd[wpidx] = -999. else: parser = Argparser(['spd'], [False], spdtxt) if parser.parse(): self.wpspd[wpidx] = parser.arglist[0] else: success = False if not success: return False, "Could not parse " + args[ 1] + " as alt / spd" # If success: update flight plan and guidance self.calcfp() self.direct(idx, self.wpname[self.iactwp]) #acid AT wpinroute ALT/SPD alt/spd elif len(args) == 3: swalt = args[1].upper() == "ALT" swspd = args[1].upper() in ("SPD", "SPEED") # Use parse from stack.py to interpret alt & speed # Edit waypoint altitude constraint if swalt: parser = Argparser(['alt'], [False], args[2]) if parser.parse(): self.wpalt[wpidx] = parser.arglist[0] else: return False, 'Could not parse "' + args[ 2] + '" as altitude' # Edit waypoint speed constraint elif swspd: parser = Argparser(['spd'], [False], args[2]) if parser.parse(): self.wpspd[wpidx] = parser.arglist[0] else: return False, 'Could not parse "' + args[ 2] + '" as speed' # Delete a constraint (or both) at this waypoint elif args[1] == "DEL" or args[1] == "DELETE": swalt = args[2].upper() == "ALT" swspd = args[2].upper() in ("SPD", "SPEED") both = args[2].upper() in ("ALL", "BOTH") if swspd or both: self.wpspd[wpidx] = -999. if swalt or both: self.wpalt[wpidx] = -999. else: return False, "No " + args[1] + " at ", name # If success: update flight plan and guidance self.calcfp() self.direct(idx, self.wpname[self.iactwp]) # Waypoint not found in route else: return False, name + " not found in route " + bs.traf.id[idx] return True
def atwptStack(self, idx, *args): # args: all arguments of addwpt # AT acid, wpinroute [DEL] ALT/SPD spd/alt" # args = wpname,SPD/ALT, spd/alt(string) if len(args) < 1: return False, "AT needs at least an aicraft id and a waypoint name" else: name = args[0] if name in self.wpname: wpidx = self.wpname.index(name) # acid AT wpinroute: show alt & spd constraints at this waypoint # acid AT wpinroute SPD: show spd constraint at this waypoint # acid AT wpinroute ALT: show alt constraint at this waypoint txt = name + " : " if len(args) == 1 or (len(args) == 2 and not args[1].count("/") == 1): txt = name + " : " # Select what to show if len(args) == 1: swalt = True swspd = True else: swalt = args[1].upper() == "ALT" swspd = args[1].upper() in ("SPD", "SPEED") # To be safe show both when we do not know what if not (swalt or swspd): swalt = True swspd = True # Show altitude if swalt: if self.wpalt[wpidx] < 0: txt = txt + "-----" elif self.wpalt[wpidx] > 4500 * ft: FL = int(round((self.wpalt[wpidx] / (100. * ft)))) txt = txt + "FL" + str(FL) else: txt = txt + str(int(round(self.wpalt[wpidx] / ft))) if swspd: txt = txt + "/" # Show speed if swspd: if self.wpspd[wpidx] < 0: txt = txt + "---" else: txt = txt + str(int(round( self.wpspd[wpidx] / kts))) # Type if swalt and swspd: if self.wptype[wpidx] == self.orig: txt = txt + "[orig]" elif self.wptype[wpidx] == self.dest: txt = txt + "[dest]" return True, txt elif args[1].count("/") == 1: # acid AT wpinroute alt"/"spd # Use parse from stack.py to interpret alt & speed parser = Argparser() islash = args[1].index("/") swalt = islash > 0 swspd = islash < len( args[1]) - 2 #at keast one char after slash # Edit waypoint altitude constraint if swalt: alttxt = [args[1][:islash]] # Use argument parser from stack to parse speed success = parser.parse("alt", 0, alttxt) # Set new value if success, "---" etc ignored if success and not (parser.result[0] == None): self.wpalt[wpidx] = parser.result[0] else: if len(alttxt[0]) == alttxt[0].count( "-"): # "----" = delete self.wpalt[wpidx] = -999. else: swalt = False # Edit waypoint speed constraint if swspd: spdtxt = [args[1][islash + 1:]] # Use argument parser from stack to parse speed success = parser.parse("spd", 0, spdtxt) # Set new value if success, "---" etc ignored if success and not (parser.result[0] == None): self.wpspd[wpidx] = parser.result[0] else: if len(spdtxt[0]) == spdtxt[0].count( "-"): # "----" = delete self.wpspd[wpidx] = -999. else: swspd = False del parser if (not swspd) and (not swalt): return False, "Could not parse " + args[ 1] + " as alt / spd" # If success: update flight plan and guidance self.calcfp() self.direct(idx, self.wpname[self.iactwp]) #acid AT wpinroute ALT/SPD alt/spd elif len(args) == 3: swalt = args[1].upper() == "ALT" swspd = args[1].upper() in ("SPD", "SPEED") # Use parse from stack.py to interpret alt & speed parser = Argparser() # Edit waypoint altitude constraint if swalt: # Use argument parser from stakc to parse speed success = parser.parse("alt", 2, args) if success: alt = parser.result[0] else: del parser return False, 'Could not parse "' + args[ 2] + '" as altitude' # Set new value self.wpalt[wpidx] = alt # Edit waypoint speed constraint elif swspd: # Use argument parser from stakc to parse speed success = parser.parse("spd", 2, args) if success: spd = parser.result[0] else: del parser return False, 'AT: Could not parse "' + args[ 2] + '" as speed' # Set new value self.wpspd[wpidx] = spd # Delete a constraint (or both) at this waypoint elif args[1] == "DEL" or args[1] == "DELETE": swalt = args[2].upper() == "ALT" swspd = args[2].upper() in ("SPD", "SPEED") both = args[2].upper() in ("ALL", "BOTH") if swspd or both: self.wpspd[wpidx] = -999. if swalt or both: self.wpalt[wpidx] = -999. else: del parser return False, "No " + args[1] + " at ", name # If success: update flight plan and guidance self.calcfp() self.direct(idx, self.wpname[self.iactwp]) del parser # Waypoint not found in route else: return False, name + " not found in route " + bs.traf.id[idx] return True