This is a 2 1/2 dimension file describing slices (contours) through a solid model typically for rapid prototyping applications such as stereolithography. It was created by "3D systems" around 1994.
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.