private void OnAddPointDistanceProbeMessage(AddPointDistanceProbeMessage msg)
        {
            var pts = GetSelected().Select((p) => p as PointProbeViewModel).ToArray();
            var vm  = PointsDistanceViewModel.Create(pts[0], pts[1]);

            pts[0].Children.Add(vm);

            Probes.Add(vm);
        }
        public static PointsDistanceViewModel Create(PointProbeViewModel vm1, PointProbeViewModel vm2)
        {
            var p1  = new Point3D(vm1.X, vm1.Y, vm1.Z);
            var p2  = new Point3D(vm2.X, vm2.Y, vm2.Z);
            var t1  = vm1.GetChainTansform();
            var t2  = vm2.GetChainTansform();
            var pp2 = t1.Inverse.Transform(t2.Transform(p2));
            var p12 = pp2 - p1;

            var points = new Point3D[]
            {
                p1,
                p1 + new Vector3D(p12.X, 0.0, 0.0),
                p1 + new Vector3D(p12.X, p12.Y, 0.0),
                pp2
            };

            var pdvm = new PointsDistanceViewModel()
            {
                X = p12.X,
                Y = p12.Y,
                Z = p12.Z,
                //_vm1 = vm1,
                //_vm2 = vm2,
                Parent     = vm1,
                Visible    = true,
                Geometry   = ProbesHelper.GetProbeDistanceModel(points),
                Thickness  = 1.0,
                Smoothness = 1.0,
                Color      = Colors.Yellow
            };

            pdvm.Name = $"Probe distance {pdvm.Id}";

            return(pdvm);
        }