protected void CopyBase(BaseMapObject copy, UniqueNumberGenerator numberGenerator)
 {
     copy.IsSelected = IsSelected;
     copy.Data       = Data.Copy(numberGenerator);
     foreach (var child in Hierarchy)
     {
         var c = (IMapObject)child.Copy(numberGenerator);
         c.Hierarchy.Parent = copy;
     }
     copy.DescendantsChanged();
 }
 protected void CloneBase(BaseMapObject copy)
 {
     copy.IsSelected = IsSelected;
     copy.Data       = Data.Clone();
     foreach (var child in Hierarchy)
     {
         var c = (IMapObject)child.Clone();
         c.Hierarchy.Parent = copy;
     }
     copy.DescendantsChanged();
 }
 protected void UncloneBase(BaseMapObject source)
 {
     IsSelected = source.IsSelected;
     Data       = source.Data.Clone();
     Hierarchy.Clear();
     foreach (var obj in source.Hierarchy)
     {
         var copy = (IMapObject)obj.Clone();
         copy.Hierarchy.Parent = this;
     }
     DescendantsChanged();
 }