diff options
Diffstat (limited to 'path')
-rwxr-xr-x | path/builder.ml | 35 | ||||
-rwxr-xr-x | path/fixed.ml | 24 | ||||
-rwxr-xr-x | path/repr.ml | 2 |
3 files changed, 31 insertions, 30 deletions
diff --git a/path/builder.ml b/path/builder.ml index fd772ea..7901e78 100755 --- a/path/builder.ml +++ b/path/builder.ml @@ -133,15 +133,15 @@ module Make(Point:P) = struct Repr.start p0 path |> Repr.quadratic_to - p0' - b0.Shapes.Bezier.ctrl0 - b0.Shapes.Bezier.ctrl1 - p1' + ( p0' + , b0.Shapes.Bezier.ctrl0 + , b0.Shapes.Bezier.ctrl1 + , p1' ) |> Repr.quadratic_to - p1' - b1.Shapes.Bezier.ctrl0 - b1.Shapes.Bezier.ctrl1 - p2' + ( p1' + , b1.Shapes.Bezier.ctrl0 + , b1.Shapes.Bezier.ctrl1 + , p2' ) | (p0::_ as points) -> let (let*) v f = @@ -179,10 +179,10 @@ module Make(Point:P) = struct let bezier = Array.get beziers (i - 1) in path := Repr.quadratic_to - !point - bezier.Shapes.Bezier.ctrl0 - bezier.Shapes.Bezier.ctrl1 - pt + ( !point + , bezier.Shapes.Bezier.ctrl0 + , bezier.Shapes.Bezier.ctrl1 + , pt ) (!path); point := pt; ) @@ -195,11 +195,12 @@ module Make(Point:P) = struct Repr.stop @@ List.fold_left beziers ~init:path ~f:(fun path bezier -> - let p0' = bezier.p0 - and ctrl0 = bezier.ctrl0 - and ctrl1 = bezier.ctrl1 - and p1' = bezier.p1 in - Repr.quadratic_to p0' ctrl0 ctrl1 p1' path + Repr.quadratic_to + ( bezier.p0 + , bezier.ctrl0 + , bezier.ctrl1 + , bezier.p1 ) + path ) end diff --git a/path/fixed.ml b/path/fixed.ml index 812dd3b..d9abcb5 100755 --- a/path/fixed.ml +++ b/path/fixed.ml @@ -14,6 +14,12 @@ end module Make(Point:P) = struct + type bezier = + { p0:Point.t (* The starting point *) + ; p1:Point.t (* The end point *) + ; ctrl0:Gg.v2 (* The control point *) + ; ctrl1:Gg.v2 } (* The control point *) + module type BUILDER = sig type t @@ -21,12 +27,6 @@ module Make(Point:P) = struct : t -> (module Repr.M with type t = Point.t and type repr = 's) -> 's -> 's end - type bezier = - { p0:Point.t (* The starting point *) - ; p1:Point.t (* The end point *) - ; ctrl0:Gg.v2 (* The control point *) - ; ctrl1:Gg.v2 } (* The control point *) - type path = | Line of Point.t * Point.t | Curve of bezier @@ -58,8 +58,8 @@ module Make(Point:P) = struct , Line (p1, p2)::t) let quadratic_to - : t -> Gg.v2 -> Gg.v2 -> t -> repr -> repr - = fun p0 ctrl0 ctrl1 p1 (i, t) -> + : (t * Gg.v2 * Gg.v2 * t) -> repr -> repr + = fun (p0, ctrl0, ctrl1, p1) (i, t) -> let curve = Curve { p0 ; ctrl0 @@ -99,10 +99,10 @@ module Make(Point:P) = struct = fun (type s) {path; _} (module Repr : Repr.M with type t = Point.t and type repr = s) repr -> let repr_bezier p bezier = Repr.quadratic_to - bezier.p0 - bezier.ctrl0 - bezier.ctrl1 - bezier.p1 + ( bezier.p0 + , bezier.ctrl0 + , bezier.ctrl1 + , bezier.p1 ) p in let _, repr = Array.fold_left path diff --git a/path/repr.ml b/path/repr.ml index 63e7ba0..55a2920 100755 --- a/path/repr.ml +++ b/path/repr.ml @@ -11,7 +11,7 @@ module type M = sig : t -> t -> repr -> repr val quadratic_to - : t -> Gg.v2 -> Gg.v2 -> t -> repr -> repr + : (t * Gg.v2 * Gg.v2 * t) -> repr -> repr val stop : repr -> repr |