These extensions describe shapes that a triangle mesh holds badly: lattices of
struts, pre-sliced layers, fine surface texture and solids built by boolean
operations. Each has its own namespace, and a file that depends on one should list
its prefix in requiredextensions.
Extensions on this page
| Extension | Version | Namespace | Usual prefix |
|---|---|---|---|
| Beam Lattice | 1.2.0 | http://schemas.microsoft.com/3dmanufacturing/beamlattice/2017/02 | b |
| Beam Lattice balls | 1.2.0 | http://schemas.microsoft.com/3dmanufacturing/beamlattice/balls/2020/07 | b2 |
| Slice | 1.0.2 | http://schemas.microsoft.com/3dmanufacturing/slice/2015/07 | s |
| Displacement | 1.0.0 | http://schemas.3mf.io/3dmanufacturing/displacement/2023/10 | d |
| Boolean Operations | 1.1.1 | http://schemas.3mf.io/3dmanufacturing/booleanoperations/2023/07 | bo |
A Toolpath extension is also being drafted by the consortium; it is not published and not described here.
Beam Lattice
A b:beamlattice element inside a <mesh> adds
beams (cylinders or cones) between the mesh’s vertices, for lattice structures. The
mesh may then have no triangles.
| beamlattice attribute | Type | Use | Default | Meaning |
|---|---|---|---|---|
minlength | positive number | required | Shortest beam length; shorter beams should not be written, and consumers must ignore them | |
radius | positive number | required | Default beam radius | |
clippingmode | ST_ClippingMode | optional | none | none; inside keeps only what lies inside the clipping mesh; outside keeps only what lies outside it |
clippingmesh | ST_ResourceID | optional | The mesh object used for clipping, defined earlier; required unless the mode is none | |
representationmesh | ST_ResourceID | optional | A mesh object showing the intended outer shape, for viewers | |
pid | ST_ResourceID | optional | Default property group for the beams | |
pindex | ST_ResourceIndex | optional | Default property index for the beams | |
cap | ST_CapMode | optional | sphere | Default end shape |
b2:ballmode | ST_BallMode | optional | none | none: no balls; mixed: balls only at vertices with a ball element; all: a ball at every beam end |
b2:ballradius | positive number | optional | Default ball radius; required unless ballmode is none |
| Element | Attribute | Use | Meaning |
|---|---|---|---|
b:beams / b:beam | v1, v2 | required | Vertex indices of the two ends |
r1 | optional | Radius at v1 (default: the lattice radius) | |
r2 | optional | Radius at v2 (default: r1); only with r1 | |
p1, p2 | optional | Property indices at each end | |
pid | optional | Property group | |
cap1, cap2 | optional | End shape at each end (default: the lattice cap) | |
b2:balls / b2:ball | vindex | required | Vertex at the ball’s centre |
r | optional | Ball radius | |
p, pid | optional | Property index and group | |
b:beamsets / b:beamset | name | optional | Readable name of a group of beams |
identifier | optional | Identifier, unique in the lattice | |
b:ref | index | required | A beam index in the set |
b2:ballref | index | required | A ball index in the set |
| Cap mode | Beam end |
|---|---|
sphere | Closed by a full sphere at the end vertex |
hemisphere | Closed by a half sphere |
butt | Flat end: a plain cylinder or cone |
Slice
Stores an object as a stack of 2D polygon layers, so a printer can use it without slicing. The mesh must still be present, but it may be a lower-resolution stand-in.
| Element | Attribute | Type | Use | Meaning |
|---|---|---|---|---|
object | s:slicestackid | ST_ResourceID | required with the extension | The slice stack for this object |
s:meshresolution | string | optional | fullres (default) or lowres: whether the mesh is meant for making the part or only for preview | |
s:slicestack | id | ST_ResourceID | required | Resource ID; holds either slice elements or sliceref elements |
zbottom | ST_Number | optional | Height of the bottom of the first slice above the build plate (default 0) | |
s:sliceref | slicestackid | ST_ResourceID | required | A slice stack in another model file |
slicepath | ST_UriReference | required | Absolute part name of that (non-root) model file | |
s:slice | ztop | ST_Number | required | Height of the top of this slice; must increase from slice to slice |
s:vertices / s:vertex | x, y | ST_Number | required | A 2D vertex of this slice |
s:polygon | startv | ST_ResourceIndex | required | Vertex where the polygon starts |
s:segment | v2 | ST_ResourceIndex | required | Vertex the segment runs to (it starts where the last one ended) |
p1, p2 | ST_ResourceIndex | optional | Property indices at the segment’s start and end | |
pid | ST_ResourceID | optional | Property group |
Each slice is the region between the previous slice’s top (or
zbottom) and its own ztop. For objects of type
model or solidsupport every polygon must be closed (its
last segment ends at startv) and is filled by the core’s positive fill
rule, applied in 2D. For support objects the polygons are open
outlines that are never filled. Fewer than 231 polygons per slice.
Displacement
Moves the surface of a mesh by a height map, for fine texture without millions of
triangles. An object holds a d:displacementmesh in place of a mesh,
with d:vertices/d:vertex (x, y, z) and
d:triangles/d:triangle as in the core, all in the
displacement namespace.
| Element | Attribute | Use | Default | Meaning |
|---|---|---|---|---|
d:displacement2d | id | required | Resource ID | |
path | required | Part name of a PNG height map | ||
channel | optional | G | R, G, B or A; ignored for greyscale images | |
tilestyleu, tilestylev | optional | wrap | wrap, mirror, clamp or none | |
filter | optional | auto | auto, linear or nearest | |
d:normvectorgroup | id | required | Resource ID; holds normvector elements | |
d:normvector | x, y, z | required | A displacement direction, normalised | |
d:disp2dgroup | id | required | Resource ID; holds disp2dcoord elements | |
dispid | required | The displacement2d map | ||
nid | required | The normvectorgroup | ||
height | required | Displacement, in model units, for the full texture range (may be negative) | ||
offset | optional | 0 | Added to the scaled value | |
d:disp2dcoord | u, v | required | Map coordinates | |
n | required | Index of the direction in the norm vector group | ||
f | optional | 1 | Scale factor for this corner | |
d:triangles | did | optional | Default displacement group | |
d:triangle | v1, v2, v3 | required | Vertex indices, as in the core | |
p1, p2, p3, pid | optional | Properties, as in the core | ||
d1, d2, d3 | optional | Indices into the displacement group for each corner | ||
did | optional | Displacement group for this triangle |
Texture values are normalised to 0–1 (divided by 2n−1).
Within a triangle, the map coordinates, directions and factors are interpolated
from the corners. Then
d(u, v) = texture(u, v) × height + offset, or 0 outside the 0–1 range where the
tile style is none, and each point moves to
p + d × f × n. Colours and other properties are applied first, then the surface is
displaced. Producers should use a plain mesh when no triangle is displaced.
Boolean Operations
An object may hold a bo:booleanshape as its shape: a base object
changed by an ordered list of bo:boolean operands, each applied to the
result so far.
| Element | Attribute | Use | Default | Meaning |
|---|---|---|---|---|
bo:booleanshape | objectid | required | The base object: a model-type object with a mesh, a boolean shape or an extension shape, never components or an object with alternatives | |
operation | optional | union | union, difference or intersection | |
transform | optional | Transform of the base object | ||
path | optional | Model file of the base object (Production extension; root model only) | ||
bo:boolean | objectid | required | A mesh object used as an operand | |
transform | optional | Transform of the operand | ||
path | optional | Model file of the operand |
| Operation | Shape | Surface properties |
|---|---|---|
union | ((base ∪ a) ∪ b) ∪ … | From whichever surface is outermost, by the core overlapping order |
difference | ((base − a) − b) − … | Cut faces take the subtracting object’s property, or none |
intersection | ((base ∩ a) ∩ b) ∩ … | Each new surface takes the property of the object that forms it, or none |
In overlapping volume, material and volumetric properties come from the last overlapping object.