From RepRap
Jump to: navigation, search
Crystal Clear action run.png

Release status: experimental

No image available.png
OpenSCAD library of useful functions
LGPL v2.1
CAD Models
External Link

MCAD is a library of useful functions for the OpenSCAD 3D modeling software.

Code hosting:

Mailing list:

IRC: #[email protected]

This library contains components commonly used in designing and mocking up mechanical designs. It is currently unfinished and you can expect some API changes, however many things are already working.

This library is licensed under the LGPL 2.1 See or the included file, lgpl-2.1.txt.


Place the MCAD directory in either the openscad/libraries/ folder (In Ubuntu this is, /usr/share/openscad/), or in the same directory as your project.

You can import these files in your scripts with "use <MCAD/*.scad>", but some files include useful constants which will be available with "include <MCAD/*.scad>", which should be safe to use on all included files (ie. no top level code should create geometry).

If you host your project in git, you can do "git submodule add URL PATH" in your repo to import this library as a git submodule for easy usage. Then you need to do a "git submodule update --init" after cloning. When you want to update the submodule, do "cd PATH; git checkout master; git pull". See "git help submodule" for more info.

Currently Provided Tools:

  • gears.scad (Old version):
    • gear(number_of_teeth, circular_pitch OR diametrial_pitch, pressure_angle OPTIONAL, clearance OPTIONAL)
  • motors.scad:
    • stepper_motor_mount(nema_standard, slide_distance OPTIONAL, mochup OPTIONAL)

Other tools (alpha and beta quality):

  • nuts_and_bolts.scad: for creating metric and imperial bolt/nut holes
  • bearing.scad: standard/custom bearings
  • screw.scad: screws and augers
  • materials.scad: color definitions for different materials
  • stepper.scad: NEMA standard stepper outlines
  • servos.scad: servo outlines
  • boxes.scad: box with rounded corners
  • triangles.scad: simple triangles

Very generally useful functions and constants:

  • math.scad: general math functions
  • constants.scad: mathematical constants
  • curves.scad: mathematical functions defining curves
  • units.scad: easy metric units
  • utilities.scad: geometric funtions and misc. useful stuff
  • teardrop.scad ( parametric teardrop module
  • shapes.scad: simple shapes by Catarina Mota

External utils that generate and and process openscad code:

  • testing code, see below
  • code for scraping function names etc.


You are welcome to fork this project in github and request pulls. I will try to accomodate the community as much as possible in this. If for some reason you want collaborator access, just ask.

Github is fun (and easy), but I can include code submissions and other improvements directly, and have already included code from various sources (thingiverse is great :)

Code style

I'd prefer to have all included code nicely indented, at least at the block level, and no extraneous whitespace. I'm used to indent with four spaces as opposed to tabs or other mixes of whitespace, but at least try to choose a style and stick to it.


I've started a minimal testing infrastructure for OpenSCAD code. It's written in Python and uses py.test (might be compatible with Nose also). Just type py.test inside the lib dir in a terminal and you should see a part of the tests passing and tracebacks for failing tests. It's very simplistic still, but it should test that no syntax errors occur at least.

The code is included in, and can be imported to be used in other codebases.