type edge = {a : int;b : int;soft : bool;curve : bool;
}type face = {id : int;outer : int list;holes : int list list;
}type t = {verts : (int * v3) list;edges : edge list;faces : face list;next : int;
}val face : t -> int -> face optionval loops : face -> int list listval sides : int list -> (int * int) listval faces_on : t -> int -> int -> face listval inside : t -> face -> v3 -> boolval hit : t -> v3 -> v3 -> (float * face) optionval vertex_at : t -> v3 -> t * intval add_edge : ?curve:bool -> t -> v3 -> v3 -> tval add_polygon : ?curve:bool -> t -> v3 list -> tval push_pull : t -> int -> float -> tval move : t -> int list -> v3 -> tval erase_edge : t -> int -> int -> tval erase_face : t -> int -> tval vertices_of : edges:(int * int) list -> faces:int list -> t -> int list