public void AddPoint(GR_Point point) { point.Id = point_identificator; point.X -= HorizontalOffset + Camera_HorizontalOffset; point.Y += VerticalOffset + Camera_VerticalOffset; point_identificator++; points.Add(point); }
private void aToolStripMenuItem_Click(object sender, EventArgs e) { GR_Point p = new GR_Point(endPos.X, -endPos.Y, 0f, rnd.Next(8, 8), rnd.Next(2, 2), rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255)); mainScene.AddPoint(p); UpdatePicBox(); UpdateTreeView(); }
public void ApplyTransformation() { double[,] temp_matrix = CalculateTempRotationMatrix(); foreach (GR_Point p in SelectedPoints) { GR_Point p1 = (GR_Point)p.Clone(); p.X = (float)(p1.X * temp_matrix[0, 0] + p1.Y * temp_matrix[1, 0] + p1.Z * temp_matrix[2, 0] + p1.Ok * temp_matrix[3, 0]); p.Y = (float)(p1.X * temp_matrix[0, 1] + p1.Y * temp_matrix[1, 1] + p1.Z * temp_matrix[2, 1] + p1.Ok * temp_matrix[3, 1]); p.Z = (float)(p1.X * temp_matrix[0, 2] + p1.Y * temp_matrix[1, 2] + p1.Z * temp_matrix[2, 2] + p1.Ok * temp_matrix[3, 2]); p.Ok = (float)(p1.X * temp_matrix[0, 3] + p1.Y * temp_matrix[1, 3] + p1.Z * temp_matrix[2, 3] + p1.Ok * temp_matrix[3, 3]); } }
private void UpdatePicBox(bool refresh = true) { main_graphics.Clear(Color.White); mainScene.Draw(main_graphics, compLinesCheckBox.Checked); GR_Point p = mainScene.GetPointsCenter(true); label2.Text = p.X.ToString(); label3.Text = p.Y.ToString(); label4.Text = p.Z.ToString(); if (refresh) { MainPicBox.Refresh(); } }
private float[,] CalculateXYZarrows(double[,] matrix) { if (SelectedPoints.Count == 0) { return(new float[0, 0]); } GR_Point centerPoint = GetPointsCenter(true); float cX = centerPoint.X; float cY = centerPoint.Y; float cZ = centerPoint.Z; float[,] arw = new float[, ] { { cX, cY, cZ, 1 }, { cX + 30, cY, cZ, 1 }, { cX, cY + 30, cZ, 1 }, { cX, cY, cZ + 30, 1 } }; float[,] arw1 = new float[4, 4]; for (int i = 0; i < arw.GetLength(0); i++) { arw1[i, 0] = (float)(arw[i, 0] * matrix[0, 0] + arw[i, 1] * matrix[1, 0] + arw[i, 2] * matrix[2, 0] + arw[i, 3] * matrix[3, 0]); arw1[i, 1] = (float)(arw[i, 0] * matrix[0, 1] + arw[i, 1] * matrix[1, 1] + arw[i, 2] * matrix[2, 1] + arw[i, 3] * matrix[3, 1]); arw1[i, 2] = (float)(arw[i, 0] * matrix[0, 2] + arw[i, 1] * matrix[1, 2] + arw[i, 2] * matrix[2, 2] + arw[i, 3] * matrix[3, 2]); arw1[i, 3] = (float)(arw[i, 0] * matrix[0, 3] + arw[i, 1] * matrix[1, 3] + arw[i, 2] * matrix[2, 3] + arw[i, 3] * matrix[3, 3]); arw1[i, 0] /= arw1[i, 3]; arw1[i, 1] /= arw1[i, 3]; arw1[i, 2] /= arw1[i, 3]; arw1[i, 3] = 1; arw1[i, 0] += Camera_HorizontalOffset + HorizontalOffset; arw1[i, 1] += Camera_VerticalOffset + VerticalOffset; } return(arw1); }
private void createSplineToolStripMenuItem_Click(object sender, EventArgs e) { if (Spline_points.Count < 4) { return; } for (int i = 0; i < Spline_points.Count; i++) { float a0_x = (Spline_points[i % Spline_points.Count].X + 4 * Spline_points[(i + 1) % Spline_points.Count].X + Spline_points[(i + 2) % Spline_points.Count].X) / 6; float a1_x = (-Spline_points[i % Spline_points.Count].X + Spline_points[(i + 2) % Spline_points.Count].X) / 2; float a2_x = (Spline_points[i % Spline_points.Count].X - 2 * Spline_points[(i + 1) % Spline_points.Count].X + Spline_points[(i + 2) % Spline_points.Count].X) / 2; float a3_x = (-Spline_points[i % Spline_points.Count].X + 3 * Spline_points[(i + 1) % Spline_points.Count].X - 3 * Spline_points[(i + 2) % Spline_points.Count].X + Spline_points[(i + 3) % Spline_points.Count].X) / 6; float a0_y = (Spline_points[i % Spline_points.Count].Y + 4 * Spline_points[(i + 1) % Spline_points.Count].Y + Spline_points[(i + 2) % Spline_points.Count].Y) / 6; float a1_y = (-Spline_points[i % Spline_points.Count].Y + Spline_points[(i + 2) % Spline_points.Count].Y) / 2; float a2_y = (Spline_points[i % Spline_points.Count].Y - 2 * Spline_points[(i + 1) % Spline_points.Count].Y + Spline_points[(i + 2) % Spline_points.Count].Y) / 2; float a3_y = (-Spline_points[i % Spline_points.Count].Y + 3 * Spline_points[(i + 1) % Spline_points.Count].Y - 3 * Spline_points[(i + 2) % Spline_points.Count].Y + Spline_points[(i + 3) % Spline_points.Count].Y) / 6; float a0_z = (Spline_points[i % Spline_points.Count].Z + 4 * Spline_points[(i + 1) % Spline_points.Count].Z + Spline_points[(i + 2) % Spline_points.Count].Z) / 6; float a1_z = (-Spline_points[i % Spline_points.Count].Z + Spline_points[(i + 2) % Spline_points.Count].Z) / 2; float a2_z = (Spline_points[i % Spline_points.Count].Z - 2 * Spline_points[(i + 1) % Spline_points.Count].Z + Spline_points[(i + 2) % Spline_points.Count].Z) / 2; float a3_z = (-Spline_points[i % Spline_points.Count].Z + 3 * Spline_points[(i + 1) % Spline_points.Count].Z - 3 * Spline_points[(i + 2) % Spline_points.Count].Z + Spline_points[(i + 3) % Spline_points.Count].Z) / 6; for (float t = 0; t < 1; t += spline_step) { GR_Point p = new GR_Point( ((a3_x * t + a2_x) * t + a1_x) * t + a0_x, ((a3_y * t + a2_y) * t + a1_y) * t + a0_y, ((a3_z * t + a2_z) * t + a1_z) * t + a0_z, 2, Color.Black ); mainScene.AddPoint_with_relative_coords(p); } } }
public void Draw(Graphics gr, bool compLines = false) { Pen pen = new Pen(Color.Black); double[,] matrix = CalculateRotationMatrix(); double[,] temp_matrix = CalculateTempRotationMatrix(); DrawXYZ(gr, matrix); UpdateTemp(); foreach (GR_Point p in temp) { if (p.Selected) { GR_Point p1 = (GR_Point)p.Clone(); p.X = (float)(p1.X * temp_matrix[0, 0] + p1.Y * temp_matrix[1, 0] + p1.Z * temp_matrix[2, 0] + p1.Ok * temp_matrix[3, 0]); p.Y = (float)(p1.X * temp_matrix[0, 1] + p1.Y * temp_matrix[1, 1] + p1.Z * temp_matrix[2, 1] + p1.Ok * temp_matrix[3, 1]); p.Z = (float)(p1.X * temp_matrix[0, 2] + p1.Y * temp_matrix[1, 2] + p1.Z * temp_matrix[2, 2] + p1.Ok * temp_matrix[3, 2]); p.Ok = (float)(p1.X * temp_matrix[0, 3] + p1.Y * temp_matrix[1, 3] + p1.Z * temp_matrix[2, 3] + p1.Ok * temp_matrix[3, 3]); } } foreach (GR_Point p in temp) { GR_Point p1 = (GR_Point)p.Clone(); p.X = (float)(p1.X * matrix[0, 0] + p1.Y * matrix[1, 0] + p1.Z * matrix[2, 0] + p1.Ok * matrix[3, 0]); p.Y = (float)(p1.X * matrix[0, 1] + p1.Y * matrix[1, 1] + p1.Z * matrix[2, 1] + p1.Ok * matrix[3, 1]); p.Z = (float)(p1.X * matrix[0, 2] + p1.Y * matrix[1, 2] + p1.Z * matrix[2, 2] + p1.Ok * matrix[3, 2]); p.Ok = (float)(p1.X * matrix[0, 3] + p1.Y * matrix[1, 3] + p1.Z * matrix[2, 3] + p1.Ok * matrix[3, 3]); p.X /= p.Ok; p.Y /= p.Ok; p.Z /= p.Ok; p.Ok = 1; p.X += Camera_HorizontalOffset + HorizontalOffset; p.Y += Camera_VerticalOffset + VerticalOffset; } if (compLines) { foreach (GR_Line p in lines) { temp.AddRange(ToSimplePointList(p, 50)); } } else { foreach (GR_Line line in lines) { try { gr.DrawLine(new Pen(line.color, line.width), GetPointByUid(line.point1).ToPoint(), GetPointByUid(line.point2).ToPoint()); } catch { } } } temp.Sort(); Pen selectPen = new Pen(Color.Red, 1.5f); selectPen.DashStyle = DashStyle.Dot; foreach (GR_Point_Base p in temp) { p.Draw(gr, selectPen); } DrawXYZarrows(gr, CalculateXYZarrows(matrix)); pen.Dispose(); }
public void AddPoint_with_relative_coords(GR_Point point) { point.Id = point_identificator; point_identificator++; points.Add(point); }