Exemple #1
0
 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))
Exemple #2
0
 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))
Exemple #3
0
    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
Exemple #4
0
    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
Exemple #5
0
    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