Esempio n. 1
0
 /// <summary>
 /// Параллельный перенос 3D объекта.
 /// </summary>
 /// <param name="item">3D объект.</param>
 /// <param name="X">Смещение по оси X.</param>
 /// <param name="Y">Смещение по оси Y.</param>
 /// <param name="Z">Смещение по оси Z.</param>
 static public void Translate(Abstract3DInstance item, double X, double Y, double Z)
 {
     foreach (Point3D point in item.Points)
     {
         point.X += X;
         point.Y += Y;
         point.Z += Z;
     }
 }
Esempio n. 2
0
 /// <summary>
 /// Масштабирования 3D объекта.
 /// </summary>
 /// <param name="item">3D объект.</param>
 /// <param name="scaleFactor">масштабный множитель</param>
 /// <param name="Xc">X координата точки масштабирования.</param>
 /// <param name="Yc">Y координата точки масштабирования.</param>
 /// <param name="Zc">Z координата точки масштабирования.</param>
 static public void Scale(Abstract3DInstance item, double scaleFactor, double Xc, double Yc, double Zc)
 {
     foreach (Point3D point in item.Points)
     {
         point.X = scaleFactor * (point.X - Xc) + Xc;
         point.Y = scaleFactor * (point.Y - Yc) + Yc;
         point.Z = scaleFactor * (point.Z - Zc) + Zc;
     }
 }
Esempio n. 3
0
        void FirstTransformation(Abstract3DInstance instance, double Xc, double Yc)
        {
            if (instance == null)
            {
                return;
            }

            TransformEngine.Scale(instance, 140, 0, 0, 0);
            TransformEngine.Translate(instance, Xc, Yc, 0);

            _scaleFactor = 1;
        }
Esempio n. 4
0
        /// <summary>
        /// Поворот в плоскости YZ.
        /// </summary>
        /// <param name="item">3D объект.</param>
        /// <param name="angle">Угол в радианах.</param>
        /// <param name="Yc">Y координата центра вращения.</param>
        /// <param name="Zc">Z координата центра вращения.</param>
        static public void RotateYZ(Abstract3DInstance item, double angle, double Yc, double Zc)
        {
            double si = Math.Sin(angle);
            double co = Math.Cos(angle);

            foreach (Point3D point in item.Points)
            {
                double y = co * (point.Y - Yc) - si * (point.Z - Zc) + Yc;
                double z = si * (point.Y - Yc) + co * (point.Z - Zc) + Zc;

                point.Y = y;
                point.Z = z;
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Поворот в плоскости XZ.
        /// </summary>
        /// <param name="item">3D объект.</param>
        /// <param name="angle">Угол в радианах.</param>
        /// <param name="Xc">X координата центра вращения.</param>
        /// <param name="Zc">Z координата центра вращения.</param>
        static public void RotateXZ(Abstract3DInstance item, double angle, double Xc, double Zc)
        {
            double si = Math.Sin(angle);
            double co = Math.Cos(angle);

            foreach (Point3D point in item.Points)
            {
                double x = co * (point.X - Xc) - si * (point.Z - Zc) + Xc;
                double z = si * (point.X - Xc) + co * (point.Z - Zc) + Zc;

                point.X = x;
                point.Z = z;
            }
        }
Esempio n. 6
0
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int index = comboBox1.SelectedIndex;

            if (index < 0)
            {
                return;
            }

            _instance3D = Factory3Dinstance.GetInstance(index);
            FirstTransformation(_instance3D, pictureBox1.Width / 2, pictureBox1.Height / 2);
            trackBar1.Value = (trackBar1.Minimum + trackBar1.Maximum) / 2;

            Render();
        }
Esempio n. 7
0
        /// <summary>
        /// Получение 3D объекта по id.
        /// </summary>
        /// <param name="id"></param>
        /// <returns>Экземпляр класса Abstract3DInstance.</returns>
        static public Abstract3DInstance GetInstance(int id)
        {
            Abstract3DInstance instance = null;

            switch (id)
            {
            case 0:
                instance = new Cube();
                break;

            case 1:
                instance = new Tetrahedron();
                break;

            case 2:
                instance = new Octahedron();
                break;
            }

            return(instance);
        }
Esempio n. 8
0
        void Render3DInstance(Abstract3DInstance instance, Graphics g, Point3D centerPerspective, int mode)
        {
            if (instance == null)
            {
                return;
            }

            Pen pen     = new Pen(Color.Black, 3f);
            Pen dashPen = new Pen(Color.Black, 3f)
            {
                DashStyle = System.Drawing.Drawing2D.DashStyle.Dash
            };

            IEnumerable <Edge> edges = checkBox1.Checked ?
                                       instance.Render(new PerspectiveTransform(), centerPerspective) :
                                       instance.Render();

            foreach (Edge e in edges)
            {
                switch (mode)
                {
                case 0:
                    g.DrawLine(pen, e.Point1.ToPointF(), e.Point2.ToPointF());
                    break;

                case 1:
                    if (e.Visible)
                    {
                        g.DrawLine(pen, e.Point1.ToPointF(), e.Point2.ToPointF());
                    }
                    break;

                case 2:
                    g.DrawLine(e.Visible ? pen : dashPen, e.Point1.ToPointF(), e.Point2.ToPointF());
                    break;
                }
            }
        }