/// <summary> /// Метод для загрузки формы /// </summary> private void MainForm_Load(object sender, EventArgs e) { // на весь экран WindowState = FormWindowState.Maximized; // добавление пунктов выбора в настройках optimizerBox.DropDownStyle = ComboBoxStyle.DropDownList; optimizerBox.Items.AddRange(NeuralNetworkParams.OPTIMIZER); metricsBox.Items.AddRange(NeuralNetworkParams.METRICS); lossBox.Items.AddRange(NeuralNetworkParams.LOSSES); // добавление возможности работать со слоями mainPanel.AllowDrop = true; // добавление возможности скролить панель mainPanel.AutoScroll = true; // установление названия нейронной сети в качестве заголовка Text = Save.NNetwork.Name; // добавление слоев на панель foreach (Layer layer in Save.NNetwork.Layers) { AddControl(layer.Component); } // установление параметров string[] paramsN = new string[] { Save.NNetwork.Params["optimizer"], Save.NNetwork.Params["metrics"], Save.NNetwork.Params["loss"] }; optimizerBox.SelectedItem = paramsN[0] == "" ? NeuralNetworkParams.OPTIMIZER[0] : paramsN[0]; metricsBox.SelectedItem = paramsN[1] == "" ? NeuralNetworkParams.METRICS[0] : paramsN[1]; lossBox.SelectedItem = paramsN[2] == "" ? NeuralNetworkParams.LOSSES[0] : paramsN[2]; // отрисовка соединений LayersControls.DrawLines(mainPanel, Save.NNetwork.Connections); }
/// <summary> /// Метод для обработки удаления соединения между слоями /// </summary> private void MainPanel_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { return; } // нахождение соединения, на который нажал пользователь Connection connection = ConnectionLine.IsIntersection(Save.NNetwork.Connections, new Point(e.X, e.Y)); if (connection is null) { return; } DialogResult result = MessageBox.Show("Do you wanna to delete this connection?", "Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes) { // удаление соединения connection.ComponentFirst.Layer.NextLayer = null; Save.NNetwork.Connections.Remove(connection); LayersControls.DrawLines(mainPanel, Save.NNetwork.Connections); BlockTrain(sender, e); } }
/// <summary> /// Метод для добавления нового соединения между двумя слоями /// </summary> /// <param name="selectedLayer2">Вторая компонента, которая участвует в соединении</param> private static void AddConnection(Component selectedLayer2) { // проверка на то, что соединения между слоями еще не было foreach (Connection connection in Save.NNetwork.Connections) { if ((connection.ComponentFirst == selectedLayer && connection.ComponentSecond == selectedLayer2) || (connection.ComponentSecond == selectedLayer && connection.ComponentFirst == selectedLayer2)) { return; } } // добавление соединения Save.NNetwork.Connections.Add(new Connection(selectedLayer, selectedLayer2)); selectedLayer.Layer.NextLayer = selectedLayer2.Layer; // отрисовка соединений после изменения LayersControls.DrawLines(selectedLayer.Parent, Save.NNetwork.Connections); }
/// <summary> /// Метод для обработки нажатия на правую кнопку мыши (удаление слоя) /// </summary> private void LayerPanel_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right && MessageBox.Show("Do you wanna to delete this layer?", "Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { // проверка на то, был ли выбран данный слой if (SelectLayer.IsSelect((Component)sender)) { SelectLayer.ClearSelect(); } // удаление слоя из формы и нейронной сети Save.NNetwork.DeleteLayer(((Component)sender).Layer); mainPanel.Controls.Remove((Component)sender); BlockTrain(sender, e); // отрисовка всех соединений между слоями LayersControls.DrawLines(mainPanel, Save.NNetwork.Connections); } }
/// <summary> /// Метод обработки события сворачивания и других манипуляций с формой /// </summary> private void MainPanel_Paint(object sender, PaintEventArgs e) { // отрисовка соединений LayersControls.DrawLines(mainPanel, Save.NNetwork.Connections); }
/// <summary> /// Метод для обработки изменения положения слоя в пространстве /// </summary> private void LayerPanel_LocationChanged(object sender, EventArgs e) { // отрисовка всех соединений между слоями LayersControls.DrawLines(mainPanel, Save.NNetwork.Connections); }