To focus the search input from anywhere on the page, press the 'S' key.
in-package search v0.1.0
OpenSCAD DSL for OCaml
In conjunction with OCADml, this library
provides an OCaml front-end to the OpenSCAD solid
modelling language. All SCAD primitives and transformation functions are made
Notable differences from the OpenSCAD language
Angles are represented in radians (and converted to degrees when compiling to OpenSCAD).
rotate_extrudehave been renamed 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
(e.g. 2D shapes cannot be moved off of the xy plane,
be applied to 2D shapes) and enforcing non-mixing of 2D and 3D shapes during
open OCADml open OSCADml let () = let scad_logo = let rad = 5. and fn = 720 in let cyl = Scad.cylinder ~fn ~center:true ~height:(rad *. 2.3) (rad /. 2.) in let cross_cyl = Scad.rotate (v3 0. (Float.pi /. 2.) 0.) cyl in Scad.union [ Scad.difference (Scad.sphere ~fn rad) [ cyl; cross_cyl; Scad.rotate (v3 0. 0. (Float.pi /. 2.)) cross_cyl ] ; Scad.color ~alpha:0.25 Color.Magenta cross_cyl ] in Scad.to_file "scad_logo.scad" scad_logo
Generated scads can then be viewed with the OpenSCAD
viewer as you normally would.
Documentation for OSCADml is available
online and offline via
odig, covering the
API as well as some
Referring to the manual for
OCADml is also likely to be helpful.
There is a companion ppx, [@@deriving
cad] for generating
transformation functions for user-defined records and abstract types made up of
Scad.t, along with their corresponding vector (
(and those composed of them) provided in the
Generating models on write
For a more pleasant modelling experience, it is highly recommended to setup dune to
automate writing your models to file whenever the source files are saved. To do
so, add a dune rule
that runs your projects executable after it is built. For example, in
(executable (public_name your_project) (name main) (libraries OCADml OSCADml)) (rule (alias model) (action (run your_project)))
dune in watch
dune build -w @model.