示例#1
0
        /// <summary>
        /// Відбувається при видаленні рядків на вкладці Лінія
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DataGridViewLine_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
        {
            // видаляємо із словника маркери які були виділені в таблиці
            for (int i = 0; i < dataGridViewLine.SelectedRows.Count; i++)
            {
                int numDel =
                    int.Parse(dataGridViewLine.SelectedRows[i].HeaderCell.Value.ToString());
                markerLine.LineDict.Remove(numDel);
                markerLine.LineBool.Remove(numDel);
            }

            // сортування (перезаписуємо словник для нормального добавляння елементів в кінець)
            markerLine.LineDict = markerLine.LineDict.ToDictionary(x => x.Key, y => y.Value);
            markerLine.LineBool = markerLine.LineBool.ToDictionary(x => x.Key, y => y.Value);

            // змінна яка вказує чи видалився відмічений рядок
            bool temp = false;

            // перевіряємо чи лишилися відмічені, якщо ні то чистимо вкладку Графік і таблиця
            foreach (bool i in markerLine.LineBool.Values)
            {
                temp |= i;
            }

            if (!temp)
            {
                GraphClear();
            }

            // оновлюємо зображення
            PictureBoxLine.Refresh();
        }
示例#2
0
        /// <summary>
        /// Очищення вкладки Лінія
        /// </summary>
        private void LineClear()
        {
            // Забороняємо малювати лінії
            markerLine.Dozvil = false;

            // повертаємося до першого маркера
            markNumLine = true;

            // чистимо список ліній і маркера
            markerLine.LineDict.Clear();
            markerLine.LineBool.Clear();
            markerLine.MarkerList.Clear();

            // чистимо статусний рядок
            ClearStatusDown();

            if (img.imageCorect != null)
            {
                // Міняємо курсор на вид очікування
                this.Cursor = Cursors.AppStarting;

                // Відображаємо картинку
                PictureBoxLine.Image = img.imageCorect;

                // оновлюємо таблицю маркерів
                TableShowLine(markerLine, img.imageCorect, dataGridViewLine);

                // Повертаємо курсор назад
                this.Cursor = Cursors.Default;
            }

            // чистимо графік і таблицю
            GraphClear();

            // оновлення області для відобрадення маркера
            PictureBoxLine.Refresh();
        }
示例#3
0
        /// <summary>
        /// Відбувається коли нажимається кнопка миши
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void PictureBoxLine_MouseDown(object sender, MouseEventArgs e)
        {
            // Керуємо відображенням курсора миші
            MouseForm(PictureBoxLine);

            // ліва кнопка миши
            if ((PictureBoxLine.Cursor == Cursors.Cross) &&
                (e.Button == MouseButtons.Left))
            {
                // проставлення похилої лінії (ctrl)
                // якщо true - то перший маркер, false - другий
                if (markNumLine)
                {
                    // очищення
                    markerLine.MarkerList.Clear();
                    // зберігаємо дані (тимчасового) розташування для першого маркера
                    markerLine.MarkerList.Add(e.Location);
                    // проставлення нихиленої лінії (перша точка)
                    tempLine.Add(e.Location);
                    // змінюємо на доступ до другого маркера
                    markNumLine = false;
                    // змінюємо дозвіл на додавання лінії
                    markDozvilLine = false;
                }
                else
                {
                    // перевірка точок на збіг
                    if (!markerLine.MarkerList[0].Equals(e.Location))
                    {
                        // проставлення нихиленої лінії (друга точка)
                        tempLine.Add(e.Location);
                        // очистка маркера
                        markerLine.MarkerList.Clear();
                        // змінюємо на доступ до першого маркера
                        markNumLine = true;
                        // змінюємо дозвіл на додавання лінії
                        markDozvilLine = true;
                    }
                }

                // дозвіл на відображення маркерів
                markerLine.Dozvil = true;
            }
            else if ((PictureBoxLine.Cursor == Cursors.HSplit) &&
                     (e.Button == MouseButtons.Left))
            {
                // проставлення горизонтальної лінії (shift)
                tempLine.Add(new Point[2]
                {
                    new Point(0, e.Y),
                    new Point(PictureBoxLine.Image.Width - 1, e.Y)
                });
                // очистка маркера
                markerLine.MarkerList.Clear();
                // змінюємо на доступ до першого маркера
                markNumLine = true;
                // змінюємо дозвіл на додавання лінії
                markDozvilLine = true;
            }
            else if ((PictureBoxLine.Cursor == Cursors.VSplit) &&
                     (e.Button == MouseButtons.Left))
            {
                // проставлення вертикальної лінії (alt)
                tempLine.Add(new Point[2]
                {
                    new Point(e.X, 0),
                    new Point(e.X, PictureBoxLine.Image.Height - 1)
                });
                // очистка маркера
                markerLine.MarkerList.Clear();
                // змінюємо на доступ до першого маркера
                markNumLine = true;
                // змінюємо дозвіл на додавання лінії
                markDozvilLine = true;
            }

            // додавання лінії
            if (markDozvilLine)
            {
                // перевірка ліній
                if (markerLine.LineDict.Count > 0)
                {
                    // в пам'яті наявно більше однієї лінії, перевіряємо чи наступна
                    // не збігається координатами із попередніми
                    foreach (PointSort i in markerLine.LineDict.Values)
                    {
                        if (!i.FirstP.Equals(tempLine.FirstP) &&
                            !i.SecondP.Equals(tempLine.SecondP))
                        {
                            // якщо немає подібних то дозволяємо додавати лінію
                            markDozvilLine = true;
                        }
                        else
                        {
                            // якщо хоч одна є, то забороняємо ставити і виходимо із циклу
                            markDozvilLine = false;
                            break;
                        }
                    }

                    // якщо є дозвіл на збереження лінії, то зберігаємо її
                    if (markDozvilLine)
                    {
                        markerLine.LineDict.Add(markerLine.LineDict.Last().Key + 1,
                                                tempLine);
                        markerLine.LineBool.Add(markerLine.LineBool.Last().Key + 1, false);
                        // змінюємо дозвіл на додавання лінії
                        markDozvilLine = false;
                        // виводимо відстань лінії
                        toolStripStatusLabel3.Text = $"Відстань: " + DimentionLine(tempLine.FirstP,
                                                                                   tempLine.SecondP).ToString("F2") + " [пікселів]";
                    }
                }
                else
                {
                    // робоча область чиста, додаємо першу лінію
                    markerLine.LineDict.Add(0, tempLine);
                    markerLine.LineBool.Add(0, false);
                    // змінюємо дозвіл на додавання лінії
                    markDozvilLine = false;
                    // виводимо відстань лінії
                    toolStripStatusLabel3.Text = $"Відстань: " + DimentionLine(tempLine.FirstP,
                                                                               tempLine.SecondP).ToString("F2") + " [пікселів]";
                }

                // дозвіл на відображення маркерів
                markerLine.Dozvil = true;

                // оновлюємо таблицю ліній
                if (img.imageCorect != null)
                {
                    TableShowLine(markerLine, img.imageCorect, dataGridViewLine);
                }
            }

            // оновлення області для відобрадення маркера
            PictureBoxLine.Refresh();

            // збереження координат мишки
            MouseSave(e, splitContainerLine.Panel1.AutoScrollPosition);
        }