scad_ml
Overview
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
OpenSCAD).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.linear_extrude
can only be applied to 2D shapes) and enforcing
non-mixing of 2D and 3D shapes during boolean operations.
Usage
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.
Documentation
Online documentation is available
here.
Companion PPX
There is a companion ppx, [@@deriving
scad] for generating
transformation functions for user-defined records and abstract types made up of
the Scad.t
and Vec3.t
types provided in this library.
Authors
Original author
Overhaul and add many functions
License
BSL-1.0
sha256=2abd88cebe00d5b27266c303f8b913c26400a9796f29ccd51e4f2a7fbe83b114
sha512=303f837ae9790baff49f141b6915017985431855899f9963fb8bef168f497089077661e14b5431f77169cd1e98d5ecdb2e752ae1a9fac5a35b181ee685acf6f8