chiark / gitweb /
downloaded STL file format spec from WP
authorIan Jackson <ian@davenant.relativity.greenend.org.uk>
Sat, 16 Feb 2008 11:05:28 +0000 (11:05 +0000)
committerIan Jackson <ian@davenant.relativity.greenend.org.uk>
Sat, 16 Feb 2008 11:05:28 +0000 (11:05 +0000)
stl-format-wikipedia.txt [new file with mode: 0644]

diff --git a/stl-format-wikipedia.txt b/stl-format-wikipedia.txt
new file mode 100644 (file)
index 0000000..de9b155
--- /dev/null
@@ -0,0 +1,291 @@
+STL (file format)
+
+From Wikipedia, the free encyclopedia
+
+Jump to: navigation, search
+
+STL is a file format native to the stereolithography CAD software created by 3D
+Systems. This file format is supported by many other software packages; it is
+widely used for rapid prototyping and computer-aided manufacturing. STL files
+describe only the surface geometry of a three dimensional object without any
+representation of color, texture or other common CAD model attributes. The STL
+format specifies both ASCII and binary representations. Binary files are more
+common, since they are more compact.
+
+An STL file describes a raw unstructured triangulated surface by the unit
+normal and vertices (ordered by the right-hand rule) of the triangles using a
+three-dimensional Cartesian coordinate system.
+
+Contents
+
+  * 1 ASCII STL
+  * 2 Binary STL
+  * 3 Colour in Binary STL
+      + 3.1 VisCAM/SolidView
+      + 3.2 Magics
+      + 3.3 NOTE:
+  * 4 The Facet Normal
+  * 5 History of use
+  * 6 Use in other fields.
+  * 7 See also
+  * 8 External links
+
+[edit] ASCII STL
+
+An ASCII STL file begins with the line:
+
+ solid name
+
+where name is an optional string. The file continues with any number of
+triangles, each represented as follows:
+
+ facet normal n1 n2 n3
+   outer loop
+     vertex v11 v12 v13
+     vertex v21 v22 v23
+     vertex v31 v32 v33
+   endloop
+ endfacet
+
+where n1-n3 and v11-v33 are floating point numbers in sign-mantissa'e'-sign-
+exponent format and concludes with:
+
+ endsolid name
+
+The structure of the format suggests that other possibilities exist (eg Facets
+with more than one 'loop' or loops with other than three vertices) but in
+practice, all facets are simple triangles.
+
+White space (spaces, tabs, newlines) may be used anywhere in the file except
+within numbers or words. The spaces between 'facet' and 'normal' and between
+'outer' and 'loop' are required.
+
+[edit] Binary STL
+
+Because ASCII STL files can become very large, a binary version of STL exists.
+A binary STL file has an 80 character header (which is generally ignored - but
+which should never begin with 'solid' because that will lead most software to
+assume that this is an ASCII STL file). Following the header is a 4 byte
+unsigned integer indicating the number of triangular facets in the file.
+Following that is data describing each triangle in turn. The file simply ends
+after the last triangle.
+
+Each triangle is described by twelve floating point numbers: three for the
+normal and then three for the X/Y/Z coordinate of each vertex - just as with
+the ASCII version of STL. After the twelve floats there is a two byte unsigned
+'short' integer that is the 'attribute byte count' - in the standard format,
+this should be zero because most software does not understand anything else.
+
+Floating point numbers are represented as IEEE floating point numbers and the
+endianness is assumed to be little endian although this is not stated in
+documentation.
+
+[edit] Colour in Binary STL
+
+There are at least two variations on the binary STL format for adding colour
+information:
+
+[edit] VisCAM/SolidView
+
+The VisCAM and SolidView software packages use the two 'attribute byte count'
+bytes at the end of every triangle to store a 15 bit RGB colour:
+
+  * bit 0 to 4 are the intensity level for blue (0 to 31)
+  * bits 5 to 9 are the intensity level for green (0 to 31)
+  * bits 10 to 14 are the intensity level for red (0 to 31)
+      + bit 15 is 1 if the colour is valid
+      + bit 15 is 0 if the colour is not valid (as with normal STL files)
+
+[edit] Magics
+
+The Materialise Magics software does things a little differently. It uses the
+80 byte header at the top of the file to represent the overall colour of the
+entire part. If colour is used, then somewhere in the header should be the
+ASCII string "COLOR=" followed by four bytes representing Red, Green, Blue and
+Alpha channel (transparency) in the range 0-255. This is the colour of the
+entire object unless overridden at each facet. The per-facet colour is
+represented in the two 'attribute byte count' bytes as follows:
+
+  * bit 0 to 4 are the intensity level for red (0 to 31)
+  * bits 5 to 9 are the intensity level for green (0 to 31)
+  * bits 10 to 14 are the intensity level for blue (0 to 31)
+      + bit 15 is 1 if this facet has its own unique colour
+      + bit 15 is 0 if the per-object colour is to be used (or no colour at all
+        if the "COLOR=" string is absent from the header.
+
+[edit] NOTE:
+
+The red/green/blue ordering within those two bytes is reversed in these two
+approaches - so whilst these formats could easily have been compatible the
+reversal of the order of the colours means that they are not - and worse still,
+a generic STL file reader cannot automatically distinguish between them. There
+is also no way to have facets be selectively transparent because there is no
+per-facet alpha value - although in the context of current rapid prototyping
+machinery, this is not important.
+
+[edit] The Facet Normal
+
+In both ASCII and binary versions of STL, the facet normal should be a unit
+vector pointing outwards from the solid object. In most software this may be
+set to (0,0,0) and the software will automatically calculate a normal based on
+the order of the triangle vertices using the 'right hand rule'. Some STL
+loaders (eg the STL plugin for Art of Illusion) check that the normal in the
+file agrees with the normal they calculate using the right hand rule and warn
+you when it does not. Other software may ignore the facet normal entirely and
+use only the right hand rule. So in order to be entirely portable one should
+provide both the facet normal and order the vertices appropriately - even
+though it is seemingly redundant to do so.
+
+[edit] History of use
+
+Stereolithography machines are basically 3D printers that can build any volume
+shape as a series of slices. Ultimately these machines require a series of
+closed 2D contours that are filled in with solidified material as the layers
+are fused together.
+
+The natural file format for such a machine would be a series of closed polygons
+corresponding to different Z-values. However, since it's possible to vary the
+layer thicknesses for a faster though less precise build, it seemed easier to
+define the model to be built as a closed polyhedron that could be sliced at the
+necessary horizontal levels.
+
+The STL file format appears capable of defining a polyhedron with any polygonal
+facet, but in practice it's only ever used for triangles, which means that much
+of the syntax of the file is superfluous. It is also the case that the value of
+the normal shouldn't be necessary, since that is a direct calculation from the
+coordinates of the triangle with the orientation being controlled by the right
+hand rule.
+
+STL files are supposed to be closed and connected like a combinatorial surface,
+where every triangular edge is part of exactly two triangles, and not
+self-intersecting. Since the syntax does not enforce this property, it can be
+ignored for applications where the closedness doesn't matter.
+
+The closedness only matters insofar as the software which slices the triangles
+requires it to ensure that the resulting 2D polygons are closed. Sometimes such
+software can be written to clean up small discrepancies by moving endpoints of
+edges that are close together so that they coincide. The results are not
+predictable, but it is often sufficient to get the job done.
+
+Obviously, there is much scope for "improvement" of this file format, which in
+its present form is nothing more than a listing of groups of 9 (or 12 if you
+care about the normals) floating point numbers embedded in some unnecessary
+syntax. Since each vertex is on average going to be used in six different
+triangles, considerable savings in memory could be obtained by listing all the
+points in a table at the beginning of the file, and concluding with a list of
+triangle definitions composed of triplets of integers that referenced this
+table.
+
+However, for the purpose of generating a single contour slice using a very
+lightweight piece of software on a computer with little memory, this format is
+perfect since it can be processed in one pass regardless of file size.
+
+[edit] Use in other fields.
+
+Many Computer-aided design systems are able to output the STL file format among
+their other formats because it's quick and easy to implement, if you ignore the
+connection criteria of the triangles. Many Computer-aided manufacturing systems
+require triangulated models as the basis of their calculation.
+
+Since an STL file output, of a sorts, is almost always available from the CAD
+system, it's often used as a quick method for importing the necessary
+triangulated geometry into the CAM system.
+
+Once it works, there is very little motivation to change, even though it is far
+from the most memory and computationally efficient method for transferring this
+data. Many integrated CAD and CAM systems transfer their geometric data using
+this accidental file format, because it's impossible to go wrong.
+
+There are many other file formats capable of encoding triangles available, such
+as VRML, DXF, but they have the disadvantage that it's possible to put things
+other than triangles into it, and thus produce something ambiguous or unusable.
+
+[edit] See also
+
+  * RepRap is an OpenSource project that uses STL file input and generates
+    solid objects as output.
+  * PLY (file format) is an alternative file format with more flexibility that
+    is in use in some stereolithography applications.
+  * MeshLab is an open source Windows and Linux application for visualizing,
+    processing and converting three dimensional meshes to or from the STL file
+    format.
+
+[edit] External links
+
+  * The STL Format - Standard Data Format for Fabbers: The STL Format
+  * How to Create an STL file Guide to exporting STL files from various CAD
+    packages (courtesy of ProtoCAM)
+  * SolidView SolidView is a commercial STL manipulation package that has a
+    Lite version available (under provision of a business email address) for
+    STL viewing.
+  * Freesteel with a web-interface where you can upload an STL file and render
+    it into an image in your browser.
+  * ADMesh is a GPLed text-based program for processing triangulated solid
+    meshes, and reads and writes the STL file format.
+
+Retrieved from "http://en.wikipedia.org/wiki/STL_%28file_format%29"
+
+Categories: Solid freeform fabrication | CAD file formats | Graphics file
+formats | Computer file formats | 3D computer graphics
+
+Views
+
+  * Article
+  * Discussion
+  * Edit this page
+  * History
+
+Personal tools
+
+  * Log in / create account
+
+
+Navigation
+
+  * Main Page
+  * Contents
+  * Featured content
+  * Current events
+  * Random article
+
+Interaction
+
+  * About Wikipedia
+  * Community portal
+  * Recent changes
+  * Contact Wikipedia
+  * Donate to Wikipedia
+  * Help
+
+Search
+
+[                    ] [Go]  [Search]
+Toolbox
+
+  * What links here
+  * Related changes
+  * Upload file
+  * Special pages
+  * Printable version
+  * Permanent link
+  * Cite this page
+
+Languages
+
+  * Deutsch
+  * Fran?ais
+  * ???????
+
+Powered by MediaWiki
+Wikimedia Foundation
+
+  * This page was last modified 22:47, 15 February 2008.
+  * All text is available under the terms of the GNU Free Documentation License
+    . (See Copyrights for details.)
+    Wikipedia? is a registered trademark of the Wikimedia Foundation, Inc., a
+    U.S. registered 501(c)(3) tax-deductible nonprofit charity.
+  * Privacy policy
+  * About Wikipedia
+  * Disclaimers
+