This repo is for archival purposes only. Please visit https://github.com/mariuswatz/modelbuilderMk2 for recent versions of ModelbuilderMk2 for Processing 2.x. You can download Processing-ready builds of ModelbuilderMk2 from the export folder of the new repo.
The old Modelbuilder has been superceded by ModelbuilderMk2, which is a complete rewrite based on the best ideas of the old library, minus the logical inconsistencies and flaws in the original library design. Unfortunately, this also means that ModelbuilderMk2 is not backwards compatible.
Modelbuilder is a computational geometry library for Processing designed to help with parametric and generative modeling, while eliminitating complex and tedious tasks whenever possible.
Modelbuilder provides a set of object-oriented data structures and workflow metaphors (UVertexList define edges, UGeometry is used to generate and modify polygon meshes). The logic used is the familiar beginShape() / endShape() mechanism, optimized and abstracted to eliminate the need for tedious iteration through lists of vertices and faces etc.
Modelbuilder was first released in 2011 as part of my artist-in-residence project with Makerbot Industries, and the library is thus somewhat biased towards digital fabrication (3D printing, laser cutting etc.) My design priority has always been ease of coding rather than maximum realtime performance, but the library still has plenty of useful tools for realtime applications.
Fun news: I've posted a rough pre-beta port of Modelbuilder to JavaScript. Behold https://github.com/mariuswatz/modelbuilderjs, incomplete and quite likely buggy, but with the most basic geometry concepts in place. A sample sketch can be seen here: https://workshop.evolutionzone.com/modelbuilderjs/.
Like its Java sibling, Modelbuilder.js is the feeble attempts of a mathematically challenged coder to simplify computational geometry tasks, minimize repetitive code (esp. for-loops) and empower non-experts. The code is pure JS and tries to follow established JS conventions. It is also free of dependencies on other libraries, although I plan to add convenience methods to facilitate integration with Processing.js and (possibly) Three.js.
- Some minor code fixes
- Separated code specific to Processing 1.5.1 and Processing 2.0b series to separate directories for convenience. "src-universal" contains code that works with both code bases. I still use 1.5.1 for production
- New sub-library: UMovieMaker, a hack replacement for Shiffman's MovieMaker that will work with Processing 2.0b. The library uses uses the Monte Media Library (https://www.randelshofer.ch/monte/) by Werner Randelshofer and can write Quicktime without being dependent on QTJava.zip. See included examples.
Modelbuilder-0020 has been exported based on this code and briefly tested with Processing 2.0b8.
Downloads: Modelbuilder-0020 / UMovieMaker-001
Somewhat limited in scope at its inception (i.e. 3D printing,) the library has since proven valuable as a teaching tool, especially for the shorter independent workshops I teach in New York. Consequently Modelbuilder has expanded in scope and become the code equivalent of a Swiss Army Knife, containing tools I find useful but hopefully avoiding outright feature bloat.
Some examples of secondary functions:
- Color palette generation (UColorTool)
- File saving and parsing (UIO, UDataText, UFileNode and ULogUtil)
- FFT code with automatic damping and peak following for use in animation and sound-responsive applications.
With the final jump to Processing 2.0 I plan to do some much needed house-cleaning, making the code a little more consistent and changing some of the underlying design. This will likely come at the cost of some loss of backwards compatibility. Eggs and omelettes, etc.