package scad_ml
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=2abd88cebe00d5b27266c303f8b913c26400a9796f29ccd51e4f2a7fbe83b114
sha512=303f837ae9790baff49f141b6915017985431855899f9963fb8bef168f497089077661e14b5431f77169cd1e98d5ecdb2e752ae1a9fac5a35b181ee685acf6f8
Description
Scad_ml is an OCaml front-end to the OpenSCAD CAD programming language.
Published: 22 Dec 2021
README
OpenSCAD DSL for OCaml
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