Jump to content
The simFlight Network Forums

Andy B.

Members
  • Posts

    82
  • Joined

  • Last visited

  • Days Won

    3

Everything posted by Andy B.

  1. Hi, Our application needs to build a network of taxiways at the airport where a pilot is currently located. As they taxi, the application needs to keep in mind the following points: * Announce with a screen reader such as NVDA, the current taxiway as the pilot moves onto it. * Keep track of the pilot's movements along the taxiways, then announce the new taxiway in front of them. * Provide directional guidance on the upcoming taxiway such as 'taxiway alpha to the left and right.', or 'taxiway bravo 1 O' clock to the right.'. * Announce to the pilot when they have strayed off of the taxiway such as veering into the grass. * Announce runways as they appear as intersections to the current taxiway in the event the pilot doesn't have RAS professional installed. * Automatically announce the distance in feet to the next intersection when they are 500 feet or less from that intersection. I know the .net library has a taxiways database. However, I am not clear on how to start implementing these features. If anyone has any starter points to try, it would be appreciated. Announcing with speech isn't a problem, as long as I can get the taxiway network built and understand how it works.
  2. You can ignore this post. I figured it out. I forgot to put PMDG777.RefreshData() in our main timer event. Everything works now.
  3. Hi, I have a class called SingleStateToggle that has properties for offset, name (string that is self-assigned), AvaliableStates (0=off, 1=on, etc...), CurrentState (KeyValue pair of byte/string), and a few additional properties. When creating an instance of SingleStateToggle, the offset I assign doesn't change values when trying to find the KeyValue<byte, string> pair for the CurrentState. Here is some code to demonstrate my problem: SingleStateToggle: using FSUIPC; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace tfm.PMDG.PanelObjects { class SingleStateToggle: PanelObject { private Offset<byte> _offset; private PanelObjectType _type = PanelObjectType.SingleState; private Dictionary<byte, string> _availableStates = null; private KeyValuePair<byte, string> _currentState; public Dictionary<byte, string> AvailableStates { get => _availableStates; set => _availableStates = value; } public KeyValuePair<byte, string> CurrentState { // Try to retreive the KeyValue pair that matches offset.value. get { KeyValuePair<byte, string> item = new KeyValuePair<byte, string>(); foreach (KeyValuePair<byte, string> pair in this._availableStates) { if (This._offset.Value == pair.Key) { item = pair; break; } } return item; } // End Get } // End CurrentState. public override PanelObjectType Type => this._type; public Offset<byte> Offset { get => _offset; set => _offset = value; } public override string ToString() { return $"{this.Name}: {this.CurrentState.Value}"; } // End ToString. } // End SingleStateToggle. }// End namespace. In a class for the PMDG 777, I have the following code: using tfm.PMDG; using tfm.PMDG.PanelObjects; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace tfm { static class PMDG777 { public static PanelObject[] PanelControls { get => new PanelObject[] { new SingleStateToggle {Offset = Aircraft.pmdg777.BRAKES_ParkingBrakeLeverOn, Name = "Parking break", Verbosity = AircraftVerbosity.Low, PanelName = "Forward", PanelSection = "CDU", AvailableStates = new Dictionary<byte, string> { { 1, "on" }, { 0, "off" }, }, }, }; } } // End PMDG777 class. } // End namespace. After putting a breakpoint on SingleStateToggle.CurrentState, nothing happens except the foreach loop runs multiple times before dceiding that 0 is always the _offset.Value value. We do have the timer that runs the process method for all the offsets. Do you have any ideas why _offset.Value never changes?
  4. Hi, This will prove very useful. Thanks for the hard work. I will try it out a little later today.
  5. Hi, I would certainly leave those options available. Our current mapping system uses a class to represent a coordinate pare, so the order doesn't really matter. Here is some sample code to demonstrate the GeoDataLocation class: var request = new GetBoundaryRequest() { EntityType = BoundaryEntityType.PopulatedPlace, LevelOfDetail = 3, GetAllPolygons = true, GetEntityMetadata = true, Coordinate = new GeodataLocation(43.7001, -79.4163), }; // End request. var response = await GeodataManager.GetBoundary(request, "api key goes here"); MessageBox.Show(response[0].Name.EntityName + response[0].EntityMetadata.PopulationClass).ToString(); foreach (GeodataPolygon location in response[0].GetPolygons()) { foreach(GeodataLocation point in location.ExteriorRing) { latLongListBox.Items.Add($"{point.Latitude}, {point.Longitude}"); } } }
  6. Hi, The typical representation of a coordinate pair is lat, long as a decimal or double. Keeping it in this format will make things easier. Let me know if there is anything else you need before release.
  7. Hi, I am the one working on this part of the project. To make clear, the lat/long of the plane is the only known constant. I will not know when, or where the points on the outline will appear in relation to the airplane. So, if I am flying heading 0, and want to take a "look" at heading 5, I will not know what points will appear at the given heading. This does solve 90% of our problems. The only thing left to figure out is the names of major bodies of water, given a GPS lat/long pair. At this point, Bing maps doesn't do this.
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use. Guidelines Privacy Policy We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.