void BuildPrimaryPlane()

in Clients/Xamarin.Interactive.Client.Windows/ViewModels/InspectTreeNode3D.cs [64:198]


        void BuildPrimaryPlane (InspectTreeState state)
        {
            var displayMode = state.Mode;
            Brush brush = new SolidColorBrush (EmptyColor);
            var view = Node.View;
            var parent = Node.View.Parent;
            var matrix = Matrix3D.Identity;

            if (view.Layer != null)
                view = view.Layer;

            var zFightOffset = childIndex * zFightIncrement;
            var zOffset = ZSpacing + zFightOffset;

            if (view.Transform != null) {
                var render = view.Transform;
                matrix = new Matrix3D {
                    M11 = render.M11,
                    M12 = render.M12,
                    M13 = render.M13,
                    M14 = render.M14,
                    M21 = render.M21,
                    M22 = render.M22,
                    M23 = render.M23,
                    M24 = render.M24,
                    M31 = render.M31,
                    M32 = render.M32,
                    M33 = render.M33,
                    M34 = render.M34,
                    OffsetX = render.OffsetX,
                    OffsetY = render.OffsetY,
                    OffsetZ = render.OffsetZ + zOffset
                };
            }

            if (view.Width <= 0 || view.Height <= 0)
                return;

            var size = new Size (view.Width, view.Height);
            var visual = new DrawingVisual ();
            using (var context = visual.RenderOpen ()) {

                if (view.BestCapturedImage != null && displayMode.HasFlag (DisplayMode.Content)) {
                    var bitmap = new BitmapImage ();
                    bitmap.BeginInit ();
                    bitmap.StreamSource = new MemoryStream (view.BestCapturedImage);
                    bitmap.EndInit ();

                    context.DrawImage (bitmap, new Rect (size));
                }

                if (displayMode.HasFlag (DisplayMode.Frames))
                    context.DrawRectangle (
                        null,
                        new Pen (new SolidColorBrush (Color.FromRgb (0xd3, 0xd3, 0xd3)), 0.5),
                        new Rect (size));
            }

            brush = new ImageBrush { ImageSource = new DrawingImage (visual.Drawing) };

            var geometry = new MeshGeometry3D () {
                Positions = new Point3DCollection {
                    new Point3D (0, 0, 0),
                    new Point3D (0, -size.Height, 0),
                    new Point3D (size.Width, -size.Height, 0),
                    new Point3D (size.Width, 0, 0)
                },
                TextureCoordinates = new PointCollection {
                    new Point (0,0),
                    new Point (0,1),
                    new Point (1,1),
                    new Point (1,0)
                },
                TriangleIndices = new Int32Collection { 0, 1, 2, 0, 2, 3 },
            };

            var backGeometry = new MeshGeometry3D () {
                Positions = geometry.Positions,
                TextureCoordinates = geometry.TextureCoordinates,
                TriangleIndices = geometry.TriangleIndices,
                Normals = new Vector3DCollection {
                    new Vector3D (0, 0, -1),
                    new Vector3D (0, 0, -1),
                    new Vector3D (0, 0, -1),
                    new Vector3D (0, 0, -1)
                }
            };

            material = new DiffuseMaterial (brush) { Color = BlurColor };

            Content = new Model3DGroup () {
                Children = new Model3DCollection {
                    new GeometryModel3D {
                        Geometry = geometry,
                        Material = material
                    },
                    new GeometryModel3D {
                        Geometry = backGeometry,
                        BackMaterial = material,
                    },
                },
                Transform = new ScaleTransform3D {
                    ScaleX = Math.Ceiling (view.Width) / size.Width,
                    ScaleY = -Math.Ceiling (view.Height) / size.Height,
                    ScaleZ = 1
                }
            };

            var group = new Transform3DGroup ();
            if ((parent == null && !Node.View.IsFakeRoot) || (parent?.IsFakeRoot ?? false)) {
                var unitScale = 1.0 / Math.Max (view.Width, view.Height);
                group.Children = new Transform3DCollection {
                        new TranslateTransform3D {
                            OffsetX = -view.Width / 2.0,
                            OffsetY = -view.Height / 2.0,
                            OffsetZ = zOffset
                        },
                        new ScaleTransform3D (unitScale, -unitScale, 1),
                        expandTransform
                };
            } else {
                if (view.Transform != null) {
                    group.Children = new Transform3DCollection {
                        new MatrixTransform3D () { Matrix = matrix },
                        expandTransform
                       };
                } else {
                    group.Children = new Transform3DCollection {
                        new TranslateTransform3D (view.X, view.Y, zOffset),
                        expandTransform
                    };
                }
            }
            Transform = group;
        }