public ResultDiagram(OutputData outputData, int sizeX, int sizeY)
		{
			_data = outputData.Data;
			_sizeX = sizeX;
			_sizeY = sizeY;
			Drawing();
		}
		public ProjectionIndicatorHelperDiagram(OutputData outputData, double radius, GraphSize diapason, double sc)
		{
			_data = outputData.Data;
			_radius = radius;
			_diapason = diapason;
			_sc = sc;
			Drawing();
		}
		public IndicatorDiagram(OutputData outputData, ref List<double> mainCurve)
		{
			_data = outputData.Data;
			Drawing();
			var indProjDiagram = new ProjectionIndicatorDiagram(outputData, _sizeX, _sizeY, _mainCurve1X, _mainCurve1Y, _mainCurve2X, _mainCurve2Y, _p0, _sc, ref mainCurve);
			if (mainCurve == null)
			{
				var indHelpDiagram = new ProjectionIndicatorHelperDiagram(outputData, _radius, Graph.Opt.Diapason, _sc);
				var resDiagram = new ResultDiagram(outputData, _sizeX, _sizeY);
				new ToA1(new List<Graph> { Graph, indProjDiagram.Graph, indHelpDiagram.Graph, resDiagram.Graph }, _p0, (byte)App.CurrentEngineType);
				GC.Collect();
				GC.WaitForFullGCComplete();
			}
		}
		public void DrawEspeciallyOutputData(OutputData inputData)
		{
			var i = 1;
			foreach (var metaData in inputData.Data)
			{
				var textBox = InputData.GetElements<TextBox>(InputDataGrid, i, 1).Count == 0 ? null : InputData.GetElements<TextBox>(InputDataGrid, i, 1)[0];
				if (textBox != null && textBox.Name == metaData.Key)
				{
					textBox.Text = Math.Round(metaData.Value.Val, 3).ToString(CultureInfo.InstalledUICulture);
					i++;
				}
				else
					if (textBox == null)
						i++;
			}
		}
		public ProjectionIndicatorDiagram(OutputData outputData, int sizeX, int sizeY, List<double> x1, List<double> y1, List<double> x2, List<double> y2, double p0, double sc, ref List<double> mainCurve)
		{
			_data = outputData.Data;
			_sizeX = sizeX;
			_sizeY = sizeY;
			_mainCurve1X = x1;
			_mainCurve2X = x2;
			_mainCurve1Y = y1;
			_mainCurve2Y = y2;
			_p0 = p0;
			_sc = sc;
			Drawing();
			if (mainCurve == null)
			{
				PSumCurve();//Shit
			}
			else
				Interpolation(ref mainCurve);
		}
		private void DynamicResultTable(ref Table table, OutputData outputData)
		{
			var mainRow = new TableRow();
			var subTable = new Table { CellSpacing = 0, BorderThickness = new Thickness(2), BorderBrush = Brushes.Gray };
			var rowGroup = new TableRowGroup();
			var titleRow = new TableRow();
			var subTitleRow = new TableRow();
			titleRow.Cells.Add(new TableCell(new Paragraph(new Run("Підсумкова таблиця") { FontWeight = FontWeights.Bold, Foreground = Brushes.Gray }) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { ColumnSpan = 11, Background = Brushes.AliceBlue });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("φ°")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray, Background = Brushes.AliceBlue });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("cosφ+λcos2φ")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("Pr, мм")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray, Background = Brushes.AliceBlue });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("Pj, мм")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("PΣ, мм")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray, Background = Brushes.AliceBlue });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("tgβ")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("N")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray, Background = Brushes.AliceBlue });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("cos(φ+β)/cosβ")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("K")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray, Background = Brushes.AliceBlue });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("sin(φ+β)/cosβ")) { Margin = new Thickness(10) }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("T")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray, Background = Brushes.AliceBlue });

			rowGroup.Rows.Add(titleRow);
			rowGroup.Rows.Add(subTitleRow);
			var iModification = 0;
			for (var i = 0; i < 27; i++)
			{
				var dataRow = new TableRow();
				if (i % 2 == 0)
					dataRow.Background = Brushes.AliceBlue;
				var angle = (i - iModification) * 30;
				var calcTagVal = angle % 360 < 180
					? outputData.ValsTan[outputData.InputData.Data["RatioRadiusCrankToRod"].Val][angle % 180 / 30]
					: -outputData.ValsTan[outputData.InputData.Data["RatioRadiusCrankToRod"].Val][angle % 180 / 30];
				var calcCosPerCos = outputData.ValCosPerCos[outputData.InputData.Data["RatioRadiusCrankToRod"].Val][angle % 360 / 30];
				var calcSinPerCos = outputData.ValSinPerCos[outputData.InputData.Data["RatioRadiusCrankToRod"].Val][angle % 360 / 30];
				if (i != 13 && i != 20)
				{
					dataRow.Cells.Add(new TableCell(new Paragraph(new Run(((i - iModification) * 30).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
					dataRow.Cells.Add(new TableCell(new Paragraph(new Run(
						Math.Round(Math.Cos(Graph.DegreeToRadian(angle)) + outputData.InputData.Data["RatioRadiusCrankToRod"].Val * Math.Cos(Graph.DegreeToRadian(angle * 2)), 3)
						.ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
				}
				else if (i == 13)
				{
					dataRow.Cells.Add(new TableCell(new Paragraph(new Run(((i - 1) * 30 + "Max").ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
					dataRow.Cells.Add(new TableCell(new Paragraph(new Run(
						Math.Round(Math.Cos(Graph.DegreeToRadian((i - 1) * 30)) + outputData.InputData.Data["RatioRadiusCrankToRod"].Val * Math.Cos(Graph.DegreeToRadian((i - 1) * 30 * 2)), 3)
						.ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
					iModification++;
					calcTagVal = 0;
					calcCosPerCos = 1;
					calcSinPerCos = 0;
				}
				else
				{
					dataRow.Cells.Add(new TableCell(new Paragraph(new Run(((i - 2) * 30 + "Min").ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
					dataRow.Cells.Add(new TableCell(new Paragraph(new Run(
						Math.Round(Math.Cos(Graph.DegreeToRadian((i - 2) * 30)) + outputData.InputData.Data["RatioRadiusCrankToRod"].Val * Math.Cos(Graph.DegreeToRadian((i - 2) * 30 * 2)), 3)
						.ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
					iModification++;
					calcTagVal = 0;
					calcCosPerCos = -1;
					calcSinPerCos = 0;
				}
				dataRow.Cells.Add(new TableCell(new Paragraph(new Run(Math.Round(outputData.Data["MainCurve" + i].Val, 3).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
				dataRow.Cells.Add(new TableCell(new Paragraph(new Run(Math.Round(outputData.Data["OrdinatesSpecificSummaryForces" + i].Val - outputData.Data["MainCurve" + i].Val).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
				dataRow.Cells.Add(new TableCell(new Paragraph(new Run(Math.Round(outputData.Data["OrdinatesSpecificSummaryForces" + i].Val, 3).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
				dataRow.Cells.Add(new TableCell(new Paragraph(new Run(calcTagVal.ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
				dataRow.Cells.Add(new TableCell(new Paragraph(new Run(Math.Round(outputData.Data["LateralForce" + i].Val, 3).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
				dataRow.Cells.Add(new TableCell(new Paragraph(new Run(calcCosPerCos.ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
				dataRow.Cells.Add(new TableCell(new Paragraph(new Run(Math.Round(outputData.Data["ForceK" + i].Val, 3).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
				dataRow.Cells.Add(new TableCell(new Paragraph(new Run(calcSinPerCos.ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
				dataRow.Cells.Add(new TableCell(new Paragraph(new Run(Math.Round(outputData.Data["ForceT" + i].Val, 3).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
				rowGroup.Rows.Add(dataRow);
			}
			subTable.RowGroups.Add(rowGroup);
			mainRow.Cells.Add(new TableCell(subTable) { ColumnSpan = 6, BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1) });
			table.RowGroups[table.RowGroups.Count - 1].Rows.Add(mainRow);
		}
		private void DynamicOrdinatesSpecificSummaryForces(ref Table table, OutputData outputData)
		{
			var mainRow = new TableRow();
			var subTable = new Table { CellSpacing = 0, BorderThickness = new Thickness(2), BorderBrush = Brushes.Gray };
			var rowGroup = new TableRowGroup();
			var titleRow = new TableRow();
			var subTitleRow = new TableRow();
			titleRow.Cells.Add(new TableCell(new Paragraph(new Run("Визначення ординат питомих підсумкових сил") { FontWeight = FontWeights.Bold, Foreground = Brushes.Gray }) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { ColumnSpan = 4, Background = Brushes.AliceBlue });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("φ°")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray, Background = Brushes.AliceBlue });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("Pr, мм")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("Pj, мм")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray, Background = Brushes.AliceBlue });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("PΣ, мм")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray });

			rowGroup.Rows.Add(titleRow);
			rowGroup.Rows.Add(subTitleRow);
			var iModification = 0;
			for (var i = 0; i < 27; i++)
			{
				var dataRow = new TableRow();
				if (i % 2 == 0)
					dataRow.Background = Brushes.AliceBlue;
				if (i != 13 && i != 20)
					dataRow.Cells.Add(new TableCell(new Paragraph(new Run(((i - iModification) * 30).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
				else if (i == 13)
				{
					dataRow.Cells.Add(new TableCell(new Paragraph(new Run(((i - 1) * 30 + "Max").ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
					iModification++;
				}
				else
				{
					dataRow.Cells.Add(new TableCell(new Paragraph(new Run(((i - 2) * 30 + "Min").ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
					iModification++;
				}
				dataRow.Cells.Add(new TableCell(new Paragraph(new Run(Math.Round(outputData.Data["MainCurve" + i].Val, 3).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
				dataRow.Cells.Add(new TableCell(new Paragraph(new Run(Math.Round(outputData.Data["OrdinatesSpecificSummaryForces" + i].Val - outputData.Data["MainCurve" + i].Val).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
				dataRow.Cells.Add(new TableCell(new Paragraph(new Run(Math.Round(outputData.Data["OrdinatesSpecificSummaryForces" + i].Val, 3).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
				rowGroup.Rows.Add(dataRow);
			}
			subTable.RowGroups.Add(rowGroup);
			mainRow.Cells.Add(new TableCell(subTable) { ColumnSpan = 6, BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1) });
			table.RowGroups[table.RowGroups.Count - 1].Rows.Add(mainRow);
		}
		private void DynamicSpecificOrdinatesInertialForces(ref Table table, OutputData outputData)
		{
			var mainRow = new TableRow();
			var subTable = new Table { CellSpacing = 0, BorderThickness = new Thickness(2), BorderBrush = Brushes.Gray };
			var rowGroup = new TableRowGroup();
			var titleRow = new TableRow();
			var subTitleRow = new TableRow();
			titleRow.Cells.Add(new TableCell(new Paragraph(new Run("Визначення ординат питомих сил інерції") { FontWeight = FontWeights.Bold, Foreground = Brushes.Gray }) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { ColumnSpan = 7, Background = Brushes.AliceBlue });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("φ°")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray, Background = Brushes.AliceBlue });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("mj, кг/м^2")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("ω^2, c^-1")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray, Background = Brushes.AliceBlue });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("r・10^-6, м")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("cosφ + λcos2φ")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray, Background = Brushes.AliceBlue });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("Pj, H/м^2")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("Pj, мм")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray, Background = Brushes.AliceBlue });

			rowGroup.Rows.Add(titleRow);
			rowGroup.Rows.Add(subTitleRow);
			for (var i = 0; i <= 180; i += 30)
			{
				var dataRow = new TableRow();
				if (i / 30 % 2 == 0)
					dataRow.Background = Brushes.AliceBlue;
				dataRow.Cells.Add(new TableCell(new Paragraph(new Run(i.ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
				var radiusOfCrank = outputData.Data["RadiusOfCrank"].Val * outputData.Data["ConstructiveMassRotatingMotion"].Val *
				 Math.Pow(outputData.Data["AngularVelocityCrankshaft"].Val, 2) * 0.000000001 * -1;
				if (i / 30 == 3)
				{
					dataRow.Cells.Add(new TableCell(new Paragraph(new Run(Math.Round(-outputData.Data["ConstructiveMassRotatingMotion"].Val, 3).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { Background = Brushes.White, BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
					dataRow.Cells.Add(new TableCell(new Paragraph(new Run(Math.Round(Math.Pow(outputData.Data["AngularVelocityCrankshaft"].Val, 2), 3).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { Background = Brushes.White, BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
					dataRow.Cells.Add(new TableCell(new Paragraph(new Run(Math.Round((radiusOfCrank), 3).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { Background = Brushes.White, BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
				}
				else
					//Magic
					for (var j = 0; j < 3; j++)
						dataRow.Cells.Add(new TableCell(new Paragraph()) { Background = Brushes.White, BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
				var cosPlusCos = outputData.ValsCosPlusCos[outputData.InputData.Data["RatioRadiusCrankToRod"].Val][i / 30];
				dataRow.Cells.Add(new TableCell(new Paragraph(new Run(cosPlusCos.ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
				dataRow.Cells.Add(new TableCell(new Paragraph(new Run(Math.Round(cosPlusCos * radiusOfCrank, 3).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
				dataRow.Cells.Add(new TableCell(new Paragraph(new Run(Math.Round(outputData.Data["InertiaEngineParts" + i].Val).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 0, 1, 0) });
				rowGroup.Rows.Add(dataRow);
			}
			subTable.RowGroups.Add(rowGroup);
			mainRow.Cells.Add(new TableCell(subTable) { ColumnSpan = 6, BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1) });
			table.RowGroups[table.RowGroups.Count - 1].Rows.Add(mainRow);
		}
		private void DynamicInputDataRows(ref Table table, OutputData outputData)
		{
			var mainRow = new TableRow();
			var subTable = new Table { CellSpacing = 0, BorderThickness = new Thickness(2), BorderBrush = Brushes.Gray };
			var rowGroup = new TableRowGroup();
			var titleRow = new TableRow();
			var subTitleRow = new TableRow();
			var dataRow = new TableRow();
			titleRow.Cells.Add(new TableCell(new Paragraph(new Run("Вхідні дані для динамічного розрахунку") { FontWeight = FontWeights.Bold, Foreground = Brushes.Gray }) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { ColumnSpan = 6, Background = Brushes.AliceBlue });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("S, мм")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center}) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray, Background = Brushes.AliceBlue });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("Po, МПа")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("Pa, МПа")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray, Background = Brushes.AliceBlue });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("Pc, МПа")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("Pz, МПа")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray, Background = Brushes.AliceBlue });
			subTitleRow.Cells.Add(new TableCell(new Paragraph(new Run("Pв, МПа")) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray });
			dataRow.Cells.Add(new TableCell(new Paragraph(new Run(Math.Round(outputData.Data["PistonStroke"].Val, 3).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray, Background = Brushes.AliceBlue });
			dataRow.Cells.Add(new TableCell(new Paragraph(new Run(Math.Round(outputData.Data["ChargeDensity"].Val, 3).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray });
			dataRow.Cells.Add(new TableCell(new Paragraph(new Run(Math.Round(outputData.Data["PressureInlet"].Val, 3).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray, Background = Brushes.AliceBlue });
			dataRow.Cells.Add(new TableCell(new Paragraph(new Run(Math.Round(outputData.Data["PressureCompression"].Val, 3).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray });
			dataRow.Cells.Add(new TableCell(new Paragraph(new Run(Math.Round(outputData.Data["MaxPressure"].Val, 3).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray, Background = Brushes.AliceBlue });
			dataRow.Cells.Add(new TableCell(new Paragraph(new Run(Math.Round(outputData.Data["PressureExtension"].Val, 3).ToString(CultureInfo.InstalledUICulture))) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { BorderThickness = new Thickness(1), BorderBrush = Brushes.Gray });
			var row = new TableRow();
			row.Cells.Add(new TableCell(new Paragraph(new Run("Хід поршня еквівалентний об'єму камери згоряння, мм") { FontWeight = FontWeights.Bold, Foreground = Brushes.Gray }) { Margin = new Thickness(10), TextAlignment = TextAlignment.Center }) { ColumnSpan = 6, Background = Brushes.AliceBlue });
			rowGroup.Rows.Add(titleRow);
			rowGroup.Rows.Add(subTitleRow);
			rowGroup.Rows.Add(dataRow);
			rowGroup.Rows.Add(row);
			subTable.RowGroups.Add(rowGroup);
			mainRow.Cells.Add(new TableCell(subTable) { ColumnSpan = 6, BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1) });
			table.RowGroups[table.RowGroups.Count - 1].Rows.Add(mainRow);
		}
		private void Window_Loaded(object sender, RoutedEventArgs e)
		{
			_outputData = new OutputData(_inputData);
			InitReporter(_outputData);
		}
		private void BuildGraph_OnClick(object sender, RoutedEventArgs e)
		{
			var inputData = new InputData();
			NewInputData(_thermalPage.InputDataGrid, ref inputData);
			NewInputData(_dynamicPage.InputDataGrid, ref inputData);
			var outputData = new OutputData(inputData);

			var thread = new Thread(BuildGraphAsync);
			thread.SetApartmentState(ApartmentState.STA);
			thread.Start(outputData);
		}