summaryrefslogtreecommitdiff
path: root/path/builder.mli
blob: 557cdfaaf1ba83a0cd6e3b45868d2bb34c6483e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
(** 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 type REPR = sig
  type t

  type 'a repr

  (* Start a new path. *)
  val start
    : t -> 'a repr -> 'a repr

  val line_to
    : t -> t -> 'a repr -> 'a repr

  val quadratic_to
    : t -> Gg.v2 -> Gg.v2 -> t -> 'a repr -> 'a repr

  val stop
    : 'a repr -> 'a repr
end

module Make(P:P) : sig

  type t

  type fixedPath

  (** Create an empty path *)
  val empty: t

  val add_point
    : P.t -> t -> t * fixedPath option

  (** Replace the last alement in the path by the one given in parameter *)
  val replace_last
    : P.t -> t -> t * fixedPath option

  (** 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

  module Draw(Repr:REPR with type t = P.t) : sig

    (** Represent the the current path *)
    val draw
      : t -> 'a Repr.repr -> 'a Repr.repr
  end

  val to_fixed : t -> fixedPath

  module DrawFixed(Repr:REPR with type t = P.t) : sig 
    val draw
      : fixedPath -> 'a Repr.repr -> 'a Repr.repr
  end

  (** Return the shortest distance between the mouse and a point *)
  val distance
    : Gg.v2 -> fixedPath -> float option 

  val id 
    : fixedPath -> int
end