This is the Mocad Library (hereafter just Mocad), a set of functions, modules and part libraries based on the brilliant OpenSCAD.
With Mocad and OpenSCAD, in a few lines of code, you can build complex mechanical devices.
In Mocad, Parts can be made in a variety of different styles, but what they share in common is that they also describe points of interest - locations and orientations - called Positions.
These Positions can be manipulated, used to connect parts together and to perform other calculations.
People who might be interested in Mocad are people who like OpenSCAD - the idea of using code to create CAD projects, and who additionally would like to use some of the libraries and helper functions Mocad has to offer.
Anyone who currently is working with mechanisms of any kind and who thinks perhaps doing CAD should be more like writing code might find this library intriguing.
People who are not coders, or who do not want to learn to code, probably won't like this library. At all.
A prequisite to using Mocad is the installation of OpenSCAD. OpenSCAD is available for free for Mac, Windows and Linux platforms, and can be found here:
With OpenSCAD installed, one can either download this repository's zip, or just clone it.
git clone https://github.com/davidthings/mocad.git
OpenSCAD will function on relatively modest machines, however, to load large arrays of files - such as some of the Mocad Part Library index files, higher-end machines may be required. One hint should always be born in mind - text labels are quite complex graphically. A scene that won't function at all on a particular machine may work just fine with text turned off.
To do this, set moText = false
in mo/mo.scad
Once OpenSCAD is installed and the Mocad directory is sitting somewhere on your machine there are several possible next steps.
- open one of the index files (
index.scad
- very large ormocad\moIndex.scad
or other) to see what parts are available - open an example (from the
example\
directory) to see how Mocad can be used and abused - open any part file - part writers are encouraged to make files invoke an instance of their parts upon direct opening.
- open the tutorial document containing all the tutorial code (again, this is a big file)
As you gain confidence with OpenSCAD and Mocad, start thinking about your own projects. Can your project be modeled in the OpenSCAD Mocad combination? Do you need extra parts? Would others appreciate them?
There is a short user guide outlining the various features and giving some flavor of Mocad here:
Reference documentation, including Mocad functions and modules part design, directory layout, etc. is here:
There is also a tutorial - a very quick overview of OpenSCAD followed by a lengthy run through of the basic principles of Mocad.
All code discussed in the tutorial is available as a single OpenSCAD file
This code is not yet versioned. Consider it alpha quality. At the appropriate time, it will get released as a 1.0 and a corresponding branch created.
This code has been developed on Mac and Linux. No formal testing mechanisms are present.
An excellent test for the integrity of the various internal modules and functions is to open the tutorial code.
If all seems well in there, it is likely things are OK with the codebase.
Mocad is alpha code. It is being developed for use in several small projects, so will likely improve over time.
Issues and feedback are encouraged. Does this project make sense? Is the naming OK? Are there critical gaps in the documentation? Could some of the internal math be more efficient?
Pull Requests are welcome, although adherence to file and part conventions outlined in the Reference is requested.
The team that creates OpenSCAD are the major enablers of this project. The environment keeps getting better and better.
There are other "Connector" libraries, although Mocad was developed independently. The ultimate structure of the Mocad Position was decided by consulting Obiscad:
Maths.scad (despite the irregular spelling!) offers numerous helpful math routines. Mocad uses some of these in the Position manipulation code.