SIF Version 2.0
SIF SFF LSIF SIF DSG

SIF SFF

Last Updated 12/20/99

SIF SFF is a simple boundary and CSG representation, designed for SFF (Solid Free-Form Fabrication) processes.


Links


The SIF Lexical Conventions

SIF is an ASCII file format which is similar lexically to C code. SIF does not have a preprocessor, and it does not have any macro text facilities.

The SIF SFF Semantics

( SIF_SFF major_version minor_version header_list solid_list )
TYPE:
FILE
PARAMETERS:
INT major_version, minor_version
HEADER header_list
SOLID solid_list
DESCRIPTION:

This is a SIF_SFF file of the corresponding version number. The header_list has some global, default parameter declarations, and the body is the description of the solid(s).

( units mm | inches )
TYPE:
HEADER
PARAMETERS:
UNIT_SPECIFICATION mm | inches
DESCRIPTION:

The units header field tells what units the file is in. Currently, the choices are millimeters or inches, because those units make the most sense given the build volumes and accuracies of current SFF machines.

( desired_accuracy error )
TYPE:
HEADER
PARAMETERS:
VALUE error
DESCRIPTION:

The desired_accuracy header field is a global error tolerance for manufacturing. It implies that the designer will accept a part whose measurements end up being + or - error from the ideal geometry described when it is actually manufactured.

( constellation solid_list )
TYPE:
SOLID
PARAMETERS:
SOLID solid_list
DESCRIPTION:

A constellation is used to group together solids whose positions relative to each other should be maintained. This might be because the designer wanted to attach together pieces made out of different materials, or because different pieces cannot be properly assembled if they are not manufactured in certain positions, or because the designer has carefully packed together several parts in a compact volume for fast simultaneous build. If no constellation is specified, then the manufacturer is free to move around different disconnected pieces described in the file.

( solid volume_property_list shell_set_list )
TYPE:
SOLID
PARAMETERS:
VOLUME_PROPERTY volume_property_list
SHELL_SET shell_set_list
DESCRIPTION:

A solid is used to assign volume properties to all 3D pieces of geometry bounded by the indicated shells or boolean combinations of shells.

( shell vertices triangles )
TYPE:
SHELL_SET
PARAMETERS:
VERTICES vertices
TRIANGLES triangles
DESCRIPTION:

A shell is a surface of finite area which divides 3D space into exactly two volumes (a pseudo-2-manifold). This surface is made up of geometry defined by vertices and triangles. The vertices of each triangle must be in counter-clockwise order as viewed from the exterior of the shell, and the interior must have finite volume.

( vertices number_vertices vertex_list )
TYPE:
VERTICES
PARAMETERS:
INT number_vertices
VERTEX vertex_list
DESCRIPTION:

Defines an array of vertices of size number_vertices with the vertices in the vertex_list. The implicit array indices start with 0 for the first vertex.

( v x y z w )
( v x y z )
( v x y )
TYPE:
VERTEX
PARAMETERS:
VALUE x
VALUE y
VALUE z (= 0 if omited)
VALUE w (= 1 if omited)
DESCRIPTION:

This is a vertex located at (x, y, z) with homogeneous weight w

( triangles number_triangles triangle_list )
TYPE:
TRIANGLES
PARAMETERS:
INT number_triangles
OPEN_2D triangle_list
DESCRIPTION:

Defines an array of triangles of size number_triangles with the triangles in the triangle_list (which may be encapsulated in one or more surfaces).

( surface surface_property_list triangle_list)
TYPE:
OPEN_2D
PARAMETERS:
SURFACE_PROPERTY surface_property_list
OPEN_2D triangle_list
DESCRIPTION:

A surface is a collection of triangles with the same surface properties.

( t vid0 vid1 vid2 )
TYPE:
OPEN_2D
PARAMETERS:
INT vid0, vid1, vid2
DESCRIPTION:

This is a simple triangle which is a closed list of three edge segments. It is defined by the three vertices with the indicated array indices. The vertices should be in counter-clockwise order as viewed from the exterior of the shell containing the triangle.

( union shell_set_list )
TYPE:
SHELL_SET
PARAMETERS:
SHELL_SET shell_set_list
DESCRIPTION:

A regularized boolean union operator. The result is the closure of the interior of the union of the arguments (whether single shells or boolean trees).

( intersection shell_set_list )
TYPE:
SHELL_SET
PARAMETERS:
SHELL_SET shell_set_list
DESCRIPTION:

A regularized boolean intersection operator. All of the arguments (whether single shells or boolean trees) are intersected, and then the closure of the interior of the result is the regularized intersection.

( difference shell_set_list )
TYPE:
SHELL_SET
PARAMETERS:
SHELL_SET shell_set_list
DESCRIPTION:

A regularized boolean difference operator. The first argument (whether a single shell or a boolean tree) is the positive volume from which the geometry of subsequent arguments is subtracted. The closure of the interior of the result of the difference is the regularized difference.

( color color_setting )
TYPE:
VOLUME_PROPERTY | SURFACE_PROPERTY
PARAMETERS:
COLOR_SETTING color_setting
DESCRIPTION:

The color specification may be used either as a volume property for the whole shell or as a surface property on individual faces. A color surface property over-rides a color volume property on that surface.

( rgb r g b )
TYPE:
COLOR_SETTING
PARAMETERS:
VALUE r
VALUE g
VALUE b
DESCRIPTION:

An specification of color as an RGB coordinate triple. The arguments should all be values between 0.0 and 1.0.

TYPE:
VALUE
DESCRIPTION:

INT or REAL or EXP

( e value exponent )
TYPE:
EXP
PARAMETERS:
INT value
INT exponent
DESCRIPTION:

Floating point precision independent numerical format. The meaning of which = value * (10 ^ exponent).

int
TYPE:
INT
PARAMETERS:
INT int
DESCRIPTION:

The integer value int

real
TYPE:
REAL
PARAMETERS:
REAL real
DESCRIPTION:

The real value real


Some SIF SFF Example Files

Simple Cube

(* file for a cube centered at the origin *)
(SIF_SFF 2 0
  (solid
    (shell
      (vertices 8
        (v 1 1 1)
        (v 1 1 -1)
        (v -1 1 -1)
        (v -1 1 1)
        (v -1 -1 1)
        (v 1 -1 1)
        (v 1 -1 -1)
        (v -1 -1 -1)
      )
      (triangles 12
        (t 7 1 6)
        (t 6 1 5)
        (t 6 5 4)
        (t 4 5 3)
        (t 4 3 2)
        (t 2 3 1)
        (t 7 2 1)		
        (t 5 1 0)
        (t 7 6 4)
        (t 5 0 3)
        (t 4 2 7)
        (t 0 1 3)
      )
    )
  )
)

Object with Booleans

(* Shows use of unevaluated booleans and volume properties *)
(SIF_SFF 2 0
  (solid (color (rgb .5 .5 0))
   (union
    (shell
      (vertices 8
        (v .5 .5 .5)
        (v .5 .5 -3)
        (v -3 .5 -3)
        (v -3 .5 .5)
        (v -3 -3 .5)
        (v .5 -3 .5)
        (v .5 -3 -3)
        (v -3 -3 -3)
      )
      (triangles 12
        (t 7 1 6)
        (t 6 1 5)
        (t 6 5 4)
        (t 4 5 3)
        (t 4 3 2)
        (t 2 3 1)
        (t 7 2 1)		
        (t 5 1 0)
        (t 7 6 4)
        (t 5 0 3)
        (t 4 2 7)
        (t 0 1 3)
      )
    )
   )
   (difference
    (shell
      (vertices 8
        (v 4 4 4)
        (v 4 4 -2)
        (v -2 4 -2)
        (v -2 4 4)
        (v -2 -2 4)
        (v 4 -2 4)
        (v 4 -2 -2)
        (v -2 -2 -2)
      )
      (triangles 12
        (t 7 1 6)
        (t 6 1 5)
        (t 6 5 4)
        (t 4 5 3)
        (t 4 3 2)
        (t 2 3 1)
        (t 7 2 1)		
        (t 5 1 0)
        (t 7 6 4)
        (t 5 0 3)
        (t 4 2 7)
        (t 0 1 3)
      )
    )
    (shell
      (vertices 8
        (v 1 1 1)
        (v 1 1 -1)
        (v -1 1 -1)
        (v -1 1 1)
        (v -1 -1 1)
        (v 1 -1 1)
        (v 1 -1 -1)
        (v -1 -1 -1)
      )
      (triangles 12
        (t 7 1 6)
        (t 6 1 5)
        (t 6 5 4)
        (t 4 5 3)
        (t 4 3 2)
        (t 2 3 1)
        (t 7 2 1)		
        (t 5 1 0)
        (t 7 6 4)
        (t 5 0 3)
        (t 4 2 7)
        (t 0 1 3)
      )
    )
  )
)



This page is maintained by Sara McMains
E-mail: sara@cs.berkeley.edu
Last modified: 12/20/99

This page was designed and tested under Netscape using common HTML constructs. No browsers are blocked from viewing this page. Please send mail to the maintainer of this page if you find any broken links or errors in the page construction.