コード例 #1
0
        // обработчик события при клике на размер
        void Controller_ClickOnDimension(UI_Dimension dim)
        {
            if (!isCreatingDimension)
            {
                UnPickIfChosed();
                dim.Pick();
                pickedDimensionList.Add(dim);
                chosedDimension = dim;
                switch (chosedDimension.tp)
                {
                case type.tech:
                    dim.UC = TUC;
                    TUC.SetUI_TD(dim as UI_TechDimension);
                    break;

                case type.konstr:
                    dim.UC = CUC;
                    CUC.SetUI_CD(dim as UI_ConstrDimension);
                    break;

                case type.pripusk:
                    dim.UC = PUC;
                    PUC.SetUI_PD(dim as UI_PripuskDimension);
                    break;
                }
                rightStackPanel.Children.Add(dim.UC);
                foreach (Dimension d in dicDim_L[dicUI_Dim[dim]])
                {
                    dicDim_UI[d].Pick();
                    pickedDimensionList.Add(dicDim_UI[d]);
                }
            }
        }
コード例 #2
0
        // обработка события нажатия кнопки *Delete* по окну приложения
        void MainWindow_DelPressed()
        {
            if (chosedDimension != null)
            {
                rightStackPanel.Children.Clear();
                chosedDimension.RemoveFromCanv();
                graph.DeleteDimension(dicUI_Dim[chosedDimension]);
                dicDim_L.Remove(dicUI_Dim[chosedDimension]);        // а в ReBuildAll() пересчитываются так же все зависимые размеры
                dicDim_UI.Remove(dicUI_Dim[chosedDimension]);
                dicUI_Dim.Remove(chosedDimension);
                listOfDimensions.Remove(chosedDimension);

                ReBuildAll();                        // пересчитываем все замыкающие звенья
                if (chosedDimension.tp == type.tech) // перепроверяем на наличие цикла
                {
                    if (graph.isCicle)
                    {
                        window.lblStateCicle.Content = "Размерная цепь замкнута!";
                    }
                    else
                    {
                        window.lblStateCicle.Content = "";
                    }
                }
                chosedDimension = null;
                UnPickIfChosed();
            }
        }
コード例 #3
0
 public UI_Dimension_Save(UI_Dimension dim)
 {
     firstElX  = dim.firstElX;
     firstElY  = dim.firstElY;
     secondElX = dim.secondElX;
     secondElY = dim.secondElY;
     mainLineY = dim.mainLine.Y1;
 }
コード例 #4
0
 // отмена выбора размера
 private void UnPickIfChosed()
 {
     foreach (UI_Dimension UId in pickedDimensionList)
     {
         UId.Unpick();
     }
     pickedDimensionList.Clear();
     if (chosedDimension != null)
     {
         rightStackPanel.Children.Clear();
         chosedDimension.Unchoose();
         chosedDimension = null;
     }
 }
コード例 #5
0
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

        /// <summary>
        /// Создание технологического размера
        /// </summary>
        public void NewTechDimension()
        {
            if (!isCreatingDimension)
            {
                foreach (UIElement UI in leftStackPanel.Children)
                {
                    UI.IsEnabled = false;
                }
                isCreatingDimension = true;
                UnPickIfChosed();
                UI_Dimension newDim = new UI_TechDimension(TUC);
                creatingDimAtThisMoment = newDim;
                (newDim as UI_TechDimension).TechDimensionApdatedEvent += new UI_TechDimension.TechDimensionApdatedEventHandler(Controller_TechDimensionApdated);     // подписываемся на событие изменения нового размера
            }
        }
コード例 #6
0
 /// <summary>
 /// Создание конструкторского размера
 /// </summary>
 public void NewConstr()
 {
     if (!isCreatingDimension)
     {
         foreach (UIElement UI in leftStackPanel.Children)
         {
             UI.IsEnabled = false;
         }
         isCreatingDimension = true;
         UnPickIfChosed();
         UI_Dimension newDim = new UI_ConstrDimension(CUC);
         creatingDimAtThisMoment = newDim;
         (newDim as UI_ConstrDimension).ConstrApdatedEvent += new UI_ConstrDimension.ConstrApdatedEventHandler(Controller_ConstrApdated);     // подписываем новый размер на событие изменения
     }
 }
コード例 #7
0
        // размещение размерной линии - окончательный выбор точки размещения - нажатие ЛКМ
        private void canv_MouseLeftButtonDownMainLine(object sender, MouseButtonEventArgs e)
        {
            ArrowsAdjustment();
            waitMainLine       = false;
            firstEllipse.Fill  = Brushes.Black;
            secondEllipse.Fill = Brushes.Black;

            firstEllipse.MouseMove  += new MouseEventHandler(Ellipse_MouseMove);
            secondEllipse.MouseMove += new MouseEventHandler(Ellipse_MouseMove);
            SetUpDownLbls();
            temporaryUI = null;
            lblNominal.MouseLeftButtonDown += new MouseButtonEventHandler(lblNominal_MouseLeftButtonDown); // подписываемся на событие нажатия ЛКМ по метке с номиналом - выбор размера
            lblClickedOtherPodpiska();                                                                     // подписка на событие нажатия ЛКМ по остальным лейблам в наследованых классах
            Unchoose();                                                                                    // отменяем выбор размера
            DimensionCreated(this);                                                                        // вызываем событие: размер создан
        }
コード例 #8
0
 /// <summary>
 /// Обработка события при изменении конструкторского размера пользователем (желаемого пользователем максимума или минимума)
 /// </summary>
 /// <param name="dim"></param>
 void Controller_ConstrApdated(UI_Dimension dim)
 {
     if (dim.lblNominal.Content.ToString() != "?")
     {
         double _max = Double.Parse(dim.lblNominal.Content.ToString()) + Double.Parse(dim.lblUp.Content.ToString());
         double _min = Double.Parse(dim.lblNominal.Content.ToString()) + Double.Parse(dim.lblDown.Content.ToString());
         if (_max > (dim as UI_ConstrDimension).max || _min < (dim as UI_ConstrDimension).min)
         {
             (dim as UI_ConstrDimension).Alarm();
         }
         else
         {
             (dim as UI_ConstrDimension).NotAlarm();
         }
     }
 }
コード例 #9
0
        // создание нового проекта - удаление всего с канваса и обнуление
        void MainWindow_NewProj()
        {
            MainWindow_EscPressed();    // если вдруг в этот момент создаётся размер
            canv.Children.Clear();
            //canv.Children.Add(new Line());
            rightStackPanel.Children.Clear();

            graph = new Graph();
            listOfDimensions.Clear();                  // список всех размеров
            dicUI_Dim.Clear();                         // словарь: визуальный размер -> размер
            dicDim_UI.Clear();                         // словарь: размер -> визуальный размер

            isCreatingDimension = false;
            chosedDimension     = null;
            window.SetSaveEnable(false);
            window.Title = "Автоматический рассчёт размерных цепей";
        }
コード例 #10
0
        // обработка события нажатия кнопки ESC - отмена создания размера
        void MainWindow_EscPressed()
        {
            if (creatingDimAtThisMoment != null)
            {
                rightStackPanel.Children.Clear();
                creatingDimAtThisMoment.OtpiskaWhenCreate();
                creatingDimAtThisMoment.RemoveFromCanv();

                foreach (UIElement UI in leftStackPanel.Children)
                {
                    UI.IsEnabled = true;
                }
                creatingDimAtThisMoment  = null;
                isCreatingDimension      = false;
                UI_Dimension.temporaryUI = null;
            }
        }
コード例 #11
0
        // создаём первую точку размера в момент первого нажатия ЛКМ по канвасу
        protected void canv_MouseLeftButtonDownFirstEllipse(object sender, MouseButtonEventArgs e)
        {
            //MainWindow.testTB.AppendText(Controller.n.ToString()+".1 ");
            firstElX = e.MouseDevice.GetPosition(canv).X;
            firstElY = e.MouseDevice.GetPosition(canv).Y;
            // проверка привязки к существующим размерам
            foreach (UI_Dimension d in listOfDimensions)
            {
                if (Distance(firstElX, firstElY, d.firstElX, d.firstElY) < minDistToSnap)
                {
                    firstElX = d.firstElX;
                    firstElY = d.firstElY;
                    break;
                }
                if (Distance(firstElX, firstElY, d.secondElX, d.secondElY) < minDistToSnap)
                {
                    firstElX = d.secondElX;
                    firstElY = d.secondElY;
                    break;
                }
            }
            Canvas.SetTop(firstEllipse, firstElY - radius);
            Canvas.SetLeft(firstEllipse, firstElX - radius);
            canv.Children.Add(firstEllipse);
            canv.Children.Add(secondEllipse);
            canv.Children.Add(mainLine);
            canv.Children.Add(firstLine);
            canv.Children.Add(secondLine);
            canv.Children.Add(firstArrowUp);
            canv.Children.Add(firstArrowDown);
            canv.Children.Add(secondArrowUp);
            canv.Children.Add(secondArrowDown);

            canv.Children.Add(lblNominal);
            canv.Children.Add(lblUp);
            canv.Children.Add(lblDown);

            temporaryUI = this;

            canv.MouseMove           += MouseMoveSecondEllipse;
            canv.MouseLeftButtonDown += MouseLeftButtonDownSecondEllipse;
            canv.MouseLeftButtonDown -= MouseLeftButtonDownFirstEllipse;
        }
コード例 #12
0
        void MainWindow_OpenSaved()
        {
            OpenFileDialog OFD = new OpenFileDialog();

            OFD.Filter = "*.dch|*.dch";
            OFD.ShowDialog();
            fileName = OFD.FileName;
            if (fileName == "")
            {
                MessageBox.Show("Файл не выбран!");
                return;
            }

            try
            {
                FileStream      fs   = new FileStream(fileName, FileMode.Open);
                BinaryFormatter bf   = new BinaryFormatter();
                Save            save = (Save)bf.Deserialize(fs);
                fs.Close();
                MainWindow_EscPressed();    // если вдруг в этот момент создаётся размер
                window.SetSaveEnable(true);
                window.Title = "Автоматический рассчёт размерных цепей - " + fileName;

                canv.Children.Clear();
                rightStackPanel.Children.Clear();

                this.graph = save.graph;
                listOfDimensions.Clear();                  // список всех размеров
                dicUI_Dim.Clear();                         // словарь: визуальный размер -> размер
                dicDim_UI.Clear();                         // словарь: размер -> визуальный размер

                isCreatingDimension     = false;
                chosedDimension         = null;
                creatingDimAtThisMoment = null;

                foreach (UI_Dimension_Save UIDSaved in save.dic_UISave_Dim.Keys)
                {
                    UI_Dimension newUIDim = null;
                    switch (UIDSaved.typ)
                    {
                    case type.tech:
                        newUIDim = new UI_TechDimension(UIDSaved);
                        (newUIDim as UI_TechDimension).TechDimensionApdatedEvent += new UI_TechDimension.TechDimensionApdatedEventHandler(Controller_TechDimensionApdated);
                        break;

                    case type.pripusk:
                        newUIDim = new UI_PripuskDimension(UIDSaved);
                        (newUIDim as UI_PripuskDimension).PripuskApdatedEvent += new UI_PripuskDimension.PripuskApdatedEventHandler(Controller_PripuskApdated);
                        break;

                    case type.konstr:
                        newUIDim = new UI_ConstrDimension(UIDSaved);
                        (newUIDim as UI_ConstrDimension).ConstrApdatedEvent += new UI_ConstrDimension.ConstrApdatedEventHandler(Controller_ConstrApdated);
                        break;
                    }
                    newUIDim.dimensionClicked += new UI_Dimension.dimensionClickedEventHandler(Controller_ClickOnDimension);
                    newUIDim.lblClickedOtherPodpiska();
                    listOfDimensions.Add(newUIDim);
                    dicUI_Dim.Add(newUIDim, save.dic_UISave_Dim[UIDSaved]);
                    dicDim_UI.Add(save.dic_UISave_Dim[UIDSaved], newUIDim);
                }
                ReBuildAll();
                if (graph.isCicle)
                {
                    window.lblStateCicle.Content = "Размерная цепь замкнута!";
                }
                else
                {
                    window.lblStateCicle.Content = "";
                }
            }
            catch (Exception ex)
            { MessageBox.Show(ex.Message); }
        }
コード例 #13
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 = "";
                }
            }
        }