sig
  type location = float * float * float
  module Camera : sig type t = Perspective | Orthographic | Fisheye end
  module Color :
    sig
      type t =
          Red
        | Green
        | Blue
        | Yellow
        | White
        | Black
        | Cyan
        | Pink
        | Magenta
        | RGB of float * float * float
        | RGBT of float * float * float * float
    end
  type color = Povray.Color.t
  type texture
  type finish
  type triangle = Povray.location * Povray.location * Povray.location
  type triangle_c = Povray.triangle * Povray.Color.t
  type face_indice = int * int * int
  type face_indices = Povray.face_indice array
  type scene_desc =
      Include of string
    | Background of Povray.color
    | Light_source of Povray.location * Povray.color
    | Ambient_light of float * float * float
    | Camera of Povray.location * Povray.location * Povray.Camera.t option
    | Sphere of float * Povray.location * Povray.texture *
        Povray.location option * Povray.location option *
        Povray.location option
    | Cone of float * float * Povray.location * Povray.location *
        Povray.texture * Povray.location option * Povray.location option *
        Povray.location option
    | Box of Povray.location * Povray.location * Povray.texture *
        Povray.location option * Povray.location option *
        Povray.location option
    | Cylinder of float * Povray.location * Povray.location *
        Povray.texture * Povray.location option * Povray.location option *
        Povray.location option
    | Torus of float * float * Povray.texture * Povray.location option *
        Povray.location option * Povray.location option
    | Mesh of Povray.triangle list * Povray.texture *
        Povray.location option * Povray.location option *
        Povray.location option
    | MeshC of (Povray.triangle * Povray.color) list *
        Povray.location option * Povray.location option *
        Povray.location option
    | MeshD of Povray.location array * Povray.face_indice array *
        Povray.texture * Povray.location option * Povray.location option *
        Povray.location option
    | MeshD2 of Povray.location array * (Povray.face_indice * int) array *
        Povray.texture array * Povray.location option *
        Povray.location option * Povray.location option
  module Textures :
    sig
      module Wood :
        sig
          type woods =
              P_WoodGrain1A
            | P_WoodGrain1B
            | P_WoodGrain2A
            | P_WoodGrain2B
            | P_WoodGrain3A
            | P_WoodGrain3B
            | P_WoodGrain4A
            | P_WoodGrain4B
            | P_WoodGrain5A
            | P_WoodGrain5B
            | P_WoodGrain6A
            | P_WoodGrain6B
            | P_WoodGrain7A
            | P_WoodGrain7B
            | P_WoodGrain8A
            | P_WoodGrain8B
            | P_WoodGrain9A
            | P_WoodGrain9B
            | P_WoodGrain10A
            | P_WoodGrain10B
            | P_WoodGrain11A
            | P_WoodGrain11B
            | P_WoodGrain12A
            | P_WoodGrain12B
            | P_WoodGrain13A
            | P_WoodGrain13B
            | P_WoodGrain14A
            | P_WoodGrain14B
            | P_WoodGrain15A
            | P_WoodGrain15B
            | P_WoodGrain16A
            | P_WoodGrain16B
            | P_WoodGrain17A
            | P_WoodGrain17B
            | P_WoodGrain18A
            | P_WoodGrain18B
            | P_WoodGrain19A
            | P_WoodGrain19B
            | T_Wood1
            | T_Wood2
            | T_Wood3
            | T_Wood4
            | T_Wood5
            | T_Wood6
            | T_Wood7
            | T_Wood8
            | T_Wood9
            | T_Wood10
            | T_Wood11
            | T_Wood12
            | T_Wood13
            | T_Wood14
            | T_Wood15
            | T_Wood16
            | T_Wood17
            | T_Wood18
            | T_Wood19
            | T_Wood20
            | T_Wood21
            | T_Wood22
            | T_Wood23
            | T_Wood24
            | T_Wood25
            | T_Wood26
            | T_Wood27
            | T_Wood28
            | T_Wood29
            | T_Wood30
            | T_Wood31
            | T_Wood32
            | T_Wood33
            | T_Wood34
            | T_Wood35
          val to_string : Povray.Textures.Wood.woods -> string
        end
      module Stone :
        sig
          type stones =
              T_Grnt0
            | T_Grnt1
            | T_Grnt2
            | T_Grnt3
            | T_Grnt4
            | T_Grnt5
            | T_Grnt6
            | T_Grnt7
            | T_Grnt8
            | T_Grnt9
            | T_Grnt10
            | T_Grnt11
            | T_Grnt12
            | T_Grnt13
            | T_Grnt14
            | T_Grnt15
            | T_Grnt16
            | T_Grnt17
            | T_Grnt18
            | T_Grnt19
            | T_Grnt20
            | G1
            | G2
            | G3
            | G4
            | T_Grnt21
            | T_Grnt22
            | T_Grnt23
            | T_Grnt24
            | T_Grnt25
            | T_Grnt26
            | T_Grnt27
            | T_Grnt28
            | T_Grnt29
            | T_Grnt0a
            | T_Grnt1a
            | T_Grnt2a
            | T_Grnt3a
            | T_Grnt4a
            | T_Grnt5a
            | T_Grnt6a
            | T_Grnt7a
            | T_Grnt8a
            | T_Grnt9a
            | T_Grnt10a
            | T_Grnt11a
            | T_Grnt12a
            | T_Grnt13a
            | T_Grnt14a
            | T_Grnt15a
            | T_Grnt16a
            | T_Grnt17a
            | T_Grnt18a
            | T_Grnt19a
            | T_Grnt20a
            | T_Grnt21a
            | T_Grnt22a
            | T_Grnt23a
            | T_Grnt24a
            | T_Crack1
            | T_Crack2
            | T_Crack3
            | T_Crack4
            | T_Stone1
            | T_Stone2
            | T_Stone3
            | T_Stone4
            | T_Stone5
            | T_Stone6
            | T_Stone7
            | T_Stone8
            | T_Stone9
            | T_Stone10
            | T_Stone11
            | T_Stone12
            | T_Stone13
            | T_Stone14
            | T_Stone15
            | T_Stone16
            | T_Stone17
            | T_Stone18
            | T_Stone19
            | T_Stone20
            | T_Stone21
            | T_Stone22
            | T_Stone23
            | T_Stone24
            | T_Stone25
            | T_Stone26
            | T_Stone27
            | T_Stone28
            | T_Stone29
            | T_Stone30
            | T_Stone31
            | T_Stone32
            | T_Stone33
            | T_Stone34
            | T_Stone35
            | T_Stone36
            | T_Stone37
            | T_Stone38
            | T_Stone39
            | T_Stone40
            | T_Stone41
            | T_Stone42
            | T_Stone43
            | T_Stone44
          val to_string : Povray.Textures.Stone.stones -> string
        end
      type texture_def =
          Stone of Povray.Textures.Stone.stones
        | Wood of Povray.Textures.Wood.woods
      val to_string : Povray.Textures.texture_def -> string
    end
  type scene
  val new_scene : unit -> Povray.scene
  val string_of_scene : Povray.scene -> string
  val print_scene : Povray.scene -> unit
  module Inc_file :
    sig
      type t =
          Arrays
        | Chars
        | Colors
        | Consts
        | Debug
        | Finish
        | Functions
        | Glass
        | Glass_old
        | Golds
        | Logo
        | Math
        | Metals
        | Rad_def
        | Rand
        | Textures
        | Transforms
        | Screen
        | Shapes
        | Shapes2
        | Shapes_old
        | Shapesq
        | Skies
        | Stage1
        | Stars
        | Stdcam
        | Stdinc
        | Stoneold
        | Stones
        | Stones1
        | Stones2
        | Strings
        | Sunpos
        | Woodmaps
        | Woods
      val to_string : inc:Povray.Inc_file.t -> string
      val of_string : inc:string -> Povray.Inc_file.t
    end
  type inc_file = Povray.Inc_file.t
  val string_of_inc_file : inc:Povray.inc_file -> string
  val inc_file_of_string : inc:string -> Povray.inc_file
  val add_include : Povray.scene -> inc:Povray.inc_file -> Povray.scene
  val add_comment : Povray.scene -> com:string -> Povray.scene
  val add_background : Povray.scene -> color:Povray.color -> Povray.scene
  val add_light_source :
    Povray.scene ->
    location:float * float * float -> color:Povray.color -> Povray.scene
  val add_camera :
    Povray.scene ->
    location:float * float * float ->
    look_at:float * float * float ->
    ?kind:Povray.Camera.t -> ?angle:int -> unit -> Povray.scene
  val add_ambient_light :
    Povray.scene -> color:float * float * float -> Povray.scene
  val new_finish :
    ?ambient:float ->
    ?diffuse:float -> ?specular:float -> unit -> Povray.finish
  val new_texture :
    ?color:Povray.color ->
    ?scale:int ->
    ?def:Povray.Textures.texture_def ->
    ?finish:Povray.finish -> unit -> Povray.texture
  val new_checker :
    color1:Povray.color ->
    color2:Povray.color -> ?finish:Povray.finish -> unit -> Povray.texture
  val add_sphere :
    Povray.scene ->
    center:float * float * float ->
    radius:float ->
    ?translate:float * float * float ->
    ?rotate:float * float * float ->
    ?scale:float * float * float ->
    ?texture:Povray.texture -> unit -> Povray.scene
  val add_cylinder :
    Povray.scene ->
    center1:float * float * float ->
    center2:float * float * float ->
    radius:float ->
    ?translate:float * float * float ->
    ?rotate:float * float * float ->
    ?scale:float * float * float ->
    ?texture:Povray.texture -> unit -> Povray.scene
  val add_box :
    Povray.scene ->
    corner1:float * float * float ->
    corner2:float * float * float ->
    ?translate:float * float * float ->
    ?rotate:float * float * float ->
    ?scale:float * float * float ->
    ?texture:Povray.texture -> unit -> Povray.scene
  val add_cone :
    Povray.scene ->
    center1:float * float * float ->
    radius1:float ->
    center2:float * float * float ->
    radius2:float ->
    ?translate:float * float * float ->
    ?rotate:float * float * float ->
    ?scale:float * float * float ->
    ?texture:Povray.texture -> unit -> Povray.scene
  val add_torus :
    Povray.scene ->
    major:float ->
    minor:float ->
    ?translate:float * float * float ->
    ?rotate:float * float * float ->
    ?scale:float * float * float ->
    ?texture:Povray.texture -> unit -> Povray.scene
  val add_polygon :
    Povray.scene ->
    pnts:(float * float) list ->
    ?translate:float * float * float ->
    ?rotate:float * float * float ->
    ?scale:float * float * float ->
    ?texture:Povray.texture -> unit -> Povray.scene
  val add_plane :
    Povray.scene ->
    norm:int * int * int ->
    dist:int -> ?texture:Povray.texture -> unit -> Povray.scene
  val add_text :
    Povray.scene ->
    font:string ->
    text:string ->
    ?thickness:float ->
    ?offset:float ->
    ?translate:float * float * float ->
    ?rotate:float * float * float ->
    ?scale:float * float * float ->
    ?texture:Povray.texture -> unit -> Povray.scene
  val get_color : color:Povray.color -> string
  val get_include : inc:Povray.inc_file -> string
  val get_comment : com:string -> string
  val get_background : color:Povray.color -> string
  val get_light_source :
    location:float * float * float -> color:Povray.color -> string
  val get_camera :
    location:float * float * float ->
    look_at:float * float * float ->
    ?kind:Povray.Camera.t -> ?angle:int -> unit -> string
  val get_ambient_light : color:float * float * float -> string
  val get_finish :
    ?ambient:float -> ?diffuse:float -> ?specular:float -> unit -> string
  val get_texture :
    ?color:Povray.Color.t ->
    ?scale:int ->
    ?def:Povray.Textures.texture_def -> ?finish:string -> unit -> string
  val get_checker :
    color1:Povray.color ->
    color2:Povray.color -> ?finish:string -> unit -> string
  val get_sphere :
    center:float * float * float ->
    radius:float ->
    ?translate:float * float * float ->
    ?rotate:float * float * float ->
    ?scale:float * float * float -> ?texture:string -> unit -> string
  val get_cylinder :
    center1:float * float * float ->
    center2:float * float * float ->
    radius:float ->
    ?translate:float * float * float ->
    ?rotate:float * float * float ->
    ?scale:float * float * float -> ?texture:string -> unit -> string
  val get_box :
    corner1:float * float * float ->
    corner2:float * float * float ->
    ?translate:float * float * float ->
    ?rotate:float * float * float ->
    ?scale:float * float * float -> ?texture:string -> unit -> string
  val get_cone :
    center1:float * float * float ->
    radius1:float ->
    center2:float * float * float ->
    radius2:float ->
    ?translate:float * float * float ->
    ?rotate:float * float * float ->
    ?scale:float * float * float -> ?texture:string -> unit -> string
  val get_torus :
    major:float ->
    minor:float ->
    ?translate:float * float * float ->
    ?rotate:float * float * float ->
    ?scale:float * float * float -> ?texture:string -> unit -> string
  val get_polygon :
    pnts:(float * float) list ->
    ?translate:float * float * float ->
    ?rotate:float * float * float ->
    ?scale:float * float * float -> ?texture:string -> unit -> string
  val get_plane :
    norm:int * int * int -> dist:int -> ?texture:string -> unit -> string
  val get_text :
    font:string ->
    text:string ->
    ?thickness:float ->
    ?offset:float ->
    ?translate:float * float * float ->
    ?rotate:float * float * float ->
    ?scale:float * float * float -> ?texture:string -> unit -> string
  val get_union :
    group:string ->
    ?translate:float * float * float ->
    ?rotate:float * float * float ->
    ?scale:float * float * float -> unit -> string
  val add_union :
    Povray.scene ->
    group:(Povray.scene -> Povray.scene) ->
    ?translate:float * float * float ->
    ?rotate:float * float * float ->
    ?scale:float * float * float -> unit -> Povray.scene
  val get_difference :
    elem1:string -> elem2:string -> ?texture:string -> unit -> string
  val add_difference :
    Povray.scene ->
    elem1:string ->
    elem2:string -> ?texture:Povray.texture -> unit -> Povray.scene
  val add_elem : Povray.scene -> elem:string -> unit -> Povray.scene
  module Desc :
    sig
      val to_scene : Povray.scene_desc list -> Povray.scene
      val add :
        Povray.scene_desc -> Povray.scene_desc list -> Povray.scene_desc list
      val add_elems :
        Povray.scene_desc list ->
        Povray.scene_desc list -> Povray.scene_desc list
      val add_desc : Povray.scene -> Povray.scene_desc -> Povray.scene
      val add_descs : Povray.scene -> Povray.scene_desc list -> Povray.scene
    end
  module Float :
    sig
      val get_camera :
        location:float * float * float ->
        look_at:float * float * float ->
        ?kind:Povray.Camera.t -> ?angle:int -> unit -> string
      val add_camera :
        Povray.scene ->
        location:float * float * float ->
        look_at:float * float * float ->
        ?kind:Povray.Camera.t -> ?angle:int -> unit -> Povray.scene
    end
  module Int :
    sig
      val get_camera :
        location:int * int * int ->
        look_at:int * int * int ->
        ?kind:Povray.Camera.t -> ?angle:int -> unit -> string
      val add_camera :
        Povray.scene ->
        location:int * int * int ->
        look_at:int * int * int ->
        ?kind:Povray.Camera.t -> ?angle:int -> unit -> Povray.scene
    end
  module Mesh :
    sig
      val get_mesh :
        triangles:Povray.triangle list ->
        ?translate:float * float * float ->
        ?rotate:float * float * float ->
        ?scale:float * float * float ->
        ?texture:Povray.texture -> unit -> string
      val add_mesh :
        Povray.scene ->
        triangles:Povray.triangle list ->
        ?translate:float * float * float ->
        ?rotate:float * float * float ->
        ?scale:float * float * float ->
        ?texture:Povray.texture -> unit -> Povray.scene
    end
  module MeshC :
    sig
      val get_mesh :
        triangles:Povray.triangle_c list ->
        ?translate:float * float * float ->
        ?rotate:float * float * float ->
        ?scale:float * float * float -> unit -> string
      val add_mesh :
        Povray.scene ->
        triangles:Povray.triangle_c list ->
        ?translate:float * float * float ->
        ?rotate:float * float * float ->
        ?scale:float * float * float -> unit -> Povray.scene
    end
  module MeshD :
    sig
      val get_mesh :
        points:Povray.location array ->
        faces:Povray.face_indice array ->
        ?translate:float * float * float ->
        ?rotate:float * float * float ->
        ?scale:float * float * float ->
        ?texture:Povray.texture -> unit -> string
      val add_mesh :
        Povray.scene ->
        points:Povray.location array ->
        faces:Povray.face_indice array ->
        ?translate:float * float * float ->
        ?rotate:float * float * float ->
        ?scale:float * float * float ->
        ?texture:Povray.texture -> unit -> Povray.scene
    end
  module MeshD2 :
    sig
      val get_mesh :
        points:Povray.location array ->
        faces:(Povray.face_indice * int) array ->
        textures:Povray.texture array ->
        ?translate:float * float * float ->
        ?rotate:float * float * float ->
        ?scale:float * float * float -> unit -> string
      val add_mesh :
        Povray.scene ->
        points:Povray.location array ->
        faces:(Povray.face_indice * int) array ->
        textures:Povray.texture array ->
        ?translate:float * float * float ->
        ?rotate:float * float * float ->
        ?scale:float * float * float -> unit -> Povray.scene
    end
end