Beispiel #1
0
        public void Setup()
        {
            SetXPlaneLocation();
            btnGenerate.Enabled = false;

            cbxOwInboundDefault.Checked       = Settings.OverwriteInbound;
            cbxOverwriteInboundRoutes.Checked = Settings.OverwriteInbound;

            cbxOwOutboundDefault.Checked       = Settings.OverwriteOutbound;
            cbxOverwriteOutboundRoutes.Checked = Settings.OverwriteOutbound;

            cbxOwParkingDefsDefault.Checked = Settings.OverwriteParkingDefs;
            cbxOverwriteParkingDefs.Checked = Settings.OverwriteParkingDefs;

            cbxOwOperationsDefault.Checked        = Settings.OverwriteOperations;
            cbxOverwriteAirportOperations.Checked = Settings.OverwriteOperations;

            cbxGenerateDebugFiles.Checked = Settings.GenerateDebugOutput;

            cbxFixDuplicateParkingNames.Checked = Settings.FixDuplicateParkingNames;

            cbxIntersectionTakeOffs.Checked  = Settings.UseIntersectionTakeOffs;
            txtMaximumIntersectionShift.Text = Settings.MaxIntersectionShift.ToString();

            cbxParkingReference.Items.Clear();
            for (WorldTrafficParkingReference i = WorldTrafficParkingReference.MainWheel; i < WorldTrafficParkingReference.Max; i++)
            {
                cbxParkingReference.Items.Add(ParkingReferenceConverter.ParkingReference(i));
            }

            cbxParkingReference.SelectedIndex = Settings.ParkingReference;

            conversionLayoutPanel.RowCount = 1 + (int)XPlaneAircraftCategory.Max;
            int existing = conversionLayoutPanel.RowStyles.Count;

            for (int i = 0; i < conversionLayoutPanel.RowCount - existing; i++)
            {
                if (i >= existing)
                {
                    conversionLayoutPanel.RowStyles.Add(new RowStyle(SizeType.AutoSize));
                }
                else
                {
                    conversionLayoutPanel.RowStyles[i].SizeType = SizeType.AutoSize;
                }
            }

            conversionLayoutPanel.ColumnCount = 1 + (int)XPlaneAircraftType.Max;
            int width = conversionLayoutPanel.Width / conversionLayoutPanel.ColumnCount;

            existing = conversionLayoutPanel.ColumnStyles.Count;
            for (int i = 0; i < conversionLayoutPanel.ColumnCount; i++)
            {
                if (i >= existing)
                {
                    conversionLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, width));
                }
                else
                {
                    conversionLayoutPanel.ColumnStyles[i].SizeType = SizeType.Absolute;
                    conversionLayoutPanel.ColumnStyles[i].Width    = width;
                }
            }

            /*
             * for (int r = 0; r < 1 + (int)XPlaneAircraftCategory.Max; r++)
             * {
             *  for (int c = 0; c < 1 + (int)XPlaneAircraftType.Max; c++)
             *  {
             *      switch (c)
             *      {
             *          case 0:
             *              {
             *                  Label newLabel = new Label();
             *                  switch (r)
             *                  {
             *                      case 0:
             *                          newLabel.Text = "XP Cat / Type:";
             *                          break;
             *                      default:
             *                          newLabel.Text = $"{(XPlaneAircraftCategory)(r - 1)}";
             *                          break;
             *                  }
             *                  conversionLayoutPanel.Controls.Add(newLabel, c, r);
             *              }
             *              break;
             *
             *          default:
             *              {
             *                  switch (r)
             *                  {
             *                      case 0:
             *                          Label newLabel = new Label();
             *                          newLabel.Text = $"{(XPlaneAircraftType)(c - 1)}";
             *                          conversionLayoutPanel.Controls.Add(newLabel, c, r);
             *                          break;
             *
             *                      default:
             *                          ComboBox cbx = new ComboBox();
             *                          for (WorldTrafficAircraftType wtat = WorldTrafficAircraftType.Fighter; wtat < WorldTrafficAircraftType.Max; wtat++)
             *                          {
             *                              cbx.Items.Add(wtat);
             *                          }
             *                          conversionLayoutPanel.Controls.Add(cbx, c, r);
             *                          break;
             *                  }
             *              }
             *              break;
             *      }
             *  }
             * }
             */
        }
Beispiel #2
0
        public int WriteRoutes(string outputPath, bool kml)
        {
            int count = 0;

            foreach (KeyValuePair <TaxiNode, Dictionary <XPlaneAircraftCategory, ResultRoute> > sizeRoutes in _results)
            {
                for (XPlaneAircraftCategory size = Parking.MaxSize; size >= XPlaneAircraftCategory.A; size--)
                {
                    if (sizeRoutes.Value.ContainsKey(size))
                    {
                        ResultRoute route = sizeRoutes.Value[size];

                        if (route.TargetNode == null)
                        {
                            continue;
                        }

                        if (Parking.MaxSize < route.MinSize)
                        {
                            continue;
                        }

                        XPlaneAircraftCategory validMax = (XPlaneAircraftCategory)Math.Min((int)route.MaxSize, (int)Parking.MaxSize);
                        IEnumerable <WorldTrafficAircraftType> wtTypes = AircraftTypeConverter.WTTypesFromXPlaneLimits(route.MinSize, validMax, Parking.Operation);
                        if (wtTypes.Count() == 0)
                        {
                            Logger.Log($"WARN {Parking.Name} (Max)Cat {Parking.MaxSize} Types: {string.Join(" ", Parking.XpTypes)} does not map to any WT types.");
                        }

                        if (route.AvailableRunwayLength < VortexMath.Feet5000Km)
                        {
                            WorldTrafficAircraftType[] big = { WorldTrafficAircraftType.SuperHeavy, WorldTrafficAircraftType.HeavyJet, WorldTrafficAircraftType.LargeJet, WorldTrafficAircraftType.LargeProp, WorldTrafficAircraftType.LightJet };
                            wtTypes = wtTypes.Except(big);
                        }
                        else if (route.AvailableRunwayLength < VortexMath.Feet6500Km)
                        {
                            WorldTrafficAircraftType[] big = { WorldTrafficAircraftType.SuperHeavy, WorldTrafficAircraftType.HeavyJet };
                            wtTypes = wtTypes.Except(big);
                        }
                        else if (route.AvailableRunwayLength > VortexMath.Feet8000Km)
                        {
                            WorldTrafficAircraftType[] small = { WorldTrafficAircraftType.LightProp, WorldTrafficAircraftType.LightJet, WorldTrafficAircraftType.MediumProp };
                            wtTypes = wtTypes.Except(small);
                        }

                        if (wtTypes.Count() == 0)
                        {
                            continue;
                        }

                        IEnumerable <SteerPoint> steerPoints = BuildSteerPoints(route, sizeRoutes.Key);
                        if (steerPoints.Count() <= Settings.MaxSteerpoints)
                        {
                            string allSizes = string.Join(" ", wtTypes.Select(w => (int)w).OrderBy(w => w));
                            string sizeName = (wtTypes.Count() == 10) ? "all" : allSizes.Replace(" ", "");
                            string fileName = Path.Combine(outputPath, $"{route.Runway.Designator}_to_{Parking.FileNameSafeName}_{route.AvailableRunwayLength * VortexMath.KmToFoot:00000}_{sizeName}");

                            using (RouteWriter sw = RouteWriter.Create(kml ? 0 : 1, fileName, allSizes, -1, -1, route.Runway.Designator, ParkingReferenceConverter.ParkingReference(Settings.ParkingReference)))
                            {
                                count++;

                                foreach (SteerPoint steerPoint in steerPoints)
                                {
                                    sw.Write(steerPoint);
                                }
                            }
                        }
                        else
                        {
                            Logger.Log($"Route from <{route.Runway.Designator}> to {Parking.FileNameSafeName} not written. Too many steerpoints ({steerPoints.Count()} vs {Settings.MaxSteerpoints})");
                        }
                    }
                }
            }
            return(count);
        }