scad_ml

OCaml DSL for 3D solid modelling in OpenSCAD
README

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

License

BSL-1.0

Install
Published
22 Dec 2021
Sources
scad_ml-v1.1.0.tbz
sha256=2abd88cebe00d5b27266c303f8b913c26400a9796f29ccd51e4f2a7fbe83b114
sha512=303f837ae9790baff49f141b6915017985431855899f9963fb8bef168f497089077661e14b5431f77169cd1e98d5ecdb2e752ae1a9fac5a35b181ee685acf6f8
Dependencies
odoc
with-doc
ocaml
>= "4.08.0"
dune
>= "2.9"
Reverse Dependencies