This introduction is an excerpt from technical documentation of 3D systems inc.
For more detail contact: 3D systems Inc.
The SLC file format is a "21/2D" contour representation of a CAD model. It consists of successive cross-sections taken at ascending Z intervals in which solid material is represented by interior and exterior boundary polylines. SLC data can be generated from various sources, either by conversion from CAD solid or surface models or more directly from systems that produce data arranged in layers, such as CT-scanners.
A segment is a straight line connecting two X/Y vertices points.
A Polyline is an ordered list of X/Y vertices points connected continuously by each successive line segment. The polyline must be closed whereby the last point must equal the first point in the vertices list.
A boundary is a closed polyline representing interior or exterior solid material. An exterior boundary has its polyline list in counter-clockwise order. The solid material is inside the polyline. An interior boundary has its polyline list in clockwise order and solid material is outside the polyline.
A contour layer is a list of exterior and interior boundaries representing the solid material at a specified Z cross-section of the CAD model. The cross-section slice is taken parallel to the X/Y plane and has a specified layer thickness.
Byte 8 bits
Character 1 Byte
Unsigned Integer 4 Bytes
Float 4 Bytes
IEEE Format
Most significant byte of FLOAT is specified in the highest addressed byte. The byte ordering follows the Intel PC Little Indian/Big Indian scheme.
Address 0 1 2
3
Low Word
High Word
LSB MSB LSB MSB
Most UNIX RISC Workstations are Big Indian/Little Indian, therefore they need to byte swap
all Unsigned Integers and Floats before outputting to the SLC file.
The SLC file is divided into a header section, a 3D reserved section, a sample table section, and the contour data section.
The Header section is an ASCII character string containing global information about the
part and how it was prepared.
The header is terminated by a carriage return, line feed and control-Z character
(0x0d,0x0a,0x1a) and can be a maximum of 2048 bytes including the termination characters.
The syntax of the header section is a keyword followed by its appropriate parameter.
specifies the SLC file format version number. The version number of this specification is 2.0.
indicates which units the SLC data is represented in.
specifies the CAD model type. PART and SUPPORT must be closed contours. WEB types can be open polylines or line segments.
identifies the vendor package and version number that produced the SLC file. A maximum of 32 bytes.
describes the X, Y, and Z extents of the CAD model.
specifies the cordal deviation, if used, to generate the SLC data.
specifies the arc resolution, if used, to generate the SLC data.
specifies the surface tolerance, if used, to generate the SLC data.
specifies the gap tolerance, if used, to generate the SLC data.
specifies the maximum gap size found when generating the SLC data.
specifies if any line width compensation has been applied to the SLC data by the CAD vendor.
This 256-byte section is reserved for future use.
The sample table describes the sampling thickness (layer thickness or slice thickness) of the part. There can be up to 256 entries in the table. Each entry describes the Z start, the slice thickness, and what line width compensation is desired for that sampling range.
Sampling Table Size
1 Byte
Sampling Table Entry
4 Floats
Minimum Z Level
1 Float
Layer Thickness
1 Float
Line Width Compensation
1 Float
Reserved
1 Float
The first sampling table entry Z start value must be the very first Z contour layer. For example, if the cross-sections were produced with a single thickness of 0.006 inches and the first Z level of the part is 0.4 inches and a line width compensation value of 0.005 is desired, then the sampling table will look like the following:
Sample Table Size
1
Sample Table Entry
0.4 0.006 0.005 0.0
If for example, the part was sliced with 2 different layer thickness the Sample Table
could look like the following:
Sample Table Size
2
Sample Table Entry 1
0.4 0.005 0.004 0.0
Sample Table Entry 2
2.0 0.010 0.005 0.0
Slice thickness must be even multiples of one other to avoid processing problems.
The contour data section is a series of successive ascending Z cross-sections or layers
with the accompanying contour data. Each Contour Layer contains the minimum Z layer
value, number of boundaries followed by the list of individual boundary data. The boundary
data contains the number of x,y vertices for that boundary, the number of gaps, and
finally the list of floating point vertice points.
The location of a gap can be determined when a vertice point repeats itself. To
illustrate, given the contour layer in section 2.4 the contour section could be as
follows:
Z Layer
0.4
Number of Boundaries
2
Number of Vertices for the 1st
Boundary 5
Number of Gaps for the 1st
Boundary 0
Vertex List for 1st Boundary
0.0, 0.0
1.0, 0.0
1.0, 1.0
0.0, 1.0
0.0, 0.0
* Notice the direction of the vertice list is counter-clockwise indicating the solid
material is inside the polylist. Also, notice that the polylist is closed because
the last vertice is equal to the first vertice.
Number of Vertices for the 2nd
Boundary 5
Number of Gaps for the 2nd
Boundary 0
Vertex List for 2nd Boundary
0.2, 0.2
0.2, 0.8
0.8, 0.8
0.8, 0.2
0.2, 0.2
* Notice the direction of the vertice list is clockwise indicating the solid material is
outside the polylist. Also, notice that the polylist is closed because the last vertice is
equal to the first vertice.
The Contour Layers are stacked in ascending order until the top of the part. The
last layer, or the top of the part, is indicated by the Z level and a termination unsigned
integer (0xFFFFFFFF).
Contour Layer Section Description
Contour Layer
Minimum Z Level
Float
Number of Boundaries
Unsigned Integer
Number of
Vertices Unsigned Integer
Number of Gaps
Unsigned Integer
Vertices List
(X/Y) Number of Vertices * 2 Float
Repeat Number of Boundaries
1
Repeat Contour Layer until Top of
Part
Top of Part
Maximum Z Level
1 Float
Termination Value
Unsigned Integer (0xFFFFFFFF)
Minimum Z Level for a given Contour Layer
Note that a one-inch cube based at the origin 0,0,0 can be represented simply by only one
contour layer and the Top of Part Layer data.
Suppose the cube was to be imaged in 0.010 layers. The sample table would have a single
entry with its starting Z level at 0.0 and layer thickness at 0.01. The contour
layer data section could be as follows:
Z Layer
0.0
Number of Boundaries
1
Number of Vertices for the 1st
Boundary 5
Number of Gaps for the 1st
Boundary 0
Vertex List for 1st Boundary
0.0, 0.0
1.0, 0.0
1.0, 1.0
0.0, 1.0
0.0, 0.0
Z Layer
1.0
Termination Value
0xFFFFFFFF
Notice that only one contour was necessary to describe the entire part. The initial
contour will be imaged until the next minimum contour layer or the top of the part at the
specified layer thickness described in the sampling table. This part could have had
100 identical contour layers, but that would have been redundant. This is why the
contour Z value is referred to as the minimum Z value. It gets repeated until
the next contour or top of the part.