Пример #1
0
 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();
        }
Пример #3
0
 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();
            }
        }
Пример #5
0
        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);
                }
            }
        }
Пример #7
0
        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();
        }
Пример #8
0
 public void AddPoint_with_relative_coords(GR_Point point)
 {
     point.Id = point_identificator;
     point_identificator++;
     points.Add(point);
 }