/// <summary>
 /// Draws a filled polygon.
 /// </summary>
 /// <param name="primitives"></param>
 /// <param name="color"></param>
 /// <param name="polygon"></param>
 public static void FillPolygon(this IPrimitiveRenderer primitives, Effect effect, Color color, Polygon polygon)
 {
     if (polygon.IsConvex)
     {
         primitives.FillPolygon(effect, color, polygon.Points);
     }
     else
     {
         foreach (var convexPoly in polygon.ConvexDecomposition)
         {
             primitives.FillPolygon(effect, color, convexPoly.Points);
         }
     }
 }
 /// <summary>
 /// Draws a filled circle.
 /// </summary>
 /// <param name="primitives"></param>
 /// <param name="color"></param>
 /// <param name="center"></param>
 /// <param name="radius"></param>
 public static void FillCircle(this IPrimitiveRenderer primitives, Effect effect, Color color, Vector2 center, double radius)
 {
     primitives.FillPolygon(effect, color, new EllipseBuilder().BuildCircle(center, radius).ToArray());
 }
 /// <summary>
 /// Draws a filled ellipse.
 /// </summary>
 /// <param name="primitives"></param>
 /// <param name="color"></param>
 /// <param name="center"></param>
 /// <param name="majorAxisRadius"></param>
 /// <param name="minorAxisRadius"></param>
 /// <param name="rotationAngle"></param>
 public static void FillEllipse(this IPrimitiveRenderer primitives, Effect effect, Color color, Vector2 center,
                                double majorAxisRadius, double minorAxisRadius, double rotationAngle)
 {
     primitives.FillPolygon(effect, color, new EllipseBuilder().BuildEllipse(center, majorAxisRadius, minorAxisRadius, rotationAngle).ToArray());
 }
 /// <summary>
 /// Draws a filled ellipse, inscribed inside a rectangle.
 /// </summary>
 /// <param name="primitives"></param>
 /// <param name="color"></param>
 /// <param name="boundingRect"></param>
 public static void FillEllipse(this IPrimitiveRenderer primitives, Effect effect, Color color, RectangleF boundingRect)
 {
     primitives.FillPolygon(effect, color, new EllipseBuilder().BuildEllipse(boundingRect).ToArray());
 }
 /// <summary>
 /// Draws a filled rectangle.
 /// </summary>
 /// <param name="primitives"></param>
 /// <param name="color"></param>
 /// <param name="rect"></param>
 public static void FillRect(this IPrimitiveRenderer primitives, Effect effect, Color color, RectangleF rect)
 {
     primitives.FillPolygon(effect, color, new QuadrilateralBuilder().BuildRectangle(rect));
 }