Documentation / Node reference / geo nodes
geo/M2DStroke
Gives a curve a width, as a flat 2D shape.
Manifold Operations
Follows the input's segments and returns the area within `radius` of them, which is what "a line 2mm thick" means. The result is a 2D manifold, so geo/M2DBoolean, geo/M2DExtrude and geo/M2DTriangulate all take it from here.
This is the OTHER reading of a curve. geo/M2DCreate fills what the curve ENCLOSES; this one follows the curve itself. Neither is a mode of the other, because a stroke applies to closed rings too: stroking a circle gives an ANNULUS, not a bigger disc. If you wanted the fill grown outwards instead, that is geo/M2DCreate followed by geo/M2DOffset.
Each input OBJECT becomes one cross section, with its transform baked in, so a geo/Merge of several curves gives several shapes out. Every chain of connected segments inside an object is stroked, and a chain that comes back to its first point is closed: it gets a join at the seam rather than two caps.
`radius` is a HALF-width, so a stroke at 0.1 is 0.2 across. That matches geo/PolyWire and geo/SDFOffset, which is the point: the same number gives the same thickness whichever of the three a curve goes through. A radius of 0 gives an empty result rather than an error.
A curve that crosses itself is fine, and so is one that doubles back: the stroke is built as one piece per segment and per corner and then unioned in a single pass, so overlaps merge instead of cancelling.
geo/PolyWire is the 3D version of this node, and geo/LineExpand is the flat ribbon one. Both of those output a mesh; this one outputs a 2D manifold, which is what makes it boolean-able.
Parameters
| Name | Type | What it does |
|---|---|---|
| radius | Float | Half the width of the stroke: the distance the shape reaches on EACH side of the curve, so the result is twice this across. Matches geo/PolyWire's radius and geo/SDFOffset's, so the same number gives the same thickness. Zero gives an empty result, not an error. |
| joinType | UInt8 | What the OUTSIDE of a corner looks like: round arcs it, miter carries the two edges out to their sharp meeting point, bevel cuts straight across, square cuts it flat one radius out from the corner. |
| capType | UInt8 BUTT · SQUARE · ROUND | What the ENDS of an open chain look like: butt stops flat at the last point, square carries on one radius past it, round finishes with a half disc. A closed chain has no ends, so this does nothing to one. |
| miterLimit | Float | How far a miter may reach out, as a multiple of the radius, before it is cut back to a bevel instead. A sharp corner mitered without a limit reaches out arbitrarily far. Only used when the join is miter. |
| segments | UInt32 | How many sides the circle around a round join or a round cap is drawn with. Only used when the join or the cap is round. |
See also
This page is generated from the engine, so it describes the release you can download. The same text is in the editor's Help panel next to the node itself.