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; * } * } * } */ }
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); }