Printing at CityTech
written by Patrick Delorey
The City University of New York
Architectural Technology Dept.
This material is based upon work supported by the National Science Foundation
under Grant Numbers 1141234.
Any opinions, findings, and conclusions or recommendations expressed in this
material are those of the author(s) and do not necessarily reflect the views of the
National Science Foundation.
Printing at CityTech3
3D printing is an extremely refined & accurate method
of producing a physical model of your design. This is
simultaneously an advantage and a disadvantage.
While the process can deliver highly nuanced results not
achievable by other means, it also requires precise inputs.
or renderings) where any errors, if they are visible, can be
resolved in post-processing applications like Photoshop,
models for 3D printing require special attention. It can
be beneficial to have one ‘working model’ for design
experimentation and iteration, and a separate model for
3d printing that is clean, precise, and well organized. It
is often easier to begin this refined model from scratch
rather than trying to manipulate a messy working model.
Who Can 3d Print?
to be eligible for 3d printing, the following are required:
• your professor must submit a project request form
(found at www.nycctfab.com)
• your class must receive a 3d printing orientation
• you must complete the checklist in Appendix B
• your model must be checked by either Brian or Patrick
to ensure it will print properly
What Do I Need to 3d Print?
In order for a model to be valid for 3D printing, there are
four basic conditions it must satisfy (for a comprehensive
print submission checklist, see Appendix B):
• all objects must have unified normals.
• all objects in model must have thickness (1/8” min.)
• all objects must be watertight (closed with no gaps or
holes between joining surfaces).
• all objects to be printed must be exported as an .stl
Please note it is your responsibility to ensure your model
meets these conditions. CLTs are happy to assist & advise
you in preparing your model, but the quality of the model
is your task.
Printing at CityTech
Fig. 2 - Build EnvelopeFig. 1 - ZPrint Z510 in Room 813
Similar to how an inkjet printer deposits ink onto paper,
the print head deposits a liquid binder onto successive
thin layers of powder in horizontal sections of the object,
proceeding layer-by-layer until the object is complete.
During and after the build, loose powder surrounds and
supports the part in the build chamber. This unused
powder is removed via vacuum or forced air and recycled,
and the finished part can be carefully extracted. Consider
these processes as you are producing models to be
prototyped. Our printer (Fig. 1) has a maximum build
size of 10”×14”×8” (Fig. 2). Models any larger than this
must be built from smaller components and assembled
Notes on Scaling to Fit
Just as with building traditional physical models, when
constructing a model to be 3d printed, consider its size as
a funciton of the scale at which you wish to represent the
work (i.e. 1/8” = 1’-0”, 1” = 100’, etc.).
It is poor modeling practice to develop an object and
to scale it arbitrarily to the maximum size of the build
chamber. Conversely, it is also bad practice to scale an
object at an arbitrary scaling value to fit within the build
chamber. This is doubly true if your object has a thickness
that will be reduced to less than the 1/8” minimum
thickness for parts to be structurally sound.
The proper workflow to solve these issues would be to
digitally develop your model extenisively at true size,
selectively choose portions you wish to 3d print, scale
those portions (as single surfaces) to the correct scale
for your model (ensuring it fits within the build volume
provided in the template file), add desired thickness
(though not less than 1/8”) to the scaled single surfaces
and ensure watertightness (no gaps or naked edges).
This may mean that certain details of your model must
be omitted when 3d printing. In fact, it is often easiest to
make a separate, clean file that contains only the most
significant masses / gestures of your project to 3d print.
The objective is to communicate design intent, not to
create a perfect ‘mini-building’.
Printing at CityTech5
Fig. 6 - Dir Command Showing Surface DirectionFig. 5 - Custom backface color setting
Fig. 4 - Backface color located deep in the options menuFig. 3 - Rhino’s default backface color setting
To make modeling for 3d print output easier, we
recommend beginning using the template file found at
(LOCATION), or beginning a new file with these settings:
• set startup template to “Small Objects - Inches”
• set absolute tolerance to 0.001” (run Options)
• run command CheckNewObjects to ensure it is active
• set backface colors (see below)
9”×13”×7” (build chamber size less an amount to
allow us to extract your model once complete)
For a more detailed of how to change these settings and
how they affect your modeling, see page 11.
The first requirement for 3D printing is that all surface
normals be unified. This is another way of saying that all
surfaces should have their ‘outside faces’ facing ‘out’.
This is the problem we are trying to solve in Rhino, but by
default, Rhino displays front & back faces of all surfaces
as the same color (Fig. 3), but we can change this. Under
Tools > Options > Appearance > Advanced Settings >
Shaded expand the dropdown menu for Backface Settings
and select Single Backface Color (Fig. 4). Select a color
for backfaces, preferably one that you don’t use often for
layer colors so that it doesn’t blend in. Now your surfaces
will differentiate themselves with clearly shown front &
back faces (Fig. 5).
Another way to determine orientation of surfaces (and
curves, for that matter) is to run the Dir command. When
executed, Dir will display the normal direction of a selected
surface (Fig. 6) and your mouse will display the uv draft
angle at any point on it. (How surface and curve direction
is created and determined is covered in greater detail in
the Laser Cutter & Curve Geometry Primer).
Printing at CityTech6
Fig. 8 - Be aware of self-intersecting solidsFig. 7 - OffsetSrf with a clean solid
Shelling & Adding Thickness
Since 3D printing requires that all geometry have
thickness, we should explore ways of adding thickness to
For the 3d printer we have in the lab, we require a minimum
thickness of 1/8” for all models. This is a value that may
need to increase depending on the structral configuration
of your model. Thin surfaces spanning long horizontal
distances may collapse under the weight of surrounding
powder in the build chamber and should be made thicker.
The simplest command for thickening surfaces is
OffsetSrf with Solid: Yes activated (Fig. 7). There is a point
of caution, however, with OffsetSrf. If the offset distance is
large compared to the tightness of curvature of a surface,
the resulting form might be self-intersecting (Fig. 8). In
some cases, this will still 3D print, but it is messy and is to
be avoided if possible. To avoid this, adjust the thickness
of the surface based on the areas of greatest curvature.
A similar but distinct command is ExtrudeSrf, which will
do exactly as its name implies and extrude a surface in
any direction you choose. Unlike OffsetSrf which makes
a solid of uniform thickness, the thickness of an extruded
surface is variable with portions on the surface closer
to tangent to the extrusion vector thinnest. Additionally,
surfaces connecting the primary surfaces will be coplanar
with the plane of the extrusion vector, provided the edge
of the surface is also planar (Fig. 9).
Fig. 9 - Comparing OffsetSrf (lt.) & ExtrudeSrf (rt.)
Printing at CityTech7
“Watertight” is a term describing a mesh suitable for 3D
printing. It means there are no holes, cracks or missing
features on the mesh. The easiest way to describe a good
mesh for 3D printing is to think of it as a skin, and filling
the inside with water. It is important to create watertight
meshes (in conjuction with properly unified surface
normals), so that it is clear to the 3D printer what is
“inside” and what is “outside”.
Sometimes gaps in geometry will be very small (but
NOT below our tolerances, see p. 9) or edges will match
perfectly but won’t be joined, creating naked edges in our
model. Instead of investigating every surface of our model
individually, we can use the Rhino command ShowEdges
to identify areas of our model needing attention.
When we run the command, Rhino asks us for objects for
which to show edges (Fig. 10). A dialog box will appear
and edges will be highlighted (Fig. 11). Select the ‘naked
edges’ option of the dialog box and a color that contrasts
with the layers color of the objects selected. These are the
areas you need to fix. If you wish to add more geometry
to the ShowEdges query, select Add Objects in the dialog
box and select your desired geometry. Similarly, select
Remove Objects and objects to remove to limit analysis.
If you are having trouble seeing where the naked edges of
your model are (after all, they may be tiny), select ‘Zoom’
in the ShowEdges dialog box. This command will zoom to
the extents of all naked edges within selected geometry.
Snapping to Prevent Naked Edges
You should be modeling using the various snapping
functions in Rhino to maximize modeling precision.
These include the grid snap (toggled with F9, typing
Snap, or clicking the Snap text button along the bottom
toolbar), as well as the numerous object snaps (accessed
by typing OSnap or clicking the OSnap text button along
the bottom toolbar, making sure ‘Disable’ is unchecked).
Various kinds of objects can be snapped to (listed along
the bottom toolbar), and these should be toggled as
necessary to make selecting and snapping to your specific
Fig. 10 - Select objects for which to show edges Fig. 11 - Naked Edges Highlighted
Printing at CityTech8
Joining to Repair Naked Edges
Sometimes, geometry will line up precisely edge to
edge, point to point, and naked edges will still appear.
This is because the geometry hasn’t been linked within
the model, so the software still sees these objects as
disconnected. You can join these objects together using
the Join command.
Note that sometimes objects will be grouped and will
select as though they are joined, but still show as having
naked edges. To connect these objects, first ungroup
them, join as necessary, and then regroup, if appropriate.
Grouping does not connect the surfaces. It only aids in
selecting specific clusters of geometry in your model.
Non-manifold edges are edges in contact with more than
two surfaces. This typically indicates one of two things.
First, two or more polysurfaces that may be coincident
along a single edge have been combined with a Boolean
operation (Fig. 12). While permitted within the software,
it is not good modeling practice. The print will crumble
along such areas. Fix them by thickening any hairline
joints (Fig. 13).
Second, and only with mesh objects, there may be an
unnecessary surface within the mesh for defining its
boundary (for repairing such an area, see instructions for
cleaning up problematic meshes p. 8).
Fig. 12 - Object containing non-manifold edges Fig. 13 - Non-manifold edges removed by thickening
Printing at CityTech9
Mesh Creation & Editing
While most modeling in Rhino is accomplished using
surfaces and polysurfaces, meshes are important to
understand because our final output will be a mesh (.stl
files are meshes). In fact, your 3d printed model will not
look exactly like your surface model, but rather like your
.stl mesh. The ability to understand and manipulate
meshes will give you a finer degree of control in the finish
appearance of your printed object.
The same rules for 3d printable surfaces apply to meshes:
they must have unified normals, they must be watertight,
and they must have a thickness. In order to check for
these conditions, you can run CheckMesh.
CheckMesh produces a detailed description of a mesh
object (similar to the ‘Details...’ button in the object
properties menu, but with additional information for
meshes). While this command doesn’t include tools for
fixing issues it finds, it is a good diagnostic tool.
Normals - Backface Colors & UnifyMeshNormals
The backface color options that you set for surfaces
and polylsurfaces (see page 4) will continue to work for
UnifyMeshNormals is helpful for orienting meshes
properly. If CheckMesh informs you that “(X) faces that
could make it better if their directions were flipped” - you
should run this command to unify all normals.
Join, Weld, MatchMeshEdge
Meshes behave similarly to surfaces in terms of
watertightness. ShowEdges will still allow you to see
the naked edges in your model (of which CheckMesh
will inform you). But repairing meshes requires some
commands specific to meshes. These commands -
FillMeshHole, FillMeshHoles, Join (for meshes), Weld, and
MatchMeshEdge are covered in great detail in McNeel’s
own guide to mesh repair, which you can find on the ‘S’
drive at (LOCATION).
Printing at CityTech10
Fig. 14 - Highly complex surface to mesh Fig. 15 - Mesh Options
Fig. 16 - Options for OffsetMesh Fig. 17 - Results of OffsetMesh
Mesh Creation & Editing (cont.)
Thickness - OffsetMesh
If NURBS surface geometry is very complex, it can result
in sluggish modeling performance (Fig. 14). For these
situations, it can be beneficial to convert a developed
surface to a mesh using the Mesh command (or from
the menu, Mesh > From NURBS Object, Fig. 15) and then
using OffsetMesh to provide the necessary thickness,
making sure that ‘Solidify’ option is checked (Fig. 16).
Meshes are less time-consuming to compute, but they
come at the expense of difficult editing within Rhino (Fig.
17). If you notice Rhino having difficulty with offsetting your
geometry or behaving strangely slow, consider this option,
but only having developed your geometry sufficiently as a
single surface and making a copy of it before converting
to a mesh. If you need to edit the object, it will be easier
to do so as a surface, re-convert it to a mesh and offset
Printing at CityTech11
Fig. 21 - Final export optionsFig. 20 - Tolerance for .stl file
Fig. 19 - .stl file formatFig. 18 - File > Export Selected...
Once you have closed all your geometry and checked for
naked edges, unified normals, scaled appropriately, and
added thickness, you are ready to export your model for
printing. We will make an .stl file that can be read by the
3D printer. Select the geometry you wish to export, then
go to File > Export Selected... (Fig. 18), a dialog box will
appear. Select the file type as *.stl (Fig. 19).
Rhino will then ask you what tolerance to use when it
converts your NURBS geometry to a polygon mesh (Fig.
20). The default value of .01 inches should work in most
situations with our equipment. Lastly, it will ask if you
want to save the file as an ASCII or a binary type. Since we
won’t be editing the code for the .stl, the binary output is
fine and is typically a smaller file size. The option of which
to take notice here is the ‘Export open objects’ checkbox
which should remain unchecked (Fig. 21, circled in red).
This will prevent exporting unprintable geometry. If there
are open objects that you try to export, Rhino will show a
dialog box with a warning alerting you.
Printing at CityTech12
Global Rhino Settings for 3d Printing
When modeling at the scale of a building, a tolerance of
1/8” is perfectly acceptable, but when scaling your model
to 3D print, this tolerance can become misleading, and
cause you to create bad geometry. For a model you intend
to 3D print, go to Tools > Options > Units. Set the absolute
tolerance to 0.001 and the display precision to at 1/64”
to make verifying the validity of your model easier & more
Bad objects are (usually) related to tolerance settings,
and if modeling carefully from scratch, are actually a bit
difficult to create. The most common way in which bad
geometry is created is when values for the geometry fall
below the tolerance settings for your Rhino session. Here
my tolerance is set for 0.01, and I’ve modeled an open
polyline measuring 3, 5, 3, and 4.995 for its 4 segments
(Fig. 24). Notice Rhino doesn’t display the remaining
distance as 0.005 but rather as 0.01 (our set tolerance)
in the dimension. Because I’ve modeled beneath the set
tolerance, this object will behave unusually.
With ExtrudeCrv performed on an open curve, Rhino won’t
create its caps, even if Caps option is set to Yes. But, if we
extrude this particular open curve and set Caps option
to Yes, Rhino will try to create them (Fig. 23). Because it
cannot read the curve as open, it will consider the curve
as closed. Rhino will try to create caps from an open curve
and generate a bad object (Fig. 22).
To avoid these issues, we can utilize the Rhino command
CheckNewObjects (Fig. 25) which alerts us when any bad
geometry is created (Fig. 26). Though it is difficult to create
bad geometry provided you are careful, consider that you
may not always model from scratch (i.e. importing files
created in other programs or modeled by others, or both).
Finally, note that CheckNewObjects remains active
between sessions of Rhino. If you close a file and open
another, the command should remain active.
Fig. 22 - Open polyline (below tolerance) Fig. 23 - Extruded polyline with caps
Fig. 24 - Gap below Rhino’s tolerance (bad geometry) Fig. 25 - CheckNewObjects command
Fig. 26 -Bad geometry detected
Printing at CityTech13
Appendix A - FAQ
My model is just one solid, it should 3d print, right?
This is a much more complicated issue. It has to do with
optimization. You can print it like that, but it will be slower,
use more material, & be heavier (and possibly more prone
to breakage, depending on geometry). To illustrate, see
the diagram below.
While all three meshes look identical when viewed from
the outside, cutting a section through each instance
reveals that their underlying geometries are significantly
Object 1, in fact, will not print at all. The sphere has
missing mesh faces and the cones that intersect it aren’t
capped. This yields surfaces that are open and without
Object 2 will print, but has some issues of which you
should be aware. The sphere and cones are solid &
closed, making them valid, but when printed, each cone
will contain unprinted powder that will be impossible to
Object 3 is our most desirable product. The individual
objects are constructed to form a skin with a thickness
(see the red section line that is clean and continuous).
Not pictured, however is one last helpful detail - a hole by
which to evacuate the unused powder and return to the
printer. Including this element will help reduce wasteful
use of material and make your completed model lighter.
Still, there may be times when you choose to print object
2. Crafting a model such as object 3 is more difficult
and more time-consuming, requiring greater attention to
detail. Consider these factors as you go about preparing
your own models
Fig. 27 - 3d printing validity across a range of mesh geometries
Printing at CityTech14
Appendix A - FAQ (cont.)
I scaled my model down to 3d printing size, and now all
the details I modeled are too small to print! What do I do?
The 3d printer has limitations just as every tool does.
Think about 3d printing a model just as you would building
a model by hand: there are certain details that you omit
either because they distract from communicating what
you want, or they are simply impossible to render at the
given scale. The 3d printer is no exception. While these
details can help enhance the ‘realness’ of your model
in renderings and line drawings, they aren’t necessarily
appropriate for your physical model.
This is another reason that it can be beneficial to begin
a new separate and geometrically clean model when you
are preparing to 3d print. You can selectively import the
most significant gestures from your working model and
develop a printable model from that point. Lastly, knowing
in advance that you will be making a new file to 3d print
takes some of the pressure off when working with your
model and helps prevent you from getting hung up on
very small details when you should be spending your time
pushing your design.
My model now appears very jagged and faceted, but it
was a nice smooth curvilinear geometry just a moment
ago. What happened?
This is a units issue that comes about when meshing
geometry at a scale that isn’t of a sufficient resolution for
the scale at which you will be printing. This can be solved
by importing the full size model into a file with the units
you will be using in the actual 3d print (probably inches),
meshing the geometry, and scaling to fit within the build
volume of the printer.
I have closed solids with thickness that intersect each
other. Will this print?
This will print on our 3d printer. The software is intelligent
enough to handle this situation.
Printing at CityTech15
Appendix B - 3d Print Punch List
Before submitting your file to 3d print, please perform the
steps outlined at left to make sure that your file has the
best chance of printing as you intend.
When you have completed this list, you may submit your
prepared .stl file to Brian or Patrick to have it printed.
Email all files to firstname.lastname@example.org, copying
both email@example.com and firstname.lastname@example.org on
the submission email. If your file is too large to attach
(anything larger than 8 mb), you may send the file via
yousendit.com to the same addresses.
In order to have your print completed by your deadline,
we recommend submitting your file a minimum of 5 days
in advance of when you need it, but 7 days in advance is
Final scaled model fits within 10”x 14”x 8” build volume (see pages 2 & 7)
- make sure that in doing so, your model thickness does not fall below 1/8”
Final scaled model has a minimum thickness of 1/8” everywhere (see
pages 5,6, & 8)
Final scaled model contains no points, curves, single surfaces, or duplicate
objects (see page 5)
Model has been exported and opened as an .stl in Rhino, with backfaces
shown, and been found to be properly oriented (see page 4)
Model has been opened as an .stl in Rhino shows no naked edges when
command DupBorder is executed
Printing at CityTech16
Appendix C - Rhino 5.0 for 3d Printing
Currently, Rhino 5.0 is in beta testing, but if you have your
own copy of Rhino 4.0, you can download a (relatively)
stable beta release for your own work. Be aware that
Rhino 5.0 files cannot be read by Rhino 4.0 (the version
on the computers in our labs), so if you plan to work on a
file on multiple machines, don’t forget to save your file as
a type readable by Rhino 4.0.
There are a number of changes and additional commands
in Rhino 5.0 that you may find helpful, especially with
regard to 3d printing.
This command will create a shell structure from a
polysurface with a specified thickness. Provided that it
doesn’t return an error, it will give you a watertight model,
ready to export for 3d printing.
While not a new command per se, OffsetSrf behaves
differently in Rhino 5 than it does in Rhino 4. In Rhino 4,
when OffsetSrf is applied to a polysurface, all faces are
offset normal to the surface at any given point. With most
geometry, this results in an interior corner between faces.
In Rhino 5, when OffsetSrf is applied to a polysurface,
Rhino will attempt to create a continuous surface all the
way around by creating rounded exterior edges.
The same plug-in tools that exist for Rhino 4 now exist
as standard tools in Rhino 5 - tools for diagnosing mesh
issues and repairing them. It will also bring up the
ShowEdges dialog box that we have seen (see p. 5) in
Rhino 4. The tool operates like most wizard tools: it will
detect most issues automatically and attempt to fix them.
There are a number of other reasons to experiment with
Rhino 5, but these are those most relevant to 3d printing.