Once the solid models drawn using solid modeller is ready, the models need to be exported to STL or SLC format to be used by most RP equipment.
Among the two formats, STL is more popular. Most of the solid modellers and even some of the surface modellers now-a-day have built-in STL translator for this purpose.
The table of content:
Typically, an STL file is saved with the extension "STL," case-insensitive. The slice program may require this extension or it may allow a different extension to be specified.
STL is a facet based representation that approximate surface and solid entities only. Entities such as points, lines, curves, and attributes such as layer, colour, in the CAD systems will be ignored during the output process.
An STL file consists of a list of facet data. Each facet is uniquely identified by a unit normal (a line perpendicular to the triangle and with a length of 1.0) and by three vertices (corners). The normal and each vertex are specified by three coordinates each, so there is a total of 12 numbers stored for each facet.
Here is a excerpt from a typical STL file that define a facet:
facet normal -4.470293E-02 7.003503E-01 -7.123981E-01
outer loop
vertex -2.812284E+00 2.298693E+01 0.000000E+00
vertex -2.812284E+00 2.296699E+01 -1.960784E-02
vertex -3.124760E+00 2.296699E+01 0.000000E+00
endloop
endfacet
![]() |
A typical STL file. Notice that the density of triangle facets change according to the geometry. |
![]() |
The effect of changing the chord-height parameter during STL generation. |
There are two storage format available for STL files, which are ASCII and BINARY. ASCII file is human-readable and can be modified by a text editor if required. However, due to the large size (exceed 10Mb typically), it is not practical to edit a production STL file, the ASCII format is used for debugging, or when one have to transfer the file over a 7-bit channel (such as ASCII e-mails).
The facets define the surface of a 3-dimensional object. As such, each facet is part of the boundary between the interior and the exterior of the object. The orientation of the facets (which way is "out" and which way is "in") is specified redundantly in two ways which should be consistent. First, the direction of the normal is outward. Second, which is most commonly used now-a-day, list the facet vertexes in counter-clockwise order when looking at the object from the outside (right-hand rule).
![]() |
Counterclockwise order of STL facets. The arrows point toward outside of the object. |
Different application treat the definition of facet normals differently. For example, if a 3D LightYear verified STL is open in Materialize Magic, the STL part may not be visible on screen. It is because Magic regards the facet normals of the part are all faced in. Apply the normal fixing function of Magic will make the part visible again.
Each triangle must share two vertices with each of its adjacent triangles. In other words, a vertex of one triangle cannot lie on the side of another.
![]() |
A violation of the vertex-to-vertex rule. |
Because of the vertex-to-vertex rule, we know that a legal solid will have (3/2) edges for each face. This gives us three consistency rules against which to check:
F, E, V, and B are the number of faces, edges, vertices, and separate solid bodies.
The format specified that the object represented must be located in the all-positive octant. In other words, all vertex coordinates must be positive-definite (nonnegative and nonzero) numbers. However, with a few exceptions most software used today allow the facets in arbitrary location. one of the software which do honour the rule is AutoCAD, it refuse to generate the STL file if the part of the target solid lies in -ve octant.
The STL file does not contain any scale information; the coordinates are in arbitrary units. In many RP pre-processing software, the program will try to determine the unit of the part by the magnitude of the dimension. For example if the X/Y/Z size of the part is below 10, it is very likely that it is an inch part.
The official 3D Systems STL specification document states that there is a provision for inclusion of "special attributes for building parameters," but does not give the format for including such attributes. Also, the document specifies data for the "minimum length of triangle side" and "maximum triangle size," but these numbers are of dubious meaning.
Sorting the triangles in ascending z-value order is recommended, but not required, in order to optimize performance of the slice program.
Like all other CAD/CAM data, STL data sometimes can contain errors and ill-formatted values that affect the calculation of the consumer of the data.
The most common errors of all are:
Although it is not explicitly specified in the STL data standard, all facets in a STL data file should construct one or more non-manifold entity according to Euler's Rule for legal solids:
F-E+V=2B
F, E, V, and B are the number of faces, edges, vertices, and separate solid bodies.
If the relation do not hold, we say that the STL model is 'leaky'. When a 'leaky' STL file is processed by slicing algorithms, the algorithms many not correctly detect the error, and as a result produce slice boundaries that are not fully closed. When the erroneous slices are used in the RP process, the laser beam, cutter or whatever tools that generate the slice will 'escape' from the openings of the boundaries.
Some recent pre-processing software such as 3D LightYear by 3DSystems, will try to correct the error by adding extra segments to link up broken boundaries.
The types of leaks commonly found are:
![]() |
Two facets crossed in the 3D space. It is very common for a low quality solid Boolean operation algorithm to generate a STL file with this kind of error. |
![]() |
The triangulated edge of two surface patch do not match, thus
produce gaps between faces. It is mostly caused by software bugs in the applications, or ill-configured STL generation routine. |
Degenerated facet are less critical error in STL data. Unlike topological errors that list above, degenerated facets seldom cause serious build failure in the RP process.
The type of degenerated facets include:
![]() |
The three vertexes of the facet are co-linear. or become co-linear when the previously non co-linear coordinates are truncated by the algorithm of importing application. |
![]() |
The three vertexes of the facet are coincide. or become coincide when the previously non coincide coordinates are truncated by the algorithm of importing application. |
Although the problem of degenerated facets is not critical, it does not mean that they can be ignored. First, the facets data take up file spaces. Secondly and more importantly, these facets will mis-lead analyse algorithms of the RP pre-processing application and make support editing activity much harder.
This type of errors are not generated during the STL conversion process, but rather inherited from the in-correct solid models. These errors may cause inconvenience to the RP process.
![]() |
The picture of a STL model generated from a incorrect solid model. |
To see the effect of bad STL data on subsequent RP process, click here for a SLA case study.
There are many free/demo STL viewers available from the web. We suggest you make use of the resources and examine thoroughly the quality of your STL model before using it for RP output.
Part of this introduction is an excerpt from technical documentation of Ennex Corporation and other sources.
For more detail or full version of the Ennex document, contact www.Ennex.com