private void PB_Draw_MouseUp(object sender, MouseEventArgs e) { if (movement == action.Median) { Point3D M = new Point3D((ChosenLine.A.X + ChosenLine.B.X) / 2, (ChosenLine.A.Y + ChosenLine.B.Y) / 2, (ChosenLine.A.Y + ChosenLine.B.Y) / 2); lines.Add(new Line2D(CurrentX, CurrentY, 0, M.X, M.Y, M.Z)); DrawAllLines(); movement = action.NoAction; } else if (movement == action.Height) { //Вычислить Z var A = ChosenLine.equation[0]; var B = ChosenLine.equation[1]; var C = ChosenLine.equation[2]; int Xval = (int)((-A * C - B * A * CurrentY + B * B * CurrentX) / (B * B + A * A)); int Yval = (int)((A * A * CurrentY - A * B * CurrentX - C * B) / (B * B + A * A)); int Zval; if (Math.Abs(ChosenLine.vector[0]) > 0.00001) { Zval = (int)(ChosenLine.A.Z + ChosenLine.vector[2] * ((Xval - ChosenLine.A.X) / ChosenLine.vector[0])); } else { Zval = (int)(ChosenLine.A.Z + ChosenLine.vector[2] * ((Yval - ChosenLine.A.Y) / ChosenLine.vector[1])); } Point3D H = new Point3D(Xval, Yval, Zval); lines.Add(new Line2D(CurrentX, CurrentY, 0, H.X, H.Y, H.Z)); DrawAllLines(); movement = action.NoAction; } if (ModifierKeys != Keys.Control && ChosenGroupOfLines.Count > 0 && CurrentLine != null) { ChosenGroupOfLines.Clear(); DrawAllLines(); btn_Change.Enabled = false; } if (CurrentLine != null && (ChosenLine == null || ModifierKeys == Keys.Control)) { var f = new Font(Font.FontFamily, 8); ChosenLine = CurrentLine; Graphics g = Graphics.FromImage(PB_Draw.Image); // -- // g.DrawString(ChosenLine.Local_A.X + "; " + ChosenLine.Local_A.Y + "; " + ChosenLine.Local_A.Z, f, Brushes.Black, new PointF(ChosenLine.Local_A.X - 3 + maxX / 2, maxY / 2 - ChosenLine.Local_A.Y + 5)); g.DrawString(ChosenLine.Local_B.X + "; " + ChosenLine.Local_B.Y + "; " + ChosenLine.Local_B.Z, f, Brushes.Black, new PointF(ChosenLine.Local_B.X - 3 + maxX / 2, maxY / 2 - ChosenLine.Local_B.Y + 5)); g.DrawString(ChosenLine.UserEq, f, Brushes.Black, new PointF((ChosenLine.Local_B.X + maxX / 2 + ChosenLine.Local_A.X + maxX / 2) / 2, (maxY / 2 - ChosenLine.Local_B.Y + maxY / 2 - ChosenLine.Local_A.Y) / 2)); PB_Draw.Refresh(); tb1_X.Text = ChosenLine.A.X.ToString(); tb1_Y.Text = ChosenLine.A.Y.ToString(); tb1_Z.Text = ChosenLine.A.Z.ToString(); tb2_X.Text = ChosenLine.B.X.ToString(); tb2_Y.Text = ChosenLine.B.Y.ToString(); tb2_Z.Text = ChosenLine.B.Z.ToString(); btn_Change.Enabled = true; } else if (ChosenLine != null)//&&movement==action.NoAction { movement = action.NoAction; ChosenLine = null; } if (ChosenLine != null && ModifierKeys == Keys.Control) { //ChosenGroupOfLines.Add(ChosenLine); Line2D cur = null; for (int i = 0; i < lines.Count; i++) { if (CheckForLine(CurrentX, CurrentY, lines[i])) { cur = lines[i]; break; } } // if (cur!=null && !ChosenGroupOfLines.Contains(cur)) if (cur != null) { ChosenGroupOfLines.Add(cur); Graphics g = Graphics.FromImage(PB_Draw.Image); g.TranslateTransform((float)maxX / 2, (float)maxY / 2); g.ScaleTransform(1, -1); g.DrawLine(new Pen(Color.Red, 1), cur.Local_A.X, cur.Local_A.Y, cur.Local_B.X, cur.Local_B.Y);// -- // PB_Draw.Refresh(); } ChosenLine = cur; } chosenGroup(); if (ChosenLine != null && ChosenGroup != null) { Graphics g = Graphics.FromImage(PB_Draw.Image); g.TranslateTransform((float)maxX / 2, (float)maxY / 2); g.ScaleTransform(1, -1); foreach (Line2D ln2d in ChosenGroup.lines) { g.DrawLine(new Pen(Color.Red, 1), ln2d.Local_A.X, ln2d.Local_A.Y, ln2d.Local_B.X, ln2d.Local_B.Y);// -- // } Refresh(); } if (ChosenLine == null) { btn_Change.Enabled = false; DrawAllLines(); } }
private void PB_Draw_MouseMove(object sender, MouseEventArgs e) { CurrentX = e.X - maxX / 2; CurrentY = maxY / 2 - e.Y; TB_Mouse_Coordinates.Text = "X: " + CurrentX + " Y: " + CurrentY; if (movement == action.NoAction) { if (ChosenLine == null || ModifierKeys == Keys.Control) { Line2D cur = null; for (int i = 0; i < lines.Count; i++) { if (CheckForLine(CurrentX, CurrentY, lines[i])) { cur = lines[i]; break; } } if (CurrentLine != null && (!ChosenGroupOfLines.Contains(CurrentLine)) && !(ModifierKeys == Keys.Control && cur != null && ChosenLine == cur)) { /*Graphics g = Graphics.FromImage(PB_Draw.Image); * g.TranslateTransform((float)maxX / 2, (float)maxY / 2); * g.ScaleTransform(1, -1); * g.DrawLine(new Pen(Color.Black, 1), CurrentLine.A.X, CurrentLine.A.Y, CurrentLine.B.X, CurrentLine.B.Y); * PB_Draw.Refresh();*/ CurrentLine = null; } if (cur != null) { /*Graphics g = Graphics.FromImage(PB_Draw.Image); * g.TranslateTransform((float)maxX / 2, (float)maxY / 2); * g.ScaleTransform(1, -1); * g.DrawLine(new Pen(Color.Red, 1), cur.A.X, cur.A.Y, cur.B.X, cur.B.Y); * PB_Draw.Refresh();*/ CurrentLine = cur; } else { } } } else { switch (movement) { case action.MoveLine: ChosenLine.Move(CurrentX - startPosition.X, CurrentY - startPosition.Y, 0); startPosition.X = CurrentX; startPosition.Y = CurrentY; DrawAllLines(); break; case action.MovePointA: ChosenLine.MoveA(CurrentX - startPosition.X, CurrentY - startPosition.Y, 0); startPosition.X = CurrentX; startPosition.Y = CurrentY; DrawAllLines(); break; case action.MovePointB: ChosenLine.MoveB(CurrentX - startPosition.X, CurrentY - startPosition.Y, 0); startPosition.X = CurrentX; startPosition.Y = CurrentY; DrawAllLines(); break; case action.MoveLines: // -- // foreach (Line2D line2D in ChosenGroup.lines) { line2D.Move(CurrentX - startPosition.X, CurrentY - startPosition.Y, 0); } startPosition.X = CurrentX; startPosition.Y = CurrentY; DrawAllLines(); break; } } }