



























Chapter_8_Fabrication
142	Fabrication



















Chapter_8_Fabrication


Today  there  is  a  vast  growing  interest  on  material  practice  and  
fabrication  in  combination  with
Computer Aided Manufacturing. Due to the changes have happened in design 
processes, it seems a crucial move and one of the ‘Musts’ in the field of 
design. Any design decision in digital area, should
be tested in different scales to show the ability of fabrication and 
assembly. Since it is obvious that the new design processes and algorithms 
do not fit into the traditional building processes, designers now  try  to  
use  the  modern technologies  in  fabrication  to  match  their  design  
products.  From the moment  that  CNC  machines  started  to  serve  the  
building  industry  up  to  now,  a  great  relation between digital design 
and physical fabrication have been made and many different technologies and 
machineries being invented or adjusted to do these types of tasks.

In order to design building elements and fabricate them, we need to have a 
brief understanding of the  fabrication  processes  for  different  types  
of  materials  and  know  how  to  prepare  our  design outputs for them. 
This is the main purpose of the fabrication issues in our design process. 
Based on the object we designed and material we used, assembly logic, 
transportation, scale, etc. we need to provide the suitable data from our 
design and get the desired output of that to feed machineries.

If traditional way in realization of a project made by Plans, Sections, 
Details, etc. today, we need more details or data to transfer them to CNC 
machines, to use them as source codes and datasheets
for industries and so on.

The point here is that the designer should provide some of the required 
data, because it is highly interconnected with design object. Designer 
sometimes should use the feedback of the fabrication‐ data‐preparation for 
the design readjustment. Sometimes the design object should be changed in 
order to fit the limitations of the machinery or assembly.

Up to this point we already know different potentials of the Grasshopper to 
alter the design, and these design variations could be in the favour of 
fabrication as well as other criteria. I just want to open the subject and 
touch some of the points related to the data‐preparation phase, to have a 
look
at  different  possibilities  that  we  can  extract  data  from  design  
project  in  order  to  fabricate  it  or sometime readjust it to fit the 
fabrication limitations.
143	Fabrication


8_1_Datasheets


In order to make objects, sometimes we simply need a series of 
measurements, angels, co
rdinates
and  generally  numerical  data.
There  are
multiple  components  in  Grasshopper  to  compute  the
measurements, distances, angels, etc. the important point is the correct 
and precise selection of the
objects that we need to address for any specific purpose. We should be 
aware of any geometrical
complexity that exits in the design and choose the desired points for 
measurement purposes. The
next point is to find the positions that give us the proper data for our 
fabrication purpose and avoid
to  generate  lots  of  tables  of  numerical  data  which  could  be  time 
 consuming  in  big  projects  but
useless at the end. Finally we need to export the data from 3D software to 
the spreadsheets and
datasheets for further use.









Paper_strip_project

The idea  of using  paper  strips attracted me for  some investigations, 
although  it had  been  tested
before (like in Morpho‐Ecologies by Hensel and Menges, 2008). To understand 
the simple assemblies
I started with very simple combinations for first level and I tried to add 
these simple combinations
together as the second level of assembly. It was interesting in the first 
tries but soon it became out
of order and the result object was not what I assumed. So I tried to be 
more precise to get the more
delicate geometries at the end.







Fig.8.1. Paper strips, first try.
144	Fabrication





In the next step I tried to make a very simple set up and understand the 
geometrical logic and use it
as the base for digital modelling. I assumed that by jumping into digital 
modelling I would not be
able to make physical model and I was sure that I need to test the early 
steps with paper.

My aim was to use three paper strips and connect them, one in the middle 
and another two in two
sides with longer length, restricted at their ends to the middle strip. 
This could be the basic module.





Fig.8.2.  simple  paper  strip  combination  to  understand  the  
connections  and  move  towards  digital
modelling.







Digital modelling

Here I wanted to model the paper strip digitally after my basic 
understanding of the physical one.
From the start point I need a very simple curve in the middle as the base 
of my design and I can
divide it and by culling these division points (true, false) and moving 
(false ones) perpendicular to the
middle
curve  and
using  all  these  points
(true  ones
and  moved
ones)  as  the  vertices
for  two
interpolated curves I can model this paper strips almost the same as what I 
described.






Fig.8.3.a/b. First modelling method with interpolated curves as side 
strips.
145	Fabrication


But it seemed so simple and straightforward. So I wanted to add a gradual 
size‐differentiation in connection  points  so  it  would  result  in  a  
bit  more  complex  geometry.  Now  let’s  jump  into Grasshopper and 
continue the discussion with modelling there. I will try to describe the 
definition briefly and go to the data parts.












Fig.8.4. The <curve> component is the middle strip which is a simple curve 
in Rhino. I reparameterized
it and I want to evaluate it in the decreasing intervals. I used a <range> 
component and I attached it
to a <Graph Mapper> component (Params > Special > Graph Mapper). A <Graph 
mapper> remaps a set of numbers in many different ways and domains by 
choosing a particular graph type. As you see, I evaluated the curve with 
this <Graph mapper> with parabola graph type and the resultant points on 
the curve are clear. You can change the type of graph to change the mapping 
of numeric range (for
further information go to the component help menu).
146	Fabrication



Fig.8.5.  After  remapping  the  numerical  data  I  evaluated  the  middle 
 curve  with  two  different
<evaluate> components. First by simply attach it to the data from <graph 
mapper> as basic points. Then I need to find the midpoints. Here I find the 
parameters of the curve between each basic point and the next one. I 
<shift>ed the data to find the next point and I used <dispatch > to exclude 
the last item of the list (exclude 1) otherwise I would have one extra 
point in relation to the <shift>ed points. The <function>  component  
simply  find  the  parameter  in  between  ( f(x)=(x+y)/2  )  and  you  see 
 the resultant parameters being evaluated.


Fig.8.6.  Now  I  want  to  move  the  midpoints  and  make  the  other  
vertices  of  the  side  strips. Displacement of these points must be 
always perpendicular to the middle curve. So in order to move the points I 
need vectors, perpendicular to the middle curve at each point. I already 
have the Tangent vector at each point, by <evaluate> component. But I need 
the perpendicular vector. We now that the  Cross  product  of  two  vectors 
 is  always  a  vector  perpendicular  to  both  of  them  (Fig.8.7).  For 
example unit Z vector could be the cross product of the unit X and Y 
vectors. Our middle curve is a planer curve so we now that the Z vector at 
each point of the curve would be always perpendicular to the curve plane. 
So if I find the cross product of the Tangent of the vector and Z vector at 
each point, the result is a vector perpendicular to the middle curve which 
is always lay down in the curve’s plane.
So I used Tangent of the point from <evaluate> Component and a <unit Z> 
vector to find the <XProd>
of them which I know that is perpendicular to the curve always. Another 
trick! I used the numbers of the  <Graph  Mapper>  as  the  power  of  
these  Z  vectors  to  have  the  increasing  factors  for  the movements 
of points, in their displacements as well, so the longer the distance 
between points, the bigger their displacements.
147	Fabrication





Fig.8.7. Vector cross product. Vector A and B are in base plane. Vector C 
is the cross product of the A
and B and it is perpendicular to the base plane so it is also perpendicular 
to both vectors A and B.










Fig.8.8. Now I have both basic points and moved points. I <merge>d them 
together and I sorted them
based on their (Y) values to generate an <interpolate>d curve which is one 
of my side paper strip. (If
you manipulate your main curve extremely or rotate it, you should sort your 
points by the proper
factor).
148	Fabrication



Fig.8.9.  Using  a  <Mirror  Curve>  component  (XForm  >  Morph  >  Mirror 
 Curve)  I  can  mirror  the
<interpolate>d curve by middle <curve> so I have both side paper strips.





Fig.8.10. Now if I connect middle curve and side curves to an <extrude> 
component I can see my first paper strip combination with decreasing spaces 
between connection points.






















Fig.8.11.  I  can  simply  start  to  manipulate  the  middle  strip  and  
see  how  Grasshopper  updates  the three paper strips which are connecting 
to each other in six points.
149	Fabrication


After I found the configuration that I wanted to make a paper strip model, 
I needed to extract the dimensions and measurements to build my model with 
that data. Although it is quiet easy to model
all these strips on paper sheets and cut them with laser cutter but here I 
like to make the process more general and get the initial data needed to 
build the model, so I am not limited myself to one specific machine and one 
specific method of manufacturing. You can use this data for any way of 
doing  the  model  even  by  hand  !!!!  as  I  want  to  do  in  this  
case  to  make  sure  that  I  am  not overwhelmed by digital!

By doing a simple paper model I know that I need the position of the 
connection points on the strips and   it   is   obvious   that   these   
connection   points   are   in   different   length   in   left_side_strip, 
right_side_strip and middle_strip. So if I get the division lengths from 
Grasshopper I can mark them
on the strips and assemble them.

Since strips are curve, the <distance > component does not help me to find 
the measurements. I need the length of curve between any two points on each 
strip. When I evaluate a parameter on a curve, it gives me its distance 
from the start point as well. So I need to find the parameter of the 
connection points of the strips (curves) and evaluate the position of them 
for each curve and the
<evaluate> component would give me the distance of the points from the 
start point of curve means positions of connection points.


Fig.8.12. Although my file became a bit messy I replaced some components 
position on canvas to bring them together. As you see I used the first set 
of points that I called them ‘main curve points’ on the middle strip 
(initial curve). These are actually connection points of strips. The (L) 
output of the component gives me the distances of connection points from 
the start points of the middle strip. I used these points to find their 
parameter on the side curves as well (<curve cp> component). So I used 
these parameters to evaluate the side curve on those specific parameters 
(connection points) and find their distances from the start point. I can do 
the same to find the distance of the connection points on the other side 
strip (<mirror>ed one) also. At the end, I have the position of all 
connection points in each paper strip.
150	Fabrication


Make sure that the direction of all curves should be the same otherwise you 
need to change the direction of the curve or if it affects your project, 
you can simply add a minus component to minus this distances from the curve 
length which mathematically inverses the distance and gives you the 
distances of points from the start point instead of end point (or vice 
versa).














Exporting Data


Fig.8.13. Right‐click on the <panel> component and click on the ‘stream 
contents’. By this command
you would be able to save your data in different formats and use it as a 
general numeric data. Here I
would save it with simple .txt format and I want to use it in Microsoft 
Excel.
151	Fabrication



Fig.8.14. On the Excel sheet, simply click on an empty cell and go to the 
‘Data’ tab and under the ‘Get External Data’ select ‘From Text’.  Then  
select the saved  txt file  from  the address  you  saved  your stream 
content and follow the simple instructions of excel. These steps allow you 
to manage your different types of data, how to divide your data in 
different cells and columns etc.





Fig.8.15. Now you see that your data placed on the Excel data sheet. You 
can do the same for the rest
of your strips.
152	Fabrication



Fig.8.16. Table of the connection points alongside the strip.




If you have a list of 3D coordinates of points and you want to export them 
to the Excel, there are different options than the above example. If you 
export 3D coordinates with the above method you will see there are lots of 
unnecessary brackets and commas that you should delete. You can also add 
columns by clicking in the excel import text dialogue box and separate 
these brackets and commas from the text in different columns and delete 
them but again because the size of the numbers are not the same, you will 
find the characters in different columns that you could not align 
separation lines for columns easily.

In such case I simply recommend you to decompose your points to its 
components and export them separately. It is not a big deal to export three 
lists of data instead of one.







Fig.8.17. Using <decompose> component to get the X, Y and Z coordinates of 
the points separately to export to a data sheet.
153	Fabrication




You  can  also  use  the  ‘Format()’  function  to  format  the  output  
text,  directly  from  a  point  list  in desired  string  format.  You  
need  to  define  your  text  in  way  that  you  would  be  able  to  
separate different parts of the text by commas in separate columns in 
datasheet.




Enough for modelling! I used the data to mark my paper strips and connect 
them together. To prove
it even to myself, I did all the process with hand !!!! to show that 
fabrication does not necessarily mean  laser  cutting  (HAM,  as  Achim  
Menges  once  used  for  Hand  Aided  Manufacturing!!!!).  I  just spent an 
hour to cut and mark all strips but the assembly process took a bit longer 
which should be
by hand anyway.
154	Fabrication





















Fig.8.18.a/b/c. Final paper‐strip project.
155	Fabrication


8_2_Laser Cutting and Cutting based Fabrication


The  idea  of  laser  cutting  on  sheet  materials  is  very  common  
these  days  to  fabricate  complex
geometries.  There  are  different  ways  that  we  can  use  this  
possibility  to  fabricate  objects.  Laser cutter method suits the objects 
that built with developable surfaces or folded ones. One can unfold the 
digital geometry on a plane and simply cut it out of a sheet and fold the 
material to build it. It is also suitable to make complex geometries that 
could be reduced to separate pieces of flat surfaces and one can 
disassemble the whole model digitally in separate parts, nest it on flat 
sheets, add the overlapping parts for connection purposes (like gluing) and 
cut it and assemble it physically. It is also possible  to  fabricate  
double‐curve  objects  by  this  method.  It  is  well  being  experimented 
 to  find different sections of any ‘Blob’ shaped object, cut it at least 
in two directions and assemble these sections together usually with Bridle 
joints and make rib‐cage shaped models.

Since the laser cutter is a generic tool, there are other methods also, but 
all together the important point is to find a way, to reduce the geometry 
to flat pieces to cut them from a sheet material, no matter paper or metal, 
cardboard or wood and finally assemble them together (if you have Robotic 
arm and you can cut 3D geometries it is something different!).

Among the different ways discussed here I want to test one of them in 
Grasshopper and I am sure that you can do the other methods based on this 
experiment easily.




Free‐form surface fabrication

I decided to fabricate a free‐form surface to have some experiments with 
preparing the nested parts
of a free‐form object to cut and all other issues we need to deal with.


Fig.8.19.  Here  I  have  a  surface  and  I  introduced  this  surface  to 
 Grasshopper  as  a  <Geometry> component,  so  you  can  introduce  any  
geometry  that  you  have  designed  or  use  any  Grasshopper object that 
you have generated.




Sections as ribs

In order to fabricate this generic free‐form surface I want to create 
sections of this surface, nest
them on sheets and prepare the files to be cut by laser cutter. If the 
object that you are working on has a certain thickness then you can cut it 
but if like this surface you do not have any thickness you need to add a 
thickness to the cutting parts.
156	Fabrication



Fig.8.20. In the first step I used a <Bounding Box> component to find the 
area that I want to work on. Then by using an <Explode> component (Surface 
> Analysis > BRep components) I have access to its edges. I selected the 
first and second one (index 0 and 1) which are perpendicular to each other.





Fig.8.21. In this step I generated multiple perpendicular frames alongside 
each of selected edges. The number of frames is actually the number of ribs 
that I want to cut.


Fig.8.22. Closer view of frames generated alongside the length and width of 
the object’s bounding box. As you see I can start to cut my surface with 
this frames.
157	Fabrication








Fig.8.23. Now if I find the intersections of these frames and the surface 
(main geometry), I actually generated  the  ribs  base  structure.  Here  I 
 used  a  <BRep  |  Plane>  section  component  (Intersect  > Mathematical 
> BRep | Plane) to solve this problem. I used the <Geometry> (my initial 
surface) as BRep and generated frames, as planes to feed the section 
component.







Fig.8.24. Intersections of frames and surface, resulted in series of curves 
on the surface.
158	Fabrication


Nesting

The next step is to nest these curve sections on a flat sheet to prepare 
them for the cutting process.
Here I drew a rectangle in Rhino with my sheet size. I copied this 
rectangle to generate multiple sheets overlapping each other and I drew one 
surface that covers all these rectangles to represent them into 
Grasshopper.





Fig.8.25. Paper sheets and an underlying surface to represent them in 
Grasshopper.




I  am  going  to  use  <Orient>  component  (XForm  >  Euclidian  >  
Orient)  to  nest  my  curves  into  the surface which represents the 
sheets for cutting purpose. If you look at the <orient> component you see 
that we need the  objects plane as reference plane and target plane  which 
should be on  the surface. Since I used the planes to intersect the initial 
surface and generate the section curves, I can use them again as reference 
planes, so I need to generate target planes.





Fig.8.26. I introduced the cutting surface to Grasshopper and I used a 
<surface Frame> component
(Surface > Util > Surface frames) to generate series of frames across the 
surface. It actually works like
<divide surface> but it generates planes as the output, so exactly what I 
need.
159	Fabrication


















Frames











Fig.8.27. Orientation. I connected the section curves as base geometries, 
and the planes that I used to
generate  these  sections  as  reference  geometry  to  the  <orient>  
component.  But  still  a  bit  of manipulations is needed for the target 
planes. If you look at the <surface frame> component results you see that 
if you divide U direction even by 1 you will see it would generate 2 
columns to divide the surface. So I have more planes than I need. So I 
<split> the list of target planes by the number that comes from the number 
of reference curves. So I only use planes as much as curve that I have. 
Then I moved  these  planes  1  unit  in  X  direction  to  avoid  
overlapping  with  the  sheet’s  edge.  Now  I  can connect these planes to 
the <orient> component and you can see that all curves now nested on the 
cutting sheet.


Fig.8.28. nested curves on the cutting sheet.
160	Fabrication


Making ribs


Fig.8.29. After nesting the curves on the cutting sheet, as I told you, 
because my object does not have
any thickness, in order to cut it, we need to add thickness to it. That’s 
why I <offset> oriented curves with desired height and I also add <line>s 
to both ends of these curves and their offset ones to close the whole 
drawing so I would have complete ribs to cut.




Joints (Bridle joints)

The next issue is to generate ribs in other direction and make joints to 
assemble them after being
cut. Although I used the same method of division of the bounding box length 
to generate planes and then sections, but I can generate planes manually in 
any desired position as well. So in essence if you
do not want to divide both directions and generate sections evenly, you can 
use other methods of generating planes and even make them manually.


Fig.8.30. As you see here, instead of previously generated planes, I used 
manually defined planes for the  sections  in  the  other  direction  of  
the  surface.  One  plane  generated  by  X  value  directly  from
<number slider> and another plane comes from the mirrored plane on the 
other side of the surface
(surface length – number slider). The section of these two planes and 
surface is being calculated for the next steps.
161	Fabrication


Now I can orient these new curves on another sheet to cut which is the same 
as the other one. So let’s generate joints for the assembly which is the 
important point of this part.


Fig.8.31. since we have the curves in two directions we can find the points 
of intersections. That’s why I used <CCX> components (Intersect > Physical 
> Curve | Curve) to find the intersect position of these curves which means 
the joint positions (The <CCX> component is in cross reference mode).




After finding joint’s positions, I need a bit of drawing to prepare these 
joints to be cut. I am thinking
of preparing bridle joints so I need to cut half of each rib on the joint 
position to be able to join them
at the end. First I need to find these intersect position on the nested 
ribs and then draw the lines for cutting.


Fig.8.32.  If  you  look  at  the  outputs  of  the  <CCX>  component  you  
can  see  that  it  gives  us  the parameter  in  wish  each  curve  
intersect  with  the  other  one.  So  I  can  <evaluate>  the  nested  or
<orient>ed curves with these parameters to find the joint positions on the 
cutting sheet as well.
162	Fabrication



Fig.8.33. Now we have the joint positions, we need to draw them. First I 
drew lines with <line SDL> component with the joint positions as start 
points, <unit  Y> as direction and I used half of the rib’s height as the 
height of the line. So as you see each point on the nested curves now has a 
tiny line associated with it.





Fig.8.34. Next step, draw a line in X direction from the previous line’s 
end point with the length of the
<sheet_thickness> (depends on the material).
163	Fabrication





Fig.8.35. This part of the definition is a bit tricky but I don’t have any 
better solution yet. Actually if you offset the first joint line you will 
get the third line but as the base curve line is not straight it would 
cross the curve (or not meet it) so the end point of the third line does 
not positioned on the curve. Here I drew a line from the end point of the 
second line, but longer than what it should be, and
I  am  going  to  trim  it  with  the  curve.  But  because  the  <trim  
with  BRep>  component  needs  BRep objects not curves, I extruded the base 
curve to make a surface and again I extruded this surface to make a closed 
BRep. So if I trim the third line of the join with this BRep, I would get 
the exact joint shape that I want.







Fig.8.36. Using a <join curves> component (Curve > Util > Join curves) now 
as you can see I have a slot shaped <join curve> that I can use for cutting 
as bridle join in the ribs.
164	Fabrication








Left joint slot












Right joint slot





Fig.8.37. I am applying the same method for the other end of the curve 
(second joints on the other
side of the curve).





Fig.8.38. Ribs with the joints drawn on their both ends. With the same 
trick I can trim the tiny part of the base curve inside joint but because 
it does not affect the result I can leave it.




Labelling

While  working  in  fabrication  phase,  it  might  be  a  great  disaster  
to  cut  hundreds  of  small  parts
without any clue or address that how we are going to assemble them 
together, what is the order, and  which  one  goes  first.  It  could  be  
simply  a  number  or  a  combination  of  text  and  number  to address 
the part. If the object comprises of different parts we can name them, so 
we can use the names or initials with numbers to address the parts also. We 
can use different hierarchies of project assembly logic in order to name 
the parts as well.

Here I am going to number the parts because my assembly is not so 
complicated.
165	Fabrication








Fig.8.39. As you remember I had a series of planes which I used as the 
target planes for orientating my section curves on the sheet. I am going to 
use the same plane to make the position of the text. Since this plane is 
exactly on the corner of the rib I want to displace it first.









Initial planes	Moved planes














Fig.8.40. I moved the corner planes 1 unit in X direction and 0.5 unit in Y 
direction (as <sum> of the
vectors) and I used these planes as the position of the text tags. Here I 
used <text tag 3D> and I generated a series of numbers as much as ribs I 
have to use them as texts. The <integer> component that I used here simply 
converts 12.0 to 12. As the result, you can see all parts have a unique 
number
in their left corner.
166	Fabrication



Fig.8.41. I can change the division factors of the cutting surface to 
compress ribs as much as possible
to avoid wasting material. As you see in the above example, from the start 
point of the sheet_3 ribs
started to be more flat and I have more space in between. Here I can split 
ribs in two different cutting
surface and change the division points of each to compress them based on 
their shape. But because I
am not dealing with lots of parts I can do this type of stuff manually in 
Rhino, all parts does not
necessarily to be Associative! Now I have the ribs in one direction, and I 
am going to do the same for
the other direction of ribs as well. The only thing that you should 
consider here is that the direction of
the  joints  flip  around  here,  so  basically  while  I  was  working  
with  the  <orient>  geometry  in  the
previous part here I should work with the <offset> one.




Cutting

When all geometries become ready to cut, I need to burn them and manage 
them a bit more on my
sheets. As you see in Figure 8.42 they all nested in three sheets. I 
generated three different shapes
for the ribs in the width direction of the object to check them out. The 
file is now ready to be cut.


Fig.8.42. Nested ribs, ready to be cut.
167	Fabrication



Fig.8.43. Cut ribs, ready to assemble.




Assembly

In our case assembly is quiet simple. Sometimes you need to check your file 
again or even provide
some help files or excel sheets in order to assemble your parts in 
different fabrication methods. All
together, here is the surface that I made.
168	Fabrication










8.44.a/b. Final model.
169	Fabrication









Fabrication is a wide topic to discuss. It highly depends on what you want 
to fabricate, what is the material, what is the machine and how fabricated 
parts going to be assemble and so on. As I told you before,  depend  on  
the  project  you  are  working  on,  you  need  to  provide  your  data  
for  the  next stages. Sometimes it is more important to get the assembly 
logic, for example when you are working with simple components but complex 
geometry as the result of assembly.







Fig.8.45. Assembly logic; material and joints are simple; I can work on the 
assembly logic and use the data to make my model.
