public Overlay AddOverlay(Overlay ol)
 {
     if (tour == null || tour.CurrentTourStop == null)
     {
         return null;
     }
     if(ol.GetType() == typeof(ShapeOverlay))
     {
         ShapeOverlay srcShapeOverlay = (ShapeOverlay)ol;
         if (srcShapeOverlay != null)
         {
             ShapeOverlay shape = new ShapeOverlay(tour.CurrentTourStop, srcShapeOverlay.ShapeType);
             shape.Width = srcShapeOverlay.Width;
             shape.Height = srcShapeOverlay.Height;
             shape.X = contextPoint.X;
             shape.Y = contextPoint.Y;
             shape.Color = srcShapeOverlay.Color;
             shape.RotationAngle = srcShapeOverlay.RotationAngle;
             if (ol.AnimationTarget != null)
             {
                 shape.AnimationTarget = ol.AnimationTarget.Clone(shape);
             }
             tour.CurrentTourStop.AddOverlay(shape);
             return shape;
         }
     }
     else if (ol.GetType() == typeof(TextOverlay))
     {
         TextOverlay srcTxtOverlay = (TextOverlay)ol;
         if (srcTxtOverlay != null)
         {
             TextOverlay text = new TextOverlay(srcTxtOverlay.TextObject);
             text.X = contextPoint.X;
             text.Y = contextPoint.Y;
             text.Color = srcTxtOverlay.Color;
             if (ol.AnimationTarget != null)
             {
                 text.AnimationTarget = ol.AnimationTarget.Clone(text);
             }
             tour.CurrentTourStop.AddOverlay(text);
             return text;
         }
     }
     else if (ol.GetType() == typeof(BitmapOverlay))
     {
         BitmapOverlay srcBmpOverlay = (BitmapOverlay)ol;
         if (srcBmpOverlay != null)
         {
             BitmapOverlay bitmap = srcBmpOverlay.Copy(tour.CurrentTourStop);
             bitmap.X = contextPoint.X;
             bitmap.Y = contextPoint.Y;
             if (ol.AnimationTarget != null)
             {
                 bitmap.AnimationTarget = ol.AnimationTarget.Clone(bitmap);
             }
             tour.CurrentTourStop.AddOverlay(bitmap);
             return bitmap;
         }
     }
     else if (ol.GetType() == typeof(FlipbookOverlay))
     {
         FlipbookOverlay srcFlipbookOverlay = (FlipbookOverlay)ol;
         if (srcFlipbookOverlay != null)
         {
             FlipbookOverlay bitmap = srcFlipbookOverlay.Copy(tour.CurrentTourStop);
             bitmap.X = contextPoint.X;
             bitmap.Y = contextPoint.Y;
             if (ol.AnimationTarget != null)
             {
                 bitmap.AnimationTarget = ol.AnimationTarget.Clone(bitmap);
             }
             tour.CurrentTourStop.AddOverlay(bitmap);
             return bitmap;
         }
     }
     return null;
 }