diff options
| author | Sébastien Dailly <sebastien@chimrod.com> | 2021-02-05 09:08:39 +0100 | 
|---|---|---|
| committer | Sébastien Dailly <sebastien@dailly.me> | 2022-02-07 14:39:30 +0100 | 
| commit | 561d0f0155f4906d90eb7e73a3ff9cb28909126f (patch) | |
| tree | 9a606c2d7832272ea33d7052512a5fa59805d582 /path | |
| parent | 86ec559f913c389e8dc055b494630f21a45e039b (diff) | |
Update project structure
Diffstat (limited to 'path')
| -rwxr-xr-x | path/builder.ml | 224 | ||||
| -rwxr-xr-x | path/builder.mli | 43 | ||||
| -rwxr-xr-x | path/dune | 7 | ||||
| -rwxr-xr-x | path/fixed.ml | 487 | ||||
| -rwxr-xr-x | path/fixed.mli | 81 | ||||
| -rwxr-xr-x | path/path.ml | 7 | ||||
| -rwxr-xr-x | path/point.ml | 77 | ||||
| -rwxr-xr-x | path/point.mli | 40 | ||||
| -rwxr-xr-x | path/repr.ml | 19 | 
9 files changed, 0 insertions, 985 deletions
diff --git a/path/builder.ml b/path/builder.ml deleted file mode 100755 index 4403599..0000000 --- a/path/builder.ml +++ /dev/null @@ -1,224 +0,0 @@ -open StdLabels - -(** Signature for points *) -module type P = sig -  type t - -  val empty : t - -  val get_coord : t -> Gg.v2 - -  val copy : t -> Gg.v2 -> t - -end - -module Make(Point:P) = struct - -  (** Point creation  **) - -  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 t = Point.t list * bezier list - -  let get_new_segment connexion0 p5 p4 p3 p2 p1 = -    let p5' = Point.get_coord p5 -    and p4' = Point.get_coord p4 -    and p3' = Point.get_coord p3 -    and p2' = Point.get_coord p2 -    and p1' = Point.get_coord p1 in - -    let points_to_link = -      [ p1' -      ; p2' -      ; p3' -      ; p4' -      ; p5' ] in -    Shapes.Bspline.to_bezier ?connexion0 points_to_link - -  let empty = ([], []) - -  let add_point -    : Point.t -> t -> t -    = fun lastPoint (path, beziers) -> -      let (let*) v f = -        match v with -        | Ok bezier -> -          if Array.length bezier > 0 then -            f (Array.get bezier 0) -          else -            (lastPoint::path, beziers) -        | _ -> -          (lastPoint::path, beziers) -      in - -      let connexion0 = match beziers with -        | hd::_ -> Some (Point.get_coord hd.p1) -        | _ -> None in - -      match path with -      | p4::p3::p2::p1::_ -> -        let* bezier = get_new_segment connexion0 -            lastPoint p4 p3 p2 p1 in - -        let bezier_point = -          { p0 = p2 -          ; p1 = p1 -          ; ctrl0 = bezier.Shapes.Bezier.ctrl1 -          ; ctrl1 = bezier.Shapes.Bezier.ctrl0 -          } in - -        (* We remove the last point and add the bezier curve in the list*) -        let firsts = lastPoint::p4::p3::p2::[] in -        (firsts, bezier_point::beziers) -      | _ -> -        ( lastPoint::path -        , beziers) - -  let replace_last -    : Point.t -> t -> t -    = fun lastPoint ((path, beziers) as t) -> -      match path, beziers with -      | _::(tl), beziers -> - -        ( lastPoint::tl -        , beziers ) -      | _ -> -        add_point lastPoint t - -  let peek2 -    : t -> (Point.t * Point.t) option -    = fun (path, _) -> -      match path with -      | h1::h2::_ -> Some (h1, h2) -      | _ -> None - -  let peek -    : t -> Point.t option -    = fun (path, _) -> -      match path with -      | [] -> None -      | hd::_ -> Some hd - -  let repr -    : t -> (module Repr.M with type point = Point.t and type t = 's) -> 's -> 's -    = fun (type s) (points, beziers) (module Repr : Repr.M with type point = Point.t and type t = s) path -> - -      (* Represent the last points *) -      let path = match points with -        | [] -> -          ( path ) -        | p1::[] -> -          ( Repr.start p1 path ) -        | p1::p2::[] -> -          let path = -            Repr.start p1 path -            |> Repr.line_to p1 p2 in -          ( path ) -        | p0::p1::p2::[] -> - -          let b0, b1 = Shapes.Bezier.quadratic_to_cubic -            @@ Shapes.Bezier.three_points_quadratic -              (Point.get_coord p0) -              (Point.get_coord p1) -              (Point.get_coord p2) -                       |> Shapes.Bezier.slice 0.5 -          in -          let p0' = Point.copy p0 b0.Shapes.Bezier.p0 -          and p1' = Point.copy p1 b0.Shapes.Bezier.p1 -          and p2' = Point.copy p2 b1.Shapes.Bezier.p1 in - -          Repr.start p0 path -          |> Repr.quadratic_to -            ( p0' -            , b0.Shapes.Bezier.ctrl0 -            , b0.Shapes.Bezier.ctrl1 -            , p1' ) -          |> Repr.quadratic_to -            ( p1' -            , b1.Shapes.Bezier.ctrl0 -            , b1.Shapes.Bezier.ctrl1 -            , p2' ) -        | (p0::_ as points) -> - -          let (let*) v f = -            match v with -            | Ok beziers -> f beziers -            | _ -> path in - -          let points' = List.map ~f:Point.get_coord points in -          let connexion = match beziers with -            | [] -> None -            | hd ::_ -> Some (Point.get_coord hd.p1) in - -          let* beziers = Shapes.Bspline.to_bezier ?connexion1:connexion points' in - -          (* Stdlib does not provide fold_left_i function and we need to map -             each bezier point with the associated point in the curve. - -             So I use references here for keeping each result element - -          *) -          let path = ref path in -          let point = ref p0 in - -          List.iteri -            points -            ~f:(fun i pt -> - -                (* The first iteration is ignored, as we need both previous and -                   current point for the two point in the curve. - -                   Do not forget that there is always n-1 bezier curve for n -                   points *) -                if i > 0 then ( - -                  let bezier = Array.get beziers (i - 1) in - -                  path := Repr.quadratic_to -                      ( !point -                      , bezier.Shapes.Bezier.ctrl0 -                      , bezier.Shapes.Bezier.ctrl1 -                      , pt ) -                      (!path); -                  point := pt; -                ) -              ); -          ( !path ) -      in - -      (* Now represent the already evaluated points. Much easer to do, just -         iterate on them *) -      Repr.stop @@ List.fold_left beziers -        ~init:path -        ~f:(fun path bezier -> -            Repr.quadratic_to -              ( bezier.p0 -              , bezier.ctrl0 -              , bezier.ctrl1 -              , bezier.p1 ) -              path -          ) - -  let map -    : t -> (Point.t -> Point.t) -> t -    = fun (points, beziers) f -> -      let points = List.map -          points -          ~f -      and beziers = List.map -          beziers -          ~f:(fun bezier -> - -              { p0 = f bezier.p0 -              ; p1 = f bezier.p1 -              ; ctrl0 = Point.(get_coord (f ( copy bezier.p0 bezier.ctrl0))) -              ; ctrl1 = Point.(get_coord (f ( copy bezier.p1 bezier.ctrl1))) -              } -            ) in -      points, beziers - -end diff --git a/path/builder.mli b/path/builder.mli deleted file mode 100755 index 2afbd4b..0000000 --- a/path/builder.mli +++ /dev/null @@ -1,43 +0,0 @@ -(** Signature for points *) -module type P = sig -  type t - -  val empty : t - -  val get_coord : t -> Gg.v2 - -  (** Copy a point and all thoses properties to the given location *) -  val copy : t -> Gg.v2 -> t - -end - -module Make(Point:P) : sig - -  type t - -  (** Create an empty path *) -  val empty: t - -  val add_point -    : Point.t -> t -> t - -  (** Replace the last alement in the path by the one given in parameter *) -  val replace_last -    : Point.t -> t -> t - -  (** Retrieve the last element, if any *) -  val peek  -    : t -> Point.t option - -  (** Retrieve the last element, if any *) -  val peek2 -    : t -> (Point.t * Point.t) option - -  (** Represent the path *) -  val repr -    : t -> (module Repr.M with type point = Point.t and type t = 's) -> 's -> 's - -  val map  -    : t -> (Point.t -> Point.t) -> t - -end diff --git a/path/dune b/path/dune deleted file mode 100755 index 863c768..0000000 --- a/path/dune +++ /dev/null @@ -1,7 +0,0 @@ -(library - (name path) - (libraries  -   gg -   shapes -   ) - ) diff --git a/path/fixed.ml b/path/fixed.ml deleted file mode 100755 index 1362ad3..0000000 --- a/path/fixed.ml +++ /dev/null @@ -1,487 +0,0 @@ -open StdLabels - -(** Signature for points *) -module type P = sig -  type t - -  val get_coord : t -> Gg.v2 - -  val id : t -> int - -  val copy : t -> Gg.v2 -> t - -end - -module Make(Point:P) = struct - -  type bezier = -    { ctrl0:Gg.v2   (* The control point *) -    ; ctrl1:Gg.v2   (* The control point *) -    ; p1:Point.t    (* The end point *) -    } - -  module type BUILDER = sig -    type t - -    val repr -      : t -> (module Repr.M with type point = Point.t and type t = 's) -> 's -> 's -  end - -  type path = -    | Line of Point.t -    | Curve of bezier - - -  type step = -    { point : Point.t -    ; move : path -    } - -  type t = step array - -  module ToFixed = struct -    type point = Point.t - -    type t = int * step list - -    let create_path () = 0, [] - -    (* Start a new path. *) -    let start point t = -      let _ = point in -      t - -    let line_to -      : point -> point -> t -> t -      = fun p1 p2 (i, t) -> -        ( i + 1 -        , { point = p1 -          ; move = Line p2 -          }:: t ) - -    let quadratic_to -      : (point * Gg.v2 * Gg.v2 * point) -> t -> t -      = fun (p0,  ctrl0, ctrl1, p1) (i, t) -> -        let curve = Curve -            { ctrl0 -            ; ctrl1 -            ; p1} in -        ( i + 1 -        , { point = p0 -          ; move = curve -          } ::t) - -    let stop t = t - -    let get -      : int * step list -> step array -      = fun (n, t) -> - -        (* The array is initialized with a magic number, and just after -           filled with the values from the list in reverse. All the elements are set. -        *) -        let res = Obj.magic (Array.make n 0) in -        List.iteri t -          ~f:(fun i elem -> Array.set res (n - i - 1) elem ); -        res -  end - -  let to_fixed -    : (module BUILDER with type t = 'a) -> 'a -> t -    = fun (type s) (module Builder: BUILDER with type t = s) t -> -      Builder.repr t (module ToFixed) (ToFixed.create_path ()) -      |> ToFixed.get - -  let repr -    : t -> (module Repr.M with type point = Point.t and type t = 's) -> 's -> 's -    = fun (type s) t (module Repr : Repr.M with type point = Point.t and type t = s) repr -> -      let repr_bezier p p0 bezier = -        Repr.quadratic_to -          ( p0 -          , bezier.ctrl0 -          , bezier.ctrl1 -          , bezier.p1 ) -          p in - -      let _, repr = Array.fold_left t -          ~init:(true, repr) -          ~f:(fun (first, path) element -> -              let path =  if first then -                  Repr.start element.point path -                else path in -              match element.move with -              | Line p1 -> -                ( false -                , Repr.line_to element.point p1 path ) -              | Curve bezier -> -                ( false -                , repr_bezier path element.point bezier ) -            ) in -      Repr.stop repr - - -  type approx = -    { distance : float -    ; closest_point : Gg.v2 -    ; ratio : float -    ; p0 : Point.t -    ; p1 : Point.t } - -  (** Return the distance between a given point and the curve. May return -      None if the point is out of the curve *) -  let distance -    : Gg.v2 -> t -> approx option -    = fun point t -> - -      Array.fold_left t -        ~init:None -        ~f:(fun res step -> -            match step.move with -            | Line p1 -> -              let box = Gg.Box2.of_pts (Point.get_coord step.point) (Point.get_coord p1) in -              begin match Gg.Box2.mem point box with -                | false -> res -                | true -> -                  (* TODO Evaluate the normal *) -                  res -              end -            | Curve bezier -> - -              let bezier' = Shapes.Bezier.( - -                  { p0 = Point.get_coord step.point -                  ; p1 = Point.get_coord bezier.p1 -                  ; ctrl0 = bezier.ctrl0 -                  ; ctrl1 = bezier.ctrl1 } -                ) in -              let ratio, point' = Shapes.Bezier.get_closest_point point bezier' in -              let distance' = Gg.V2.( norm (point - point') ) in -              match res with -              | Some {distance; _} when distance < distance' -> res -              | _ -> Some -                       { closest_point = point' -                       ; distance = distance' -                       ; p0 = step.point -                       ; p1 = bezier.p1 -                       ; ratio } -          ) - -  let map -    : t -> (Point.t -> Point.t) -> t -    = fun t f -> -      Array.map t -        ~f:(fun step -> -            match step.move with -            | Line p2 -> -              { point = f step.point -              ; move = Line (f p2) -              } -            | Curve bezier -> -              let point = f step.point in -              { point -              ; move = Curve -                    { p1 = f bezier.p1 -                    ; ctrl0 = Point.get_coord (f (Point.copy step.point bezier.ctrl0)) -                    ; ctrl1 = Point.get_coord (f (Point.copy bezier.p1 bezier.ctrl1)) -                    } -              } -          ) - -  let iter -    : t -> f:(Point.t -> unit) -> unit -    = fun t ~f -> -      Array.iter t -        ~f:(fun step -> -            match step.move with -            | Line p2 -> f step.point; f p2 -            | Curve bezier -> f step.point ; f bezier.p1 -          ) - -  let get_point' -    : step -> Point.t -    = fun { move ; _} -> -      match move with -      | Line p1 -> p1 -      | Curve bezier -> bezier.p1 - -  (** Associate the return from the bezier point to an existing path *) -  let assoc_point -    : Shapes.Bezier.t -> step -> step -    = fun bezier step -> -      match step.move with -      | Line p1 -      | Curve {p1; _} -> -        let p0' = Point.copy step.point bezier.Shapes.Bezier.p0 -        and p1' = Point.copy p1 bezier.Shapes.Bezier.p1 in -        { point = p0' -        ; move = Curve -              { p1 = p1' -              ; ctrl0 = bezier.Shapes.Bezier.ctrl0 -              ; ctrl1 = bezier.Shapes.Bezier.ctrl1 -              } -        } - - -  let build_from_three_points p0 p1 p2 = -    let bezier = -      Shapes.Bezier.quadratic_to_cubic -      @@ Shapes.Bezier.three_points_quadratic -        (Point.get_coord p0) -        (Point.get_coord p1) -        (Point.get_coord p2) in - -    (* The middle point is not exactly at the middle anymore (it can have been -       moved), we have the reevaluate it's position *) -    let ratio, _ = Shapes.Bezier.get_closest_point -        (Point.get_coord p1) -        bezier in - -    let b0, b1 = Shapes.Bezier.slice ratio bezier in -    let p0' = Point.copy p0 b0.Shapes.Bezier.p0 -    and p1' = Point.copy p1 b0.Shapes.Bezier.p1 -    and p2' = Point.copy p2 b1.Shapes.Bezier.p1 in - -    [| { point = p0' -       ; move = -           Curve { ctrl0 = b0.Shapes.Bezier.ctrl0 -                 ; ctrl1 = b0.Shapes.Bezier.ctrl1 -                 ; p1 = p1' -                 } } -     ; { point = p1' -       ; move = Curve { ctrl0 = b1.Shapes.Bezier.ctrl0 -                      ; ctrl1 = b1.Shapes.Bezier.ctrl1 -                      ; p1 = p2' } -       } |] - -  (** Rebuild the whole curve by evaluating all the points *) -  let rebuild -    : t -> t option -    = fun t -> - -      match Array.length t with -      | 0 -> None -      | 1 -> -        let step = Array.get t 0 in -        begin match step.move with -          | Curve {p1; _} -          | Line p1 -> -            Some -              [| -                { point = step.point -                ; move = Line p1 } |] -        end -      | 2 -> -        let p0 = (Array.get t 0).point -        and p1 = (Array.get t 1).point -        and p2 = get_point' @@ Array.get t 1 in -        Some (build_from_three_points p0 p1 p2) - -      | _ -> - -        (* Convert all the points in list *) -        let points = List.init -            ~len:((Array.length t) ) -            ~f:(fun i -> Point.get_coord @@ get_point' (Array.get t i)) in -        let p0 = Point.get_coord @@ (Array.get t 0).point in - -        let points = p0::points in - -        (* We process the whole curve in a single block *) -        begin match Shapes.Bspline.to_bezier points with -          | Error `InvalidPath -> None -          | Ok beziers -> - -            (* Now for each point, reassociate the same point information, -               We should have as many points as before *) -            let rebuilded = Array.map2 beziers t ~f:assoc_point in -            Some rebuilded -        end - -  let find_pt_index -    : Point.t -> step array -> int option -    = fun point path -> -      (* First search the element to remove. The counter mark the position of -         the point to remove, not the segment itself. *) -      let idx = ref None -      and counter = ref 0  in - -      let _ = Array.exists -          path -          ~f:(fun element -> -              let res = -                if (Point.id element.point) = (Point.id point) then ( -                  idx := Some (!counter) ; -                  true -                ) else match element.move with -                  | Line p1 -                  | Curve {p1;_} when (Point.id p1) = (Point.id point) -> -                    idx := Some (!counter+1) ; -                    true -                  | _ -> -                    false -              in -              incr counter; -              res) in -      !idx - -  let remove_point -    : t -> Point.t -> t option -    = fun t point -> - -      match Array.length t with -      | 0 -      | 1 -> None -      | 2 -> -        (* Two segment, we get the points and transform this into a single line *) -        let p0 = (Array.get t 0).point -        and p1 = (Array.get t 1).point -        and p2 = get_point' @@ Array.get t 1 in -        let elms = List.filter [p0; p1; p2] -            ~f:(fun pt -> Point.id pt != Point.id point) in -        begin match elms with -          | p0::p1::[] -> -            Some -              [| { point = p0 -                 ; move = Line p1 }|] -          | _ -> None -        end -      | l -> -        match find_pt_index point t with -        | None -> Some t -        | Some 0 -> -          (* Remove the first point *) -          let path = Array.init (l-1) -              ~f:( fun i -> Array.get t (i+1)) in -          Some path -        | Some n when n = (Array.length t) -> -          (* Remove the last point *) -          let path = Array.init (l-1) -              ~f:( fun i -> Array.get t i) in -          Some path -        | Some n -> -          let path' = Array.init (l-1) -              ~f:(fun i -> -                  if i < (n-1) then -                    Array.get t (i) -                  else if i = (n-1) then -                    (* We know that the point is not the first nor the last one. -                       So it is safe to call n-1 or n + 1 point - -                       We have to rebuild the point and set that -                       point_(-1).id = point_(+1).id -                    *) -                    let p0 = (Array.get t i).point in - -                    match (Array.get t (i+1)).move with -                    | Line p1 -> -                      { point = p0 -                      ; move = Line p1 } -                    | Curve c -> -                      { point = p0 -                      ; move = Curve c } - -                  else -                    Array.get t (i+1) -                ) in -          rebuild path' - -  let first_point -    : step -> Point.t -    = fun {point; _} -> point - -  let replace_point -    : t -> Point.t -> t option -    = fun t p -> - -      let add_path paths idx f points = -        if 0 <= idx && idx < Array.length paths then -          let path = Array.get t idx in -          Point.get_coord (f path) -          :: points -        else points in - -      match Array.length t with -      | 0 -> None -      | 1 -> (* Only one point, easy ? *) -        let step = Array.get t 0 in -        begin match step.move with -          | Curve {p1; _} -          | Line p1 -> -            let p0 = if (Point.id step.point = Point.id p) then p else step.point -            and p1 = if (Point.id p1 = Point.id p) then p else p1 in -            Some [| -              { point = p0 -              ; move = Line p1 } -            |] -        end - -      | 2 -> -        let p0 = (Array.get t 0).point -        and p1 = (Array.get t 1).point -        and p2 = get_point' @@ Array.get t 1 in - -        let p0 = if (Point.id p0 = Point.id p) then p else p0 -        and p1 = if (Point.id p1 = Point.id p) then p else p1 -        and p2 = if (Point.id p2 = Point.id p) then p else p2 in -        Some (build_from_three_points p0 p1 p2) - -      (* More than two segmend, it is ok for a partial reevaluation *) -      | _ -> -        match find_pt_index p t with -        | None -> None -        | Some n -> -          let path = Array.copy t in - -          let p0, p1 = - -            if n < Array.length path then -              p, get_point' (Array.get path n) -            else -              (Array.get path (n -1)).point, p -          in - -          let min_idx = max (n-3) 0 in - -          let points = -            add_path path (n-3) first_point -            @@ add_path path (n-2) first_point -            @@ add_path path (n-1) first_point -            @@ (fun tl -> (Point.get_coord p)::tl) -            @@ add_path path n get_point' -            @@ add_path path (n+1) get_point' -            @@ add_path path (n+2) get_point' -            @@ [] in - -          (* It is impressive how fast it is to evaluate the curve ! Maybe is the -             worker not required at all… -          *) -          let bezier_opt = Shapes.Bspline.to_bezier points in -          begin match bezier_opt with -            | Ok paths -> -              Array.iteri paths -                ~f:(fun i bezier -> -                    (* Only take two points before, and two after  *) -                    let idx = min_idx + i in -                    if (n-2 < idx) && (idx < n +2) && idx < Array.length path then -                      Array.set path idx (assoc_point bezier (Array.get path idx)) -                  ); -              Some path -            | Error _ -> -              let bezier', _ = Shapes.Bezier.three_points_quadratic -                  (Point.get_coord p) -                  (Point.get_coord @@ get_point' (Array.get path 0)) -                  (Point.get_coord @@ get_point' (Array.get path 1)) -                               |> Shapes.Bezier.quadratic_to_cubic -                               |> Shapes.Bezier.slice 0.5 -              in -              Array.set path 0 -                { point = p0 -                ; move = (Curve -                            { ctrl0 = bezier'.Shapes.Bezier.ctrl0 -                            ; ctrl1 = bezier'.Shapes.Bezier.ctrl1 -                            ; p1 -                            }) -                }; -              Some path -          end -end diff --git a/path/fixed.mli b/path/fixed.mli deleted file mode 100755 index 111187c..0000000 --- a/path/fixed.mli +++ /dev/null @@ -1,81 +0,0 @@ -(** Signature for points *) -module type P = sig -  type t - -  val get_coord : t -> Gg.v2 - -  val id : t -> int - -  val copy : t -> Gg.v2 -> t - -end - -module Make(Point:P) : sig - -  module type BUILDER = sig -    type t - -    val repr -      : t -> (module Repr.M with type point = Point.t and type t = 's) -> 's -> 's - -  end - -  type t  - -  (** Create a path from a builder *) -  val to_fixed -    : (module BUILDER with type t = 'a) -> 'a -> t - -  (** Represent the path *) -  val repr -    : t -> (module Repr.M with type point = Point.t and type t = 's) -> 's -> 's - -  (** Structure to represent all the required information for evaluating the -      distance between a point and a path *) -  type approx = -    { distance : float -    ; closest_point : Gg.v2 -    ; ratio : float -    ; p0 : Point.t -    ; p1 : Point.t } - -  (** Return the distance between a given point and the curve. May return -      None if the point is out of the curve *) -  val distance -    : Gg.v2 -> t -> approx option - -  (** Iterate over a path *) -  val iter -    : t -> f:(Point.t -> unit) -> unit - -  (** Map all the points in the path *) -  val map -    : t -> (Point.t -> Point.t) -> t - -  (** Reevaluate all the control points on the path in order to get a smooth -      curve *) -  val rebuild  -    : t -> t option - -  (** Delete a point in the path.  - -      Reconnect the path without the point removed, and reevaluate all the -      control points from the nodes - -      return None if the point is not present in the curve -  *) -  val remove_point  -    : t -> Point.t -> t option - -  (** Replace a point by the given one.  - -      An existing point with the same id shall be present in the path.  - -      The path is not fully evaluated, and rebuild shall be runned in order to -      get the path completely smooth. - -  *) -  val replace_point  -    : t -> Point.t -> t option - -end diff --git a/path/path.ml b/path/path.ml deleted file mode 100755 index ea90de4..0000000 --- a/path/path.ml +++ /dev/null @@ -1,7 +0,0 @@ -(** Common  module for ensuring that the function is evaluated only once *) - -module Point = Point -module Repr = Repr -module Path_Builder = Builder.Make(Point) -module Fixed = Fixed.Make(Point) - diff --git a/path/point.ml b/path/point.ml deleted file mode 100755 index ec6f8ad..0000000 --- a/path/point.ml +++ /dev/null @@ -1,77 +0,0 @@ -let internal_id = ref 0 - -type t = -  { p: Gg.v2 -  ; size : float -  ; angle: float -  ; stamp : float -  ; id : int -  } - -let empty = -  { p = Gg.V2.of_tuple (0., 0.) -  ; size = 0. -  ; angle = 0. -  ; stamp = 0. -  ; id = 0 -  } - -let create ~angle ~width ~stamp ~x ~y = - -  incr internal_id; -  { p = Gg.V2.v x y -  ; size = width -  ; angle = Gg.Float.rad_of_deg (180. -. angle ) -  ; stamp -  ; id = !internal_id -  } - -let copy point p = -  { point with -    p -  } - -let set_angle p angle = -  { p with angle = Gg.Float.rad_of_deg (180. -. angle) } - -let get_angle { angle; _} = 180. -. (Gg.Float.deg_of_rad angle) - -let set_width p size = -  { p with size } - -let get_width { size; _} = size - -let (+) p1 p2 = -  { p1 with p = Gg.V2.(+) p1.p p2 } - -let get_coord { p; _ } = p - -let get_stamp { stamp; _} = stamp - -let get_coord' -  : t -> Gg.v2 -  = fun t -> -    let open Gg.V2 in -    let trans = of_polar @@ v t.size t.angle in -    t.p + trans - -let mix -  : float -> Gg.v2 -> t -> t -> t -  = fun f point p0 p1 -> -    let angle0 = p0.angle -    and angle1 = p1.angle -    and width0 = get_width p0 -    and width1 = get_width p1 -    and stamp0 = get_stamp p0 -    and stamp1 = get_stamp p1 in -    let angle = angle0 +. f *. ( angle1 -. angle0 ) in -    let width = width0 +. f *. ( width1 -. width0 ) in -    let stamp = stamp0 +. f *. ( stamp1 -. stamp0 ) in -    { p = point -    ; size = width -    ; angle -    ; stamp -    ; id = !internal_id -    } - -let id { id; _} = id diff --git a/path/point.mli b/path/point.mli deleted file mode 100755 index fe4cb45..0000000 --- a/path/point.mli +++ /dev/null @@ -1,40 +0,0 @@ -type t - -(** Return the point id. Each id is unique *) -val id  -  : t -> int - -val empty : t - -val (+): t -> Gg.v2 -> t - -val get_coord : t -> Gg.v2 - -val get_stamp : t -> float - -val create: angle:float -> width:float -> stamp:float -> x:float -> y:float -> t - -(** Return a copy of the point at given posistion  - -    This is a true copy, the id will be the same for the two points -    TODO : Should this be renamed set_position ? - -*) -val copy : t -> Gg.v2 -> t - -val set_angle : t -> float -> t - -val get_angle : t -> float - -val set_width: t -> float -> t - -val get_width: t -> float - -val get_coord' -  : t -> Gg.v2 - -(** [mix f point p0 p1] create a new point at the position point, with the -    characteristics from p0 and p1 *) -val mix -  : float -> Gg.v2 -> t -> t -> t - diff --git a/path/repr.ml b/path/repr.ml deleted file mode 100755 index 17fd914..0000000 --- a/path/repr.ml +++ /dev/null @@ -1,19 +0,0 @@ -module type M = sig - -  type point - -  type t - -  (* Start a new path. *) -  val start -    : point -> t -> t - -  val line_to -    : point -> point -> t -> t - -  val quadratic_to -    : (point * Gg.v2 * Gg.v2 * point) -> t -> t - -  val stop -    : t -> t -end  | 
