//Геометрия public static void DrawScheme(Bitmap SchemePicture) { //Заполнение массива точек ветвления Scheme.Clear(SchemePicture); int TruePointsCount = Points.Count() + 1;//Коичество точек + одна, на которую замыкаются потребители с предпоследней точки ветвления SchemePoints = new Point[TruePointsCount]; int Width = SchemePicture.Width; int Height = SchemePicture.Height; int Pairs = (int)Math.Ceiling((double)SchemePoints.Length / 2); int PairsInterval = 200; //Интервал между парами точек int SchemeLinesOffset = 80; //Отступы от горизонтальной середины int FirstWPos = 0; for (int i = 0; i < Pairs; i++) { int TopPos = (PairsInterval / 2) + (PairsInterval * i) - ((PairsInterval * Pairs) / 2); int BottomPos = -TopPos; // if (i == 0) { FirstWPos = TopPos; //Запоминаем сдвиг первой точки } if (TruePointsCount == Pairs + i + 1) { BottomPos = FirstWPos; //Присваиваем сдвиг к последней точке } // if (TruePointsCount > i) { SchemePoints[i] = new Point(Width / 2 + TopPos, Height / 2 - SchemeLinesOffset); } if (TruePointsCount > Pairs + i) { SchemePoints[Pairs + i] = new Point(Width / 2 + BottomPos, Height / 2 + SchemeLinesOffset); } } /*for (int i = 0; i < SchemePoints.Length; i++) * { * Scheme.DrawPoint(SchemePoints[i], Program.SchemePicture); * }*/ // for (int i = 0; i < SchemePoints.Length - 1; i++) //Рисование того, что между точками { Consumer[][] PointConsumers = Points[i]; //MessageBox.Show(PointConsumers.Length.ToString(), ""); for (int p = 0; p < PointConsumers.Length; p++)//Параллели между точками { GraphPattern[] Patterns = new GraphPattern[PointConsumers[p].Length]; string[] Names = new string[PointConsumers[p].Length]; // for (int l = 0; l < PointConsumers[p].Length; l++)//Перебор линейных потребителей { Patterns[l] = PatternByName(PointConsumers[p][l].Name); Names[l] = PointConsumers[p][l].Name; } DrawConsumers(SchemePoints[i], SchemePoints[i + 1], p, PointConsumers.Length, Patterns, Names, SchemePicture); } } string VoltageSign = ""; GraphPattern SourcePattern; if (Physics.isDirect) { VoltageSign = "+" + Physics.U + " В"; SourcePattern = PatternByName("S"); } else { VoltageSign = "~" + Physics.U + " В"; SourcePattern = PatternByName("L"); } DrawConsumers(SchemePoints[0], SchemePoints[SchemePoints.Length - 1], 0, 0, new GraphPattern[] { SourcePattern }, new string[] { VoltageSign /*"A+"*/ }, SchemePicture); }
public static void CreateEditFields() //Поля создаются с именем, соответствующим имени потребителя { UI.ControlsOf(UI.Controls["ChainPanel"]).Clear(); //Работает /// int InitialParam = 1;//Инкремент для дефолтного заполнения полей int HeightOffset = 5; for (int i = 0; i < Scheme.Points.Count(); i++) //Точки { UI.Append(UI.CreateLabel(new Rect(5, HeightOffset, 0, 0), "Point_" + i, "Участок цепи #" + (i + 1)), UI.Controls["ChainPanel"]); HeightOffset += 30; Consumer[][] SchemePoint = Scheme.Points[i]; for (int line = 0; line < SchemePoint.Length; line++) //Подцепи { for (int j = 0; j < SchemePoint[line].Length; j++) //Потребители { Consumer Con = SchemePoint[line][j]; UI.Append(UI.CreateLabel(new Rect(10, HeightOffset, 50, 30), "Point_" + i + "_" + Con.Name, Con.Name, "SegoeUI", 12), UI.Controls["ChainPanel"]); UI.Append(UI.CreateTextField(new Rect(60, HeightOffset, 150, 30), UI.DefaultAnchor, Con.Name, InitialParam.ToString()), UI.Controls["ChainPanel"]); UI.Append(UI.CreateLabel(new Rect(215, HeightOffset, 50, 30), "Point_" + i + "_" + Con.Name + "_Param", Scheme.UnitByName(Con.Name), "SegoeUI", 12), UI.Controls["ChainPanel"]); HeightOffset += 35; /// InitialParam++;//Инкрементируем } } } }