private static TransformObject CloneAsNewRoot([NotNull] TransformObject transformObject)
        {
            var obj       = new TransformObject(transformObject.Name, transformObject.Transform.Clone());
            var childList = obj.ChildList;

            Debug.Assert(childList != null, nameof(childList) + " != null");

            foreach (var child in transformObject.Children)
            {
                var clone = CloneAsNewRoot(child);
                clone.Parent = obj;
                childList.Add(clone);
            }

            obj.Seal();

            return(obj);
        }