A "morph" in foam-cutter speak means the wire follows a DIFFERENT 2D profile on the left tower vs the right tower. The wire is straight, but its endpoints trace independent paths, sweeping out a **ruled surface** that smoothly interpolates between the two shapes.
That's how you cut a tapered wing (NACA2412 root → NACA0009 tip), a transition duct (square → round), or a twisted column (same circle, rotated 60° between ends).
For shapes where left and right are identical (a plain cylinder, an ellipse, a straight wing) the generator still produces a "morph" — it just happens to be a degenerate one. This keeps the pipeline uniform: every AI output goes through the same `generateMorph()` function, the same scaling math, the same G-code serialiser. You can flip a non-morph to a morph at any time by tweaking the right-tower scale + rotation.
That's how you cut a tapered wing (NACA2412 root → NACA0009 tip), a transition duct (square → round), or a twisted column (same circle, rotated 60° between ends).
For shapes where left and right are identical (a plain cylinder, an ellipse, a straight wing) the generator still produces a "morph" — it just happens to be a degenerate one. This keeps the pipeline uniform: every AI output goes through the same `generateMorph()` function, the same scaling math, the same G-code serialiser. You can flip a non-morph to a morph at any time by tweaking the right-tower scale + rotation.