DESIGN 1: TOWER 25m x 25m x 100m
Define 25m x 25m box.
h = 4, n = 0
Extrude surface in z direction by 4m to generate a ‘floor’.
Duplicate floor in z direction by 4m from origin.
Yes
EG. N = 4 #5
22
#4
18
#3
16
#2
12
#1
8
#0
4
h=h+4
No
is h > 100?
Get every nth item in list of floors, feed into new ‘list a’.
Dispatch every 2nd item in list a into ‘list b’.
#5
22
#3
16
#1
8
Rotate floors in list a by -nth degrees.
Rotate floors in list b by nth degrees.
No
is n > 24?
#4
18
#2
12
#0
4
n=n+1
Yes
Stop
N = 0
N = 1
N = 2
N = 3
3
DESIGN 2: DOME 50m Diameter
Define semi-sphere/dome with radius of 25m.
Extract dome edge, create planar surface.
U = 5, V = 5
Divide base surface by UV values.
Benefit of using oscillating circles method is it creates non uniform pts on surface (as opposed to regular surface subdivisions).
Create ‘oscillating circle’ curves, using dome as base surface, and UV origin points in planar surface as a centers.
{
}
Find intersection points of oscillating circle curves on dome surface.
Create circles at each intersection point. Use pt locations and normals to centre and orient circles.
Irrational Number (eg. √2, √3, π)
Extract individual digits (integers) to extent of intersecting pt list length.
Use list of integers values to create variation in radius of circles.
Project circle curves onto dome surface, creating surface fragments.
New Section 1 Page 1
New Section 1 Page 1
Dispatch fragments into individual lists based on surface area, apply different materials/ finishes.
4
New Section 1 Page 1
New Section 1 Page 1
New Section 1 Page 1
New Section 1 Page 1
DESIGN 3: HOLLOW CYLINDER 20m internal diameter, 50m outer diameter
Define two circles with radius of 25m and 10m.
Copy circles up in z direction by 20m.
Divide inner circle curves by 20 points, equally spaced
Create circles at each point on curves, radius of 3.
Divide circle curves by one.
Irrational Number (eg. √2, √3, π)
Extract individual digits (integers) to 80 digits.
Use list of integers values to determine rotation of each circle in xy plane.
Create interpolated curves through new points on each initial curve.
Repeat for inner curves. Loft top and bottom curves.
5
DESIGN 4: PLAZA 100m x 100m
Define 100m x 100m plane
Divide plane into grid by distance of 10m in UV directions.
i=0
Input string
i = i + 1, n = n + 1
String length = n (eg. n = 11)
(eg. “Computation”)
eg. “computation” n = 11 “computationc” n = 12 “computationco” n = 13
{
At least 13 characters are needed to generate more than 100 values, the amount of cells in the plaza grid. 13 characters will generate 104 digits (binary numbers are 8 digits long).
}
n >= 13?
No
Append string index (i) character to end of string.
Yes Convert string from ASCII to Binary (using module such as binascii).
Moving left to right in each row of grid starting from top, assign binary digits for 100 iterations.
Assign ‘0’ cells program of vegetation, and ‘1’ cells program of ‘pathway’.
0 1 1 0 0 1 1 0 1 1
0 1 1 0 0 1 1 0 1 1
0 1 1 0 1 1 1 1 0 1
0 1 1 0 1 1 1 1 0 1
1 0 1 1 0 1 0 1 1 1
1 0 1 1 0 1 0 1 1 1
0 0 0 0 0 1 1 1 0 1
0 0 0 0 0 1 1 1 0 1
0 1 0 1 1 1 0 1 0 0
0 1 0 1 1 1 0 1 0 0
0 1 1 0 1 0 1 0 0 1
0 1 1 0 1 0 1 0 0 1
0 1 1 0 1 1 1 0 0 1
0 1 1 0 1 1 1 0 0 1
1 1 0 0 1 1 1 0 1 1
1 1 0 0 1 1 1 0 1 1
0 1 1 1 1 0 1 1 0 1
0 1 1 1 1 0 1 1 0 1
1 1 0 1 1 1 0 1 1 0
1 1 0 1 1 1 0 1 1 0 LEGEND
0 6
Vegetation
eg. 01100011 01101111 01101101 01110000 01110101 01110100 01100001 01110100 01101001 01101111 01101110 01100011 01101111
To create further variation, repeat process for each cell type (0 or 1).
LEGEND
1
Pathway
Lawn
Tiles
Trees
Timber
DESIGN 5: BOX 25m x 25m x 25m
Define 25m x 25m rectangle
Create Srf from crv
25/3 (Division cell size)
Isotrim Srf in U and V direction
25/3 (Move factor)
Move in Z direction
25/3 (Extrusion factor)
Extrude in Z direction
Deconstruct Brep
Irrational Number (eg. √2, √3, π)
Extract individual digits from list of ints.
Use each integer value to move nth times through list of Brep faces and edges, culling them each time.
End after 10 cycles.
7
DESIGN 2: DOME - GRASSHOPPER SCRIPT 50m Diameter
This script is an extension of my initial computational workflow for a dome. It uses irrational numbers to create variation in the radius of circles that are projected onto the dome surface. In lieu of using a ‘populate 3d’ component, I have been able to create seemingly non uniform points as origin points by projecting the vertices of a complex mesh geometry. 25m Factor
Unit Z Vector Direction
1
Extrude
Radius Define Circle
Define Sphere
Weaverbird Mesh Icosahedron
Srf
Weaverbird Split Triangle Subdivision
Surface Split
Deconstruct Mesh
3
Crv Surface from Crv Srf
Cap Extrusion
Item index 0 (sphere top)
2
Vertices Srf
4
Pull point to Srf
Cull duplicate pts Brep
5
Pts
Pts Deconstruct pts
Facet Dome
{
Z components Boundary Surfaces =0?
Srf List
50 digits of pi
Boolean list Pt list
Boolean list
7
Cull by pattern
>1?
6
Srf
List
Cull by pattern Boolean list
Pts Surface closest pts
Cull by pattern
Pts
Srf
Evaluate srf at pts
List
List
Split list at index Normals
Radius Circle CNR
Srf
Center
8
Crv Project Crv Crv
Srf Split
Number
Duplicate data
List Length Index
8
Note - it is not possible to generate a list of digits of pi within Grasshopper beyond 15 digits. I imported the 50 individual values and duplicated that set to achieve desired list length.
9
3
}
Srf Split
Srf fragments
Area
10
>20?
Analysis of srf fragments
Srf List Swatch
Boolean List Dispatch list
Srf (area >20)
Srf (area <20)
>13?
Boolean List
Dispatch list
Srf (area >13)
Swatch
12
>9?
Boolean List
Dispatch list
Srf (area >9)
Swatch
13
>5?
Boolean List
Dispatch list
Srf (area >5)
Swatch
14
>3?
Boolean List
Dispatch list
Srf (area >3)
Mass Add
629.67m2
Custom Preview 73
List length Mass Add
783.10m2
Custom Preview 112
List length Area
Srf (area <5)
649.82m2
40
List length
Area
Srf (area <9)
Mass Add
Custom Preview
Area
Srf (area >13)
23
List length Area
Swatch
11
Custom Preview
Mass Add
766.41m2
Custom Preview 208
List length Area
Mass Add
284.88m2
9
DESIGN 2: DOME - GRASSHOPPER SCRIPT 50m Diameter
1. Sphere and extruded circle
2. Spliced sphere, creating dome
6. Points with Z value = 0 culled
10. Fragments with area of 20m2 or more dispatched out of list and allocated material.
10
3. Weaverbird Mes
7. Subsequent facets srfs also now culled.
11. Fragments with area of 13m2 or more dispatched out of list and allocated material.
12. Fragments wit more dispatched o allocated materia
sh Icosahedron
4. Icosahedron vertices (orange) pulled onto dome srf (dark blue). This was done to create evenly spaced, but not entirely uniform points on the dome surface.
8. Circle curves located at each point on dome srf, oriented based on normal of associated facet srf.
th area of 9m2 or out of list and al.
5. Dome facets - creates planar hexagons based on projected points on dome srf.
9. Circles projected onto dome srf, used to split dome srf into fragments.
13. Fragments with area of 5m2 or more dispatched out of list and allocated material.
14. Fragments with area of 3m2 or more dispatched out of list and allocated material.
11
DESIGN 5: BOX - GRASSHOPPER SCRIPT 25m x 25m x 25m
This script implements the ‘Traveling Salesman’ recursive algorithm, where the shortest possible path between several ‘cities’ is found, starting from a particular index in a list of cities. In this script, ‘cities’ are defined as points, and the salesman’s path through each city point is visualized via a polyline which is utilised to create a maze like facade envelope. This is an extension of my original box design idea, where I used an irrational number (pi) to help create what appears to be ‘random’ variation.
25m
Define Rectangle Height
{
Base
1
Box
50 digits of pi Dividend
Deconstruct Box
0, 1, 2, 3
List
2
Srfs
9
}
1000
Divisor
Divide
Faces
Index
Note - it is not possible to generate a list of digits of pi within Grasshopper beyond 15 digits. I imported the 50 individual values and duplicated that set to achieve desired list length.
Number
8
Duplicate data U&V Count
List
Index
3
Divide Srf
Split List Factor
Pts
Unit Z
List length
2
Motion
A
B
Unit Y
Move 2
Subtraction
Pts
Iterations
Pts
4 allCities
GhPython output pts
srf
Pull pt to srf Pts
Polyline
12
Motion
Move
The travelling salesman algorithm works by starting with a list (i From that specified index, the algorithm searches for the nearest removes it from the list of all points to visit, and repeats. It i itself until a base case is reached (number of iterations).
import rhinoscriptsyntax as rs import Rhino
Cull Duplicates pts
Unit X
Move
StartIndex
5
Motion
#initialized variables firstCity = allCities[startIndex] allCities.RemoveAt(startIndex) #remove first list from list of poi visitedCities = [firstCity] #used list of points
#the function def TravellingSalesman(fromCities, i): #two parameters nextIndex = Rhino.Collections.Point3dList.ClosestIndexInLi nextCity = allCities[nextIndex] visitedCities.append(nextCity) #after visiting a city, it allCities.RemoveAt(nextIndex) if (i>0): TravellingSalesman(nextCity, i-1) #continue itera
TravellingSalesman(firstCity, iterations) #calling the function output = visitedCities #what is used to build the polyline to visu Based off of example by Ex-Lab: https://vimeo.com/60606151
Polyline Crv Explode Segments Crv Length
> 3.5 ?
List
Boolean List
Cull by pattern
6
Segments Join Crvs
Simply Crv
Construct plane
7
0
Explode Crv Vertices
Index Area
List Item Centroid
Geometry
Target Orient
Index List Item
Pt A
1
Pt B
Vector 2pt
Centroid
X&Y size Rectangle Centroid
Area
in this example, points) and an index in that list. point to the start point, ‘visits’ that point, is considered a recursive function as it calls upon
8
1
Z Axis
Area
Origin
9
Plane Normal
Source
Target
Origin
10
ints, already visited
ist(allCities, fromCities)
Orient Sections
11
Rail
Sweep 1 Brep
is removed from list of cities to still visit
Cap Holes
ating until no iterations remaining
ualise path travelled
12
Boolean Difference
13
DESIGN 5: BOX - GRASSHOPPER SCRIPT 25m x 25m x 25m
1. 25x25x25m box defined
2. Side surfaces indexed out
3. Srfs divided b directions
5. TravellingSalesman output: Point list order preview + polyline
5a. TravellingSalesman output (without any ‘jittering’ of points): Point list order preview + polyline
6. Any line segme ‘grid’ culled by segments by lengt joined where poss polylines.
9. Line indexes used to construct vector direction to orient planes.
10. 1mx1m square curves oriented to polyline end points.
11. Square curve through polyline
14
by 9 in UV
3a. Pts list order preview + polyline - order is uniform.
4. Points are ‘jittered’ by extremely small amounts in xyz direction (using divided digits of pi). Duplicates culled.
ents outside separating th. Curves then sible to form
7. Polylines exploded, vertices index [0].
8. Polylines exploded, vertices index [0] and [1].
profile sweep rails.
12. Different resulting forms using boolean difference. 15