sig
  type t
  val create : (float * float) array -> SFShape.t
  val move : shape:SFShape.t -> offset:float * float -> unit
  val move2 : shape:SFShape.t -> offsetX:float -> offsetY:float -> unit
  val rotate : shape:SFShape.t -> angle:float -> unit
  val scale : shape:SFShape.t -> factors:float * float -> unit
  val scale2 : shape:SFShape.t -> factorX:float -> factorY:float -> unit
  val setPosition : shape:SFShape.t -> pos:float * float -> unit
  val setPosition2 : shape:SFShape.t -> posX:float -> posY:float -> unit
  val setRotation : shape:SFShape.t -> angle:float -> unit
  val setScale : shape:SFShape.t -> scale:float * float -> unit
  val setScale2 : shape:SFShape.t -> scaleX:float -> scaleY:float -> unit
  val setOrigin : shape:SFShape.t -> origin:float * float -> unit
  val setOrigin2 : shape:SFShape.t -> originX:float -> originY:float -> unit
  val setFillColor : shape:SFShape.t -> color:SFColor.t -> unit
  val setOutlineColor : shape:SFShape.t -> color:SFColor.t -> unit
  val setOutlineThickness : shape:SFShape.t -> thickness:float -> unit
  val update : shape:SFShape.t -> unit
  val getPointCount : shape:SFShape.t -> int
  val of_circle : SFCircleShape.t -> SFShape.t
  val of_rectangle : SFRectangleShape.t -> SFShape.t
end