예제 #1
0
        static public double[,] FormOrtoghraphicsMatr(OrtMode m)
        {
            double[,] matr = new double[4, 4]
            {
                { 1, 0, 0, 0 },
                { 0, 1, 0, 0 },
                { 0, 0, 1, 0 },
                { 0, 0, 0, 1 }
            };
            switch (m)
            {
            case OrtMode.XY:
                matr[2, 2] = 0;
                break;

            case OrtMode.XZ:
                matr[1, 1] = 0;
                break;

            case OrtMode.YZ:
                matr[0, 0] = 0;
                break;
            }
            return(matr);
        }
예제 #2
0
        private PointF ToOrtographics(Point3D p, OrtMode om)
        {
            var vector_p     = PointToVector(p);
            var new_vector_p = MatrixMultiplication(vector_p, ortographics_matr);

            return(VectorToPoint(new_vector_p));
        }
예제 #3
0
        static public List <Edge> GetAxis(Point3D center, Mode m, OrtMode om, int c)
        {
            List <Edge> res = new List <Edge>();
            Edge3D      x   = new Edge3D(center, new Point3D(center.X + 200, center.Y, center.Z));
            Edge3D      y   = new Edge3D(center, new Point3D(center.X, center.Y - 200, center.Z));
            Edge3D      z   = new Edge3D(center, new Point3D(center.X, center.Y, center.Z + 200));

            switch (m)
            {
            case Mode.Orthographic:
                res.Add(EdgeToProjection(x, Mode.Orthographic, om));
                res.Add(EdgeToProjection(y, Mode.Orthographic, om));
                res.Add(EdgeToProjection(z, Mode.Orthographic, om));
                break;

            case Mode.Isometric:
                res.Add(EdgeToProjection(x, Mode.Isometric));
                res.Add(EdgeToProjection(y, Mode.Isometric));
                res.Add(EdgeToProjection(z, Mode.Isometric));
                break;

            case Mode.Perspective:
                res.Add(EdgeToProjection(x, Mode.Perspective, OrtMode.XY, 1600));
                res.Add(EdgeToProjection(y, Mode.Perspective, OrtMode.XY, 1600));
                res.Add(EdgeToProjection(z, Mode.Perspective, OrtMode.XY, 1600));
                break;
            }
            return(res);
        }
예제 #4
0
 public Projector(int c, OrtMode om = OrtMode.XY)
 {
     z_length = c;
     ort_mode = om;
     FormOrtoghraphicsMatr(ort_mode);
     FormIsometricMatr();
     FormPerspectiveMatr(z_length);
 }
예제 #5
0
        static public List <Edge> ToOrtographics(Polyhedron ph, OrtMode plain)
        {
            List <Edge> edges    = new List <Edge>();
            var         edges_3d = ph.PreparePrint();
            var         ort_matr = FormOrtoghraphicsMatr(plain);

            foreach (var edge in edges_3d)
            {
                var new_start = MatrixMultiplication(PointToVector(edge.start), ort_matr);
                var new_end   = MatrixMultiplication(PointToVector(edge.end), ort_matr);
                edges.Add(new Edge(VectorToPoint(new_start), VectorToPoint(new_end)));
            }
            return(edges);
        }
예제 #6
0
 private void Ortyz_CheckedChanged(object sender, EventArgs e)
 {
     if (Ortyz.Checked)
     {
         Ortxz.Checked      = false;
         Ortxy.Checked      = false;
         cur_ort_mode       = OrtMode.YZ;
         ort_button.Enabled = true;
         Draw();
     }
     else
     {
         OrtButtonAvailability();
     }
 }
예제 #7
0
        static public Edge EdgeToProjection(Edge3D e, Mode m, OrtMode om = OrtMode.XY, int c = 0)
        {
            double[,] matr = new double[4, 4];
            switch (m)
            {
            case Mode.Orthographic:
                matr = FormOrtoghraphicsMatr(om);
                break;

            case Mode.Isometric:
                matr = FormIsometricMatr();
                break;

            case Mode.Perspective:
                matr = FormPerspectiveMatr(c);
                break;
            }
            var new_start = VectorToPoint(MatrixMultiplication(PointToVector(e.start), matr));
            var new_end   = VectorToPoint(MatrixMultiplication(PointToVector(e.end), matr));

            return(new Edge(new_start, new_end));
        }
예제 #8
0
        private void FormOrtoghraphicsMatr(OrtMode m)
        {
            ortographics_matr = new double[4, 4]
            {
                { 1, 0, 0, 0 },
                { 0, 1, 0, 0 },
                { 0, 0, 1, 0 },
                { 0, 0, 0, 1 }
            };
            switch (m)
            {
            case OrtMode.XY:
                ortographics_matr[2, 2] = 0;
                break;

            case OrtMode.XZ:
                ortographics_matr[1, 1] = 0;
                break;

            case OrtMode.YZ:
                ortographics_matr[0, 0] = 0;
                break;
            }
        }
예제 #9
0
 public void Update(OrtMode om)
 {
     ort_mode = om;
 }