/// <summary>
 /// Gets the polygon points.
 /// </summary>
 /// <returns>a warper for helping handling polygon points or <c>null</c> if this is not a shape that have polygon points.</returns>
 virtual public OoPolygonPointsObserver GetPolygonPointsObserver()
 {
     if (_ppObs == null && PolygonHelper.IsFreeform(Shape))
     {
         _ppObs = new OoPolygonPointsObserver(this);
     }
     return(_ppObs);
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="OoPolygonPointsObserver" /> class.
        /// </summary>
        /// <param name="shape">The corresponding shape.</param>
        /// <exception cref="ArgumentNullException">shape</exception>
        /// <exception cref="ArgumentException">shape must be a polygon or a bezier curve;shape</exception>
        public OoPolygonPointsObserver(OoShapeObserver shape)
        {
            if (shape == null)
            {
                throw new ArgumentNullException("shape");
            }
            if (!PolygonHelper.IsFreeform(shape.Shape))
            {
                throw new ArgumentException("shape must be a polygon or a bezier curve", "shape");
            }

            Shape = shape;
            Shape.BoundRectChangeEventHandlers += Shape_BoundRectChangeEventHandlers;
            Shape.ObserverDisposing            += Shape_ObserverDisposing;
            Update();
            IsEmpty = false;
        }