You are currently reviewing an older revision of this page.
The goal is to create a freeform roof following a spatially curved path in a landscape (for simplicity we will not model the landscape here explicitly). The landscape is represented using only four top level control points. The example demonstrates how robust hierarchical parametric modeling can give an easy to manipulate model with complex geometric Features downstream and aesthetically interesting geometric responses.
{point1, point2, point3}
where each element is separated by commas between opening and closing curly brackets {}.
The next step is to create one inverted “T” cross section of the roof along the path. In order to complete the roof we will construct one cross section first and later replicate it along the path.
For the section we need a plane that is perpendicular to the path and one that is parallel to the horizontal component of the path.
To create the “ribs” or outrigger of the roof, we need to first define the direction the cross members should be pointing to. We can derive this direction from intersecting the two planes we already have since their intersection creates a Direction that is always horizontal and always perpendicular to the curve.
Now we will replicate the single section multiple times along the curved path. We will use a unique GenerativeComponents piece of functionality to do this. We can replace a single input value for a Feature with a “List” of values, which causes anything that depends on that Feature to be replicated for each of the values in the array. In our case we will use the “T” parameter of plane01. Instead of a single T = 0.3 value we will replace it with a “List” of values. The syntax for a list requires curly brackets and coma separated values.
T = {0, 0.2, 0.4, 0.6, 0.8, 1.0}
We can now use the Lists of Line.EndPoint’s of the sections to define a BSplineSurface, which will be the design surface for our roof.
(Skip this step if you already adjusted the vertical Line height in step 7.)
Currently the roof height is constant in height and width even as the path goes up and down. To make it more interesting we can make it responsive to the undulation of the path. To do so we replace the fix length of the vertical line, line01, of the sections with an expression that calculates the height as a function of the desired maximum height of the roof and the height of it base point along the path.
Additional steps could be placing a grid of components on the surface that responds to the distortions of the roof.
We will show one way here using a point grid on the surface and an intermediary PolygonGrid to place a user-defined cross bar panel along the surface. To start do the following:
Next we will create a simple prototypical crossbar panel. We use a placeholder Polygon to create it on the side. Then we create a new Feature from it. After that we can use the new Feature to populate the roof surface using the grid of Polygons instead of the placeholder as the input to our crossbar panel. This creates an elegant lattice as a roof, which still can be manipulated moving the initial four points of the path. So to start:
For the other diagonal press Apply and then the next button and replace a [1] for the [0] and a [3] for [2] in the Vertices index. A Polygon counts its Vertices in a circular fashion, not row by row. In this case we have four vertices, therefore, the index goes from 0-3. You should now have a diagonal cross.
StartRadius = line04.Length / 25.0
25 is an arbitrary scaling factor to scale down the radius, feel free to adjust it. Repeat adding a cone to the other diagonal as well.
In the final step, place the new Feature crossbar01 onto the Polygon grid on the roof.
The roof shaded with outlines and hidden lines.
We are finished. In order to be able to move the initial points you may want to toggle the BSplineSurface update property to Deferred using the deferred tool. Click on the bSplineSurface01 in the Symbolic tree model (since it is hidden we cannot select it from the geometry model). This caused the BSplineSurface and all its children (the crossbar, etc.) to not update while moving the path points. Once the path is adjusted you need to toggle the deferred property of the surface again to update its position. Below the symbolic tree is shown with the BSplineSurface hidden and deferred, which causes its children to turn red as well indicating they inherit the deferred state.
V = Series(0.2, 0.8, 0.1)
U = Series(0, 1.01, 0.025)
V = Series(0, 1.01, 0.05)