Code Monkey home page Code Monkey logo

oscadml's Introduction

OpenSCAD DSL for OCaml

Overview

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.

Notable differences from the OpenSCAD language

  • Angles are represented in radians (and converted to degrees when compiling to OpenSCAD).
  • linear_extrude and rotate_extrude have been renamed to extrude and revolve
  • 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, extrude can only be applied to 2D shapes) and enforcing non-mixing of 2D and 3D shapes during boolean operations.

Usage

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

OpenSCAD logo Generated scads can then be viewed with the OpenSCAD viewer as you normally would.

Documentation

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.

Companion PPX

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.

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 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.

oscadml's People

Contributors

geoffder avatar mseri avatar

Stargazers

Chris Rowe avatar Antoine Viel avatar Dan avatar jose r avatar Ashish Shrestha avatar Jules Aguillon avatar Stefan Muenzel avatar NWMonster avatar  avatar Philip Zucker avatar  avatar  avatar Seb Mondet avatar Virgile Robles avatar 珊瑚 avatar

Watchers

 avatar

Forkers

mseri

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.