Exemple #1
0
 /// <summary>
 /// Вставляет данные о сопротивлении в таблицу.
 /// </summary>
 /// <param name="circuit">Эл. цепь для рассчета.</param>
 /// <param name="freq">Массив частот.</param>
 private void FillCircuitTable(CircuitBase circuit, double[] freq)
 {
     for (int elementIndex = -1; elementIndex < circuit.Count; elementIndex++)
     {
         var circuitRow = new DataGridViewRow();
         circuitRow.CreateCells(circuitGridView);
         var cells = new object[freq.Length + 2];
         if (elementIndex == -1)
         {
             cells[0] = circuit.Name;
             cells[1] = "";
             for (var i = 0; i < freq.Length; i++)
             {
                 cells[i + 2] = circuit.CalculateZ(freq[i]);
             }
             circuitRow.DefaultCellStyle.BackColor = Color.Lavender;
         }
         else
         {
             cells[0] = "";
             cells[1] = circuit[elementIndex].Name;
             for (var i = 0; i < freq.Length; i++)
             {
                 cells[i + 2] = circuit[elementIndex].CalculateZ(freq[i]);
             }
             circuitRow.DefaultCellStyle.BackColor = Color.White;
         }
         circuitRow.SetValues(cells);
         circuitGridView.Rows.Add(circuitRow);
     }
 }
Exemple #2
0
 /// <summary>
 /// Заполняет список элементами.
 /// </summary>
 /// <param name="circuit"></param>
 private void FillList(CircuitBase circuit)
 {
     listBox.Items.Clear();
     foreach (IComponent e in circuit)
     {
         listBox.Items.Add(e.Name);
     }
 }
Exemple #3
0
 public void ShowZ(CircuitBase circuit, double[] freq)
 {
     circuitGridView.Rows.Clear();
     circuitGridView.Columns.Clear();
     BuildStandartRows();
     BuildFreqRows(freq);
     FillCircuitTable(circuit, freq);
 }
Exemple #4
0
        /// <summary>
        /// Создает новый экземпляр формы.
        /// </summary>
        /// <param name="circuit">Эл. цепь для просмотра.</param>
        public CircuitGraphicView(CircuitBase circuit)
        {
            InitializeComponent();

            Image image = circuit.GetImage();

            picture.Width  = image.Width;
            picture.Height = image.Height;
            picture.Image  = image;
        }
Exemple #5
0
 /// <summary>
 /// Метод позволяющий отрисовать(вернуть битмап) эл. цепь.
 /// </summary>
 /// <param name="circuitBase">Электическая цепь.</param>
 /// <returns>Рисунок эл. цепи.</returns>
 public static Bitmap GetImage(this CircuitBase circuitBase)
 {
     if (circuitBase is SerialCircuit serial)
     {
         return(GetCircuitImage(serial));
     }
     if (circuitBase is ParallelCircuit parallel)
     {
         return(GetCircuitImage(parallel));
     }
     return(new Bitmap(0, 0));
 }
Exemple #6
0
 /// <summary>
 /// Вычисляет размер рисунка эл. цепи.
 /// </summary>
 /// <param name="circuitBase">Эл. цепь.</param>
 /// <returns>Размер рисунка эл. цепи.</returns>
 private static Size GetSize(CircuitBase circuitBase)
 {
     if (circuitBase is SerialCircuit serialCircuit)
     {
         return(GetSize(serialCircuit));
     }
     else if (circuitBase is ParallelCircuit parallelCircuit)
     {
         return(GetSize(parallelCircuit));
     }
     return(new Size(1, 1));
 }
        /// <summary>
        ///     Смена выбранной цепи в комбобоксе
        /// </summary>
        private void SelectingCircuitComboBox_SelectedIndexChanged(object sender,
                                                                   EventArgs e)
        {
            if (SelectingCircuitComboBox.SelectedIndex != 6)
            {
                _currentCircuit =
                    TestCircuitsGenerator.GenerateCircuit(SelectingCircuitComboBox
                                                          .SelectedIndex + 1);

                DrawCircuit();

                FillTreeView();
            }
            else
            {
                circuitDrawLayoutPanel.BackgroundImage = null;
            }
        }
        /// <summary>
        ///     Рекурсивная проверка на то можно ли нарисовать цепь
        /// </summary>
        /// <param name="circuit"></param>
        /// <returns></returns>
        private bool IsDrawable(CircuitBase circuit)
        {
            if (circuit.Elements == null)
            {
                MessageBox.Show("Ошибка отрисовки! Соединение с id " +
                                _currentCircuit.Id +
                                " должно хранить в себе минимум два элемента");

                return(false);
            }

            if (circuit.Elements.Count >= 2)
            {
                foreach (var element in circuit.Elements)
                {
                    if (element is CircuitBase circuitBase)
                    {
                        return(IsDrawable(circuitBase));
                    }
                }
            }

            return(true);
        }
        /// <summary>
        ///     Функция для обхода и добавления в TreeView подцепей
        /// </summary>
        /// <param name="newLevel">уровень добавляемой подцепи</param>
        /// <param name="subcircuit">подцепь</param>
        private void FillSubcircuitInTreeView(TreeNodeCollection newLevel,
                                              CircuitBase subcircuit)
        {
            //Если соединение пустое, просто добавить его
            if (subcircuit.Elements == null)
            {
                switch (subcircuit)
                {
                case ParallelCircuit paralelCircuit:
                    newLevel[newLevel.Count - 1].Nodes
                    .Add("[Паралл] (id " +
                         paralelCircuit.Id + ')');

                    break;

                case SerialCircuit serialCircuit:
                    newLevel[newLevel.Count - 1].Nodes
                    .Add("[Послед] (id " +
                         serialCircuit.Id + ')');

                    break;
                }
            }

            //Добавление вместе с элементами
            else
            {
                foreach (var circuitElement in subcircuit.Elements)
                {
                    //Добавление подцепи в дерево
                    if (circuitElement is CircuitBase circuit)
                    {
                        //Если соединение пустое, просто добавить его
                        if (circuit.Elements == null || circuit.Elements.Count == 0)
                        {
                            switch (circuit)
                            {
                            case ParallelCircuit paralelCircuit:
                                newLevel[newLevel.Count - 1].Nodes
                                .Add("[Паралл] (id " +
                                     paralelCircuit.Id + ')');

                                break;

                            case SerialCircuit serialCircuit:
                                newLevel[newLevel.Count - 1].Nodes
                                .Add("[Послед] (id " +
                                     serialCircuit.Id + ')');

                                break;
                            }
                        }
                        else
                        {
                            switch (circuit)
                            {
                            case ParallelCircuit paralelCircuit:
                                newLevel[newLevel.Count - 1].Nodes
                                .Add("[Паралл] (id " +
                                     paralelCircuit.Id + ')');

                                break;

                            case SerialCircuit serialCircuit:
                                newLevel[newLevel.Count - 1].Nodes
                                .Add("[Послед] (id " +
                                     serialCircuit.Id + ')');

                                break;
                            }


                            FillSubcircuitInTreeView(newLevel[newLevel.Count - 1].Nodes,
                                                     circuit);
                        }
                    }

                    //Добавление элемента в дерево
                    else
                    {
                        switch (circuitElement)
                        {
                        case Resistor element:
                            newLevel[newLevel.Count - 1].Nodes
                            .Add("[R] [" + element.Value + "] (" + element.Name +
                                 ')');

                            break;

                        case Inductor element:
                            newLevel[newLevel.Count - 1].Nodes
                            .Add("[I] [" + element.Value + "] (" + element.Name +
                                 ')');

                            break;

                        case Capacitor element:
                            newLevel[newLevel.Count - 1].Nodes
                            .Add("[C] [" + element.Value + "] (" + element.Name +
                                 ')');

                            break;
                        }
                    }
                }
            }
        }