public MainPage()
        {
            InitializeComponent();
            mesh        = (SharedLineMesh)Activator.CreateInstance(figureType);
            sharedLines = mesh.SharedLines.ToArray();
            lineViews   = new LineView[sharedLines.Length];

            // Set up page with LineView elements.
            AbsoluteLayout absoluteLayout = new AbsoluteLayout
            {
            };

            for (int i = 0; i < lineViews.Length; i++)
            {
                lineViews[i] = new LineView
                {
                    Thickness = 3
                };
                absoluteLayout.Children.Add(lineViews[i]);
            }

            contentStack.Children.Add(absoluteLayout);

            App.pg = this;
        }
Example #2
0
        // Argument is SharedLineMesh derivative in Forms3D
        public DisplayPage()
        {
            Title = figureType.Name;

            SharedLineMesh mesh = (SharedLineMesh)Activator.CreateInstance(figureType);

            SharedLine[] sharedLines = mesh.SharedLines.ToArray();
            LineView[]   lineViews   = new LineView[sharedLines.Length];

            // Set up page with LineView elements.
            AbsoluteLayout absoluteLayout = new AbsoluteLayout();

            for (int i = 0; i < lineViews.Length; i++)
            {
                lineViews[i] = new LineView
                {
                    Thickness = 3
                };
                absoluteLayout.Children.Add(lineViews[i]);
            }

            this.Content = absoluteLayout;

            // Run animation.
            stopwatch.Start();

            Device.StartTimer(TimeSpan.FromMilliseconds(100), () =>
            {
                double totalSeconds = stopwatch.Elapsed.TotalSeconds;

                Matrix4D matX    = Matrix4D.RotationX(0);
                Matrix4D matY    = Matrix4D.RotationY(0);
                Matrix4D matZ    = Matrix4D.RotationZ(0);
                Matrix4D matView = Matrix4D.OrthographicView(new Point(this.Width / 2, this.Height / 2),
                                                             Math.Min(this.Width, this.Height) / 4);

                // Get composite 3D transform matrix.
                Matrix4D matrix = matX * matY * matZ * matView;

                // Loop through the shared lines that comprise the figure.
                for (int i = 0; i < sharedLines.Length; i++)
                {
                    // Transform the points and normals of those points.
                    Point3D point1   = sharedLines[i].Point1 * matrix;
                    Point3D point2   = sharedLines[i].Point2 * matrix;
                    Vector3D normal1 = (Point3D)((Point3D)(sharedLines[i].Normal1) * matrix);
                    Vector3D normal2 = (Point3D)((Point3D)(sharedLines[i].Normal2) * matrix);

                    // Set each LineView to its new position.
                    lineViews[i].Point1 = point1;
                    lineViews[i].Point2 = point2;

                    // Determine if the line is visible or hidden.
                    bool isFacing      = normal1.Z > 0 || normal2.Z > 0;
                    lineViews[i].Color = isFacing ? Color.Accent : Color.FromRgba(0.75, 0.75, 0.75, 0.5);
                }

                return(!stopAnimation);
            });
        }