Example #1
0
        void aircraftCombo_Changed(object sender, EventArgs e)
        {
            url = null;
            AircraftInfo ai = aircraftCombo.GetSelectedData() as AircraftInfo;

            if (ai != null)
            {
                AircraftParameters parameters = new AircraftParameters();
                parameters.File = ai.ParFile;
                aircraftText.SetText(parameters.Description);
                if (!string.IsNullOrEmpty(parameters.IconFile))
                {
                    aircraftPicture.TextureFile = string.Concat(ai.Folder, parameters.IconFile);
                    aircraftPicture.IsVisible   = true;
                }
                else
                {
                    aircraftPicture.IsVisible = false;
                }
                checkboxStartOnWater.IsVisible = parameters.HasFloats;
                checkboxStartOnWater.IsChecked = true;
                if (!string.IsNullOrEmpty(parameters.BuyUrl))
                {
                    url = string.Format("http://rcdeskpilot.com/aircraft/{0}", parameters.BuyUrl);
                    buttonBuy.IsVisible = true;
                }
                else
                {
                    buttonBuy.IsVisible = false;
                }
            }

            changed = true;
            //UpdateText();
        }
Example #2
0
        public ModelControl(string filename, bool create)
        {
            reflection = new Reflection();

            heightmap           = new Heightmap(1000);
            heightmap.MinHeight = -5f;
            heightmap.MaxHeight = 5f;

            useAileronForRudder = Convert.ToBoolean(Bonsai.Utils.Settings.GetValue("UseAileronChannel"));

            AircraftParameters parameters = new AircraftParameters();

            if (create)
            {
                parameters.CreateDefault(filename);
            }
            else
            {
                parameters.File = filename;
            }
            if (parameters.Version == 2)
            {
                iFlightModel = new FlightModelWind2();
            }
            else
            {
                iFlightModel = new FlightModelWind();
            }
            iFlightModel.AircraftParameters = parameters;
            iFlightModel.Heightmap          = heightmap;
            iFlightModel.Paused             = true;
            iFlightModel.Initialize();
            airplaneModel          = new AirplaneModel(iFlightModel);
            airplaneModel.Position = new Vector3(0, 0, 0);
        }
Example #3
0
        /// <summary>
        /// Calculates the total forces on the airframe.
        /// </summary>
        /// <param name="elapsedTime"></param>
        private void CalculateForces(float elapsedTime, Vector3 wind)
        {
            if (ApiModel.CalculateForces(elapsedTime, wind))
            {
                return;
            }
            Lift = GetLiftForce(wind);
            Drag = GetDragForce(wind);
            double sideLift             = GetSideLiftForce(wind);
            double sideDrag             = GetSideDragForce(wind);
            double sideGroundResistance = 0;
            double groundResistance     = 0;

            // verified : gravity, liftX, throttle, liftZ
            if (TouchedDown)
            {
                if ((ApiModel.Vx < 10f) && (ApiModel.Vx > 0.01))
                {
                    double realBeta = -Math.Atan2(ApiModel.Vy, ApiModel.Vx);
                    sideGroundResistance = Math.Sin(realBeta) * gravityMass;
                }
                groundResistance = ApiModel.Vx / 10.0;
            }

            ApiModel.Fx = (float)(+sideLift * Math.Sin(ApiModel.Beta)
                                  - sideDrag * Math.Cos(ApiModel.Beta)
                                  - Lift * Math.Sin(ApiModel.Alpha)
                                  - Drag * Math.Cos(ApiModel.Alpha)
                                  + AircraftParameters.MaximumThrust * Throttle * AircraftParameters.GetThrustCoefficient((double)ApiModel.Vx)
                                  - gravityMass * Math.Sin(ApiModel.Pitch)
                                  - groundResistance);
            ApiModel.Fy = (float)(+sideLift * Math.Cos(ApiModel.Beta) + sideDrag * Math.Sin(ApiModel.Beta) + gravityMass * Math.Sin(ApiModel.Roll) * Math.Cos(ApiModel.Pitch) + sideGroundResistance);
            ApiModel.Fz = (float)(-Lift * Math.Cos(ApiModel.Alpha) - Drag * Math.Sin(ApiModel.Alpha) + gravityMass * Math.Cos(ApiModel.Roll) * Math.Cos(ApiModel.Pitch));
        }
 public AircraftParametersForm(AircraftParameters parameters)
 {
     this.parameters = parameters;
     InitializeComponent();
     if (parameters.Version >= 2.0)
     {
         sliderControlSpinFactor.Visible = false;
     }
     UpdateValues();
 }
Example #5
0
        private void UpdateText()
        {
            AircraftInfo ai = aircraftCombo.GetSelectedData() as AircraftInfo;

            if (ai != null)
            {
                AircraftParameters parameters = new AircraftParameters();
                parameters.File = ai.ParFile;
                aircraftText.SetText(parameters.Description);
            }
        }
Example #6
0
 public void Initialize()
 {
     ApiAircraftParameters       = AircraftParameters.CloneToApiParameters( );
     ApiModel.AircraftParameters = ApiAircraftParameters;
     rhoSurface               = _AirDensity * ApiAircraftParameters.WingArea / 2;
     rhoVerticalSurface       = _AirDensity * ApiAircraftParameters.VerticalArea / 2;
     gravityMass              = _Gravity * ApiAircraftParameters.Mass;
     ApiModel.OrientationQuat = Quaternion.RotationYawPitchRoll(0.0f, 0.0f, 0.0f);
     ApiModel.Initialize();
     StartModel();
 }
Example #7
0
        private void StartPlaying()
        {
            if (!string.IsNullOrEmpty(fileName))
            {
                if (playing)
                {
                    StopPlaying();
                }

                file               = File.OpenRead(fileName);
                binaryReader       = new BinaryReader(file);
                aircraftParameters = new AircraftParameters();
                aircraftParameters.ReadParameters(binaryReader.ReadString());
                if (airplaneModel == null)
                {
                    airplaneModel = new AirplaneModel(this);
                }
                playing       = true;
                startTime     = -1;
                relativeTime  = 0;
                previousState = new AirplaneState();
                nextState     = new AirplaneState();
                nextTime      = binaryReader.ReadDouble();
                nextState.Read(binaryReader);
                currentState.Gear  = nextState.Gear;
                currentState.Flaps = nextState.Flaps;
                if (currentState.Gear)
                {
                    Gear = 1.0;
                }
                if (currentState.Flaps)
                {
                    Flaps = 1.0;
                }
                airplaneModel.StartEngine();
            }
        }
Example #8
0
 /// <summary>
 /// Calculates the drag force generated by the fuselage and vertical tail.
 /// </summary>
 /// <returns></returns>
 private double GetSideDragForce()
 {
     return(AircraftParameters.GetSideDragCoefficient(Beta) * (Vx * Vx + Vy * Vy) * rhoVerticalSurface);
 }
Example #9
0
 /// <summary>
 /// Calculates the drag force.
 /// </summary>
 /// <returns></returns>
 private double GetDragForce()
 {
     // F = (1/2)*Dc*V^2*S
     return(AircraftParameters.GetDragCoefficient(Alpha) * (Vx * Vx + Vz * Vz) * rhoSurface);
 }