def setalt(self,cmdargs): if len(cmdargs)==1: alt = txt2alt(cmdargs[0]) self.startaltmin = alt self.startaltmax = alt elif len(cmdargs)>1: alt0,alt1 = txt2alt(cmdargs[0]),txt2alt(cmdargs[1]) self.startaltmin = min(alt0,alt1) self.startaltmax = max(alt0,alt1) else: stack.stack("ECHO "+self.name+" ALT "+str(self.startaltmin)+" "+str(self.startaltmax))
def arguments(numargs, cmdargs): syntaxerror = False # tunables: acalt = float(10000) # default acspd = float(300) # default actype = "B747" # default startdistance = 1 # default ang = float(cmdargs[1]) / 2 if numargs > 2: #process optional arguments for i in range( 2, numargs ): # loop over arguments (TODO: put arguments in np array) if cmdargs[i].upper().startswith("-R"): #radius startdistance = geo.qdrpos(0, 0, 90, float( cmdargs[i][3:]))[2] #input in nm elif cmdargs[i].upper().startswith("-A"): #altitude acalt = txt2alt(cmdargs[i][3:]) * ft elif cmdargs[i].upper().startswith("-S"): #speed acspd = txt2spd(cmdargs[i][3:], acalt) elif cmdargs[i].upper().startswith("-T"): #ac type actype = cmdargs[i][3:].upper() else: syntaxerror = True return syntaxerror, acalt, acspd, actype, startdistance, ang
def arguments(numargs, cmdargs): syntaxerror = False # tunables: acalt = float(10000) # default acspd = float(300) # default actype = "B747" # default startdistance = 1 # default ang = float(cmdargs[1])/2 if numargs>2: #process optional arguments for i in range(2 ,numargs): # loop over arguments (TODO: put arguments in np array) if cmdargs[i].upper().startswith("-R"): #radius startdistance = geo.qdrpos(0,0,90,float(cmdargs[i][3:]))[2] #input in nm elif cmdargs[i].upper().startswith("-A"): #altitude acalt = txt2alt(cmdargs[i][3:])*ft elif cmdargs[i].upper().startswith("-S"): #speed acspd = txt2spd(cmdargs[i][3:],acalt) elif cmdargs[i].upper().startswith("-T"): #ac type actype = cmdargs[i][3:].upper() else: syntaxerror = True return syntaxerror,acalt,acspd,actype,startdistance,ang
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: try: self.wpalt[wpidx] = txt2alt(alttxt) except ValueError as e: success = False # Edit waypoint speed constraint if spdtxt.count('-') > 1: # "----" = delete self.wpspd[wpidx] = -999. else: try: self.wpalt[wpidx] = txt2spd(spdtxt) except ValueError as e: 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: try: self.wpalt[wpidx] = txt2alt(args[2]) except ValueError as e: return False, e.args[0] # Edit waypoint speed constraint elif swspd: try: self.wpspd[wpidx] = txt2spd(args[2]) except ValueError as e: return False, e.args[0] # 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