/// <summary> /// обработчик события при завершении создании размера /// </summary> /// <param name="dim">созданный размер</param> private void newDim_DimensionCreated(UI_Dimension dim) { rightStackPanel.Children.Clear(); // удаление юзерконтрола, привязанного к размеру с правой панели creatingDimAtThisMoment = null; // в настоящий момент ничего не создаётся dim.dimensionClicked += new UI_Dimension.dimensionClickedEventHandler(Controller_ClickOnDimension); // подписываемся на событие клика по размеру Vertex v1 = graph.CreateVertex(); Vertex v2 = graph.CreateVertex(); // смотрим, совпадают ли концы размерной линии с имеющимися размерами, если да - создаём нулевую связку размеров foreach (UI_Dimension UI_Dim in listOfDimensions) { if (dim.firstElX == UI_Dim.firstElX) { graph.CreateNul(v1, dicUI_Dim[UI_Dim].firstVertex); } if (dim.firstElX == UI_Dim.secondElX) { graph.CreateNul(v1, dicUI_Dim[UI_Dim].secondVertex); } if (dim.secondElX == UI_Dim.firstElX) { graph.CreateNul(v2, dicUI_Dim[UI_Dim].firstVertex); } if (dim.secondElX == UI_Dim.secondElX) { graph.CreateNul(v2, dicUI_Dim[UI_Dim].secondVertex); } } /*Vertex v1 = null; * Vertex v2 = null; * // смотрим, совпадают ли концы размерной линии с имеющимися размерами, если да - создаём нулевую связку размеров * if (listOfDimensions.Count == 0) * { * v1 = graph.CreateVertex(); * v2 = graph.CreateVertex(); * } * else * { * foreach (UI_Dimension UI_Dim in listOfDimensions) * { * if (dim.firstElX == UI_Dim.firstElX) * v1 = dicUI_Dim[UI_Dim].firstVertex; * else * { * if (dim.firstElX == UI_Dim.secondElX) * v1 = dicUI_Dim[UI_Dim].secondVertex; * else * v1 = graph.CreateVertex(); * } * if (dim.secondElX == UI_Dim.firstElX) * v2 = dicUI_Dim[UI_Dim].firstVertex; * else * { * if (dim.secondElX == UI_Dim.secondElX) * v2 = dicUI_Dim[UI_Dim].secondVertex; * else * v2 = graph.CreateVertex(); * } * } * }*/ // создаём сам размер в модели и список его размерной цепи, если это конструкторский р-р или припуск Dimension dimension = null; switch (dim.tp) { case type.tech: dimension = graph.CreateTechDimension(v1, v2, new Value(dim.nominal, dim.up, dim.down)); break; case type.pripusk: dimension = graph.CreateClosingLink(v1, v2, type.pripusk); break; case type.konstr: dimension = graph.CreateClosingLink(v1, v2, type.konstr); break; } dicDim_L.Add(dimension, new List <Dimension>()); listOfDimensions.Add(dim); dicUI_Dim.Add(dim, dimension); dicDim_UI.Add(dimension, dim); ReBuildAll(); // пересчитываем все замыкающие звенья foreach (UIElement UI in leftStackPanel.Children) // открываем все кнопки на левой панели { UI.IsEnabled = true; } isCreatingDimension = false; // размер больше не создаётся // проверяем на наличие цикла if (dim.tp == type.tech) { if (graph.isCicle) { window.lblStateCicle.Content = "Размерная цепь замкнута!"; } else { window.lblStateCicle.Content = ""; } } }