private bool OpenFile(string Path) { try { using (BinaryReader reader = new BinaryReader(File.Open(Path, FileMode.Open))) { string info = reader.ReadString(); //вводное инфо о файле int countLine = reader.ReadInt32(); //кол-во строк FL.Clear(); //чистим существующий список линий for (int i = 0; i < countLine; i++) { //читаем с файла линии во временную линию FractureLine fl_tmp = new FractureLine(); fl_tmp.Name = reader.ReadString(); info = reader.ReadString(); //инфо о пере для линии float PenWidth = reader.ReadSingle(); //указываем значение пера - толщина, затем цвет Color PenColor = Color.FromArgb(reader.ReadInt32()); fl_tmp.Pero = new Pen(PenColor, PenWidth); info = reader.ReadString(); //метка о начале инфо о точках int countPoint = reader.ReadInt32(); //кол-во точек for (int ti = 0; ti < countPoint; ti++) { //координаты, и добавляем точку int x = reader.ReadInt32(); int y = reader.ReadInt32(); Point p1 = new Point(x, y); fl_tmp.AddPoint(p1); } lbListOfLines.Items.Add(fl_tmp.Name); //добавляем в список линию FL.Add(fl_tmp); //добавляем линию в List } pbMainGrafWin.Image = PaintBitmap(pbMainGrafWin.Width, pbMainGrafWin.Height, FL); //рисуем в PictBoxe reader.Close(); //закрываем файл } return(true); } catch { return(false); } }
private void pbMainGrafWin_MouseMove(object sender, MouseEventArgs e) { //ищем наведение мышкой на какую либо линию и подсвечиваем if (!flAddLine && !flAddPoint && !flMoveLine && !flMovePoint) { for (int i = 0; i < FL.Count; i++) { int ti = FL[i].InsidePoint(new Point(e.X, e.Y)); if (ti >= 0) { tsslFindLine.BackColor = Color.LimeGreen; lbListOfLines.SelectedIndex = i; break; } else { //listBox1.SelectedIndex = -1; tsslFindLine.BackColor = Color.Coral; } } } if (IndActiveFL >= 0) { //работаем с активной фигурой FractureLine FL_tmp = new FractureLine(); //временная линия FL_tmp.Pero = new Pen(Color.Silver, 1); if (e.Button == MouseButtons.Left) { if (flMoveLine) { //двигать линию //созданаем копию из активной линии во временную линию, для визульного отображения будующей позиции линии FL_tmp = FL[IndActiveFL].Clone(); FL_tmp.Pero = new Pen(Color.Silver, 1); //таскаем временную линию за мышью FL_tmp.Move(e.X - PMoveBegin.X, e.Y - PMoveBegin.Y); pbMainGrafWin.Image = PaintBitmap(pbMainGrafWin.Width, pbMainGrafWin.Height, FL); pbMainGrafWin.Image = PaintBitmap((Bitmap)pbMainGrafWin.Image, FL_tmp); //дорисовываем будющее положение переносимой линии } if (flMovePoint) { //перемещаем точку в активной линии if (IndActivePoint == 0) { //обработка перемещения первой точки FL_tmp.AddPoint(new Point(e.X, e.Y)); FL_tmp.AddPoint(FL[IndActiveFL].points[IndActivePoint + 1]); } else if (IndActivePoint > 0 && IndActivePoint < FL[IndActiveFL].points.Count - 1) { //обработка перемещения излома FL_tmp.AddPoint(FL[IndActiveFL].points[IndActivePoint - 1]); FL_tmp.AddPoint(new Point(e.X, e.Y)); FL_tmp.AddPoint(FL[IndActiveFL].points[IndActivePoint + 1]); } else if (IndActivePoint == FL[IndActiveFL].points.Count - 1) { //обработка перемещения последней точки FL_tmp.AddPoint(FL[IndActiveFL].points[IndActivePoint - 1]); FL_tmp.AddPoint(new Point(e.X, e.Y)); } pbMainGrafWin.Image = PaintBitmap(pbMainGrafWin.Width, pbMainGrafWin.Height, FL); //рисуем начальную картину pbMainGrafWin.Image = PaintBitmap((Bitmap)pbMainGrafWin.Image, FL_tmp); //дорисовываем будующие изменения } } if (flAddPoint) { if (FL[IndActiveFL].points.Count > 0) { FL_tmp.Pero = new Pen(Color.Silver, 1); IndActivePoint = FL[IndActiveFL].points.Count - 1; FL_tmp.AddPoint(FL[IndActiveFL].points[IndActivePoint]); FL_tmp.AddPoint(new Point(e.X, e.Y)); pbMainGrafWin.Image = PaintBitmap(pbMainGrafWin.Width, pbMainGrafWin.Height, FL); pbMainGrafWin.Image = PaintBitmap((Bitmap)pbMainGrafWin.Image, FL_tmp); //дорисовываем предполагаемую точку + перенос линии } } } lblCoordPB1.Text = e.X.ToString() + " : " + e.Y.ToString(); //показать координаты мышки в рабочей области }