75%(8)75% found this document useful (8 votes) 24K views200 pagesAdvanced 3d Printing-Resized
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content,
claim it here.
Available Formats
Download as PDF or read online on Scribd
~Acknowledg
ements
We must acknowledge. in particular, Adrian Bowyer y Alessandro Ranellucci for
the RepRap and Slic3r projects. As well as Jonathan Keep for being one of the
greatest pioneers of clay 3D printing.
Thanks to WASP for the LOM technology development.
To Sergio for the effort we put into Controimad's development every day.
Congratulations to Bob Meneel and his team for this amazing family called Rhino.
Special thanks to the many students of architecture and design who have
worked and studied with us over the last years. Sometimes we learn from them
more than they learn from us.
Also, thanks to Rachael Verdugo and Ryan Hillier on the English version side.
Authors as Arturo Tedeschi and Giancarlo Di Marco were an inspiration.
Finally, we want to thank Alice and Laura. Their support, in every imaginable way.
has made this book possible.
Advanced 30 printing with Grasshopper® vii
(eeVill
‘Advanced 30 printing with GrasshoppersThe authors
Diego Garcia Cuevas
Diego Garcia Cuevas is an expert in digital fabrication. Architect by Universidad
de Valladolid (Spain) and Master in Biodigital Architecture by Universitat
Internacional de Catalunya. As a Rhino lover, he is an Authorized Rhinoceros®
Trainer by Mcneel Europe (2008).
He currently teaches at Universidad Europea and as a visitor at other schools of
architecture and design. At Universidad Europea he teaches Architectural
Geometry as course's coordinator, and several design and drawing courses. Also
parametric design at Master de Arquitectura.
Co-founder with Sergio Alonso del Campo of Controlmad Advanced Design
Centre (Madrid)
Linkedin: dgcuevas _Instagram: diegocuevasene
Gianluca Pugliese
Gianluca Pugliese is a digital fabrication and AM expert. He is Master in Digital
Fabrication (Fab Academy] by Fab foundation.
He currently teaches additive manufacturing and sustainability at I.E. Business
School and 3d printing and robotics for the Digital Fabrication and Fashion Future
Master at IED Madrid. He also works as a visitor in other intemational schools of
design,
Iberia manager for WASP, he founded Lowpoly in 2018, in Madrid and he
develops projects based on 3D printing and sustainable materials.
Linkedin: gpugliese Instagram: lowpoly info
Advanced 20 printing with Grasshopper xPeg: 30>) Cuneuemectece ome elec)Ctr
controlmad
Controlmad Advanced Design Centre is both, a design practice and a training
centre,
Founded at early 2010 by Sergio Alonso del Campo and Diego Garcia Cuevas,
Controimad tries to answer the changing environment for advanced
architecture, engineering and design.
As a design practice, our working process is characterized by CNC technology.
which allows making architectural components - interior and exterior ones -
furniture, prototypes, etc., leaving the static concept of a design office and
taking Anglo-Saxon concepts such as "Know-How" and “Leaming-by-doing”,
where is put into practice formal and theoretical research
As a training center, we teach Rhinoceros® and Grasshopper® as well as many
plug-ins. We are an Authorized Rhino Training Center and Authorized Rhino
FabStudio.
(Picture by Controlmad ~ all rights reserved)
Advanced 30 printing with Grasshoppers xl5
x
a
Q
8
=
F
a
2
=
Mera ane.&y) LOWPOLY
LOWPOLY was born as a WASP distributor in the Iberian Peninsula, later
expanding to offer a comprehensive design service specialized in digital
manufacturing and innovation, which is tailored to the needs of each client,
From rapid prototyping, to designing parts for industrial use, 3D ceramic printing:
3D scanning or developing innovation and sustainable projects, everything is
custom made using the latest technology.
Large companies and institutions such as Fundacién La Caixa, Acciona, Istituto
Europeo di Design Madrid, Canal de Isabel Il and many more have trusted our
services
(Picture by Lowpoly ~ all rights reserved)
Advanced 30 printing with Grasshoppers xill_ Introduction
This book is developed for students and professionals interested in controlling
3d printing directly from Rhinoceros® and Grasshopper. It is a manual to learn
the basics of the connection between software and digital fabrication
language in a detailed way, focusing on extrusion machines with material as
clay, thermoplastics or any other material that can be extruded with a 3D
printer,
Grasshopper® is the parametric environment of Rhinoceros®. It has become
one of the most powerful tools for any designer as it allows you to start coding
from scratch, in a visual and easy way. It is widely used on car, jewellery,
architectural design and almost any design field.
Nowadays a complete digital designer is a multitasking individual capable of
controlling the necessary tools (digital and physical) for the development of a
design. This means that design and crafting technique should be together. This.
is not a new concept. Students from many fields such as architecture, design,
arts and crafts, engineering... are forced to learn many different software in
order to develop their ideas and integrate themselves into the uprising
competitive professional working environment. Their designs have to go
outside of the computer and so, nowadays we can find more laboratories
integrated into universities and high-schools with digital fabrication tools. These
laboratories’ standard equipment usually includes laser cutters, milling
machines and 3d printers but other tools such as vinyl cutters or robot arms
could be found. Its interesting to see how students depend on these machines
to develop physical mock-ups of their 3d models. What students usually expect
from this technology is to get the most accurate mock-up of their model. We
could say that this technology is mainly used as a definitory or last step to try to
get the virtual into the physical but it is even more interesting to explore and
experiment on these machines and materials as many new options open up in
the fields of design and research.
Advanced 30 printing with Grasshopper® 1In this book we will give solutions to some problems that present themselves
when 3d printing, but we want to introduce the reader to also explore the
possibilities of the code vs. design, and create a sensibility over design and its
fabrication process. Aspects such as the geometry of the design vs. the
behaviour of the material, may differ to what we expected, opening a new
range of possibilities that where not foreseen. The aim of this book is also to
have fun and work with the material in an experimental way where parameters
such as gravity, fluidity, speed or flow rate create new possibilities that were not
pre-empted in the design. At the beginning the reader will discover sculptural
objects, unique on their features. A possible mass production could be
proposed after controling all aspects of the g-code evolving the 3d printing
process of the production into a singular aspect.
For the development of the models we will work with a 3 axis 3d printer because
this type of machine is very common in the laboratories of digital fabrication
some readers may own one themselves - the near-weekly rate of new &
affordable models appearing on the market makes possessing your own
cheaper than ever.
Any brand of 3D printer could be used to follow the book. We will focus on the
DeltaWASP 2040. It is a trustable machine that can be used to extrude plastic
or clay just by changing the type of extruder. It uses a delta system considerably
faster than a cartesian one. The printing area is a cylinder of 20cm. diameter
by 40cm. height, hence its name.
Part | introduces to the reader C.N.C. technology.
Part Il explains how to prepare the clay for 3D printing
Part Ill explains the standard workflow for 3D printing. it mainly consists of the
following steps:
1. Create a 3D model in any 30 software
2. Export it as *.st! format
3. Open the *stl file in a slicer software. It will make horizontal sections of
‘our model with an embedded g-code generator, which will transform
the sections into a text file that can be understood by C.N.C
technology.
4. Sendit to a 3D printer.
1d 3D printing with Grosshopper®part IV shows a more custom way of 3D printing controlling the path for the 3D
printer directly in Rhinoceros® and Grasshopper® and transforming the path
ctly from Grasshopper®, with no plug-ins. Non-planar 3D
.g and drawing 3D printing can be done.
printin
part V shows parametric samples for 3D printingmo F-
y
§ ale
C
milling laser
ral
s}e 1
a £1 — 5 :
waterjet plasma
— mo
c 1 :
hot wire 3D printingPART |
C.N.C.
technology
C.N.C. stands for Computer Numerical Control. It is a technology that can
move a machine in different directions or axis according to a set of defined
instructions given to the machine by a text file. That file contains the points in
space simplified to their X.Y,2 coordinates. The coordinates describe the
movements and the subsequent paths created to make the physical model.
This technology has existed since 1980's and it has remained almost the same
since then. What has really changed, is the software that creates the paths or
polylines itself, making the user experience much easier.
As we design 3d models, it is necessary to transform them into points. A typical
path is as following:
3D model > polylines > points > text file > 3D printer
In accordance with the ‘3D model’, we can mainly find two types of objects:
Meshes and N.U.R.B.S.
A mesh is a 3D object made of points, joined with edges creating faces that
‘are (mostly) quadrangular or triangular. Meshes are commonly used for
animation, free organic modelling and other operations as form finding or
structural analysis. Due to subdivision calculation algorithms as Catmull-Clark or
Loop, it is relatively easy to start modelling a simple object and subdivide it into
a smooth, rounded object. They are also necessary in order to evaluate an
object for form finding strategies or calculation analysis. Forces and supports
Advanced 30 printing with Grasshopper®have to be applied to the vertices of a mesh (or to the equivalent linear
element, the points of a polyline)
Mesh subdivision example.
AN.URBS. could be a cure or a surface (or of course a polysurface}
Whatever the shape, itis a mathematical representation of an object. They are
more precise than polylines or meshes as they attend to parameters. For
example, all the points of the edge of a cylinder are at the same distance
{radius} to the centre. In a polyline or mesh, the distance is slightly different. As
N.U.R.B.S. are more accurate they are commonly used in the manufacturing
indusiry were precision and tolerances are absolutely essential.
NURBS. MESH MESH
‘6 Advanced 30 printing with Grasshopper®in the pictures we can see the difference between a N.U.R.B.S. cylinder and a
Mesh one with less and more faces.
N.U.R.B.S. are created based on the algorithm of Castelljau. We can say that this
type of object has infinite points. This means that N.U.R.B.S. objects have to be
modified to be understood by machines, moreover, Rhinoceros® creates
polylines and meshes to visualize N.U.R.8.S. that can be manipulated at the
Options in Rhinoceros®.
Display mode sett “Shaded
Creating meshes. Press Esc to cancel
Command:
According to manufacturing, in general terms, a curve must be transformed
into a polyline and a surface must be transformed into a mesh.
3D printers work under C.N.C. technology like many other manufacturing
machines. We can differentiate two big groups of C.N.C. machines defining
some of the most commonly used tools:
Subtractive tools: milling machine, laser cutter, waterjet cutter, plasma cutter,
hot wire cutter, etc.
Additive tools (3D printers): Stereolithography technology (SLS, SLA, MJF), fused
deposition (PLA, ABS, nylon...), extrusion (clay, concrete, chocolate, pizza ...).
Additive manufacturing is the opposite of subtractive, as during the 3D printing
process the parts are created starting from an empty build plate where the
printhead then adds or hardens material while subtractive techniques need a
stock of material to subtract part of it
Advanced 30 printing with Grasshoppere 73D printing is an old technology invented in the ‘80s by Chuck Hull
in 2005 when the existent patent was expiring, a professor, Adrian Bowyer, in the
university of Bath decided to make 3D printing open source, hence creating the
RepRap project.
RepRap basically consisted of a 30 printer which was able to print the plastic
parts required to make another 30 printer. Thanks to Bowyer and others pioneers
like Vik Oliver, Alessandro Ranellucci and Joseph Prusa, the technology of 3D
printing grew very fast. There are several different technologies related to 3D
printing but ail share a common feature: the object is created layer by layer.
Below is a quick overview of different kind of 3D printing technologies:
SLS: Selective Laser Sintering. A laser melts the powder of raw material in a tank
and then a roller deposits another thin layer of powder on top of the exposed
raw material
SLA: Stereo Lithograpy Apparatus. A UV laser cures a thin layer of a special liquid
resin in a tank. There are 2 variations:
DLP: where the laser is substituted by a DLP projector that can project an
image and cure an entire layer in the form of the image.
LCD: where instead of the projector there is a 2k or 4k LCD screen
modified with a UV light.
MJF: MultiJet Fusion is similar to a common Inkjet printer, where the machine
deposits a special ink which is then cured with a UV light. Then, the build plate is
moved along the Z axis and deposits another layer of ink which is cured again.
This technology allows us to also print in colours.
FDM: Fused Deposition Modeling, is the most popular and cheapest technology.
| consist of an extruder that melts a plastic filament that is deposited following a
| path generated from software.
LDM: Liquid Deposition Modeling, very similar to FDM but uses fluid/dense material
instead of the plastic filament. LOM is the technology used in this book to print in
Clay with a Delta WASP 2040 model.
8 Advanced 30 printing with GrasshopeWASP
world Advances Saving Project is an Italian company bom with the dream of
helping poor people printing houses with raw and cheap material such as soll
and vegetal fibers. They started in 2012 by developing a small cartesian 3D printer
with a syringe extruder, which was able to print fluids like silicone and - of course
_ clay. They realized quickly the limits of the cartesian kinematics in printing big
and with a lot of weight resting on the printhead, so they moved to another style
of machine that was used before for a pick&place solution, the DeltaBot.
In cartesian 3D printers, each axis has its own motor, so to move the head in the
x direction only the x motor is required, whereas in the delta style machine each
movement is generated by the combination of the 3 arms working together. The
big advantage of the Delta style printers is the easy scalability, faster movement
and the possibility to increase the weight on the effector.
In this book we are using the DeltaWASP 2040 with the Clay extruder. It is a 3D
printer able to print both, plastic and Clay.
«] li
!
—
Image courtesy of WASP
Advanced 30 printing with Grasshoppers 9PART Il
Clay and
3D printingClay is a natural material, which comes from soil and has been used for
thousands of years to make different kinds of objects - from dishes, to vases and
sculptures.
We can define two different types of clay: primary and secondary.
Primary - the clay that is found in the same place that it formed
Kaolin: A fine, white, very pure, and infusible China clay, almost pure alumina
and silica. Mainly used in the manufacture of porcelain and fine earthenware.
Secondary / sedimentary - the clay that has been eroded by the river or the
movement of the earth and then deposited in different layers:
Ball Clay: 20-80% kaolin, 10-25% mica, 6-65% quartz It's used in a percentage
between 10 and 20% to improve the plasticity of the clay
Refractory: a refractory material retains its strength at high temperatures. ASTM
C71 defines refractories as "non-metallic materials having those chemical and
physical properties that make them applicable for structures, or as components
of systems, that are exposed to environments above 538 °C. Refractory materials
are used in linings for fumaces. kilns, incinerators and reactors. They are also used
to make crucibles.
Stoneware: due to its high strength and durability, stoneware has a wide range
of uses, including: hotelware, kitchenware, cookware, garden products.
electrical, chemical and laboratory ware. Formulations vary considerably,
although the vast majority will conform to: plastic fire clays 0 - 100% , ball clays
0 - 15%, quartz 0 - 30% feldspar and chamotte 0 - 15%
Biscuit firing is around 900°C and glost firing 1180 - 1280°C. Water absorption of
stoneware products is less than 1%
When 30 printing as well as traditional clay modelling, we have to choose the
correct clay according to our application. The main difference between clays is
the firing temperature, that comes from their individual compositions. Depending
on the desired application and on the kiln being used, we have to choose the
correct clay for the project.
Low firing clay: red clay, white clay, egyptian clay
High firing clay: stoneware, porcelain or paperclay.
12 Advenced 20 printing with GrasshopperThe best clay for our application also depends on other features like plasticity,
shrinkage or porosity.
Plasticity: it is the property of the clay that defines its ability to be able to resist
cracking when bent, dependent on the mix and ratio of the basic components
of the clay (chamote, ball clay, kaolin etc.)
Plastic clay
Less plastic clay
In case of 30 printing, itis better to use clay with good plasticity to avoid cracking
during the drying period.
Shrinkage: it depends on type of clay and the quantity of water inside the mix
Around 5-10% for red clay and 10-20% for porcelain.
Porosity: it depends on the type of clay and defines the clay’s ability to absorb
liquid after firing, which is important when applying glazes.
In this book we use the DeltaWASP 2040 Clay 3d printer that needs a relatively
soft clay - at time of writing there are other 3d printers from WASP as well as other
other companies that can print using harder clays.
Mixing
The process starts from a common block of commercial clay, adding some water
1 mix and make it softer. Usually the final proportion is 5% liquid. E.g. 950g clay
50g liquid. Some people prefer to add alcohol/ethanol instead of water,
because alcohol evaporates quickly and helps clay support its own weight
Curing the printing process. During the mix, - done either by hand or with a mixing
Advanced 3D printing with Grasshopperamachine - the main issue is to avoid incorporating air bubbles in the paste. In
‘order to prevent air bubbles remaining in the mix, it is possible to throw the paste
on the floor to make the bubbles explode without damaging the clay.
| Air bubbles are one of the most common issues encountered during 3d printing
because they can change the material flow or create small air craters in the
/ printed object, which can leave lumps or burst marks.
Air bubble during the mix.
4 Advanced 30 printing with Grasshoppersextruding
the clay goes inside the clay's deposit in clay balls, Pushed by an air compressor
gr any other system, it goes into the extruder to be shaped with the correct flow
‘according to our 3D design.
WASP extruder.
Firing
Firing is one of the final stages involved but it is also one of most complex parts
Before firing it is important to properly dry the object. Clay is composed of almost
25% water. it is very important to dry slowly, to prevent shrinkage & cracking
during the air drying and air bubble explosions during firing. The firing is usually
controlled by an electronical kiln controller that sets a heating curve for ‘hight
firing clay’ divided into steps:
(1) Drying: at this stage the temperature is set at about 100° to boil the water,
usually taking almost 2 hours but it could be even longer in order to
guarantee the prevention of shrinkage.
(2) Dehydration: at 350° this is the point where the chemically combined
water of the clay evaporates.
(3) Quartz inversion: it happens at 573°. At this point, quartz crystals rearrange
themselves into a different order.
Advanced 30 printing with Grasshoppers 15(4) Biscuit: 900° the clay is fired but not completely vitrified. It is porous. If the
piece is going to be glazed, this is the stage to stop firing
(8) Vitrification: itis the hardening and partial glassification of the clay, which
depends on its composition, for example red clay will vitify at about
1000®, porcelain at about 1250°,
degrees
1200
1000
500
0 2 4 6 8 10 120: 1816 hours
Due to the diminishing size of the particles, shrinkage mainly happens during the
Vitrification stage and the overall size can decrease between 8% and 13%.
Melting: A dangerous stage that should be avoided, melting occurs if the firing
temperature exceeds that in the reported datasheet, as the clay will melt and
this cannot be reversed
Glazing
After firing comes glazing, but that is a task already covered by many specialized
books
In the picture, 3D printed parts in the kiln ready to be fired
16 Advanced 30 printing with GrasshoppersFOLART Ill
Solids
3D printing
Probably the reader is aware of the main features and parameters of 3D printing,
but we want to clarify and remember some of them before going into ‘drawing
30 printing’, chapter IV
The 3 most important features for basic 3D printing are:
1. Model units: mm.
2. Watertight model (closed, solid).
3. Export as * stl file extension.
In the next chapter (‘drawing 3D printing’) it will not be necessary for the model
to be watertight or export it as *.stl fle. But before that, let us remember some
important features for 3D printing.
Advanced 30 printing with Grasshoppers 19Design for 3D printing requires thoughts on how the machine works and
knowledge of the advantages and limitations of the process. The basic
behaviour of a 3D printer is to extrude material onto a build plate adding layer
upon a _layer.
Adding material from zero allows us to create also hollow parts or decide a
percentage of internal infill, something that is impossible with other
manufacturing methods.
Advantages Limits
Almost all geometries are possible Anisotropic properties
Create hollow parts Lower mechanical _ properties
compared with other methods
Low cost machine and start up Design limitations due to force of
gravity
Wasteless process
Slicer software.
In 3D printing the CAM software used is called ‘slicer’ because it literally slices the
solid and creates a path to move the printhead. The most commons slicers are!
lic3r, Cura and Simplify3D. These software are really useful and powerful but
sometimes they can limit our imagination.
Each slicer has many different parameters that can be edited, but they all share
these basic parameters:Wall thickness.
Modelling in meshes or in surfaces allows us to make objects with walls without
thickness, but in case of 30 printing, every wall must have a thickness to explain
to the software how much material is needed.
V layer O
Overhangs.
2 layers O 4 layers o
Overhangs are a big nightmare in 3D printing, especially in FOM or LOM
technology.Overhangs are created from printing at an angle - intemal or
external - more than 45°. Over this range, the material does not have the support
of the layer behind and may fall down due to the force of gravity. If the overhang
begins and ends in a pillar, the slicing software recognizes the 2 pillars and the
software will program a movement called a ‘bridge’ that consists in a small
overfiow of material and an increase in printing speed to stretch the material
extruded and cover the distance between the pillars. To know the maximum
distance achievable by your 3d printer a bridge test could be made.
In order to avoid overhangs, there is an old
trick that helps the printer to create almost
perfect horizontal circles by designing the hole
like a ‘tear drop’, which prevents the top layer >
from falling down — take a look on the RepRap
logo.
Advanced 3 printing with GrasshopperSupport structure
In a standard plastic FDM 3D printer, it is possible to add support materials that
represents some form of structure that helps the final part to sustain itself during
the printing process. They can be easily removed. It is a helpful tool to support
parts where the angles of extrusion are more than 45°. This structure is made of
columns that support from the build plate to the required part,
Usually the support material leaves some marks on the final object surface
depending on the settings and the quality of the printer. Some 3D printers have
@ double extruder. This way it is possible to print the support materials with a
soluble material that can be dissolved in water or other chemical products after
printing, leaving the final object perfect. The use of soluble materials is more
recommended when the object has intemal channels or thin parts that would
be broken by removing the supports by hand
When 30 printing clay, support materials are a possibility, but they leave visible
marks on the final part and are not recommended; also the support materials
would have to be kept in the kiln to avoid the collapse of the object during firing,
Tolerances.
Depending on the type and model of 3D printer, the tolerance changes
according to the nozzle diameter and the material used
£.g. when printing with a clay 3d printer and using a 2mm nozzle, the minimum
distance to print walls that don't touch each other is Imm, whereas printing in
plastic with a 0.4 nozzle the tolerance normally is 0.2mm.
In some slicing software it is possible to define whether the path should follow the
internal or external part, but the common method is following the centre line.
Details.
Avoid details that are thinner than the nozzle diameter or geometries where the
slicing software cannot generate paths for,
22 Advanced 3D printing with Grosshopper®
isin enedOrigin / orientation.
The object should be designed from the position =0 because many
slicing software identify the same origin position of the CAD Design.
Choose the correct orientation of the model by checking the overhangs, choose
aplane surface as a base to guarantee a good build plate adhesion and, when
printing in clay, check if the bottom part can bear its own weight. Also check out
the right layer deposition direction according to the stresses the part will be
subjected to.
Also, ensure that there is a proper surface of the model that touches the base to
avoid the detachment of the model during the print.
THEY Rule 2
The ‘THEY’ rule is a set of
basic rules that explains
how to orient the parts to
print according to their |
geometry
The rule says we can only rotate the pieces in the
XZ plane.
Tneeds supports. The problem is solved if we rotate
it 180°
H needs supports. It has a bridge. Some slicers
have a ‘bridge’ option that increases the printing
speed in that area avoiding the supports.
E needs intermediate supports. The problem is
solved if we rotate it 90°.
Yis the maximum angled shape to 3D print without
supports. It could be 3D printed as it is, or rotated
180°, improving the contact with the build plate.
i
H
Ww
A
1800-4200 mm/m_ CLAY -> 1200-3000 mm/m
Advanced 3D printing with Grasshopper 25Temperature
In the common slicing setting, there are 2 temperature parameters when we
work with plastic:
The extruder temperature: it is the temperature required to melt the filament,
depending on the material used. For example. for PLA the temperature range is
from 190° to 220°.
And the build plate temperature with a range from 50° to 80°. It helps to the
adhesion of the part to the build plate and avoids extra warping in big pieces.
Adhesive material can be used to stick the model down to the plate as hair spray,
blue tape, etc.
tis not necessary to heat any component when 3D printing clay,
Watertight
The model should be ‘watertight’ or ‘solid’ avoiding double surfaces and
collisions. It has to be clear what is the interior and what is the exterior.
In Rhinoceros® there is an interesting tool to check out: _ShowEdges.
©] This tool can distinguish from ‘All’, ‘Naked’ and ‘Non-manifold"
edges.
The ‘naked edges’ are the open ones. Where the 3D object is
not watertight.
The ‘non-manifold edges’ are edges that belong to three or
more faces (Breps or meshes). Those are usually a big issue for
3D printing as they can create other ‘interiors’ and several
problems. By default Rhinoceros® does not allow to create non-manifold edges.
They mainly happen when importing files form other software
SAVE the file
In Rhinoceros®, export to *.stl and save as Binary as the file describes the mesh in
such an efficient way as ASCII format and it is a smaller file.
If the model was done in Grasshopper®, then ‘Bake’ it to Rhinoceros and export
as *stl file extension.
26 Advanced 30 printing with Grasshopper@
il oSAdvanced 30 printing with Grasshopper@ 7*3dm & *.gh wu
mio /
atPART IV
Drawing
3D printing
The first step to control the detailed movement of a 3D printeris getting the curves
for the paths. Then, the curves will transform into a g-code that can be
understood by the machine.
The aim of this chapter is to help Grasshopper® users to control the g-code for a
3D printer directly from Grasshopper®, without leaving its environment and
without plug-ins. There are some amazing plug-ins available, but their use could
constrain the results and also become obsolete or useless over time if developers
do not maintain them up continuously. Controlling the code opens a huge
amount of possibilities for 3D printing as well as design possibilities.
No knowledge of coding language is necessary but expert users that have
knowledge of Python, C#, C++, VisualBasic etc. can use this to maximise their
model's possibilities and their Grasshopper® definitions.
According to hardware, 3D printer manufacturers worldwide are continuously
bringing new models to the market. We will focus on WASP technology,
specifically on a WASP DELTA 2040, a 3 axes delta 3D printer. The customization
Possibilities that this type of machine offer depend mainly on the path, the speed
and the flow
Advanced 3D printing with Grasshopper® 29The path is the curve that must be followed by the 3D printer's nozzle. It is the
base for any design. You can find some paradigmatic study cases in Part V and
their explanation in Grasshopper®.
The feed rate (F) or speed. It can be a constant or a variable along the design,
producing different results. Changes in the speed could create quite impressive
effects when printing translucent clay
The extrusion rate (£) or flow or amount of extruded material could be
proportional for the distances between points or not. A controlled overflow of
material can create interesting textures. Extrusion is calculated by the proportion
between the material that enters in the extruder and the material that exists
according to the nozzle diameter.
30
\ced 30 printing with Grass!G-Code
The g-code is a text file that includes the orders that tell the machine how to
move and the extruder how much to extrude, as the combination of
movement and extrusion is fundamental for 3D printing
It is the most extensive language used by C.N.C. automated machines as
milling machines or 3D printers. It is an alphanumeric language that contains
orders made of the combination of a letter and a number (e.g. G28). This code
contains orders with all the letters of the English alphabet (A-Z) but it has
evolved so that the letter G is chosen to describe the controlled movements of
the machine. So, orders with ‘G' as GO or G1 will be the most common in this
type of code. That is why it is known as g-code.
G-code can descrite hundreds of orders for a machine. But 3D printers do not
use all the possible orders as some of them have been developed to work with
other type of machines. E.g. G97 allows to control the spindle speed on a milling
machine which is unnecessary for a 3D printer.
The g-code will be read by the machine's firmware. Firmware is a software
installed on the memory chip of the 3d printer. The most common firmwares are
Marlin, Repetier, Reprap, Prusa, etc. As some machines use variations of these,
the first thing to establish is to find out what firmware our machine uses as they
do not read the g-code in the same way. There are some orders that make no
effect on some firmware and have to be changed by another.
As our machine uses Marlin as firmware, the reader can find below a list with
the orders you need to know to take control over the g-code of a WASP 3D
printer. Also google ‘Marlin g-code' and the ‘Reprap project’ to find a
complete list of g-code commands as well as a bounty of useful information for
different firmware.
Advanced 30 printing with Grasshoppers 31G-code common commands list:
3 Text after semicolon will make no effect on the code. Very useful for
explanations and comments.
E Extrusion amount in mm (E10 means ‘extrude 10mm’).
F Feed rate in mm/m (F1800 means speed of 1800mm per | minute).
G0 Rapid positioning. GO must be followed by one or more or the following:
an € value, F value or X.Y or Z value (GO F3000 X10, means move 10mm in X axis
at 3000mm/m). In case of no F value, the movement will be done at the max
speed
Gl Linear movement. G1 must be followed by one or more or the following:
an E value, F value or X.Y or Z value (G1 F1800 X10, means move 10mm in X axis
at 1800mm/m). G1 needs a F valve. Both GO and G1 describe a movement. In
fact they could be used in the same way. Depending on the firmware installed
in the 3D printer, there could be sight differences. Usually G0 is used to describe
‘a movement in the most efficient way according to speed for travels, and G1
isa movement at a certain defined speed for extrusion. Also, this could be used
just to differentiate a movement with extrusion from another without it.
Always test beforehand for critical jobs.
G4 Wait or dwell. it must be followed by the time we want the machine to
stop. It can be described by P and the amount of milliseconds or $ and the
number of seconds. G4 P500 means wait for 500 milliseconds, so half a second.
G4 $0.5 means wait for half a second too. Parameters such as extruder
temperature or fan speed should remain the same.
G20 Set units to Inches.
G21 Set units to Millimetres (one of the two G20 or G21 has to be chosen, but
not both}
G28 Go home to all axes if none are given, or move home to only the
specified axes. (G28 will move all axes home, G28 X Y only X and Y axis)
G90 Absolute coordinates. After G90 XYZ coordinates are absolute to the
origin of the machine. This is usually the firmware’s default
32 Advanced 30 printing with Grasshopper@G91 Relative coordinates. After G91 XYZ coordinates are relative to the last
position. This means that the last coordinate is the new zero for the next one.
M82 Set exiruder to absolute coordinates. Equivalent to G90, but for the
extruder.
M83 Set extruder to relative coordinates. Equivalent to G91, but for the
extruder,
G92 Overwite the position of an axis to zero or to the specified value. No
physical motion will occur. (G92 E will reset E to zero. G92 X50 will reset the
current machine's X coordinate to 50. If no values are specified, all axes will be
set to zero)
If you work with thermoplastic material, some extra orders need to be
controlled:
M104 Start heating the extruder. The temperature is one of the most important
parameters when fusing thermoplastic material. It has to be followed by the
letler S and the temperature in degrees (M104 S210 sets the extruder
temperature to 210°Celsius).
M106 Set fan ON. It could be followed by $ and a parameter from 0 (stop) to
255 (max. power)
M107 Set fan OFF. You can also use M106 SO instead, but it depends on the
firmware availability.
M109 Wait until the extruder is heated to run other commands (M109 $210
means wait till extruder temperature is 210°)
M117 It is used to display a message in the LCD screen (M117 Waiting}
M140 Heat the build plate. Followed by temperature. (M140 S60 heat build
Plate to 60°Celsius).
M190 Heat build plate and wait until the build plate is heated to run other
commands (M190 $60 means wait fil build plate's temperature is 60°Celsius).
Many other orders could be found in a g-code file and depending on the 3D
Printer's firmware, they could differ from one to another. For further interest, the
reader can find more information on the RepRap project's wiki, by looking up
“g-code’.
Advanced 30 printing with Grasshopper® 33The g-code for a 3 axis 3D printer is made of three parts:
Start protocol (get ready)
Core with instructions (print our design)
End protocol (finish)
The start and the end protocols are a set of g-code routines or instructions for
the machine to get ready and to finish printing. They include information as ‘go
home in all axis’ or, when finished, ‘go back to origin’
Each machine has a protocol. We will focus on the Delta WASP 2040 3D printer
protocols, but many thermoplastics 3 axis machines have similar instructions. If
you own a 3d printer and you are not so sure about your machine protocol.
you can just open an already made *.gcode extension file in notepad app (for
Windows) or textedit in Mac and copy the start and end protocols of your
printer
Find an example of the start and end g-code protocols for Delta WASP 2040 as
well as an explanation of the ‘core’ on the right-hand page:Start protocol
Start g-code instructions explanation
j~- START GCODE ~ Text after semicolon makes no effect on the code
mez Set extruder to absolute coordinates
G28 Home all axes
G92 0.0000 Overwrite extruder position to zero
G1 €-4.0000 F6000 Retract the extruder -4mm at a speed of 6000mm/m
-- end of START GCODE ~
Core with instructions
The core of the g-code is made of a sequence of movements describing our design.
The main order for a controlled movement will have this structure:
G1 F1800 X10 YI0 ES
G1is the order in g-code to describe a controlled movement.
F is the feed rate or speed in mm/minute. If it is constant and it does not change, this
parameter is only necessary at the fist line of the code.
Xand ¥ are the coordinates to move to.
Eis the length in mm for the extruded material
End protocol
End g-code instructions explanation:
- END GCODE ~ Text after semicolon makes no effect on the code
G92 €0,0000 Overwrite extruder position to zero
G1 €-4,0000 F600 Retract the extruder -4mm at a speed of 6000mm/m
G28 Home all axes
p+ end of END GCODE -
Advanced 30 printing with Grasshopper® 35Examples starting at 0,0,0 coordinate:
Move 10mm in X direction from 0,0.0 extruding Imm
G1 X10 YOET
Move 10mm in Y direction from 0.0.0 extruding Imm
GI XOYIOEI
When 30 printing by layers, all the points of the same layer have the same Z
valve. This can be repetitive and could increase the g-code length, adding the
Z component to every single line of code. Software that creates g-code by
layers, changes the Z coordinate by stopping the movement, moving to the
next level and working in the next Z value again only with X.Y coordinates. To
stop and dwell, the order G0 is commonly used
G1 F1800 X10 YO E10
GI X10 Y10 £20
GI X0 Y10 £30
G1 x0 YO E40
GO x0 Yo
GO X0 YOZ1
G1 X10 YO E50 ara
GIXIOYIOESO ag
2D
GIXOYIOE70 “4%
GI XO Yo E80 Vs
This is the core's g-code to draw two layers of a square of 10 mm edge length,
at a constant speed of 1800 mm/minute and a constant flow of Imm. of
material per mm. of length. The layer height is Imm.
36 Advar
D
printing wi
cosshopper®Now, to check out if you got it, try to make your own g-code by hand to draw
asquare of 20 mm. side. If you own a 3D printer, use a g-code file as reference
for the Start and End protocols. In the next chapter we will lear how fo launch
it
j~ START GCODE-
rend of START GCODE -
i END GCODE ~
‘= end of END GCODE ~
Advanced 3D printing with Grasshopper® 3738 AdG-code with
Grasshopper®
As we have already explained, the base for the g-code is made of points’
coordinates. We could have the points we need for the movement of the
machine but typically, we will have a polysurface, a mesh, or luckily, a polyline
instead. Depending on the input object, we must follow different paths to
transform it into XYZ coordinates. These are the most common paths to be
followed depending on the input objects that we desire to 3D print:
Points > = X.Y.Z
Polylines > Points > = XYZ
Curves > Points > XYZ
Mesh > Polylines > Points > = X.Y.Z
BRep > Mesh > Polylines > Points > = X.Y,Z
BRep > Curves> — Polylines > Points > = -X.Y.Z
Advanced 3D printing with Grasshopper® 39Points -> X,Y,Z
Points are the basis in understanding how to create a g-code in Grasshopper®,
The most basic g-code can be created just using points in Rhinoceros® or
Grasshopper®. The sequence of points’ coordinates will design the movements
for the 30 printer. So not only the coordinates are important but also their order
on the list, as the movement will follow that sequence
For the first example, the points are created in Rhinoceros® and then
referenced into Grasshopper® with the ‘Point’ component:
Point
: * =~
eo e —_ >
a
1G etme warings .
1B tevne
1B con
D simpy
° ° (_Goveston .
eo oe Scone Pit
Manage Pt coecion
We can also create the coordinates favac parame
directly into a ‘Panel’. In that case, to 1@ tes.
generate a proper list we should disable the option ‘Multiline data’:
te,
1/50,0,0
2 50,50,0
3/0,50,0
TOW) 9 canotes
Wrap tere
Special codes
rom at
[BB Ova ices
Advanced 30 printing with Grasshoppera 4lTo create the g-code we need to transform the points into a text file. For that,
we will use the tool ‘Concatenate’ on the text menu. ‘Concatenate’ can join
letters and numbers to create text lines. It is also one of those tools with the
possibility to add more inputs if we zoom in on it,
The text we have to create has this structure:
G1 F1800 X50 50 ES
First, ‘Deconstruct’ to split their coordinates. Then, add the letters and the
whitespaces necessary to construct that text line:
Concatenate
Deconstruct 7 tor
0 x0 YO z0
1x50 Yo 20
2 x50 ¥50 20
3X0 ¥50 20
Notice that there is a whitespace (_.) in the panels before YandZ: _Y 2
The Z components not usually a predominant part of the g-code as commonly
30 printing is made by layers. If the designed curves are not in a plane parallel
to World XY plane and as such the points are in a curve with different heights,
it is necessary to specify the Z coordinate for each point. See example at
chapter socurves. Anyway, we will keep the Z coordinate for the explanation.
To get a first rough g-code we need to add more parts:
- The order G1 to indicate ‘movement’
= The order F for the speed
- The letter E to tell the extruder how many millimetres of material it has to
extrude:
42 Advanced 30 printing with Grasshopper®Concatenate
alin
0 Gi F1800 x0 YO 20 B50
161 F1800 x50 vo 20 B50
2 Gi F1800 x50 v50 20 B50
3 ¢1 Fi800 xo vs0 20 E50
Deconstruct
Notice the new whitespaces (_.) added to the panels. Before and after F1800
F800. and before E50 _,£50.
This is the rough base to create the CORE of a g-code for a 3D printer. Now we
have to add the START and the END protocols of our particular 3D printer and
control the parameters F and E.
F (feed rate or speed). It is a parameter that represents the feed rate in
mm/minute. F1800 mean 1800 millimetres per minute or equal to 30 millimetres
per second (divide 1800 by 60 seconds in a minute]. The proper speed will
depend on parameters such as the layer height, material, its fluidity and even
the geometry of the design. Normal speeds are between 600mm/m and 3600
mm/m but this could be higher or lower. Some tests on different speeds need to
be done by the user, to understand the expected results.
A high speed for travel movement is usually used at the beginning such as for
‘go home’ and then, a slower one, for printing. Some materials such as
translucent clay or porcelain could give interesting results varying the speed
according to some pictures or attractors.
As the value for the speed is easier to understand divided by second than by
minute, some users prefer to use mm/second. It is interesting to have it apart from
the rest of the definition as in the figure (30*60=1800)
‘Advanced 3D printing with Grasshopper 43Concatenate
Multiplication
oy
Gi F1800 x0 ¥0 20 B50
3 G1 F1800 x50 YO z0 B50
2 G1 F1800 x50 ¥50 20 B50
3.G1 F1800 x0 x50 20 £50
E (extrude rate). It is a parameter that tells the extruder how much to extrude. The
parameter represents the number of millimetres extruded from the current
position of the machine to the next position. The most appropriate number for
the extruder will depend on the speed (F), the layer height, the material fluidity
and the geometry, according to the desired result. A bigger extrusion of material
will give as resuit a wider wall on the object.
and a variable layer height the amount of extruded material could be different.
!
Itis common to use a constant extrusion rate but depending on the geometry |
See example at chapter isocurves. !
44 Adv
1d 30 printing with Grosshopper®if we opt for a constant extrusion of material, the parameter E should be
calculated according to the distance between points. In order to keep it simple
use ‘Polyline’ to connect the points and ‘Explode' it into their segments to get
the ‘Length’ of each segment. If the value for the length applied to the
extrusion suits our design, then we have finished. If it is too big, we shall divide
it, and if it is too low, we can multiply it. Add it to the previous definition and
change the previous E50 by just E.
Concatenate
Multiplication
a
30
x a
pqs *
cepa] (* Teas wn
maa he {6h eae #50 x0 0 30
Wh 2 Gi P1800 X50 ¥50 20 B50
afpare ° dh 3.61 r1800 x0 ¥50 20 nso
2 50,5,0 ——
3 0.5,0
rain
(Broce) [ecg
Lan eye
ry
Advanced 30 printing with Grasshopper 45Reaching this point, we notice 4 facts;
1. ‘Polyline' component displays the path 0
for the extrusion. This is very useful. 6 e
2. The square is not closed. We can
extract the first point with ‘List item’
component and add it at the end of
the list with ‘List insert’ making the list
one point larger. This operation wil
|
|
|
|
|
|
close the path. ‘o 6
Insert Items.
Grasshopper® users that are familiar with lists tools could also use ‘List Length’
to feed the input ‘Indices’ of ‘Insert Items’. ‘List Length’ outputs an integer
corresponding to the number of items in the list. In this case ‘4’. That ‘4’ can be
used for the new index
46 Advanced 30 printing with Grasshopper®Insert Items.
‘insert Items’ adds items to a list. In the example,
we are extracting or isolating '0.0.0' coordinate
from the first list with ‘List item’. This component
can isolate one or more elements in a new list
according to their indices in said list. By default,
the index is ‘0° so the output will be the item or
coordinate with ‘index 0": ‘0,0,0'. That output
feeds the ‘item’ input. The ‘indices' input is fed by
‘List length’ with a ‘4’. That means that *0,0.0' will
occupy the index ‘4’ in the list as displayed in the
last panel.
3. The values for E. It will start extruding 50 at ‘0.0,0’. It should extrude 0
instead, so it should display £0 at the first line of code. Use the same
strategy with ‘Insert Items’. This time we will insert a ‘0’ value at the
beginning of the list of values from ‘List Length’:
Advanced 30 printing with Grosshopper® 47Polytine
Explode Length {0;0;0)
0 50
1 50
250
350
Insert Items
i
According to the new list of values for E, S0mm of material will be
extruded from the first point (0,0,0) to the second (50.0.0) but
nothing else to the rest of points as 50 remains as the only value. It is
necessary that a component is able to add the lengths of the
segments of the path: ‘Mass Adittion’. Notice how the 50 mm,
length of each segment is added to the previous length obtaining
the series: 0, 50, 100, 150, 200.
Wor
050
150
230
350
(ass Addition
48 ‘Advanced 30 printing with GrasshoppersCongratulations!
You have created the Core for the g-code. Now it is necessary to add the Start
code and the End code. We can do it with 'Merge Tree’ tool. As ‘Merge Tree"
takes into account the paths of the lists to rearrange them, the inputs need to
be flattened. This will make the path for each list, {0} and it will keep the order
in the list as they are connected to the inputs.
0000 e000
fend of SEART ccoDE —
1 G1 #1800 x0 x0 20 x0
3.01 P1800 x50 vs0 20 R100
4 G1 P1800 x0 x50 20 2150
0000 F6000 5 G1 P1600 x0 ¥0 £0 2200
28
of BxD cone —
‘0000 P6000
Final step, with right button over the panel, ‘Copy Data Only’, and paste it in
‘Notepad’ app in Windows or 'Textedit' in Mac. The type of file must be ‘All fle
types’. The name of the file could be whatever, but try to avoid symbols or
whitespaces. Type *.GCODE as extension.
Advanced 30 printing with Grasshoppere 497 == START GCODE =~ crn eh
690
me2 ;
0 G2a
92 £0.0000 ee
G1 E~4.0000 F6000 ~ sot
7 == end of START GCODE~ ;
161 F180 xo Yo 20 0 nee +] Jon raeoe x0 ve 20 «0
261 F100 x50 yo 20 E50 De @1 F100 X30 ¥50 70 £1
3.G1 F190 x50 ¥50 20 £100 eee le
4.61 F800 xo Y50 Zo E150 to ecooe
5 61 F180 xo Yo z0 E200 ‘ene F600
; => END GCODE -~ ¢ 3 of em Gcooe
G92 £0.0000 :
6 G1 E-4.0000 F6000 le . acter oes
a2
} == end of END GcopE -
Depending on the printer, you could save the file in an SD card, USB memory
stick, or directly send it to the printer by USB connection. The path can be
checked out in the slicing software as some of them have the ability to display
it just using the gcode file.
and 30 print!
There is one more important fact regarding the position of the points refered to
00,0 in Rhinoceros®. Deltabots 3dprinters have its own 0,0,0 in the center of the
build plate, cartesian 3D printers on the bottom left comer. To be sure, you
could know were itis with an existant .gcode file, reading the coordinates.
oo
0,0,0 0,0,0
50
D printing with oppersAdvanced Grasshopper® users will easily make a definition to move the 3D
object from its centroid to the best place for 3D printing in Rhinoceros®
according to the 3D printers 0,0,0 position. Otherwise it can be moved manually
in Rhinoceros.
Important to note:
Grasshopper® uses 6 digits when there is a decimal number. E.g. 5.381648 As
we work in millimetres, 6 digits is too much accuracy. 2 or 3 can be enough.
ifmore than 6 digits are necessary after the decimal point, Grasshopper® uses
scientific notation. E.g. 5.3816e+5. This can create conflicts when reading the
g-code.
To remove digits after the decimal point, we can use a simple mathematical
expression that must be applied after ‘Deconstruct Point’, ‘Length’ and any
component able to create this conflict:
‘Multiplication
This definition works because ‘Integer’ component rounds any number to
integer numbers.
ITthere are more than 999.999 values also on the left side of the decimal point
(big projects at the E value) it can cause conflicts too. It is recommended to
use then relative coordinates instead of absolute ones
Advanced 20 printing with Grasshopper® 51Polylines -> Points -> X,Y,Z
It is quite common to draw the polylines that define the path for 3D printing.
With the previous definition (from point to g-code}, it is very easy to extract the
Points’ coordinates from a polyline. There are several tools that we could use
to find points in a polyline:
‘Control polygon’, ‘Control points’ and ‘Discontinuity’
Advanced 30 printing with Grasshopper® 53Control Polygon
{0;0}
{0, 0, 0}
{0, 50, 0}
{25, 0, 0}
{50, 50, 0}
{50, 0, 0)
aWNHO
(0;
{0, 0, OF
{0, 50, 0}
{25, 0, 0}
{50, 50, 0}
{50, 0, OF
Control Points
awWNHO
{0;0}
{0, 0, O}F
{0, 50, 0}
{25, 0, 0}
{50, 50, 0}
{50, 0, 0}
ewWNnHO
v7
The polyline with ‘M' shape is inscribed in a 50 millimetres square. The three tools
seem to output the same results. But depending on the shape of the polyline,
there are two main differences:
1- ‘Discontinuity’ will not find all the polyline's vertexes, only the
discontinuities of the function. In a polyline with more than one point on
a straight part, the vertexes will be omitted by ‘Discontinuity’, as the
function is continuous, but not by the other tools as you can see in the
panels on the following example
54 Advan
3D printing with GrassControl Polygon
Advanced 30 printing with Grasshopper®
I {0;0)
0 {0, 0, 0}
1 {10, 0, 0}
2 {20, 0, 0}
3 {20, 10, 0}
4 {30, 10, 0}
| {0;0}
0 {0, 0, 0}
1 {10, 0, 0}
2 {20, 0, 0} p
3 {20, 10, 0}
4 {30, 10, 0}
| {0;0}
0 {0, 0, 0}
1 {20, 0, O}
2 (20, 10, 0}
3 {30, 10, 0}
55That ‘Discontinuity’ property will have a more visible effect on the next unit
cure Ppoints PX,Y.Z
2. In closed curves, ‘Di
continuity’ does not repeat the seam point. The seam is
both the first and the last points. It reads both as just one, the first one. It can be
useful fo connect to another closed curve as we will explain later. However, not
so much with closed curves as we should manually repeat the first point and
add it at the end of the list as explained in the previous chapter (points > X.Y.Z).
The other two tools seem to be more useful for closed curves. Check out this
square of 20 millimetres side:
56 Advanced
opelControl Polygon
| {0;0}
0 {0, 0, 0}
1 (20, 0, 0}
2:{20, 20, 0}
3:{0, 20, 0}
4 {0, 0, 0}
| {0;0}
0 {0, 0, 0}
1 (20, 0, 0}
2/(20, 20, 0}
3 :{0, 20, 0}
4 {0, 0, 0}
| {0;0}
0 {0, 0, 0}
1{20, 0, O}
2 (20, 20, 0}
3{0, 20, OF
Once we obtain the desired points we can move to the g-code creation as
explained in the previous chapter.
If there is more than one curve, open, closed or both, we have to detail the
Path to improve the results of the clay extrusion and order the code were to
stop extruding (if our machine/extruder has the option to). WASP clay extruders
have the option to stop and/or retract, the same as thermoplastic filament
extruders. But other printers might not share that option. In that case we should
look for a continuous path. It means, we should transform several curves into
one.
Advanced 30 printing with Grasshopper® 57Exampte with two open curves in XY:
(0,0,0)
0 (0, 0, OF
1 (10, 0, oF
2 {10, 10, 0}
Control Points
[0 (20, 0, o}
1 (30, 0, oF
2 130, 10, 0)
(070)
(072)
Length
Insert Items
10:0)
0 Line-like Curve
1 Line-like curve
| (ray
| 0 Line-like Curve
| 1 Line-Like curve
58
soda}
1d 3D printing with Grassh
to —
Deconstruct
poco tnaca.
to
Mass
Addition
In this case there are two polylines, ‘Control points’ create a list with each of
the polyline vertexes. ‘Explode’ outputs the segments for the E values. Data is
organized into lists by polylines. This is very helpful for the insertion of the 0 valueat the beginning of each polyline. Then, a ‘Flatten tree’ must be done to have
just one single list to create the ‘Mass adition’ for the final E valves.
Notice that number ‘20’ is repeated thanks to the insertion of 0 at the beginning
of each list. This means that the extruder will not extrude material from the end
point of the first polyline to the start point of the second:
Multiplication Concatenate:
30 * ia a
6 8 F
Deconstruct o
<—to x 0 G1 ¥2800 x0 xO 20 BO
Control x 1 G1 F1800 x10 0 20,
ponte AY = 2G1 Fieo0 x10 v10 #0 E20
§ 3.G1 Fig00 x20 vo e220
zB 4 G1 P1800 x30 xo 20
z 5 G1 F1900 x30 ¥10 20 R40
@
<- to Lass Addition
Insert
ems J) a 6
soe, + bo
20
540
G1 F1800 XO YO Z0 EO
G1 F1800 X10 YO 20 E10
G1 F1800 X10 Y10 20 £20 €
G1 F1800 X20 YO 20E20 €
G1 F1800 X30 YO Z0 £30
G1 F1800 X30 Y10 Z0 £40
Advanced 30 printing with Grosshopperé 9This definition also works with more than one curve or even with closed curves:
e =
? 4
a le
“| |e
bd
(3,3,0)
1
{0}
x0 YO 20 EO
X10 YO 20 £10
X10 ¥10 20 E20
x0 ¥10 20 £30
x0
x3
x7
x7
x3
x3
Mass Addition
The values for the extruder are repeated. It works!
When the curves are not in XY plane, but moved in Z axis, the grammar we
have created still works, but now, depending on the direction of the curves,
the result could be better or worse.
60 Advanced 30 printing with GrasshopperIn this example the previous definition works, But as the polylines have the start
point in the same place, the printer will create a travel that could lead to loss
of material between the end of the first curve and the start point of the next,
and as such, not creating the best results. We can check the path, displaying
it with a 'Polyline’ component and fattening the list of points to create a
continuous polyline,
Control Points
Advanced 30 printing with Grasshopper élaS
When the curves are closed and similar, like in the picture above, they do not
present a problem as the seam points are very close one to the other.
To solve the travelling problem in the example with two (or more) open
polylines, it is as easy as flipping the direction of the second curve - or flipping
the odd ones if there are more than two. For that, we must flip the direction of
every other curve. It is possible to select every other polyline in one with the
‘Dispatch’ component and then flip the direction of the polylines of the output
lists with ‘Flip Curve’ component. ‘Dispatch’ already has a pattern TRUE-FALSE
in the ‘Pattern’ input. This means that the first curve on the list goes to ‘A’ output,
the second to ‘8’, the third to ‘A’, and so on
Once we have flipped one of the lists, it is necessary to put them together in
the same order they had. ‘Weave’ works in the opposite way to ‘Dispatch’. It
puts together elements from different lists using a pattem. They are called
‘streams’. By default the pattern input is ‘0,1’ so the output list will be made of
one element from list 0, the next from list 1, the next from list 0, and so on, so the
62 Advanced 30 printing with Gra
persfesult will be the same list we had at the beginning with ‘half’ of the polylines
flipped
Notice the difference in the display of the paths. That system will improve the
3D printed object quality as well as printing duration.
Control Points
Gurve Dispatch
The complex part comes in when we mix open and closed
curves. There, it is up to the reader if it would be ok leaving it
by default or changing the direction of the curves. This can be
done in Grasshopper® but that means that the reader should
be an advanced user to deal with data splitting the list, and
then putting it together again.
Toolbar Menu
Analyze
= Direction
Analyze
Main
Mainz
For not so advanced users, there is a more ‘physical’ way to change the
directions of the curves in Rhinoceros® with the ‘Flip Direction’ tool.
In this example we have only changed one curve to optimize the path.
Advonced 3D printing with Grasshopper
63Curves -> Points -> X,Y,Z
A NURBS curve could be directly created in Grasshopper® or could be made
in Rhinoceros® and then referenced to Grasshopper® with the ‘Curve’
parameter.
Notice that Rhinoceros® names ‘curve’ to any linear element making no
difference between the type of curve depending on the degree:
degree 1 = line or polyline
degree 2 = circle, ellipse, parabola, hyperbola, arcs,
degree 3 or more = freeform curves
ANURBS curve has infinite points. To translate the geometry of a curve into g-
code, we must discretize it into a certain amount of points. The ideais to create
the minimum quantity of points possible in order to have a smaller g-code
without losing precision and accuracy.
Advanced 20 printing with Grasshopper® 65We can follow two strategies:
1. To transform directly the curve into points with a ‘Divide’ tool
2. To transform the curve into a polyline with ‘Curvetopolyline’ component
and go on as in the previous chapter, Polylines > Points > X,Y.Z.
1. ‘Divide’ tools:
There are different division tools such as ‘Dividecurve’, 'Dividedistance’ or
‘Dividelength’ to find points on the curve with different results. This strategy
would lead us back to the chapter Points 9 X,Y.Z.
Coy Co
101 points
A greater number of points will increase the accuracy from the curve to the
points. The Grasshopper® user will probably have some experience with these
components.
66 Advanced 30 printing with Grasshoppers2. ‘Curvetopolyline’
‘Curvetopolyline’ is a component that transforms a curve into a polyline
allowing us greater control of the result, rather than just a simplified division of
the curve as with the previous tools. With this tool we will get a polyline and so,
we should go on working asin the previous chapter Polylines > Points > X.Y.2.
This component controls the resultant polyline through 4 inputs:
Tolerance (distance): deviation tolerance. This is the maximum distance
between the curve and the resultant polyline. The units are the units of the
model in Rhino. This means that if we are working in mm, '1' represents 1 mm
tolerance. The smaller the distance is, the more accurate the polyline will be.
can Cure
Tolerance distance) _Pobine ff Tolerance (distance) Polyline
Toverance (angie) MB Tolerance (angle) MB
Minédge segments Minéd9e segments p
Maxtdge
Advanced 30 printing with Grasshopper@ 67Tolerance (angle): it is the angle tolerance in radians. If the user is not familiar
with radians, it is also possible to work in degrees by changing the option with
@ right click over tolerance. The angle for the tolerance is the maximum angle
between the tangent vector to the curve at a point and the polyline at the
same point, A smaller angle will create a more accurate polyline
cove ] we 7]
Tolerance (distance) Polvfine Tolerance (distance Potytine
Tolerance (angie) 4 | =e Tolerance angie)
Minkd9e segments MinEd9® segments
Mavédge Maxtoge
68 Advanced 30 printing with GraMinEdge: optional minimum allowed segment length
MaxEdge: optional maximum allowed segment length
Minimum and Maximum edge parameters could be combined to get a
polyline within these restrictions. E.g. a polyline with segments of more than 3
and less than 9 mm length:
Poiyine
q rteane (tine)
Tovwane al)
Wintise segments)
axtoge
Or, we could just work with the 'MaxEdge’ input to get a fitted polyline, which
would be equivalent to the ‘Dividedistance’ component. It looks like we are
creating a very dense and fitted polyline but if the curve has varying
curvatures, in the low curvature area we will get extra unnecessary points that
will lead to a larger g-code file, On the other hand, in the parts of the curve
with a big curvature we will not have a good accuracy. In that case it may be
better to control the ‘Tolerance (distance]' or the ‘Tolerance (angle}' inputs.
Advanced 30 printing with Grasshopper 6Mind the difference: with the ‘Tolerance’ inputs, more points are obtained in
the areas of the curve with more curvature, for this example of a curve of
50mm. length in X direction
Curve
Tolerance (distance) _ Polvine
MinEdge
Maxédge
Segments
cune
Tolerance (distance) fal
(B__ Tolerance (angler MB
Mintdge ‘Segments
Maxtdge
une
Tolerance (distance) _ Polyline
ay
Minédge
Maxédge
Segments
The input parameters for these examples are created so that the total amount
of vertexes for the polyline is 50. The difference is on the points’ disposal. Notice
in the next figure how the resultant polyline fits the original curve better
depending on its curvature. The ‘Tolerance (angle)’ works better than the
others in the areas with more curvature but does not work on the points in the
straight ones. The opposite behaviour happens with the ‘Maxedge' option. For
the same amount of points, ‘Tolerance (distance)' is the most equilibrated
option for the different parts of the curve
70 Advanced 3D printing with Grasshoppe’
ee ee |‘cune
Tolerance (distance)
Tolerance (angle)
-+ MaxEdge
Advanced 30 printing with Grosshopper®
7Mesh -> Polylines -> Points -> X,Y,Z
Amesh is a three-dimensional object compounded of vertexes in the cartesian
space, joined with edges creating faces that could be triangular, quadrangular
‘or polygonal (n-gons)
To 3d print a mesh following a path, we need to extract curves from it.
A very popular tool is ‘Contour’. It makes sections of the 3D object with virtual
planes perpendicular to a chosen direction:
Shape
Itis widely used in architecture, interior design and furniture design as it allows us
to transform a 3dimensional object in 2dimensional planar curves that can be
Manufactured with standard planar materials used in construction, as wood
boards, glass, etc.
Advanced 30 printing with Grasshopper® 73Here some examples by Controlmad Advanced Design Center (Madrid).
Dy C 30 ~ al rights reserved}
Rooftop in Madrid
Rooftop in Madrid
Entrance sculpture for Arup Engineering, Madrid
Piece of furniture for Ikea Valladolid
1
2.
3.
4.
X and Y directions
X and Y directions
74 Advance
ing with Grasshopper®
i iciciZ directionThe typical vector direction for architecture or design could be along any given
direction; furthermore, contours in two opposite directions are usually combined
in order to create a stable and steady structure. In 3d printing the most common
direction for the contours is the Z axis.
Mesh Contour
Shape
Direction
Distance
Shape’ input will be the mesh or Brep (surface or polysurface)
Point’ is the start point, by default 0,0,0.
Direction’ is a vector. It represents the normal (perpendicular) direction to the
cutting planes and as such, to the resultant section curves. By default, it is '0,0.1"
that represents a unitary vector in the Z axis.
| Distance’ is the distance in Rhino units (mm.) between sections. For 3D printing it
will represent a very important concept as it is the Layer Height.
76 Advanced 3D printing with Grpepending on the geometry of the mesh or Brep, it could generate closed
curves, open curves or both:
Clay is very sensitive to any change on speed or movement. In order to improve
the results on the pieces, it is very important to reduce the amount of travels of
the extruder and the changes in extrusion direction to a minimum. This help us to
control the seam. The seam is both the origin and the end point of a closed curve.
It will determine the order of the points in the list to be followed by the 3d printer.
A good control over the seams of the contours will be necessary to improve the
results of the printed object. Let’s begin with a mesh that produces only closed
polylines.
‘Contour component will section the mesh and will output
closed polylines. According to the process explained in
previous chapters, the printer will follow those sections and
will move from one to the next without extruding clay. In this,
case the stop&go of the extruder could display the seam
more than is desired (1)
There is the possibility to extract the points, flatten all in one list and create a
Continuous polyline. This way we can avoid the extruder stopping but we will
have an extra amount of clay in the vertical part of the path (2)
‘Advanced 30 printing with Grasshopper® 7a)
Potentially, the best option is to create a continuous path connecting the last
point of the polyline to the second point of the next by creating a certain slope
and so, one continuous polyline (3). To remove the first point in the list, there are
two easy options. Use the component ‘Shift list’ on the points of each contour
and then selecting ‘Invert’ in ‘Wrap’ input to avoid its addition to the list at its end
~ or use the tool ‘Cull index' entering 0 as integer in the ‘indices’ input to cull the
first element in the list. Then ‘Flatten’ the list of points to get one single list that
creates a single continuous polyline’. This system will be improved in the next
chapter with curves, where we can select how many points we want to create
along the slope.
* ‘Contour’ tool creates a data tree with the sections, one list per curve. This
makes it mandatory to ‘Flatten’ the lists of points at the input of ‘Polyline’ as they
come in ists by contours. Flattening the lists, the polyline will go from the last point
of one list to the first of the next list as in the following figure:
78 Advanced 30 printing with GrasshopperMesh Contour
Control Points
rr
Control Points Shift List
Control Points, Cull Index
Advanced 30 printing with Grasshoppers
PolyLine
PolyLine
Polyline
(3)
79: There is a big difference between an open and a closed mesh
| when doing contours: the end point of a polyline and the start
point of the next one will be separated by a certain distance,
This means that there will be a ‘travel’ between polylines. That
is not a big issue as we can stop the extruder’s extrusion during
the travel, but in order to avoid unnecessary travels we could
flip the direction of one out of two curves so that the start point
of the next curve is close to the end point of the previous. The following steps
were already explained at the Polyline > Points > X,Y.Z chapter, but below
explains them again:
- Select one out of two curves from a flattened list with ‘Dispatch’. By
default, this tool uses a pattern of TRUE-FALSE. This means that the first
polyline in the list will go to ‘List A’ output, the second to ‘List 8", the third
to ‘List A’ again and so on
- Flip either ist A or B polyline's direction with ‘Flip Curve’.
- Finally, we have to put them together again into one single list. For that we
can use ‘Weave’ that will create a new list taking one item (polyline) from
list 0, next from list 1, next from 0, and so on, in the same way that we wave
the fingers of the two hands [if one hand would be named as 0 and the
other as 1).
We can check out the resultant path as usual with ‘Control points' and ‘Polyline’
Mesh. Contour, Flip Curve
Weave
| Dispatch
80 Advanced 30 printing with GrasshopperContours Travels (dashed lines) Travels after ‘Flip Curve’
Control Points] [PolyLine
Advanced 30 printing with Grasshoppera 81Brep -> Mesh -> Polyline -> Points
>XYL
grep stands for Boundary representation and is a type of 3d entity. In 3d software
this term englobes any kind of surface, polysurface or extrusion that is open or
closed. Rhinoceros® was developed as a N.U.R.B.S. software, so was aimed to
work with surfaces and polysurfaces. We could say that a Brep is a N.U.R.B.S. type
3D object.
‘As usual, for 3D printing we need to transform the 3d object into XYZ coordinates.
There are two options:
1. To convert the Brep into a mesh and go on as in the previous chapter or
2. To extract curves from the Brep.
In this chapter we will explain the first option. There are a few ways to transform
a surface or a polysurface into a mesh. In Rhinoceros®, we use the command
‘Mesh’. In Grasshopper® there is an equivalent, ‘Mesh Brep', but there is also
‘Mesh’ component or ‘Mesh Surface’ (this one only works for surfaces, not
polysurfaces). Getting a proper mesh from a Brep is not always so simple. Here
we are not going to focus on that process, as interesting books as AAD by Arturo
Tedeschi already explain that process in a detailed and efficient way.
But a minimum knowledge is necessary and interesting effects can be created
with the different options from this tool:
Polygon Mesh Options. A single slider allows us to create a mesh with fewer
polygons or more polygons in a simplified way. The ‘Detailed Control...’ option
opens the Polygon Mesh Detailed Options dialog box with several parameters
that can be modified accordingly’
Density. it is a number from 0 to 1 that creates a mesh with more or less edges
depending on how close the polygon edges are to the original surface. It is
equivalent to the previous slider in the ‘Polygon Mesh Options dialog box’.
the slider aligned to the left and 1 the slider aligned to the right.
Advanced 20 printing with Grasshoppers 83Maximum angle. It sets the maximum angle between the surface normal and the
mesh for the mesh vertices. It will refine the mesh and make it denser where the
curvature is greater.
Maximum aspect ratio. It is the proportion between the two directions of the
| quadrangles of the mesh. E.g. 6 means that one of the directions of the
| quadrangles can be no more than 6 times larger than the other. 1 means that
the quadrangles will tend to be quadrangular. This option is very useful to create
homogenous meshes.
This option could be combined with the density value or with the minimum initial
| gtid quads to control the amount of faces on the mesh
Minimum edge length. It is a number in the current unit system that controls the
minimum length of the edges of the mesh. It is useful when very small edges are
created, in order to get a faster and simpler mesh.
Maximum edge length. The zero value by default tums off this option. When
another number is provided, it will control the maximum allowable length for the
edges of the mesh in the current unit system
| Maximum distance, edge to surface. It controls the maximum allowable distance
| between the original NURBS and the subsequent mesh that is going to be
created. Itis measured from the midpoint of the edges to the NURBS surface. It is
also known as ‘Tolerance’ in the export option as *st! file (for 3D printing) and is
very useful to get an accurate mesh from a NURBS. Zero value tums off the option.
Important to note: very small values can turn in very dense meshes that could
make the computer crash.
|
|
|
|
Minimum inifial grid quads. It is the initial number of quadrangles of the mesh. As
usual, zero value tums it off. This option can be combined with the previous ones
but it is possible that if the amount of faces in this option is higher than the mesh
received from previous values, it could override them creating a mesh that does
not attend to previous values.
Refine mesh. It is a recursive or subdivision process on the parts of the mesh that
need to be refined to meet the parameters set at ‘Maximum angle’, ‘Minimum
edge length’, ‘Maximum edge length' and ‘Maximum distance edge to
| surface’. If the mesh is not refined, will be less accurate, but lighter. Its effect is
very clear in combination with ‘Maximum angle’ option
84 Advanced 30 printing with GrasshoyJagged seams. If we are working on a polysurface, all surfaces will mesh
independently. That means that the edges of the meshes of each surface do not
join (stich) with the edges of the adjacent mesh. This occurs if ‘jagged seams' is
on. Ifit is not on, then the vertices and edges will match creating a continuous
topology of the mesh called, a watertight mesh. It is better for further operations,
as well as for rendering, as it does not create cracks between meshes.
simple planes. This option will create the minimum amount of quadrangles on
planar surfaces. This will ignore all settings defined on previous options except for
‘jogged seams’.
Pack Textures. When polysurfaces are meshes, the coordinates for texture are
also created. Pack texture applies the texture over all faces in the polysurface.
Preview. Click it to refresh the mesh displays after any change on the settings.
‘simple Controls. it opens the Polygon Mesh Options dialog box.
important to note: ‘extrusion objects’ do not behave as proper surfaces or
polysurfaces so we have to explode and/or join them.
For further details please check the ‘Help’ button on Polygon Mesh Detailed
Options.
Some meshing examples with two surfaces and a polysurface of 100 mm. side
length. Once we have created the desired mesh, the path can be created asin
the previous chapter.
Advanced 30 printing with Grasshopper® 85Density: 0.0
Maximum angle: 0
Maximum aspect ratio: 6
Minimum edge length: 0.0001
Maximum edge length: 0.0
Maximum distance, edge to surface: 0.0
Minimum initial grid quads: 0
Refine mesh
0 Jagged seams
& Simple planes
& Pack textures
Density: 0.0
Maximum angle: 20
Maximum aspect ratio: 1
Minimum edge length: 0.0001
Maximum edge length: 0.0
Maximum distance, edge to surface: 0.0
Minimum initial grid quads: 0
& Refine mesh
1 Jagged seams
@ Simple planes
@ Pack textures
Maximum angle: 0
Maximum aspect ratio: 1
Minimum edge length: 0.0001
Maximum edge length: 10
Maximum distance, edge to surface: 0.0
Minimum initial grid quads: 0
® Refine mesh
0 Jagged seams EAE
Simple planes i
8 Pack textures
Density: 0.0
86 Advanced 3D printing with GrasshoppersDensity: 0.0
Maximum angle: 0
maximum aspect ratio: 1
Minimum edge length: 0.0001
maximum edge length: 10 i
maximum distance, edge to surface: 0.0 &
Minimum initial grid quads: 0
@ Refine mesh
@ Jagged seams
@ Simple planes
& Pack textures
Density: 0.0
Maximum angle: 0
Maximum aspect ratio: 1
Minimum edge length: 0.0001
Maximum edge length: 0.0
Maximum distance, edge to surface: 0.2
Minimum initial grid quads: 0
Refine mesh
1D Jagged seams
B Simple planes
Pack textures
Density: 0.0
Maximum angle: 0
Maximum aspect ratio: 6
Minimum edge length: 0.0001
Maximum edge length: 0.0 ad p>
Maximum distance, edge to surface: 0.0 Axsstttth
Minimum initial grid quads: 500
Refine mesh Ee
O Jagged seams
O Simple planes
& Pack textures
Ht
Advanced 30 printing with Grasshoppers 87reate a surface with a simple loft using three circles.
imple, we ct
In this exar
al parts. With selection tools
inequi
im' divide the surface
struct Brep’ + ‘List Item’ and ‘Point On Curve’ it is possible to select
faces’ corners at
.
g
S65 S
Eo
58
aa
°
Qo
oe
zo
63
ind mid points to draw the 3D path.
subsur
if)Printer and allow the le
lastic
to harden. ‘
Remember that every instr
ction for the G-code
must be included in the 3d
Printer's firmware,Wireframe
191
S24 30 printing with GrasshoppereFor our example:
Name: ‘Base Contours’
Nickname: 'BaseCon’
Description: Creates a continuous polyline for a Base.
Icon: draw it and save it as .png
The final Cluster will have this appearance with and without icons display:
Base Contours Base Contours
Shape
Normal Direction mI Polyline
Shape
q Normal Direction Polyline
Nozzle Diameter Nozzle Diameter
Assign Password, A password can be assigned to our cluster. It means that the
cluster can be used, but not opened or modified without the password. This is
very useful if you want to keep the ‘secret’ of your magic or if you don't want
another user to ‘destroy’ your masterpiece by editing its content. For example. if
you want your students to edit inputs and explore different outputs, but not to
modify the inside of the cluster. Either way, it seems that the addition of a
password does not make your cluster 100% safe, as Grasshopper® needs to
directly work with the cluster when a file is open, and an advanced programmer
could steal the cluster information.
Explode Cluster. This option will undo the ‘Cluster’
Disentangle. Every ‘Cluster’ has an ID which is created randomly with the
‘Cluster’. Copied ‘Clusters’ maintain their assigned ID. ‘Clusters' with the same ID
are modified simultaneously when one of them is edited. We could say that they
behave like a ‘block’ instance. So, if one ‘Cluster’ is edited, each copy will be
edited simultaneously unless we uncheck the ‘Disentangle’ option.
188 Advanced 3D printing with GrasshopperExport. Creates a new *.ghcluster fle based on that ‘Cluster’, Fog
used in another *.gh file.
Export & Reference. Similar to ‘Export’, but
which the original ‘Cluster’ was created and any files where j
afterwards. So, if the ‘Cluster’ is changed in the Original file, it wit
the second file. This is a similar behaviour to a ‘block’ instance be:
IS then,
Also ch
tween files,
Update. itis useful to regularly update a ‘Cluster’ ina file when it hy
195 been edit
in the original file and was exported using ‘Export & Reference’:
them both ready to use in your Grasshopper® session.
itis as simple as selecting one (only one at a time) ‘Cluster’, ‘File’, ‘Create User
Object...'. The category will be the name of the fag and the Sub-Category the
sub menu,
This is a more similar and easy way to create something that looks like your ‘own
Plugrin’ ~ see picture at page 184, That would be the appearance of our ribbon
our cluster ‘Base Con’,
Important to note:
Advanced 30 printing with Grasshoppera 189grammar, the new tool will be a “Cluster
if we cluster all the components in the
without inputs nor outputs:
‘Cluster’ and the grouped components wi
[custer] Double click on the
pop up in a new window where they can then be edited.
in the first example the inputs and outputs ore automatics
created using the folowing components that can be found at
‘Param’ menu tab in the ribbon menu. For the second, We
to add them manually, choosing which elements we want to become OU!
and inputs in our ‘Cluster’
nce{D)"
Use ‘Cluster Input’ for ‘Shape(s)", ‘Direction(N)' and ‘Distal
onents-
‘Cluster Output" for ‘Polyline(Pl)’. Then ‘Cluster’ the set of comp:
Advanced 30 painting wi
186Contour
PolyLine
Shape
Normal Direction @ Polyline
Nozzle Diameter = :
i=
created a new cluster as a tool that — |
‘outputs a polyline depending on three a ees
inputs, a curve, a vector and a number a. !
that represents the nozzle diameter: om
The ‘Cluster’ adopts the names of the inputs and outputs of ‘Contour’ and
‘Polyline’. To change them, right click on each one and type the new names
‘shape’, ‘Normal Direction’ and ‘Nozzle Diameter’ for the inputs and ‘Polyline’
for the output (it does not have to be these exact names specified, these are just
suitable example as other names will also work)
Then right click over the icon to explore several interesting options:
Edit Cluster...: It is equivalent to double click. Anew window will BE ceacue
Pop up where we can edit the content. There are options eee
Qvailable to save the edition, or not.
Properties: Add a name, a nickname, a description and change the icon. The
Ime is the complete name for the tag. The nickname is the name that appears
len we don't display icons. The icon can be chosen from the list of icons that
fasshopper® has already available or it can be a custom image. If you chose
le latter option, it is recommended to make it in .png format with transparent
Ickground,
NCEd 3D printing with Grasshopper@ 187