Page
Library
Module
Module type
Parameter
Class
Class type
Source
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 available.
linear_extrude
and rotate_extrude
have been renamed to extrude
and revolve
extrude
can only be applied to 2D shapes) and enforcing non-mixing of 2D and 3D shapes during boolean operations.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 walkthrough style examples. 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 the Scad.t
, along with their corresponding vector (V2.t
or V3.t
) types (and those composed of them) provided in the OCADml library.
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 your_project/bin/dune
:
(executable
(public_name your_project)
(name main)
(libraries OCADml OSCADml))
(rule
(alias model)
(action
(run your_project)))
Then start dune
in watch mode with dune build -w @model
.