public void OpenSonicBoomInputData( XmlDocument xmlDoc, out SonicBoomCalculationInputData RocketID, out SonicBoomCalculationInputData VehicleID, out List <WeatherParameters> WeatherParameters) { sonicBoomModel.Open(xmlDoc, out RocketID, out VehicleID, out WeatherParameters); }
public void OpenSonicBoomInputData( string FileName, out SonicBoomCalculationInputData RocketID, out SonicBoomCalculationInputData VehicleID, out List <WeatherParameters> WeatherParameters) { sonicBoomModel.Open(FileName, out RocketID, out VehicleID, out WeatherParameters); }
public void SaveSonicBoomInputData( string FileName, SonicBoomCalculationInputData RocketID, SonicBoomCalculationInputData VehicleID, List <WeatherParameters> WeatherParameters) { sonicBoomModel.Save(FileName, RocketID, VehicleID, WeatherParameters); }
public void Save( string FileName, SonicBoomCalculationInputData RocketID, SonicBoomCalculationInputData VehicleID, List <WeatherParameters> WeatherParameters) // см. метод с аналогичной сигнатурой в IModel { var xmlDoc = new XmlDocument(); var Root = xmlDoc.CreateElement("SonicBoomInputData"); Action <XmlNode, string, double> AddAttribute = (node, name, value) => { var attribute = xmlDoc.CreateAttribute(name); attribute.Value = value.ToString(); node.Attributes.Append(attribute); }; Func <string, SonicBoomBallistics, XmlNode> BallisticsNode = (Name, Ballistics) => { var ballisticsNode = xmlDoc.CreateElement(Name); for (int i = 0; i < Ballistics.Distance.X.Length; i++) { var node = xmlDoc.CreateElement("Moment"); AddAttribute(node, "Time", Ballistics.Height.X[i]); AddAttribute(node, "MachNumber", Ballistics.MachNumber.Y[i]); AddAttribute(node, "Distance", Ballistics.Distance.Y[i]); AddAttribute(node, "Height", Ballistics.Height.Y[i]); ballisticsNode.AppendChild(node); } return(ballisticsNode); }; Func <string, GeometricalParameters, XmlNode> GeometricalParametersNode = (Name, Parameters) => { var flowParametersNode = xmlDoc.CreateElement(Name); AddAttribute(flowParametersNode, "Length", Parameters.Length); AddAttribute(flowParametersNode, "CharacteristicLength", Parameters.CharacteristicLength); AddAttribute(flowParametersNode, "MaximalArea", Parameters.MaximalArea); AddAttribute(flowParametersNode, "CharacteristicArea", Parameters.CharacteristicArea); return(flowParametersNode); }; Func <XmlNode> WeatherParametersNode = () => { var weatherParametersNode = xmlDoc.CreateElement("WeatherParameters"); foreach (var weatherParameters in WeatherParameters) { var WeatherNode = xmlDoc.CreateElement(weatherParameters.Mounth); AddAttribute(WeatherNode, "Humidity", weatherParameters.Humidity); AddAttribute(WeatherNode, "Temperature", weatherParameters.Temperature); weatherParametersNode.AppendChild(WeatherNode); } return(weatherParametersNode); }; Root.AppendChild(BallisticsNode("RocketBallisticsPath", RocketID.Ballistics)); Root.AppendChild(BallisticsNode("VehicleBallisticsPath", VehicleID.Ballistics)); Root.AppendChild(GeometricalParametersNode("RocketGeometricalParameters", RocketID.GeometricalParameters)); Root.AppendChild(GeometricalParametersNode("VehicleGeometricalParameters", VehicleID.GeometricalParameters)); Root.AppendChild(WeatherParametersNode()); xmlDoc.AppendChild(Root); xmlDoc.Save(FileName); }
public void CalculateSonicBoom( SonicBoomCalculationInputData RocketID, SonicBoomCalculationInputData VehicleID, List <WeatherParameters> WeatherParameters, out List <SonicBoomParameters> RocketSonicBoomBoomParameters, out List <SonicBoomParameters> VehicleSonicBoomBoomParameters) { sonicBoomModel.Calculate(RocketID, VehicleID, WeatherParameters, out RocketSonicBoomBoomParameters, out VehicleSonicBoomBoomParameters); }
public void Open( string FileName, out SonicBoomCalculationInputData RocketID, out SonicBoomCalculationInputData VehicleID, out List <WeatherParameters> WeatherParameters) // см. метод с аналогичной сигнатурой в IModel { var xmlDoc = new XmlDocument(); xmlDoc.Load(FileName); Open(xmlDoc, out RocketID, out VehicleID, out WeatherParameters); }
public void Calculate( SonicBoomCalculationInputData RocketID, SonicBoomCalculationInputData VehicleID, List <WeatherParameters> WeatherParameters, out List <SonicBoomParameters> RocketSonicBoomBoomParameters, out List <SonicBoomParameters> VehicleSonicBoomBoomParameters) // см. метод с аналогичной сигнатурой в IModel { List <SonicBoomParameters> _RocketSonicBoomBoomParameters = null; List <SonicBoomParameters> _VehicleSonicBoomBoomParameters = null; int RocketProgress = 0; int VehicleProgress = 0; object Locker = new object(); Action ProgressChanges = () => { lock (Locker) { ProgressChanged(Math.Min(RocketProgress, VehicleProgress)); } }; var RocketTask = new Task(() => _RocketSonicBoomBoomParameters = Calculate( RocketID.Ballistics, RocketID.GeometricalParameters, WeatherParameters, Progress => { RocketProgress = Progress; ProgressChanges(); })); var VehicleTask = new Task(() => _VehicleSonicBoomBoomParameters = Calculate( VehicleID.Ballistics, VehicleID.GeometricalParameters, WeatherParameters, Progress => { VehicleProgress = Progress; ProgressChanges(); })); RocketTask.Start(); VehicleTask.Start(); System.Threading.Tasks.Task.WhenAll(RocketTask, VehicleTask).Wait(); ProgressChanged(100); RocketSonicBoomBoomParameters = _RocketSonicBoomBoomParameters; VehicleSonicBoomBoomParameters = _VehicleSonicBoomBoomParameters; }
public void Open( XmlDocument xmlDoc, out SonicBoomCalculationInputData RocketID, out SonicBoomCalculationInputData VehicleID, out List <WeatherParameters> WeatherParameters) // см. метод с аналогичной сигнатурой в IModel { Func <XmlNode, SonicBoomBallistics> GetBallistics = Node => { List <double> Time = new List <double>(); List <double> Mach = new List <double>(); List <double> Distance = new List <double>(); List <double> Height = new List <double>(); for (int i = 0; i < Node.ChildNodes.Count; i++) { var node = Node.ChildNodes[i]; Time.Add(Convert.ToDouble(node.Attributes["Time"].Value)); Distance.Add(Convert.ToDouble(node.Attributes["Distance"].Value)); Height.Add(Convert.ToDouble(node.Attributes["Height"].Value)); Mach.Add(Convert.ToDouble(node.Attributes["MachNumber"].Value)); } return(new SonicBoomBallistics( new Interpolation(Time.ToArray(), Height.ToArray()), new Interpolation(Time.ToArray(), Distance.ToArray()), new Interpolation(Time.ToArray(), Mach.ToArray()))); }; Func <XmlNode, GeometricalParameters> GetGeometricalParameters = Node => new GeometricalParameters( Convert.ToDouble(Node.Attributes["Length"].Value), Convert.ToDouble(Node.Attributes["CharacteristicLength"].Value), Convert.ToDouble(Node.Attributes["MaximalArea"].Value), Convert.ToDouble(Node.Attributes["CharacteristicArea"].Value)); Func <XmlNode, List <WeatherParameters> > GetWeatherParameters = Node => Node.ChildNodes.Cast <XmlNode>().Select(x => new WeatherParameters( x.Name, Convert.ToDouble(x.Attributes["Humidity"].Value), Convert.ToDouble(x.Attributes["Temperature"].Value))).ToList(); var Root = xmlDoc.ChildNodes[0]; Func <XmlNode, string, XmlNode> FindNode = (Node, ChildNodeName) => Node.ChildNodes.Cast <XmlNode>().FirstOrDefault(x => x.Name == ChildNodeName); RocketID = new SonicBoomCalculationInputData(GetBallistics(FindNode(Root, "RocketBallisticsPath")), GetGeometricalParameters(FindNode(Root, "RocketGeometricalParameters"))); VehicleID = new SonicBoomCalculationInputData(GetBallistics(FindNode(Root, "VehicleBallisticsPath")), GetGeometricalParameters(FindNode(Root, "VehicleGeometricalParameters"))); WeatherParameters = GetWeatherParameters(FindNode(Root, "WeatherParameters")); }
public List <SonicBoomParameters> Calculate( SonicBoomCalculationInputData id, List <WeatherParameters> WeatherParameters) // см. метод с аналогичной сигнатурой в IModel { return(Calculate(id.Ballistics, id.GeometricalParameters, WeatherParameters, ProgressChanged)); }
public List <SonicBoomParameters> CalculateSonicBoom(SonicBoomCalculationInputData id, List <WeatherParameters> WeatherParameters) { return(sonicBoomModel.Calculate(id, WeatherParameters)); }