This library provides an OCaml front-end to the
OpenSCAD solid modelling language. All SCAD primitives
and transformation functions are made available.
Notable differences from the OpenSCAD language
Angles are represented in radians (and converted to degrees when compiling to
The dimensional system (2D or 3D) each shape inhabits is tracked by the type
system. This is used to restrict the operations that can be legally applied
linear_extrudecan only be applied to 2D shapes) and enforcing
non-mixing of 2D and 3D shapes during boolean operations.
open Scad_ml let scad_logo = let rad = 5. and fn = 720 in let cyl = Scad.cylinder ~fn ~center:true (rad /. 2.) (rad *. 2.3) in let cross_cyl = Scad.rotate (0., Float.pi /. 2., 0.) cyl in Scad.union [ Scad.difference (Scad.sphere ~fn rad) [ cyl; cross_cyl; Scad.rotate (0., 0., Float.pi /. 2.) cross_cyl ] ; Scad.color ~alpha:0.25 Color.Magenta cross_cyl ] let () = let oc = open_out "/path/to/things/scad_logo.scad" in Scad.write oc scad_logo; close_out oc
Generated scads can then be viewed with the OpenSCAD
viewer as you normally would.
Online documentation is available
There is a companion ppx, [@@deriving
scad] for generating
transformation functions for user-defined records and abstract types made up of
Vec3.t types provided in this library.