Usage

Example commands

For the most basic usage, specify an input and output file. The file extension you provide for the output file determines what format the IFC is converted to.

$ IfcConvert /path/to/input.ifc /path/to/output.obj

Tip

On Windows, you can drag and drop a .ifc file on the IfcConvert.exe file to automatically convert it to an .obj file.

For any conversion, it is recommended to use multiple cores to speed up processing:

# Change "7" to the number of CPU cores you have then plus one.
$ IfcConvert -j 7 /path/to/input.ifc /path/to/output.dae

By default, units are converted to meters. If you want to retain the original units:

$ IfcConvert --convert-back-units /path/to/input.ifc /path/to/output.stp

If your IFC uses large map coordinates and your desired format cannot handle it:

$ IfcConvert --center-model /path/to/input.ifc /path/to/output.glb
# Alternatively:
$ IfcConvert --center-model-geometry /path/to/input.ifc /path/to/output.glb
# Or you can specify a manual offset in X;Y;Z format
$ IfcConvert --model-offset "10000;10000;0" /path/to/input.ifc /path/to/output.glb

IfcConvert can be used to convert only specific elements.

# Convert only walls and slabs
$ IfcConvert  --include entities IfcWall IfcSlab -v /path/to/input.ifc /path/to/output.glb
# Convert only these two particular elements filtered by GlobalId
$ IfcConvert  --include attribute GlobalId 1yETHMphv6LwABqR4Pbs5g attribute GlobalId 1yETHMphv6LwABqR0Pbs5g -v /path/to/input.ifc /path/to/output.glb
# Convert all objects on level 1. Note how "+" is used.
$ IfcConvert  --include+=attribute Name "Level 1" -v /path/to/input.ifc /path/to/output.glb

Warning

The include (or exclude) arguments cannot be placed right before input file argument and only single of each argument supported for now.

IfcConvert can also be used to generate SVG floorplans:

$ IfcConvert /path/to/input.ifc -yv /path/to/output.svg \
    -j 7 --exclude entities IfcOpeningElement IfcSpace

CLI Manual

$ IfcConvert -h

IfcOpenShell IfcConvert v0.7.0-dc67287d (OCC 7.5.3)
Usage: IfcConvert [options] <input.ifc> [<output>]

Converts (the geometry in) an IFC file into one of the following formats:
  .obj   WaveFront OBJ  (a .mtl file is also created)
  .dae   Collada        Digital Assets Exchange
  .glb   glTF           Binary glTF v2.0
  .stp   STEP           Standard for the Exchange of Product Data
  .igs   IGES           Initial Graphics Exchange Specification
  .xml   XML            Property definitions and decomposition tree
  .svg   SVG            Scalable Vector Graphics (2D floor plan)
  .h5    HDF            Hierarchical Data Format storing positions, normals and indices
  .ifc   IFC-SPF        Industry Foundation Classes

If no output filename given, <input>.obj will be used as the output file.


Command line options:
  -h [ --help ]                         display usage information
  --version                             display version information
  -v [ --verbose ]                      more verbose log messages. Use twice
                                        (-vv) for debugging level.
  -d [ --debug ]                        write boolean operands to file in
                                        current directory for debugging
                                        purposes
  -q [ --quiet ]                        less status and progress output
  --cache                               cache geometry creation. Use
                                        --cache-file to specify cache file
                                        path.
  --stderr-progress                     output progress to stderr stream
  -y [ --yes ]                          answer 'yes' automatically to possible
                                        confirmation queries (e.g. overwriting
                                        an existing output file)
  --no-progress                         suppress possible progress bar type of
                                        prints that use carriage return
  --log-format arg                      log format: plain or json
  --log-file arg                        redirect log output to file

Geometry options:
  -j [ --threads ] arg (=1)             Number of parallel processing threads
                                        for geometry interpretation.
  --plan                                Specifies whether to include curves in
                                        the output result. Typically these are
                                        representations of type Plan or Axis.
                                        Excluded by default.
  --model                               Specifies whether to include surfaces
                                        and solids in the output result.
                                        Typically these are representations of
                                        type Body or Facetation. Included by
                                        default.
  --weld-vertices                       Specifies whether vertices are welded,
                                        meaning that the coordinates vector
                                        will only contain unique xyz-triplets.
                                        This results in a manifold mesh which
                                        is useful for modelling applications,
                                        but might result in unwanted shading
                                        artefacts in rendering applications.
  --use-world-coords                    Specifies whether to apply the local
                                        placements of building elements
                                        directly to the coordinates of the
                                        representation mesh rather than to
                                        represent the local placement in the
                                        4x3 matrix, which will in that case be
                                        the identity matrix.
  --convert-back-units                  Specifies whether to convert back
                                        geometrical output back to the unit of
                                        measure in which it is defined in the
                                        IFC file. Default is to use meters.
  --orient-shells                       Specifies whether to orient the faces
                                        of IfcConnectedFaceSets. This is a
                                        potentially time consuming operation,
                                        but guarantees a consistent orientation
                                        of surface normals, even if the faces
                                        are not properly oriented in the IFC
                                        file.
  --center-model                        Centers the elements by applying the
                                        center point of all placements as an
                                        offset.Can take several minutes on
                                        large models.
  --center-model-geometry               Centers the elements by applying the
                                        center point of all mesh vertices as an
                                        offset.
  --model-offset arg                    Applies an arbitrary offset of form
                                        'x;y;z' to all placements.
  --model-rotation arg                  Applies an arbitrary quaternion
                                        rotation of form 'x;y;z;w' to all
                                        placements.
  --disable-opening-subtractions        Specifies whether to disable the
                                        boolean subtraction of
                                        IfcOpeningElement Representations from
                                        their RelatingElements.
  --disable-boolean-results             Specifies whether to disable the
                                        boolean operation within
                                        representations such as clippings by
                                        means of IfcBooleanResult and subtypes
  --no-2d-boolean                       Do not attempt to process boolean
                                        subtractions in 2D.
  --enable-layerset-slicing             Specifies whether to enable the slicing
                                        of products according to their
                                        associated IfcMaterialLayerSet.
  --layerset-first                      Assigns the first layer material of the
                                        layerset to the complete product.
  --include arg                         Specifies that the instances that match
                                        a specific filtering criteria are to be
                                        included in the geometrical output:
                                        1) 'entities': the following list of
                                        types should be included. SVG output
                                        defaults to IfcSpace to be included.
                                        The entity names are handled
                                        case-insensitively.
                                        2) 'layers': the instances that are
                                        assigned to presentation layers of
                                        which names match the given values
                                        should be included.
                                        3) 'attribute <AttributeName>':
                                        products whose value for
                                        <AttributeName> should be included
                                        . Currently supported arguments are
                                        GlobalId, Name, Description, and Tag.

                                        The values for 'layers' and 'arg' are
                                        handled case-sensitively (wildcards
                                        supported).--include and --exclude
                                        cannot be placed right before input
                                        file argument and only single of each
                                        argument supported for now. See also
                                        --exclude.
  --include+ arg                        Same as --include but applies filtering
                                        also to the decomposition and/or
                                        containment (IsDecomposedBy,
                                        HasOpenings, FillsVoid,
                                        ContainedInStructure) of the filtered
                                        entity, e.g. --include+=arg Name "Level
                                        1" includes entity with name "Level 1"
                                        and all of its children. See --include
                                        for more information.
  --exclude arg                         Specifies that the entities that match
                                        a specific filtering criteria are to be
                                        excluded in the geometrical output.See
                                        --include for syntax and more details.
                                        The default value is
                                        '--exclude=entities IfcOpeningElement
                                        IfcSpace'.
  --exclude+ arg                        Same as --exclude but applies filtering
                                        also to the decomposition and/or
                                        containment of the filtered entity. See
                                        --include+ for more details.
  --filter-file arg                     Specifies a filter file that describes
                                        the used filtering criteria. Supported
                                        formats are '--include=arg GlobalId
                                        ...' and 'include arg GlobalId ...'.
                                        Spaces and tabs can be used as
                                        delimiters.Multiple filters of same
                                        type with different values can be
                                        inserted on their own lines. See
                                        --include, --include+, --exclude, and
                                        --exclude+ for more details.
  --no-normals                          Disables computation of normals. Saves
                                        time and file size and is useful in
                                        instances where you're going to
                                        recompute normals for the exported
                                        model in other modelling application in
                                        any case.
  --deflection-tolerance arg (=0.001)   Sets the deflection tolerance of the
                                        mesher, 1e-3 by default if not
                                        specified.
  --force-space-transparency arg        Overrides transparency of spaces in
                                        geometry output.
  --angular-tolerance arg (=0.5)        Sets the angular tolerance of the
                                        mesher in radians 0.5 by default if not
                                        specified.
  --generate-uvs                        Generates UVs (texture coordinates) by
                                        using simple box projection. Requires
                                        normals. Not guaranteed to work
                                        properly if used with --weld-vertices.
  --default-material-file arg           Specifies a material file that
                                        describes the material object types
                                        will haveif an object does not have any
                                        specified material in the IFC file.
  --validate                            Checks whether geometrical output
                                        conforms to the included explicit
                                        quantities.
  --no-wire-intersection-check          Skip wire intersection check.
  --no-wire-intersection-tolerance      Set wire intersection tolerance to 0.
  --strict-tolerance                    Use exact tolerance from model. Default
                                        is a 10 times increase for more
                                        permissive edge curves and fewer
                                        artifacts after boolean operations at
                                        the expense of geometric detail due to
                                        vertex collapsing and wire intersection
                                        fuzziness.

Serialization options:
  --bounds arg                          Specifies the bounding rectangle, for
                                        example 512x512, to which the output
                                        will be scaled. Only used when
                                        converting to SVG.
  --scale arg                           Interprets SVG bounds in mm, centers
                                        layout and draw elements to scale. Only
                                        used when converting to SVG. Example
                                        1:100.
  --center arg                          When using --scale, specifies the
                                        location in the range [0 1]x[0 1]
                                        around whichto center the drawings.
                                        Example 0.5x0.5 (default).
  --section-ref arg                     Element at which cross sections should
                                        be created
  --elevation-ref arg                   Element at which drawings should be
                                        created
  --elevation-ref-guid arg              Element guids at which drawings should
                                        be created
  --auto-section                        Creates SVG cross section drawings
                                        automatically based on model extents
  --auto-elevation                      Creates SVG elevation drawings
                                        automatically based on model extents
  --draw-storey-heights [=arg(=full)] (=none)
                                        Draws a horizontal line at the height
                                        of building storeys in vertical
                                        drawings
  --storey-height-line-length arg       Length of the line when
                                        --draw-storey-heights=left
  --svg-xmlns                           Stores name and guid in a separate
                                        namespace as opposed to data-name,
                                        data-guid
  --svg-poly                            Uses the polygonal algorithm for hidden
                                        line rendering
  --svg-write-poly                      Approximate every curve as polygonal in
                                        SVG output
  --svg-project                         Always enable hidden line rendering
                                        instead of only on elevations
  --svg-without-storeys                 Don't emit drawings for building
                                        storeys
  --svg-no-css                          Don't emit CSS style declarations
  --door-arcs                           Draw door openings arcs for IfcDoor
                                        elements
  --section-height arg                  Specifies the cut section height for
                                        SVG 2D geometry.
  --section-height-from-storeys         Derives section height from storey
                                        elevation. Use --section-height to
                                        override default offset of 1.2
  --use-element-names                   Use entity instance IfcRoot.Name
                                        instead of unique IDs for naming
                                        elements upon serialization. Applicable
                                        for OBJ, DAE, and SVG output.
  --use-element-guids                   Use entity instance IfcRoot.GlobalId
                                        instead of unique IDs for naming
                                        elements upon serialization. Applicable
                                        for OBJ, DAE, and SVG output.
  --use-element-numeric-ids             Use the numeric step identifier (entity
                                        instance name) for naming elements upon
                                        serialization. Applicable for OBJ, DAE,
                                        and SVG output.
  --use-material-names                  Use material names instead of unique
                                        IDs for naming materials upon
                                        serialization. Applicable for OBJ and
                                        DAE output.
  --use-element-types                   Use element types instead of unique IDs
                                        for naming elements upon serialization.
                                        Applicable for DAE output.
  --use-element-hierarchy               Order the elements using their
                                        IfcBuildingStorey parent. Applicable
                                        for DAE output.
  --site-local-placement                Place elements locally in the IfcSite
                                        coordinate system, instead of placing
                                        them in the IFC global coords.
                                        Applicable for OBJ and DAE output.
  --y-up                                Change the 'up' axis to positive Y,
                                        default is Z UP, Applicable for OBJ
                                        output.
  --building-local-placement            Similar to --site-local-placement, but
                                        placing elements in locally in the
                                        parent IfcBuilding coord system
  --precision arg (=15)                 Sets the precision to be used to format
                                        floating-point values, 15 by default.
                                        Use a negative value to use the
                                        system's default precision (should be 6
                                        typically). Applicable for OBJ and DAE
                                        output. For DAE output, value >= 15
                                        means that up to 16 decimals are used,
                                        and any other value means that 6 or 7
                                        decimals are used.
  --print-space-names                   Prints IfcSpace LongName and Name in
                                        the geometry output. Applicable for SVG
                                        output
  --print-space-areas                   Prints calculated IfcSpace areas in
                                        square meters. Applicable for SVG
                                        output
  --space-name-transform arg            Additional transform to the space
                                        labels in SVG
  --edge-arrows                         Adds arrow heads to edge segments to
                                        signify edge direction