Script-driver parametric generation


(Andrew Sundstrom) #1

I have a Rhino + Grasshopper feasibility question. Let me first pose a toy problem.

I want to create a history-based, parametric CAD model of a folded paper airplane whose creation can be driven by a Python script that will provide the parameter values for generating the airplane.

If you consider the folds in a sheet of paper required to make an airplane according to a given design, each fold can be translated or rotated with respect to its ideal position specified by the given design, and is, therefore, a source of variation on that design. Each fold’s chosen parameter values affect the admissible range of the parameters belonging to subsequent folds. In other words, each fold’s parameters impose a constraint on subsequent outcomes, and that constraint propagates through the remaining implementation on the given design.

To illustrate this, first consider the set of possible paper airplanes that can follow from the first fold being exactly centered on the major axis of the sheet of paper. Now consider the different set of possible paper airplanes that follow from the first fold being rotated 15 degrees clockwise with respect to the major axis of the sheet of paper.

If the entire paper airplane folding process employs N folds, where each fold can be specified by its respective translation and rotation parameters with respect to the ideal, then any given airplane can be specified by a vector of 2N parameters, where the zero vector of length 2N specifies the original airplane design. If the numerical range of each parameter is discretized into M values, then there are M^(2N) possible paper airplanes that can be specified this way.

Enter Grasshopper. I want to write a Python script that will generate vectors of length 2N, feed them to Rhino, and for each vector, generate the corresponding 3D airplane model. Rhino should enforce basic physics — paper cannot stretch or disappear — and constrain the geometry implied by the choice of fold parameters.

From what I’ve seen in demonstrations of generative origami and architecture, I believe this ought to be possible using Rhino + Grasshopper, but I’d like to hear from experts in the community before I dive headlong into this.

Many thanks,