private void UpdateVisuals()

in Sources/Kinect/Microsoft.Psi.AzureKinect.Visualization/AzureKinectBodyVisualizationObject.cs [177:279]


        private void UpdateVisuals()
        {
            this.visualJoints.BeginUpdate();
            this.visualBones.BeginUpdate();

            if (this.CurrentData != null)
            {
                var trackedEntitiesBrush = new SolidColorBrush(this.Color);
                var untrackedEntitiesBrush = new SolidColorBrush(
                    Color.FromArgb(
                        (byte)(Math.Max(0, Math.Min(100, this.InferredJointsOpacity)) * 2.55),
                        this.Color.R,
                        this.Color.G,
                        this.Color.B));

                // update the joints
                foreach (var jointType in this.CurrentData.Joints.Keys)
                {
                    var jointState = this.CurrentData.Joints[jointType].Confidence;
                    var visualJoint = this.visualJoints[jointType];
                    visualJoint.BeginEdit();
                    var isTracked = jointState == JointConfidenceLevel.High || jointState == JointConfidenceLevel.Medium;
                    var visible = jointState != JointConfidenceLevel.None && (isTracked || this.InferredJointsOpacity > 0);

                    if (visible)
                    {
                        var jointPosition = this.CurrentData.Joints[jointType].Pose.Origin;

                        if (visualJoint.Radius != this.JointRadiusMm / 1000.0)
                        {
                            visualJoint.Radius = this.JointRadiusMm / 1000.0;
                        }

                        var fill = isTracked ? trackedEntitiesBrush : untrackedEntitiesBrush;
                        if (visualJoint.Fill != fill)
                        {
                            visualJoint.Fill = fill;
                        }

                        visualJoint.Transform = new Win3D.TranslateTransform3D(jointPosition.X, jointPosition.Y, jointPosition.Z);

                        visualJoint.PhiDiv = this.PolygonResolution;
                        visualJoint.ThetaDiv = this.PolygonResolution;

                        visualJoint.Visible = true;
                    }
                    else
                    {
                        visualJoint.Visible = false;
                    }

                    visualJoint.EndEdit();
                }

                // update the bones
                foreach (var bone in AzureKinectBody.Bones)
                {
                    var parentState = this.CurrentData.Joints[bone.ParentJoint].Confidence;
                    var childState = this.CurrentData.Joints[bone.ChildJoint].Confidence;
                    var parentIsTracked = parentState == JointConfidenceLevel.High || parentState == JointConfidenceLevel.Medium;
                    var childIsTracked = childState == JointConfidenceLevel.High || childState == JointConfidenceLevel.Medium;
                    var isTracked = parentIsTracked && childIsTracked;
                    var visible = parentState != JointConfidenceLevel.None && childState != JointConfidenceLevel.None && (isTracked || this.InferredJointsOpacity > 0);
                    var visualBone = this.visualBones[bone];
                    visualBone.BeginEdit();
                    if (visible)
                    {
                        if (visualBone.Diameter != this.BoneDiameterMm / 1000.0)
                        {
                            visualBone.Diameter = this.BoneDiameterMm / 1000.0;
                        }

                        var joint1Position = this.visualJoints[bone.ParentJoint].Transform.Value;
                        var joint2Position = this.visualJoints[bone.ChildJoint].Transform.Value;

                        visualBone.Point1 = new Win3D.Point3D(joint1Position.OffsetX, joint1Position.OffsetY, joint1Position.OffsetZ);
                        visualBone.Point2 = new Win3D.Point3D(joint2Position.OffsetX, joint2Position.OffsetY, joint2Position.OffsetZ);

                        var fill = isTracked ? trackedEntitiesBrush : untrackedEntitiesBrush;
                        if (visualBone.Fill != fill)
                        {
                            visualBone.Fill = fill;
                        }

                        visualBone.ThetaDiv = this.PolygonResolution;

                        visualBone.Visible = true;
                    }
                    else
                    {
                        visualBone.Visible = false;
                    }

                    visualBone.EndEdit();
                }

                // set billboard position
                this.UpdateBillboard();
            }

            this.visualJoints.EndUpdate();
            this.visualBones.EndUpdate();
        }