// only for IBranch
        private void MagnetMiddle(object source, BaseShape other)
        {
            if (other == null)
            {
                return;
            }
            // change logic for each child.
            _pivot.DoAll(i =>
            {
                if (!other.ChildrenNode.Contains(i))
                {
                    other.ChildrenNode.Add(i);
                    i.Parent = other;
                }
            });

            other.ArrangeChildrenPosition();

            _pivot.ResetStroke();
            other.ResetStroke();
        }