## Geometry through Extrusions and Containment Curves – Example 5.1

Perhaps the simplest way to start creating 3Dimensional objects in 3D modeling environments is through the extrusion command. In this example, I use the extrusion command to make some basic benches and tree trunks for a conceptual landscape design. To make the exercise a little more interesting I am also introducing the concept of containment curves, which is useful since sites are rarely perfect squares or grids. Containment curves have a number of useful applications, for sorting geometry based on its spatial extents. In this exercise the containment curves will be arbitrarily drawn in Rhino, but it is possible to also have containment curves that are parametrically generated and controlled.

**Step One – **Basic structure. I sketched out a project boundary, as well as two rectangles that represent potential paths, in Rhino. The project boundary curve is made into a planar surface, and divided using Isotrim/SubSrf into U and V directions controlled by sliders. Note that when you subdivide a surface in this way you get a gridded result that exceeds the limits of the original surface.

**Step Two – **Offset grid. Here I want to offset the “pavers” similarly to example 2.3. The first problem, however, is that Isotrim produces a simple data structure (similar to a flattened list), and I want a data structure similar to what a grid produces. One solution is to “Partition” the List, with the “S” (number of partitions), being equal to the number of columns of data you want, in this case being equal to my “V” value. To get the right structure I then needed to “Flip” the Matrix of points into rows, since I will be offsetting rows. Why not just start with rows? Because of the way grasshopper counts. (remember bottom left corner, counting up the columns). After doing these gymnastics, I can now offset every other row, using the logic in example 2.3. with one exception. Since the geometry here does not correspond to the world X/Y, i cannot just use a simple vector “X” component to move the geometry. Instead I must find a custom vector. I will explain this in the next section (Vectors and Fields) in detail, so just follow the setup show in the image, but basically you need to take two points and find the line, or vector between them. After this is all done, I flipped the matrix back to columns to make a future operation work correctly.

**Step Three** – now I am ready to get rid of everything outside of the boundary curve. Well, almost everything. To do this I split the surfaces along the boundary, and then found the center point of all my sub-surfaces. To do this I use the important concept of containment curves. This is done using the components “Point in Curve” or “Point in Curves” They function essentially the same, except “Point in Curve” lets you analyze only one curve while “Point in Curves” lets you analyze any number (including 1!). This does nothing in itself to your geometry, it only returns a value 0, 1, or 2 which tells you whether a point is inside, outside, or directly on a curve. In this case, I want to get rid of any geometry that is outside so I “Cull Pattern” with the pattern being True values for anything outside the curve. Use the Boolean “Equality” function to convert the 0 or 2 into a True or False Value. Now cull the Surfaces (not the center points!)

**Step Four – **Here I do another round of containment tests, this time to figure out if geometry is inside or outside my designated “hardscape” areas. Notice this time I use “Point in Curve* s*” this time. Also instead of culling, I do a dispatch, since I want to use the other geometry for another operation.

**Step Five** – That other operation is I want to create some random benches using (in this case 7%) some of the pavers. Only one thing is new here. Once I select the pavers I “Extrude” the geometry to create a bench. Note you need to add a vector component to get your extrusion to work. On a flat XY plane you will typically use “Z” if you want it to go straight up, but you can also extrude with any other vector if you want slanted or skewed geometry. Also, if you have an undulating surface, you *may* want to extrude using the surface normal (perpendicular to surface), but this is a topic for another example. Note that if you extrude from a curve, you may need to fuse the “Cap holes” component to create a solid. If you extrude from a Surface you don’t always need this, but I show it here regardless.

The last thing I do in this design is draw cylinders at center points arranged in a regular rhythm using cull N and Dispatch with a regular pattern. It still looks pretty random though.

Once the “DNA” for the project is setup, its time to play with the parameters. You can change the random seed as in the first 3 examples, but this doesn’t create much variation. You can also play with percentages and tree rhythms as in the second row. What changes the project the most, though, is playing with the potential curves that are manually drawn for containment, as in the last row.