(** Signature for points *) module type P = sig type t val empty : t val get_coord : t -> Gg.v2 val copy : t -> Gg.v2 -> t type 'a repr val create_path : unit -> 'a repr (* Start a new path. *) val start : t -> 'a repr -> 'a repr val line_to : t -> 'a repr -> 'a repr val quadratic_to : t -> t -> t -> t -> 'a repr -> 'a repr val stop : 'a repr -> 'a repr end module Make(P:P) : sig type bezier = { p0:P.t (* The starting point *) ; p1:P.t (* The end point *) ; ctrl0:Gg.v2 (* The control point *) ; ctrl1:Gg.v2 } (* The control point *) type t (** Create an empty path *) val empty: t val add_point : P.t -> t -> t (** Replace the last alement in the path by the one given in parameter *) val replace_last : P.t -> t -> t (** Retrieve the last element, if any *) val peek : t -> P.t option (** Retrieve the last element, if any *) val peek2 : t -> (P.t * P.t) option val get : t -> P.t list * bezier list val points_to_beziers : P.t list -> Shapes.Bezier.t array -> bezier array val draw : t -> 'a P.repr end