|
|
| Menu location |
|---|
| 3D/BIM → Covering |
| Workbenches |
| BIM |
| Default shortcut |
| C V |
| Introduced in version |
| 26.3 |
| See also |
| None |
The BIM Covering tool creates a parametric object representing a surface finish applied to a planar face. Typical use cases include floor tiling, wall cladding, ceiling finishes, roofing, skirting boards, and any other repeating surface material.
Depending on the selected Finish Mode, the object produces either individual 3D tile geometry with real joint gaps, a flat parametric representation, or a technical hatch pattern. All modes update a set of Quantity Take-Off properties on every recompute, making the object useful for material schedules and cost estimation regardless of the level of geometric detail chosen.
The Covering object is semantically equivalent to the IFC IfcCovering class. Its DataPredefinedType property maps directly to the IFC subtypes (FLOORING, CLADDING, ROOFING, MOLDING, SKIRTINGBOARD, CEILING, WRAPPING), making it suitable for BIM workflows that require IFC export.
Double-click an existing Covering object in the Tree View to reopen the task panel in edit mode. All parameters can be changed. To reassign the base face, activate the Pick button and select a new face.
The undo behaviour differs between creation modes:
The Finish mode controls how the covering geometry is generated and displayed. It can be changed at any time without losing other settings.
All modes except Hatch Pattern support texture mapping via the Visuals task panel section.
Individual 3D tiles are generated with real joint gaps between them via boolean subtraction. Each tile is a separate solid extruded to the specified thickness. This mode is the most geometrically accurate and produces the most informative Quantity Take-Off data (including individual tile counts and waste). It is also the least performant. It is best suited for close-up renders, detailed drawings, and material schedules.
Performance note: When the tile count exceeds 10,000 or the joint width is less than 0.1 mm, the engine automatically switches to analytical mode: the geometry falls back to a single monolithic solid, while tile counts and areas are still computed mathematically. A warning is printed to the Report View when this occurs. At counts above 100,000, layout lines are also hidden.
A grid of tile layout lines is drawn on a single flat slab without extruding individual tiles. The slab thickness is controlled by the Tile Thickness parameter. This mode is lighter to display and recompute than Solid Tiles, making it suitable for large-scale views, preliminary layouts, or performance-sensitive models.
A single continuous surface is produced with no tile subdivisions. The tile dimensions define the texture repeat period only. This mode is intended for seamless or near-seamless materials such as plaster, paint, polished concrete, carpet, or linoleum, where individual unit boundaries are absent or irrelevant.
A 2D CAD-style hatch pattern is applied to a single flat slab using a standard .PAT pattern file. This mode is intended for technical drawings and plans. A PAT file and pattern name must be specified; FreeCAD's bundled FCPAT.pat is offered as the default. Texture mapping is not available in this mode.

The task panel is divided into three collapsible sections that logically group all controls.
| Control | Description |
|---|---|
| Base | The face or object the covering is applied to. Click Pick to change it interactively. |
| Mode | Selects the geometry generation strategy (see Finish Modes above). |
| Thickness | Extrusion depth of each tile (or slab thickness in non-Solid modes). |
| Length | Tile body length along the U axis. |
| Width | Tile body width along the V axis. |
| Joint width | Width of the gap between tiles. |
| Stagger | Running bond offset: Stacked (None), 1/2, 1/3, 1/4, or Custom. The Custom option enables a free offset input. |
| Continue | When checked, pressing OK creates the covering and immediately resets the panel for a new one, without closing the task panel. |
| Control | Description |
|---|---|
| Alignment | Preset or Custom grid anchor (see Alignment section below). |
| U offset | Manual offset of the grid origin along the face U axis. Active only in Custom alignment mode. FreeCAD expressions are supported. |
| V offset | Same as above, for V axis. |
| Rotation | Rotates the entire tile grid around the face normal. |
| Border setback | Shrinks the tiling area inward from the face boundary by the given distance. Useful to keep tiles away from skirting boards or other perimeter elements. |
| Control | Description |
|---|---|
| Texture image | An image file mapped continuously onto the covering surface. The file is embedded in the document. |
| Texture scale | Multiplier applied to the texture repeat in U and V independently. Values above 1.0 stretch the texture; values below 1.0 compress it. |
The Alignment setting controls where the tile grid is anchored relative to the base face boundary.
Five presets are available: Center, Top Left, Top Right, Bottom Left, Bottom Right.
For corner presets, the named corner of the lead tile is aligned to the named corner of the face. For instance, Top Right places the top-right corner of the lead tile flush with the top-right corner of the face. The lead tile is a conceptual anchor, not a physical tile: it's the one used to define the alignment. For Center, the center of the lead tile is placed at the center of the face.
Corner names follow the face orientation: on a rotated surface, Top Right refers to the top-right corner of the face itself, not of the viewport or the world. Grout joints at the aligned corner extend outward beyond the face boundary. For the Center preset, the center of a single tile is placed at the face center.
Selecting Custom activates the U offset and V offset input fields, which shift the grid origin by an arbitrary distance along the face coordinate axes. The offset is measured from the face center. FreeCAD parametric expressions are accepted in both fields, allowing the offset to be driven by a VarSet, spreadsheet cell or a model dimension.
The Interactive button (available in Custom mode) enters an interactive grid placement mode. While active, a tile preview tracks the mouse cursor in the 3D View, anchored at its bottom-left corner.
Setting the origin: click any point in the 3D View — typically a vertex of the base face — to set the grid origin at that point. The click ends the interactive session: the U offset, V offset and Rotation fields are updated automatically and the alignment is switched to Custom. To exit without placing, press Esc.
Rotating the grid: optionally, before clicking to confirm the origin, press R to rotate the tile wireframe clockwise by one step, or Shift+R to rotate counter-clockwise. The Rotation field updates live with each keypress. The step size defaults to 15° and can be changed by setting ViewPick Rotation Step in the View tab of the object's properties panel.
If a rotation has been entered manually in the Rotation field before activating Interactive, the wireframe will start at that angle rather than zero. It is not possible to manually enter the rotation in the input field during interactive mode.
The Match Working Plane button sets the grid origin to the projection of the current FreeCAD working plane origin onto the base face, expressed as a U/V offset. This allows the tile grid to be aligned to a known reference point in the model.
Texture images are mapped onto the covering surface using a continuous linear projection with a period equal to TileLength + JointWidth in U and TileWidth + JointWidth in V. The texture repeats seamlessly across the entire surface with no gaps.
The following properties are computed automatically on every recompute and can be read from the object's Data panel or referenced in a FreeCAD spreadsheet:
| Property | Description |
|---|---|
| DataCount Full Tiles | Number of tiles that fit entirely within the face boundary. |
| DataCount Partial Tiles | Number of tiles that are cut by the boundary. |
| DataHole Areas | The individual area of each hole in the base face, in mm², sorted by size (largest first). |
| DataNet Area | Surface area of the base face (the area to be covered). |
| DataGross Area | Total area of material consumed, including partial tiles ordered as full units. |
| DataOuter Area | The area enclosed by the outer boundary of the base face, ignoring any holes. |
| DataWaste Area | GrossArea − NetArea: the area of cut-off material that is discarded. |
| DataTotal Joint Length | Sum of all joint center-line lengths. |
| DataPerimeter Length | Perimeter of the base face. |
When the tile count is within normal limits (up to 10,000 tiles) and the joint width is at least 0.1 mm, quantities are derived from the actual computed geometry (physical mode): tile counts are obtained by counting the resulting solids, and areas are measured from their faces. This is the most accurate method.
When the tile count exceeds 10,000, or the joint is too narrow for stable boolean operations (< 0.1 mm), the engine switches to analytical mode: the geometry falls back to a single monolithic solid, and counts and areas are computed mathematically from the tile dimensions and face area. The QTO values remain valid and usable in schedules; only the 3D representation is simplified.
At counts above 100,000 (extreme count mode), layout lines are additionally hidden to prevent display freezes.
A status message is printed to the Report View whenever the engine falls back from physical to analytical mode.
To reference a Covering's quantities in a FreeCAD spreadsheet, use the standard expression syntax. For example, to read the net area of a covering named Covering:
=Covering.NetArea
An Arch Covering object shares the common properties and behaviors of all Arch Components.
Boundaries
Length): Inward setback from the face perimeter.Covering
LinkSub): The face or object the covering is applied to.Enumeration): Geometry generation strategy: Solid Tiles, Parametric Pattern, Monolithic, or Hatch Pattern.Angle): Rotation of the tile grid around the face normal (degrees).Enumeration): Grid anchor preset or Custom.IFC
Enumeration): Fixed to "Covering" for IFC export.IFC Attributes
Enumeration): IFC subtype: FLOORING, CLADDING, ROOFING, MOLDING, SKIRTINGBOARD, CEILING, WRAPPING, or NOTDEFINED.Pattern
FileIncluded): Embedded .PAT file for Hatch Pattern mode.String): Name of the pattern within the PAT file.Float): Scale factor for the hatch pattern.Quantities
Integer): Number of uncut tiles.Integer): Number of cut tiles.Area): Total material area consumed.FloatList): Sorted list of individual hole areas, largest first, in mm².Area): Surface area of the base face.Area): Total covering area including hole areas.Length): Base face perimeter length.Length): Total joint center-line length.Area): Cut-off material area (Gross Area − Net Area).Tiles
Vector): Grid origin offset from face center (X=U, Y=V).Length): Width of the gap between tiles.Length): Custom running bond offset (active when Stagger Type is Custom).Enumeration): Running bond type: Stacked, Half, Third, Quarter, or Custom.Length): Tile body length in the U direction.Length): Tile extrusion depth (or slab thickness).Length): Tile body width in the V direction.Visual
FileIncluded): Embedded image file for texture mapping.Vector): Texture repeat multiplier (X=U, Y=V).Standard FreeCAD ViewProvider properties (Visibility, ShapeColor, Transparency, etc.) are inherited from the Arch Component base class.
Interactive
Angle): The rotation step applied to the tile grid per R / Shift+R keypress during interactive grid placement. Defaults to 15°. Can be set to any positive angle for finer or coarser control.Covering objects can be created from Python using Arch.makeCovering().
import Arch
# Create a covering on a specific face of an object
box = FreeCAD.ActiveDocument.addObject("Part::Box", "Box")
FreeCAD.ActiveDocument.recompute()
covering = Arch.makeCovering((box, ["Face6"]))
covering.TileLength = 300.0 # mm
covering.TileWidth = 300.0
covering.TileThickness = 10.0
covering.JointWidth = 5.0
covering.TileAlignment = "Center"
covering.FinishMode = "Solid Tiles"
FreeCAD.ActiveDocument.recompute()
The makeCovering function accepts:
Arch.makeCovering(obj) — applies to the most visible face.(object, [face_name]) tuple: Arch.makeCovering((obj, ["Face6"])) — applies to a specific face.None: creates an unbound covering to be configured later.