module Make(Repr: Repr.PRINTER) = struct type t = Path.Point.t let mark point path = let open Gg.V2 in let point = Path.Point.get_coord point in let dist = 5. and dist' = -5. in let path = Repr.move_to (point - (of_tuple (dist, dist))) path |> Repr.line_to ( point + (of_tuple (dist, dist))) |> Repr.move_to (point + (of_tuple (dist', dist))) |> Repr.line_to ( point + (of_tuple (dist, dist'))) in path type repr = { path: (Repr.t) } let create_path : 'b -> repr = fun _ -> { path = Repr.create () } (* Start a new path. *) let start : Path.Point.t -> repr -> repr = fun t {path} -> let path = mark t path in { path } let line_to : Path.Point.t -> Path.Point.t -> repr -> repr = fun p0 p1 {path} -> let path = Repr.move_to (Path.Point.get_coord p0) path |> Repr.line_to (Path.Point.get_coord p1) |> mark p1 in { path } let quadratic_to : (t * Gg.v2 * Gg.v2 * t) -> repr -> repr = fun (p0, ctrl0, ctrl1, p1) { path } -> let path = Repr.move_to (Path.Point.get_coord p0) path |> Repr.quadratic_to ctrl0 ctrl1 (Path.Point.get_coord p1) |> mark p1 in { path = path } let stop : repr -> repr = fun path -> path let get : repr -> Repr.t = fun {path; _} -> path end