示例#1
0
        /// <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 = "";
                }
            }
        }