SHAMSUL AKMAL
RMIT UNIVERSITY
GENERATIVE COMPONENTS: SURFACE EFFECTS
Component outline and depth
1 A B C D E F
2
3
4
5
Random formation of modules
Solid and Void derived from cuts on original module . This can be used to emit natural light and resulting in light patterns according to the random voids
Hamer Hall from Melbourne CBD
The terrace level and balcony
Building outline
Wall type division for different density configurations
Component Making
Points on circle to house hexagon
Point centroid of set of the base polygon
This hexagon will be the base polygon to construct the components
Coordinate system by origin XY points
Component Making
Create a polygon on top of the base polygon using its vertices
RotateSequence(polygon02.Vertices,Random(0,6))
Draw component lines using vertice ID as guide
function (Point pts) { Text T = {}; for (int i = 0; i < pts.Count-1; i++) { T[i] = new Text(); T[i].ByPointOrPlaneOrCoordinateSystem(pts[i], ToString(i)); } return T; }
Use the new coordinate system for solid offset from close curve
Finished component ( one out of five)
Symbolic view of component CoordinateSystem baseCS
Construction guides use only
Point point01
Circle circle01
Point point02
Structure of component
Polygon
Polygon
basePolygon
compPolygon
Generate component using basepolygon
Point
Text
centroidPointCompCS
text03
CoordinateSystem
Point
compCS
centroidCompPolygon
PolyLine compPolyline
Solid component01
Resulting view of solid component
Hexagon Grid
Polygon By Function
function (CoordinateSystem CS, Point ptGd, int floors, int bays) { Polygon pol = {}; int hexi = 0; int hexj = 0; int col = 0; Point verts = {}; int shift = 0; int patternOffseti = {1, 0, 1, 2, 3, 2}; //0 1 2 3 4 5 - handy index label int patternOffsetj = {0, 1, 2, 2, 1, 0}; for (int i = 0; i < floors-3; i=i+2) { if (col%2!=0) { shift = 1; } else { shift = 0; } pol[hexi] = {}; for (int j = 0; j < bays-2; j=j+2) { for (int k = 0; k < 6; k++) { verts[k] = ptGd[ i + patternOffseti[k] ][ j + patternOffsetj[k] + shift ]; } pol[hexi][hexj] = new Polygon(); pol[hexi][hexj].ByVertices(verts); hexj++; } hexi++; col++; } return pol; }
Form Making Two circles would form the base for the building outline. Next step is to have tangent lines
Form Making From www.gcuser.com forum
function (Circle A, Circle B) { double theta; double circleDistance = Distance(A.CenterPoint, B.CenterPoint); Line tanLines = {}; CoordinateSystem refCS = new CoordinateSystem(); refCS.ByOriginXPoint(A.CenterPoint, B.CenterPoint); theta = Acos((A.Radius-B.Radius)/circleDistance); CoordinateSystem thetaCSB1 = new CoordinateSystem(); thetaCSB1.ByOriginRotationAboutCoordinateSystem(B.CenterPoint, refCS, theta, AxisOption.Z); CoordinateSystem thetaCSB2 = new CoordinateSystem(); thetaCSB2.ByOriginRotationAboutCoordinateSystem(B.CenterPoint, refCS, -theta, AxisOption.Z); CoordinateSystem thetaCSA1 = new CoordinateSystem(); thetaCSA1.ByOriginRotationAboutCoordinateSystem(A.CenterPoint, refCS, theta, AxisOption.Z); CoordinateSystem thetaCSA2 = new CoordinateSystem(); thetaCSA2.ByOriginRotationAboutCoordinateSystem(A.CenterPoint, refCS, -theta, AxisOption.Z); Line tangencyFinderB1 = new Line(); tangencyFinderB1.ByStartPointDirectionLength(B.CenterPoint, thetaCSB1.XDirection, B.Radius); Line tangencyFinderB2 = new Line(); tangencyFinderB2.ByStartPointDirectionLength(B.CenterPoint, thetaCSB2.XDirection, B.Radius); Line tangencyFinderA1 = new Line(); tangencyFinderA1.ByStartPointDirectionLength(A.CenterPoint, thetaCSA1.XDirection, A.Radius); Line tangencyFinderA2 = new Line(); tangencyFinderA2.ByStartPointDirectionLength(A.CenterPoint, thetaCSA2.XDirection, A.Radius); tanLines[0] = new Line(); tanLines[0].ByPoints(tangencyFinderA1.EndPoint, tangencyFinderB1.EndPoint); tanLines[1] = new Line(); tanLines[1].ByPoints(tangencyFinderA2.EndPoint, tangencyFinderB2.EndPoint); return tanLines; }
( Source : Cuong of gcuser )
( Source : Gustav of gcuser )
Form Making
Tangent is resolved
Make new lines and arcs using established outline. Adjust the radius and distance
Form Making
Bspline Surface from closed curve
Make hexagon grid by Polygon By Function
Replicate points on surface
Resulting grid to generate components
Form Making Crate random number IDs to associate to hexagon tiles. This variable can be used as an input for the colour property of the hexagon grid to show randomness
transaction script "New script transaction" { int val = {}; for (int i = 0; i < polygon05.Count; i++) { val[i] = {}; for (int j = 0; j < polygon05[0].Count; j++) { val[i][j] = Random(1,6); } } GraphVariable idents = new GraphVariable("idents"); idents = val; }
Form Making Adjust density of grid
Component Generation Generate each component seperately using generate new component by function
function (int switchList, Polygon polys) { SHComponent01 sh = {}; int k = 0; for (int i = 0; i < polys.Count; i++) { for (int j = 0; j < polys[0].Count; j++) { if (switchList[i][j]==1) { sh1[k] = new SHComponent01(); sh1[k].ByDefault(polys[i][j]); k++; } } } return sh; }
Component Generation All five components generated to fill every hexagon tile
Completed Model Resulting surface pattern
Density Density levels
Big Arc
Straight lines
Small Arc
Model Symbol
Tangent line from two circles Hexagon Grid
Components
Perimeter Surface
Point Grid