## Functional Parametric Modeling. Idea 1

While I was experimenting with xGenerative Design (xGen) a while ago, I had the idea of revisiting old tutorials that I developed and taught in classes over the past years using RhinoScript, FormZ, Dynamo, Digital Project and CATIA. In my experience, this is one of the best to learn new tools. Since I like to externalize what I understand in the form of notes that I can recall later on, I thought of starting a short-post series on form exploration *ideas* using xGen. Here is why:

- It provides a parallel data-flow representation that demonstrates how a parametric model actually works.
- It highlights the
*functional*nature of parametric modeling systems . That is, every operation will generate a new result that depends on, but does not affect, the parents/inputs. Hence the series name:**Functional Parametric Modeling**. - It combines a few forms of user interactions in one environment (described below), which I believe helps users gain different vantage points.

### Taxonomies

I am a big fan of lists, groups, and taxonomies. They are great devices for understanding the world around us. The process of making them sharpens one's understanding of a topic and pushes them to seek means to isolate and connect ideas; construct and disassemble concepts; and confirm hypotheses of how things work. Here are a couple of taxonomies that stayed with me from my graduate-research:

In a class on Building Information Modeling with Chuck Eastman in 2008, he presented BIM in reference to other CAD technologies as follows: Image Modeling (2D drawings), which is subsumed by Geometric Modeling (3D CAD). All of which, is again subsumed by Parametric Modeling. BIM encompasses all and adds industry-specific constraints and behaviors. The idea was that each technology not only bring new capabilities, but also different workflows and project delivery methods.

Fast forward to 2013, I worked with Woodbury on a few graduate research projects. During that time, I taught a BIM class at a local college in Vancouver, and had the opportunity to propose a structure for a new CAD course at SIAT with Woodbury. My idea was to give students an overview of CAD systems, as opposed to going in depth into any specific tool. I went with the metaphor of "teach them how to drive". Woodbury proposed a taxonomy that he developed to classify CAD tools based on how users interact with design representations. We went with the following sequence and taxonomy:

**Programming**is form of interaction that is shared among (almost) all CAD tools. Design representations are produced by writing and interacting with code using scripting and programming APIs.**Propagation Graphs**, or Visual Programming UIs, provide representations made of nodes and wires to define generative programs. Such tools include xGen, Dynamo, Grasshopper, etc.**Parametric and Constraint Based**systems allow users to create designs by modifying exposed properties and parameters; and enforcing rules and relationships. Such tools include: CATIA, Solidworks, Creo, NX, SpaceClaim, among others.**Direct Interaction**is where users interact with representations directly (click and drag), which allows for arbitrary (free) workflows. Such tools include Rhino, AutoCAD and formZ. I actually learned CAD starting with formZ (in 1998). Kudus to Chris Yessios and partners for releasing the first version in 1991. The history of how formZ evolved is quite interesting!

The above taxonomy aims to classify types of user interactions (UIs) as opposed to types of tools. That is to say, any CAD system will most likely offer multiple modes of interactions. The SIAT class, however, was taught in the sequence above because it moves from the most familiar to more formalized and rule-based interactions.

*Funny history bit: Chris Yessios and Robert Woodbury studied with Chuck Eastman at Carnegie Mellon. I had quite a bit of email exchange with Chris Yessios. I later studied with Chuck Eastman, and then Robert Woodbury--talk about a small world.*

### Idea 1: Boolean Operations

Boolean operators enable some of the most fascinating tools in CAD. They help solve spatial problems *logically*. Consider the two sets `A= [1,2,3]`

and `B= [3,4,5]`

:

- When asking the question, "Which elements from the two sets exist in A
`OR`

B?" We're technically asking for the**union**of both sets, because each element in the union exists in A`OR`

B. Hence, the result is`[1,2,3,4,5]`

. - The
**intersection**operation is resolved using the`AND`

Boolean operator. That to say, the common element(s) between A and B is`[3]`

. - When looking for elements that exist in A, but
`NOT`

B, we are**removing**from A all elements that exist in B. Hence, the result is`[1,2]`

.

Note that Boolean operations will only work on finite sets. Think of it this way, if the set A above was open-ended, *undefined*, then applying any logical operation will also return an undefined results. The intersection of `[1,2,3,...]`

and `[3,4,5]`

will be `[3,...]`

. The same goes for Boolean operations in CAD. They only work on well-defined geometric objects whose boundaries clearly separate what is "inside" from what is "outside".

Luckily, CATIA provides one of the most robust solid modeling engines out there. It only allows creating well-defined geometry, the solid type of which is known as Manifold Geometry (think manufacturable). Make sure to go over the short post I made on Geometric Objects and Topology. I must note, however, that there are very few times when you can create non-manifold (bad) geometry in CATIA. I guess if it is made by human, it can be broken by human. That said, CATIA won't allow creating new dependents on non-manifold geometry.

##### Workspace Setup

At the 2019 Hackathon in Milan, CATIA expert Edouard Sutre suggested that it's best to organize my xGen workspace as follows:

##### The Mechanism

Applying Boolean operations to complex objects can cause new interesting and unexpected forms to emerge. Here is an example inspired by one of the projects that Barrios Hernandez, Carlos Robert explained in his PhD Thesis.

##### Tweaks

Let's add a Smooth Curve node to generate further variations:

### Small Challenge:

If you have xGen, try implementing the Villarceau's Circles! Do you get a Manifold object?

### Extra Material:

Here is a very short reading list:

- An Outline of the Building Description System, Eastman et all.
- Building Product Models-Environments, Eastman.
- Representation of rigid solids theory, methods and systems, Requicha .
- Solid_and_physical_modeling, Jarek Rossignac .
- SolidModeling, Requicha and Rossignac.
- Generating Languages of Solid Models, Heisserman and Woodbury .

Finally, I suggest taking a look at *Ivan Sutehrland's SketchPad* that he produced as part of his MIT PhD thesis. It was the first interactive, object based, parametric CAD system, which also ran with a light-pen. Here is a remastered edition of his dissertation. Make sure to watch this documentary about SketchPad: