Tags: 3d, Code, digital-fabrication, ITP, mesh, modelbuilder, new york, NYU, parametric-design, processing.org, Workshops
Arc mesh tool created with Modelbuilder and ControlP5
I did a short lecture + workshop about digital fabrication and parametric modeling with Processing yesterday at NYU’s ITP program. Thanks to Dan Shiffman for the invite, it ended up being a lot of fun because of the great turnout of enthusiastic ITP’ers. It certainly made me even more regretful that I was unable to teach a fabbing course at ITP this semester, but with luck there will be other oppportunities.
As promised I have uploaded the pre-written examples I demo’ed as well as the code I (frenziedly) wrote live during our 1.5 hour coding session. The focus was to demonstrate the logic of the Modelbuilder library, a set of utilities and aimed at abstracting and simplifying some common tasks in computational creation of 3D meshes.
The library is really not all that sophisticated, but it shifts the focus away from OpenGL drawing logic towards a more object-oriented way of imaging 3D forms based on UVertexList objects. In a typical situation it should simplify a lot of tasks, as well as save dozens of for() loops and repetitive code. It also allows some pragmatic coding (aka “lazy”) coding practices enabling easy reuse of geometries due to the assumption that operations like “new UVertexList(vl)” should always copy input data by content rather than by reference.
I’m pleased to say that Modelbuilder performed well in the demo session, there’s nothing like live coding to reveal weaknesses or inconsistencies in code. But the Modelbuilder logic proved consistent under stress testing and we were able to do some pretty decent mesh generation in a limited amount of time.
A ZIP with all the files shown (including the Modelbuilder and ContolP5 libraries) can be downloaded from http://db.tt/5Ehmn6uz. It includes the following code examples:
- simple_geo_arc_4 A tool for creating a composition of 3D arcs (w/ valid face normal orientation and passing the “waterproof” criteria for 3D printing), generating output to STL format. This was written live in around 30 minutes.
- mb_04_gui_parametric A parametric 3D form generator created for my Makerbot residency – results look valid on screen but for some reason export to STL results in flawed models. I’ll look into debugging this example.
- mb_04_gui_heightfield An example showing how to create a heightfield mesh from an image, allowing interactive control of mesh resolution and Z scaling. Potentially useful for geographical elevation maps and Kinect depth maps.
- A set of examples demonstrating the core Modelbuilder functions





Stumbled across this after reading something Shiffman tweeted…No very little of Processing though I have gone through the first few chapters of Learning Processing…
I was able to download and stumble through settting up your examples from the workshop. Cool stuff! I can see how this could be useful for students to deconstruct what’s going on with the code, changing, modifying and seeing the results. However, I got down to the example, mb_04_gui_heightfield and when I run this I get an NullPointerException in file GUI at 5.img.width,
Any advice on what might be happening? (using Processing 1.2.1)
Also, in the sound examples, getting error “Cannot find class or type named “FFT” … though I see it?
Thanks!
Never mind… I figured the issue out. Had to move the data files out of data folder. Great stuff!
[...] This Arc mesh tool was created with Modelbuilder and ControlP5. Marius Watz did a short lecture + workshop about digital fabrication and parametric modeling with Processing at NYU’s ITP program The focus was to demonstrate the logic of the Modelbuilder library, a set of utilities and aimed at abstracting and simplifying some common tasks in computational creation of 3D meshes. The library is really not all that sophisticated, but it shifts the focus away from OpenGL drawing logic towards a more object-oriented way of imaging 3D forms based on UVertexList objects. In a typical situation it should simplify many tasks, as well as save dozens of for() loops and repetitive code. It also allows some pragmatic coding (aka “lazy”) coding practices enabling easy reuse of geometries due to the assumption that operations like “new UVertexList(vl)” should always copy input data by content rather than by reference. Workshop code examples can be downloaded here. [...]