/// <summary> /// Gets the total transform of the specified visual. /// </summary> /// <param name="viewport">The viewport.</param> /// <param name="visual">The visual.</param> /// <returns>The transform.</returns> public static GeneralTransform3D GetTransform(this Viewport3D viewport, Visual3D visual) { if (visual == null) { return(null); } foreach (var ancestor in viewport.Children) { if (visual.IsDescendantOf(ancestor)) { var g = new GeneralTransform3DGroup(); // this includes the visual.Transform var ta = visual.TransformToAncestor(ancestor); if (ta != null) { g.Children.Add(ta); } // add the transform of the top-level ancestor g.Children.Add(ancestor.Transform); return(g); } } return(visual.Transform); }