Satin Studio Manual

Notation and coordinate discipline

Embroidery bugs often masquerade as sophisticated geometry bugs when the actual culprit is millimeters, coordinate handedness, or quantization. Establish a strict coordinate policy before writing clever algorithms.

A practical compiler should:

  1. use millimeters for all physical geometry;
  2. use floating-point coordinates in the high- and middle-level IRs;
  3. keep the design-to-machine transform explicit;
  4. delay target quantization until the machine-lowering pass;
  5. record whether the source coordinate system has a downward- or upward-pointing \(y\) axis;
  6. record the transform provenance for every imported object.

A general affine mapping is

\[q_M = A q_D + t,\]

where \(q_D\) is a design-space point, \(q_M\) is a machine-space point, \(A\) includes scale, rotation, reflection, or skew, and \(t\) is translation.

For a restricted similarity transform,

\[q_M = s R(\theta) q_D + t.\]

Do not silently mix transforms into path coordinates. Keeping them explicit makes hoop rotation, design mirroring, and format export easier to test.

2.2 Quantization

Suppose a target stores coordinates on a lattice with spacing \(h\). A simple quantizer is

\[Q_h(x) = h\,\operatorname{round}\!\left(\frac{x}{h}\right).\]

The per-axis quantization error is at most \(h/2\), but cumulative path behavior can be worse because neighboring points may collapse to the same lattice point. After quantization, the lowering pass should:

Quantize once. Repeatedly snapping geometry at several compiler stages creates drift, destroys symmetry, and makes round-trip behavior unpredictable.

2.3 Machine coordinates are not artwork coordinates

An artwork point describes where a feature should be. A stitch point describes where the needle should penetrate. Those are related but not interchangeable.

A boundary may need to be expanded for pull compensation. A satin rail may be offset beyond the visible shape. An underlay may be inset. A travel path may deliberately pass through an area that will later be covered. Preserve the original artwork geometry alongside generated stitch geometry so the compiler can measure the difference rather than forgetting it.

Geometry: from artwork to manufacturable regions

3.1 Curves and arc length

Artwork commonly contains line segments, circular arcs, and Bézier curves. A cubic Bézier curve is

\[B(t) = (1-t)^3P_0 + 3(1-t)^2tP_1 + 3(1-t)t^2P_2 + t^3P_3, \qquad t\in[0,1].\]

The parameter \(t\) is not physical distance. Uniform steps in \(t\) generally produce nonuniform stitch lengths. The arc length from \(0\) to \(t\) is

\[s(t)=\int_0^t \lVert B'(\tau)\rVert\,d\tau.\]

To place stitches at physical intervals, sample by arc length or use adaptive subdivision with an error tolerance.

For a regular planar curve \(r(t)=(x(t),y(t))\), curvature is

\[\kappa(t)= \frac{|x'(t)y''(t)-y'(t)x''(t)|} {\bigl(x'(t)^2+y'(t)^2\bigr)^{3/2}}.\]

For a short arc of length \(s\) and approximately constant curvature, the deviation between the arc and its chord is roughly

\[e \approx \frac{\kappa s^2}{8}.\]

That gives a useful curvature-aware step estimate:

\[s \lesssim \sqrt{\frac{8\varepsilon}{\kappa}},\]

where \(\varepsilon\) is the allowed geometric error. Combine this with stitch-length limits rather than using it alone.

3.2 Polygons, orientation, and winding

Closed artwork should be normalized into valid planar regions. For a polygon with vertices \(p_i=(x_i,y_i)\), signed area is

\[A = \frac{1}{2}\sum_{i=0}^{n-1} (x_i y_{i+1}-x_{i+1}y_i),\]

with indices taken cyclically. The sign identifies orientation under a chosen coordinate convention.

A compiler should adopt a consistent rule, such as counterclockwise outer boundaries and clockwise holes. The exact choice matters less than consistency.

Point containment should be defined using a winding rule or even–odd rule. The selected fill rule is part of the design semantics; it should not change accidentally during import or Boolean cleanup.

Robust polygon processing must handle:

Use robust orientation predicates and a documented tolerance model. A single global epsilon is rarely sufficient across designs with very different scales.

3.3 Boolean arrangements

Overlapping artwork is not yet a stitch plan. The compiler first needs a planar arrangement: a subdivision of the plane into cells whose ownership, color, and layer relationships are known.

For two regions \(A\) and \(B\), useful operations include:

\[A\cup B,\qquad A\cap B,\qquad A\setminus B,\qquad A\triangle B.\]

But visual stacking is not always equivalent to geometric subtraction. If a foreground object will cover a background object, keeping an overlap may prevent registration gaps. The region model should therefore distinguish:

Those four shapes may differ.

3.4 Offsets and morphological operations

A uniform outward offset by radius \(r\) can be expressed as a Minkowski sum:

\[\Omega^{+r}=\Omega\oplus B_r,\]

where \(B_r\) is a disk of radius \(r\). An inward offset is an erosion:

\[\Omega^{-r}=\Omega\ominus B_r.\]

Offsets appear everywhere in embroidery:

Uniform offsets are only a first approximation. A more general boundary displacement is

\[b'(s)=b(s)+\delta_n(s)n(s)+\delta_t(s)t(s),\]

where \(n(s)\) and \(t(s)\) are the boundary normal and tangent, and \(\delta_n\), \(\delta_t\) vary with direction, material, stitch type, and local geometry.

Offset curves can self-intersect or change topology. Always run them through an arrangement or cleanup stage before treating them as valid regions.

3.5 Signed distance and the medial axis

The signed distance field of a region \(\Omega\) is commonly defined as

\[d(x)= \begin{cases} +\operatorname{dist}(x,\partial\Omega), & x\in\Omega,\\ -\operatorname{dist}(x,\partial\Omega), & x\notin\Omega. \end{cases}\]

It supports:

The medial axis is the set of interior points with more than one nearest boundary point. It is a natural skeleton for narrow columns and branching shapes, but it is sensitive to tiny boundary perturbations. Practical implementations prune short branches, simplify the boundary first, or use a scale-aware skeleton.

Topology: the shape of the problem before its measurements

Geometry asks how long, how wide, and at what angle. Topology asks what is connected, what encloses what, and where continuity is possible.

4.1 Components, holes, and Euler characteristic

For a planar region with \(c\) connected components and \(h\) holes,

\[\chi = c-h.\]

For a planar cell complex,

\[\chi = V-E+F.\]

These values are useful sanity checks after Boolean operations and offsets. If a small numerical perturbation unexpectedly changes the number of holes, a fill algorithm may produce a radically different path structure.

4.2 Topology changes are algorithmic events

Repeated insets do not merely shrink a shape. Loops can split, merge, appear, or disappear. A contour-fill generator must detect those events and decide how to connect the resulting loops.

A 2006 embroidery CAD method for spiral fills explicitly decomposes a region into ring-like subregions, organizes them in a tree, and connects their spiral paths.1 The broader lesson is important: contour fill is a topology-management problem, not just “call offset in a loop.”

4.3 Layering creates a partial order

Suppose an object has underlay, fill, detail, and border. Their dependencies form a directed acyclic graph, or DAG:

\[\text{underlay}\prec\text{fill}\prec\text{detail}\prec\text{border}.\]

Overlapping objects add more precedence edges. If a rear petal must be sewn before a front petal, add

\[\text{rear petal}\prec\text{front petal}.\]

A valid stitch order is any topological ordering of the DAG. The cheapest valid ordering is a scheduling problem with setup costs, because moving between objects, changing color, and trimming thread all have costs.

4.4 When a region should be split

A single visual shape does not have to be one embroidery object. Split it when one or more of these occurs:

A split is not necessarily a failure. Often it is the correct way to expose a topological seam and place it where the artwork can hide it.

Stitch primitives as mathematical objects

A stitch primitive is more than a visual name. It is a generator with geometry, sequencing rules, physical behavior, and machine constraints.

5.1 Running stitch

A running stitch follows a curve \(\gamma(s)\) and places needle penetrations at arc-length positions

\[s_0,s_1,\ldots,s_n,\]

with

\[\ell_i=s_{i+1}-s_i.\]

For approximately constant target length \(\bar\ell\) and path length \(L\),

\[N\approx\left\lceil\frac{L}{\bar\ell}\right\rceil.\]

A better sampler adapts \(\ell_i\) to curvature, corners, local importance, and machine constraints.

Repeated running stitches can be modeled as edge multiplicity on a graph. A bean or triple-style pass is not merely “duplicate every point”; the reversal pattern affects where penetrations accumulate and how the line appears.

5.2 Satin columns

A satin column can be represented by a centerline \(c(s)\), a unit normal \(n(s)\), and width \(w(s)\). Its idealized rails are

\[l(s)=c(s)-\frac{w(s)}{2}n(s), \qquad r(s)=c(s)+\frac{w(s)}{2}n(s).\]

Needle points alternate between the rails. The thread spans across the column while the sampling stations advance along it.

A useful local warning condition comes from offset geometry. An offset at distance \(d\) from a curve becomes singular when

\[1-\kappa d=0.\]

For satin rails with \(d=w/2\), trouble is likely when

\[|\kappa(s)|\frac{w(s)}{2}\ge 1.\]

In plain language: a column should not be wider than the local bend can support. The compiler may need to narrow it, split it, alter the centerline, use explicit rungs, or choose another stitch type.

A complete satin generator must decide:

Professional embroidery tools expose explicit “rungs” or direction lines because a centerline alone is not enough to define how opposite boundaries correspond.

5.3 Constant-angle fill

Let the desired thread direction be

\[u_\theta=(\cos\theta,\sin\theta)\]

and the row normal be

\[n_\theta=(-\sin\theta,\cos\theta).\]

A family of parallel fill rows with physical spacing \(h\) is

\[n_\theta\cdot x = kh, \qquad k\in\mathbb{Z}.\]

For each row, intersect the line with the fill region. The intersections produce one or more intervals. Sample each interval along \(u_\theta\), usually reversing alternate rows to create a boustrophedon path.

There are two independent spacings:

Many confusing user interfaces call both of these “density.” A clear compiler model keeps them separate.

Rows can be staggered by varying the along-row phase:

\[\phi_k = (k\alpha \bmod 1)\,\ell,\]

where \(\ell\) is nominal stitch length and \(\alpha\) controls the repeat cycle. Staggering prevents penetration columns from lining up into unwanted channels.

5.4 Contour and spiral fills

A contour fill follows level sets of a distance-like function. The simplest version repeatedly offsets the boundary inward:

\[\Gamma_k = \{x\in\Omega : d(x)=kh\}.\]

The hard part is connecting the loops. Topology changes create a tree or graph of loops. Connection choices affect continuity, visible bridges, sharp turns, and deformation.

A spiral fill tries to turn nested contours into one continuous path. Possible strategies include:

The center of the region is not always the best spiral origin. The geometric centroid, area centroid, medial-axis root, and user-specified focal point can all differ.

5.5 Field-guided fill

A field-guided fill follows a spatially varying direction \(d(x)\) and spacing \(h(x)\). This is the natural model for fur, feathers, leaves, muscles, waves, and thread painting.

Research on directionality-aware embroidery treats the stitched pattern as a set of optimized streamlines that approximate both a direction field and a color or density target.2 Similar field-to-toolpath methods appear in continuous-fiber fabrication, where vector fields are converted into scalar fields and then into iso-curves.3

Field-guided fill is developed in detail in Chapter 6.

5.6 Meander, stipple, and space-filling paths

A meander fill is a connected path designed to distribute thread over an area without using regular rows. Possible constructions include:

These methods trade predictable grain for organic texture. Their main constraints are local coverage, turn radius, self-proximity, and continuity.

5.7 Motif and lattice fills

A motif fill begins with a repeated cell, graph, or tile. Let a motif be \(M\), and let \(T_{ij}\) be translations, rotations, or other transforms. The raw pattern is

\[\bigcup_{i,j} T_{ij}(M),\]

then clipped to \(\Omega\).

Clipping can leave disconnected fragments. The compiler must choose whether to:

For free-standing lace, connectivity is a structural constraint rather than a convenience. Every component must be tied into a load-bearing network, often with deliberate redundancy.4

5.8 Underlay is a layer, not a checkbox

Underlay changes the physical boundary conditions for everything above it. It can stabilize the fabric, lift top stitches, establish an edge, distribute load, and reduce sinking into textured material. Ink/Stitch’s documentation, for example, treats fill underlay as a lower-density layer that supports the top fill, often at a different angle.5

Common underlay primitives include:

Represent underlay explicitly in the layer DAG. That makes it possible to inspect, reorder, simulate, and optimize rather than hiding it inside a generator.

5.9 Appliqué and staged operations

Appliqué introduces non-stitch operations into the program:

  1. placement line;
  2. machine stop;
  3. fabric placement;
  4. tack-down line;
  5. trimming or cutting step;
  6. cover stitch;
  7. decorative detail.

The stitch compiler becomes a workflow compiler. Stops, user actions, and material insertions are first-class instructions with precedence constraints.

Direction, density, and scalar fields

A flat fill angle is one number. Expressive embroidery needs a value at every point.

6.1 The field bundle

For a region \(\Omega\), a useful design representation contains several fields:

These fields need not share the same resolution. Direction may be defined on a mesh, density in a raster, and user constraints as vector strokes. A field-sampling layer should hide those storage differences from path generators.

6.2 A stitch direction is usually a line, not an arrow

For most fill appearance, direction \(\theta\) and direction \(\theta+\pi\) are equivalent. The thread has an axis but no meaningful arrowhead. This makes the correct object a line field.

A convenient representation is the doubled-angle complex number

\[z(x)=e^{i2\theta(x)}.\]

Because

\[e^{i2(\theta+\pi)}=e^{i2\theta},\]

opposite vectors map to the same value. This avoids a classic bug: directly averaging \(d\) and \(-d\) produces zero even though they represent the same stitch orientation.

For discrete samples with confidence weights \(w_j\), an average line orientation can be estimated by

\[\bar z = \frac{\sum_j w_j e^{i2\theta_j}}{\sum_j w_j}, \qquad \bar\theta=\frac{1}{2}\arg(\bar z).\]

This is the two-fold rotationally symmetric, or 2-RoSy, representation used in direction-field processing.

6.3 Sources of direction

Direction constraints can come from:

For an image \(I(x,y)\), the structure tensor is

\[J = G_\sigma * \begin{bmatrix} I_x^2 & I_xI_y\\ I_xI_y & I_y^2 \end{bmatrix},\]

where \(G_\sigma\) is a smoothing kernel. The eigenvectors indicate dominant local gradient and isophote directions. Which eigenvector should guide thread depends on the intended effect: following an edge and crossing an edge are both artistically useful.

6.4 Field smoothing and constraint fitting

Suppose \(\theta_0(x)\) is a noisy or incomplete target direction. A conceptual energy for a smooth line field is

\[E(\theta)= \int_\Omega w(x)\left[1-\cos 2\bigl(\theta(x)-\theta_0(x)\bigr)\right]dx + \lambda\int_\Omega \left\lVert\nabla e^{i2\theta(x)}\right\rVert^2dx.\]

The first term fits constraints. The second discourages rapid spatial variation. The doubled angle preserves the \(\pi\) symmetry.

On a mesh or pixel graph, the smoothness term becomes a weighted sum over neighbors:

\[E_{\text{smooth}}= \sum_{(i,j)\in E} \omega_{ij}\left|z_i-z_j\right|^2.\]

Boundary constraints should usually be weighted, not blindly absolute. A demand that every stitch be tangent to every boundary can force singular behavior inside the shape.

6.5 Singularities are not necessarily bugs

A direction field cannot always satisfy all boundary and interior constraints while remaining smooth and nonzero. Poincaré–Hopf-type index constraints relate field singularities to topology.6

A simple mental example is a disk whose direction must be tangent to the circular boundary. The field must somehow turn through a full revolution. A singularity, seam, spiral center, or region split is unavoidable.

The application should therefore support:

Trying to “smooth harder” often spreads the defect rather than solving it.

6.6 Method A: tracing streamlines

Given an oriented vector representative \(v(x)\) of the line field, a streamline satisfies

\[\gamma'(s)=v(\gamma(s)).\]

Numerical integration can use Euler, midpoint, or Runge–Kutta steps. The line-field sign must be chosen consistently from step to step, usually by selecting the orientation with positive dot product against the previous tangent.

The difficult part is not integrating one curve. It is seeding enough curves to achieve the target density without crowding, gaps, collisions, or dead ends.

A practical streamline system needs:

Liu and colleagues use divergence-derived sources and sinks to seed and organize embroidery streamlines, then optimize the paths for smoothness and connectedness while balancing direction and density objectives.2

6.7 Method B: scalar potentials and iso-curves

Instead of tracing many independent streamlines, solve for a scalar field \(\phi(x)\) whose level sets become stitch rows.

If the desired path tangent is \(d(x)\), then the desired gradient is perpendicular to it. Let

\[g(x)=\frac{1}{h(x)}R_{-\pi/2}d(x),\]

where \(R_{-\pi/2}\) rotates by \(-90^\circ\). Solve

\[\phi^*=\arg\min_\phi \int_\Omega w(x)\lVert\nabla\phi(x)-g(x)\rVert^2dx.\]

The Euler–Lagrange equation is a weighted Poisson equation:

\[\nabla\cdot\bigl(w\nabla\phi\bigr) = \nabla\cdot(wg).\]

Then extract level sets

\[\phi(x)=k\Delta\phi.\]

Their approximate physical spacing is

\[h_{\text{actual}}(x) \approx \frac{\Delta\phi}{\lVert\nabla\phi(x)\rVert}.\]

This formulation turns global row generation into a sparse linear or nonlinear solve, depending on the constraints. It also reveals an important fact: not every desired direction-and-density field is exactly integrable. The scalar solve finds a compromise.

Field-based fabrication research uses closely related vector-field, scalar-field, and iso-curve pipelines for anisotropic toolpaths.3

6.8 Method C: distance and offset fields

For contour fills, choose

\[\phi(x)=d(x,\partial\Omega)\]

or a modified distance field. Level sets of \(\phi\) follow the boundary. This is simple and robust for many shapes, but medial-axis events create corners, branches, and disappearing loops.

6.9 Density as coverage, not merely spacing

Row spacing is only a proxy for what the viewer sees. A more general model treats every thread segment as a narrow ribbon or capsule and accumulates coverage:

\[C_P(x)=\sum_{j} a_j K\!\left(\frac{\operatorname{dist}(x,s_j)}{r_j}\right),\]

where \(s_j\) is a thread segment, \(r_j\) is an effective thread radius, \(a_j\) accounts for layer or color, and \(K\) is a compact or Gaussian kernel.

A coverage loss is

\[E_{\text{coverage}} = \int_\Omega w(x)\bigl(C_P(x)-C_{\text{target}}(x)\bigr)^2dx.\]

This model naturally handles curved paths, variable thread thickness, overlaps, and intentional open texture. It is more computationally expensive than checking row spacing, so it is often used for preview and refinement rather than initial generation.

6.10 Direction error

For unoriented directions, the angular error should ignore sign:

\[e_\theta(x)=1-|t(x)\cdot d(x)|,\]

where \(t(x)\) is the local stitch tangent. An integrated metric is

\[E_{\text{dir}}= \int_\Omega w(x)\left(1-|t(x)\cdot d(x)|\right)dx.\]

Using \(1-t\cdot d\) would incorrectly penalize a path whose tangent is reversed but visually equivalent.

From continuous paths to needle penetrations

A continuous curve is not yet embroidery. The machine needs a finite sequence of positions, and every new point creates both a visible thread segment and a needle penetration.

7.1 The sampling problem

Let a path be parameterized by arc length:

\[\gamma:[0,L]\rightarrow\mathbb{R}^2.\]

Choose positions

\[0=s_0<s_1<\cdots<s_n=L\]

and emit

\[p_i=\gamma(s_i).\]

A basic feasibility condition is

\[\ell_{\min}\le \lVert p_{i+1}-p_i\rVert\le\ell_{\max}.\]

In practice, both limits have exceptions. Deliberate tie stitches may be shorter than the preferred minimum. Long satin spans may be allowed on one setup and unsafe on another. Store these as typed constraints with reasons, not as one unexplained global constant.

A useful target interval can depend on local state:

\[\ell_i^{\text{target}} =f(\kappa_i,\text{primitive},\text{thread},\text{fabric},\text{salience},M).\]

7.2 Adaptive resampling

A robust sampler can proceed as follows:

  1. flatten or evaluate the source curve with a geometric error bound;
  2. build cumulative arc length;
  3. place provisional points at the target spacing;
  4. insert mandatory points at corners, extrema, crossings, and entry or exit constraints;
  5. subdivide segments that exceed maximum length or chord error;
  6. merge accidental short segments when doing so preserves intent;
  7. quantize only in the target-lowering pass;
  8. validate again after quantization.

The order matters. Merging before preserving a sharp corner can round it away. Quantizing before curvature-aware subdivision can create unstable decisions near grid boundaries.

7.3 Turning angle

For consecutive displacement vectors

\[v_i=p_i-p_{i-1},\qquad v_{i+1}=p_{i+1}-p_i,\]

the turning angle is

\[\alpha_i=\cos^{-1} \left( \frac{v_i\cdot v_{i+1}} {\lVert v_i\rVert\lVert v_{i+1}\rVert} \right).\]

A sharp reversal with tiny adjacent segments can create a dense knot of penetrations. A turn penalty might be

\[E_{\text{turn}} = \sum_i w_i\,\psi(\alpha_i,\lVert v_i\rVert,\lVert v_{i+1}\rVert),\]

where \(\psi\) grows for sharp turns combined with short lengths.

Turning is not always undesirable. A crisp corner may require a deliberate penetration at the vertex. The validator should distinguish an intentional corner from accidental zigzag noise.

7.4 Corners

Common corner strategies include:

A compiler should make the corner policy explicit in the primitive IR. Otherwise later resampling may unknowingly erase it.

7.5 Duplicate and near-duplicate points

A zero-length command may be:

Do not delete all duplicates indiscriminately. Normalize commands using both geometry and operation semantics.

7.6 Penetration density

Thread coverage and needle penetration density are different quantities. Define a local penetration-density estimate with a kernel:

\[D_P(x)=\sum_i K_\sigma(x-p_i).\]

A hotspot penalty is

\[E_{\text{hotspot}} = \int_\Omega \max\bigl(0,D_P(x)-D_{\max}(x)\bigr)^2dx.\]

This detects needle clusters at corners, row endpoints, narrow necks, tie sequences, and overlapping layers. A design can have reasonable row spacing and still have dangerous penetration hotspots.

7.7 Path simplification

Polyline simplification can reduce unnecessary stitches, but ordinary visual simplification criteria are incomplete. A stitch-aware simplifier should preserve:

A useful objective is

\[\min_Q \lambda_n |Q| +\lambda_g d_H(P,Q) +\lambda_\theta E_{\text{dir}}(Q) +\lambda_c E_{\text{coverage}}(Q),\]

subject to machine constraints, where \(d_H\) is a geometric deviation measure such as Hausdorff distance.

References

References and further reading

The following sources are a practical starting point rather than an exhaustive bibliography. The embroidery-specific literature is relatively small, so adjacent work in computational fabrication, direction-field design, cloth mechanics, and graph routing is essential.

For the central embroidery-path problem, begin with Liu et al. on direction-aware streamlines and Tian et al. on spiral paths. For the mathematical machinery behind fields, continue with direction-field and vector-field processing references. For the material side, the cloth-modeling and computational-embroidery papers show why geometry alone is not enough. For real implementation semantics, inspect the official Ink/Stitch documentation and pyembroidery source.

7

Margaret Ellen Seehorn, Gene S.-H. Kim, Aashaka Desai, Megan Hofmann, and Jennifer Mankoff, “Enhancing Access to High Quality Tangible Information through Machine Embroidered Tactile Graphics,” Proceedings of the ACM Symposium on Computational Fabrication (SCF ’22), Article 23, 2022. https://doi.org/10.1145/3559400.3565586

8

Gabriel Cirio, Jorge López-Moreno, David Miraut, and Miguel A. Otaduy, “Yarn-Level Simulation of Woven Cloth,” ACM Transactions on Graphics 33, no. 6, Article 207, 2014. https://doi.org/10.1145/2661229.2661279

9

Georg Sperl, Rosa M. Sánchez-Banderas, Manwen Li, Chris Wojtan, and Miguel A. Otaduy, “Estimation of Yarn-Level Simulation Models for Production Fabrics,” ACM Transactions on Graphics 41, no. 4, Article 65, 2022. https://doi.org/10.1145/3528223.3530167

1

Qiming Tian, Yupin Luo, and Dongcheng Hu, “Spiral-Fashion Embroidery Path Generation in Embroidery CAD Systems,” Computer-Aided Design 38, no. 2, pp. 125–133, 2006. https://doi.org/10.1016/j.cad.2005.08.004

2

Zhenyuan Liu, Michal Piovarči, Christian Hafner, Raphaël Charrondière, and Bernd Bickel, “Directionality-Aware Design of Embroidery Patterns,” Computer Graphics Forum 42, no. 2, pp. 397–409, 2023. https://doi.org/10.1111/cgf.14770

3

Xiangjia Chen, Guoxin Fang, Wei-Hsin Liao, and Charlie C. L. Wang, “Field-Based Toolpath Generation for 3D Printing Continuous Fibre Reinforced Thermoplastic Composites,” Additive Manufacturing 49, Article 102470, 2022. https://doi.org/10.1016/j.addma.2021.102470

4

Kate S. Glazko, Alexandra A. Portnova-Fahreeva, Arun Mankoff-Dey, Afroditi Psarra, and Jennifer Mankoff, “Shaping Lace: Machine Embroidered Metamaterials,” Proceedings of the 9th ACM Symposium on Computational Fabrication (SCF ’24), 2024. https://doi.org/10.1145/3639473.3665792

5

Ink/Stitch, “Tatami Stitch (Fill Stitch),” official documentation. https://inkstitch.org/docs/stitches/fill-stitch/

6

Fernando de Goes, Mathieu Desbrun, and Yiying Tong, “Vector Field Processing on Triangle Meshes,” ACM SIGGRAPH 2016 Course Notes, 2016; and Felix Knöppel, Keenan Crane, Ulrich Pinkall, and Peter Schröder, “Globally Optimal Direction Fields,” ACM Transactions on Graphics 32, no. 4, Article 59, 2013. Course notes; direction-field paper

10

Jack Edmonds and Ellis L. Johnson, “Matching, Euler Tours and the Chinese Postman,” Mathematical Programming 5, pp. 88–124, 1973. https://doi.org/10.1007/BF01580113

11

Ink/Stitch, “Tools: Stroke—Redwork,” official documentation. The tool’s routing goal is to traverse every path exactly twice. https://inkstitch.org/docs/stroke-tools/

12

Ink/Stitch, “Commands,” official documentation. https://inkstitch.org/docs/commands/

13

Huamin Wang, James F. O’Brien, and Ravi Ramamoorthi, “Data-Driven Elastic Models for Cloth: Modeling and Measurement,” ACM Transactions on Graphics 30, no. 4, Article 71, 2011. https://doi.org/10.1145/2010324.1964966

14

Ink/Stitch, “Satin Column,” official documentation. https://inkstitch.org/docs/stitches/satin-column/

15

Abhinit Sati, Ioannis Karamouzas, and Victor B. Zordan, “DIGISEW: Anisotropic Stitching for Variable Stretch in Textiles,” Proceedings of the ACM Symposium on Computational Fabrication (SCF ’21), Article 3, 2021. https://doi.org/10.1145/3485114.3485121

16

Yu Jiang, Narjes Pourjafarian, Alice Haynes, and Jürgen Steimle, “Embrogami: Shape-Changing Textiles with Machine Embroidery,” Proceedings of the 37th Annual ACM Symposium on User Interface Software and Technology (UIST ’24), 2024. https://doi.org/10.1145/3654777.3676431

17

Ayesha Nabila, Hua Ma, and Junichi Yamaoka, “4D Embroidery: Implementing Parametric Structures in Textiles for Sculptural Embroidery,” UbiComp/ISWC ’22 Adjunct, pp. 88–90, 2022. https://doi.org/10.1145/3544793.3560358

18

Xinling Chen, Michael McCool, Asanobu Kitamoto, and Stephen Mann, “Embroidery Modeling and Rendering,” Proceedings of Graphics Interface 2012, pp. 131–139, 2012. https://doi.org/10.5555/2305276.2305299

19

EmbroidePy, “pyembroidery,” an open-source Python library for reading and writing embroidery formats. https://github.com/EmbroidePy/pyembroidery

20

Ink/Stitch, “Tack and Lock Stitches,” official documentation. https://inkstitch.org/docs/stitches/lock-stitches/