示例#1
0
        public System.Drawing.Point[] GetBox(int scale, int centerX, int centerY, out System.Drawing.Point invisible, List <System.Windows.Forms.Label> debug)
        {
            var points     = ProjectionTool.ToArray(_box);
            var projection = ProjectionTool.Projection(points, (double)TypeOfProjection / 2, 45);

            int invisibleIndex = ProjectionTool.FindInvisible(points, debug);

            invisibleIndex = 0;

            switch (invisibleIndex)
            {
            case 0:
                invisibleIndex = 2;
                break;

            case 1:
                invisibleIndex = 3;
                break;

            case 2:
                invisibleIndex = 0;
                break;

            case 3:
                invisibleIndex = 1;
                break;

            case 4:
                invisibleIndex = 6;
                break;

            case 5:
                invisibleIndex = 7;
                break;

            case 6:
                invisibleIndex = 4;
                break;

            case 7:
                invisibleIndex = 5;
                break;
            }

            var result = ProjectionTool.ToPoints(projection, scale, centerX, centerY);

            invisible = result[invisibleIndex];

            return(result);
        }
示例#2
0
        public static int FindInvisible(double[,] points, List <System.Windows.Forms.Label> debug)
        {
            var cameraPoint = new double[, ] {
                { 4, 4, -5 }
            };
            var projectedCameraPoint = ProjectionTool.Projection(cameraPoint, 1, 45);

            var normal          = new Point(1, 1, -1);
            var projectedNormal = ProjectionTool.Projection(cameraPoint, 1, 45);

            var cameraPlain = new Plane(cameraPoint, normal);//new double[] { 1, 1, -1, -2 };

            var testRes = new List <double>();
            var soTest  = ToJagged(points);

            testRes.Add(IsVisible(cameraPoint, new Plane(soTest[0], soTest[2], soTest[6])));
            testRes.Add(IsVisible(cameraPoint, new Plane(soTest[2], soTest[3], soTest[7])));
            testRes.Add(IsVisible(cameraPoint, new Plane(soTest[4], soTest[6], soTest[7])));
            testRes.Add(IsVisible(cameraPoint, new Plane(soTest[0], soTest[1], soTest[5])));
            testRes.Add(IsVisible(cameraPoint, new Plane(soTest[1], soTest[3], soTest[7])));
            testRes.Add(IsVisible(cameraPoint, new Plane(soTest[0], soTest[2], soTest[3])));

            int    maxDistanceIndex = 0;
            double maxDistance      = 0;

            for (int i = 0; i < points.GetLength(0); i++)
            {
                var currentPoint = new Point(points[i, 0], points[i, 1], points[i, 2]);
                var distance     = PlaneDotDistance(currentPoint, cameraPlain);
                if (i < debug.Count)
                {
                    debug[i].Text = String.Format("Distance {0}", distance);
                }
                if (distance > maxDistance)
                {
                    maxDistanceIndex = i;
                    maxDistance      = distance;
                }
            }

            return(maxDistanceIndex);
        }
示例#3
0
        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            var grafics = e.Graphics;
            var pen     = new Pen(Color.Black);

            System.Drawing.Point invisible;

            var points = _house.GetBox(50, panel1.Width / 2, panel1.Height / 2, out invisible, debug);

            var index = Array.IndexOf(points, invisible);

            label1.Text = index.ToString();

            for (int i = 0; i < debug.Count; i++)
            {
                debug[i].Text = String.Format("X: {0} Y: {1} {2}", points[i].X, points[i].Y, debug[i].Text);
            }

            var planes = new List <List <int> >()
            {
                new List <int>()
                {
                    0, 2, 6, 4
                },
                new List <int>()
                {
                    4, 5, 7, 6
                },
                new List <int>()
                {
                    2, 3, 7, 6
                },
                new List <int>()
                {
                    0, 1, 3, 2
                },
                new List <int>()
                {
                    0, 1, 5, 4
                },
                new List <int>()
                {
                    1, 5, 7, 3
                },

                new List <int>()
                {
                    0, 8, 9, 1
                },
                new List <int>()
                {
                    4, 8, 9, 5
                }
            };

            foreach (var plane in planes)
            {
                var draw = ProjectionTool.GetPoints(points, plane.ToArray());
                //if (!draw.Contains(invisible))
                grafics.DrawPolygon(pen, draw);
            }
        }
示例#4
0
        private void scrlbarScaling_ValueChanged(object sender, EventArgs e)
        {
            ProjectionTool.Scale(_house, scrlbarScaling.Value / 10.0);

            panel1.Invalidate();
        }
示例#5
0
        private void scrlbarRotateZ_ValueChanged(object sender, EventArgs e)
        {
            ProjectionTool.Rotate(_house, scrlbarRotateZ.Value, 2);

            panel1.Invalidate();
        }
示例#6
0
        private void hScrollBar3_ValueChanged(object sender, EventArgs e)
        {
            ProjectionTool.Move(_house, scrlbarMovementZ.Value, 2);

            panel1.Invalidate();
        }