Module Modeler

type v3 = float * float * float
type shape =
  1. | Cube
  2. | Sphere
  3. | Cylinder
  4. | Cone
  5. | Torus of float
  6. | Ground
type look =
  1. | Plain
  2. | Checker
  3. | Marble
  4. | Wood
type material = {
  1. color : int;
  2. look : look;
  3. mirror : float;
  4. glass : bool;
}
type kind =
  1. | Mesh of shape * material
  2. | Point_light of int
  3. | Sun_light of int
  4. | Camera
type boolean =
  1. | Difference
  2. | Union
  3. | Intersect
type obj = {
  1. name : string;
  2. kind : kind;
  3. location : v3;
  4. rotation : v3;
  5. scale : v3;
  6. hidden : bool;
  7. modifier : (boolean * string) option;
}
type t = obj list
val grey : material
val default : t
val fresh_name : string -> t -> string
val add : kind -> string -> t -> t * string
val find : t -> string -> obj option
val update : string -> (obj -> obj) -> t -> t
val remove : string list -> t -> t
val duplicate : string list -> t -> t * string list
val is_cutter : t -> string -> bool
val transform : obj -> v3 -> v3
val to_world : v3 -> v3
val rotate_point : int -> float -> v3 -> v3
val translate : v3 -> obj -> obj
val turn : int -> float -> obj -> obj
val resize : v3 -> obj -> obj
val wires : ?target:v3 -> obj -> (v3 * v3) list