sx (float) – X coordinate of the upper left corner of the drawn curve.

sy (float) – Y coordinate of the upper left corner of the drawn curve.

p (array of float) –
An array with the bezier curves points.
The following values ease the initialization of the points array:
DRAWBEZIER_BX| X coordinate of the second curve point.
---|---
DRAWBEZIER_BY| Y coordinate of the second curve point.
DRAWBEZIER_CX| X coordinate of the third curve point.
DRAWBEZIER_CY| Y coordinate of the third curve point.
DRAWBEZIER_DX| X coordinate of the fourth curve point.
DRAWBEZIER_DY| Y coordinate of the fourth curve point.

If you try try to pass an array with a number of entries that are not a multiple of 6, you get a warning that it must be a multiple of 6. That sounds like you are allowed to set up arrays with more than 6 entries to draw multiple curve segments. But, when I try to pass more than 6, the point after the first 6 goes shooting off the UserArea in a straight line.

I've only managed to draw complex shapes by repeatedly calling the function with sx, sy, and a 6 entry array.

This obviously makes it impossible to draw a filled complex shape.

Am I doing something wrong with trying to pass an array with more than 6 entries?
How do you draw a filled shape with lots of points?

The documentation for GeUserArea.DrawBezier() isn't accurate but your notes are exact .

There seem to have an issue passing an array for multiple splines. It only works as expected passing an array for one spline only.
So we can currently only draw one spline at a time (start/ending points + in/out control points/tangents).

To draw an approximation of a circle with bezier splines the best solution is to draw 4 bezier splines and use magic numbers 0.55228475 or 0.551784 to calculate the influence points.