Mo Zhou Mechanical Engineering · University of Toronto
Projects/RC Aircraft Program/Oct 2026 – present

Plane Slicer

A slicer for 3D-printed wings in foaming LW-PLA.

Built withPython · Shapely · OpenCASCADE · Claude Code
StatusIn progress
SourcePrivate
Why

RC v1 showed how much saving weight matters. The other methods tried between RC v1 and RC v2 to save weight are covered here. This page goes into detail about printing in PLA Aero (LW-PLA) instead of regular PLA.

What makes LW-PLA so light is also what makes it difficult to work with. LW-PLA foams as it leaves the nozzle, so even after the extruder stops it will still ooze. Retraction does not solve this, so every travel move of the print head strings. Furthermore, a change in print speed also changes the density of the part.

Bambu Studio and other slicers are not designed specifically for this oozing behaviour of LW-PLA, so their prints usually come out strung on the inside. The root face shows this issue: Bambu Studio’s default solid bottom has 47 travel moves on the bottom layer alone.

The root face of the RC v2 tip segment, filled with diagonal lines in blue, with the spar bore and four tab pockets left open. Red dashed lines cross the section between patches of fill: the travel moves.
Bambu StudioThe root face’s first layer as Bambu Studio’s default solid bottom lays it with dashed lines representing travel (brim not shown).
The same root face filled by the Plane Slicer: concentric blue rings following the skin and wrapping round the bore and pockets, with no red travel lines.
Plane SlicerThe same layer from the Plane Slicer: the skin, a wall round each opening and rings of fill, printed as one path with no travel

Bambu Studio (and many common slicers) support spiral vase mode, which helps with this issue. Vase mode prints continuously and prints each layer as one wall, thus never travelling. But it is very limited since it can only print one outline. This forces you to design your part in a very specific way in CAD, and limits the shapes and features the part can have.

This is why I began working on a custom slicer. This slicer reads a plain solid wing segment from SolidWorks and generates the internal gridding itself in such a way that we can still achieve the continuous prints of vase mode. But this slicer is much more flexible than vase mode. Because it builds the structure itself, it can close the root and tip faces with solid layers, keep a spar bore and tab pockets open through them, print around a slot cut through the skin, and print the joining tabs in a second filament, all from a plain solid in CAD.

The RC v2 tip segment in grey, cut partway up its span. On the cut face, the layer printed there: the skin outline, a blue zigzag between the upper and lower skin, and a purple wall round the round spar bore. A dashed outline shows the rest of the segment up to the tip.
ImageThe RC v2 tip segment as the slicer builds it.

The Lattice

The lattice work began with a standard 45° V or X-shaped grid inside the wing. Wherever the grid meets the skin, two diagonals meet in a V. With the skin on either side, that makes four lines at every one of those points, so the nozzle can come in on one line and leave on another, and print the whole layer as one path without lifting off.

A section of the RC v2 tip segment with its skin outline in black. Inside it a blue zigzag runs between the upper and lower skin, touching each in a V; a grey zigzag, the same shape mirrored, sits between its nodes.
ImageOne layer’s zigzag at the wave’s crest (blue), and 12.6 mm further up the span at its trough (grey).

The first pattern was a double lattice (creating the standard X grids used with PLA) created through combining two zigzags. But the two zigzags also cut through each other at mid-depth, about nine times a layer, and every crossing will mean the nozzle prints over plastic that was already laid.

A shaded 3D view of the double lattice across the tip segment with the skin removed: blue flat walls leaning one way and grey walls leaning the other, crossing each other in an X grid, root outline at the bottom and tip outline at the top.
ImageThe double lattice (one grey, the other blue) on the same segment, skin removed, root at the bottom.

What I tried next, and ended up using, is a single zigzag with a phase wave: one V-shaped grid that slides back and forth along the chord as it goes up the span. It only ever meets itself at the skin, so its walls never cross. And because it keeps sliding, the points where it touches the skin don’t stay in fixed spots: they sweep along the chord, evenly spaced on every layer.

A shaded 3D view of the lattice walls across the tip segment with the skin removed: blue wavy sheets standing side by side, root outline at the bottom and tip outline at the top.
ImageThe walls the zigzag builds up the 50 mm segment, skin removed, root at the bottom.

Compared with the X grid on the same segment, the wave uses 14% less material per layer and never leaves more than 16 mm of skin unsupported, where the X grid leaves up to 24 mm, so the skin is better supported against denting and buckling. What it gives up is shear: about a quarter less between the skins and a third less along the chord. The table below compares the two; its numbers are measures of the geometry, not a stress analysis.

X gridWave
Material per layer, skin and lattice1.000.86
Shear between the skins1.000.74
… per mm of lattice1.001.03
Crush stiffness1.001.06
… per mm of lattice1.001.48
Shear along the chord1.000.66
Longest bare skin, worst layer24 mm16 mm
Crossings per layer8.90
TableThe wave (8 mm pitch) against the X grid (12 mm pitch) on the tip segment, averaged over 250 layers at three spans, with the X grid as 1.00. The better of each pair is highlighted.

Holes

Printed wings often have holes cut through their internal grid to save weight. But we cannot use an ordinary hole with this slicer because it leaves two dead ends on every layer that can only be reached by travelling.

A section of the RC v2 tip segment with its skin outline in black and a blue zigzag inside. One diagonal in the middle of the chord is broken by a dashed circle, a round hole through that wall, and the two loose ends of the line are circled in red.
ImageA sketch on the 6 mm layer: a 4 mm round hole through one wall (dashed) cuts its diagonal and leaves two dead ends (red).

A shelf hole (refer to below image) does work. Two of the V’s that reach the lower skin are left out, and a shelf line runs across where their tips were, so every point still has an even number of lines and the layer stays one path.

A section of the RC v2 tip segment with its skin outline in black. A blue zigzag runs between the skins; in two places, short purple shelf lines cut across it halfway up, where two of the V's that would reach the lower skin are left out.
ImageOne layer 9 mm into a shelf hole: the zigzag (blue) and the shelves (purple).

However, the shelf hole is not efficient. It takes out the deepest walls, in the middle of the chord, which carry the shear between the skins: 23% less of it. And I found that spacing the zigzag out from 6 mm to 8 mm saves more weight for the same amount of shear lost, and leaves the skin better supported. So the holes were dropped.

WeightShear between the skinsLongest bare skin
6 mm pitch5.78 g1.0012 mm
6 mm, two 40 mm holes5.52 g0.7736 mm
8 mm pitch, no holes5.42 g0.7716 mm
TableThe tip segment’s skin and lattice at 0.5 g/cm³, the shear relative to the 6 mm lattice. The best in each column is highlighted.

The Top Cap

One issue with vase mode is also it leaves the top cap open, which is not ideal when you want to join two wing sections together. Therefore it is one of the requirements of this slicer to be able to produce a closed top cap while still printing in a continuous path.

When doing the top cap, the first layer of the cap has to bridge over the lattice, and LW-PLA is weak at bridging. Therefore something needs to be done to the lattice to reduce the amount the cap needs to bridge.

The first method tried looks like the following. It works, but every line ends in a sharp turn (sharp change in directions is not ideal for LW-PLA).

A section of the RC v2 tip segment with its skin outline in black. Grey lattice lines bend to run along the middle of the section; over them, close-set thin blue lines run straight across from skin to skin, each turning back at the skin, with red stretches where they cross open space.
ImageMethod 1: the diagonals bent to run along mid-depth, with red representing where a cap bead is laid over air.

The fix was to fold the diagonals instead. Over the last few layers under the cap, each one folds into a Z between its two nodes, creating this sinusoidal type shape on each layer. This allows the cap’s first layer to be a spiral running along the chord, bridging roughly half as far.

Interactive · the layers through the fold and the cap
InteractiveThe top cap printed over the sinusoidal like lattice.
BendFold
Cap’s first layer over air, median3.6 mm1.6 mm
… worst7.4 mm4.0 mm
Sharp turns on the cap’s first layer29527
Open through two or more cap layers1.85 mm²0.02 mm²
Segment weight7.49 g7.66 g
TableThe two ways under the cap, measured on 10 Oct on the tip segment, weight at 0.5 g/cm³. The better of each pair is highlighted.

The other three cap layers are the same spiral, walked in, out and in again, so each layer starts where the last one ended. Against Bambu-style lines at ±45° laid as one path, the spiral covered more of the face (99.8% against 98.8%) with 28 sharp turns a layer instead of 208.

A section of the RC v2 tip segment filled with close-set thin blue lines at 45 degrees, joined end to end; black dots mark a sharp turn at every line end, all the way round the skin.
Bambu-styleLines at +45° on the cap’s second layer, joined end to end into one path. Sharp turns are represented by dots.
The same section filled with thin blue rings following the outline inwards; black dots mark sharp turns only at the nose and along the middle line where the rings run out.
SpiralThe spiral on the same layer: its rings turn sharply only at the nose and where they run out along the middle. Sharp turns are represented by dots

Initial Testing

The first test prints showed the gridding through the skin in both PLA Basic and LW-PLA tests. Essentially the issue was every diagonal on the V shaped grid ended on the skin’s centreline, so the bead is pushed through the outer skin surface. This was made even worse once LW-PLA was used (due to foaming). Now every lattice line stops on a line just inside the skin, and a tunable setting, skin_overlap, sets how far its bead may reach into the skin’s. For LW-PLA that is measured on the swollen beads, so the foam can’t push it back through.

A close-up of a lattice V meeting the skin. A grey band is the skin bead under a black line, the model's surface; two blue lattice beads rise to a point that runs into the grey band, and where they overlap it is red.
BeforeThe first print: two diagonals meeting the upper skin.
The same close-up with the settings of 15 Oct: the blue lattice beads flatten along a line just inside the grey skin bead and touch it without overlapping; there is no red.
AfterThe 15 Oct baseline, the same place: the lattice stops on a line inside the skin.

The LW-PLA test prints on 13 Oct also exposed another issue. The tab pockets meant for joining wing sections together came out too narrow for the tabs (when they were fine on regular PLA). This was because the foamed beads swelled past their nominal width.

So the swell is now a setting of the filament, tuned like a line width: two offsets, each in mm a side. hole_compensation grows every void before anything is laid round it, and contour_compensation shrinks the outer surface.

The Nose

Up until this point, there were no specific treatments for the leading (nose) and trailing edge. The zigzag can’t reach all the way into the nose, so it stops where the skins are under 2 mm apart. So the skin right around the leading edge was unsupported.

It was worse than bare skin. The zigzag slides with the wave, so the node at its front end changes from layer to layer, and a new front end can only grow forward as far as the layer below holds it. Up the span the front of the lattice wandered from 0.6 mm to almost 9 mm behind the leading edge, leaving a ragged edge of short walls and spurs inside the nose.

A 3D view of the front of the wing segment with a see-through grey skin. Inside, blue lattice walls rise up the span, their front edge wandering towards and away from the leading edge, with short walls and spurs along it.
BeforeThe front edge wanders up the span near the nose.
The same view with the doubled nose skin: a smooth purple wall follows the inside of the leading edge the whole way up, the blue lattice starting behind it.
AfterDoubled nose skin.

Five ways of closing the nose were sketched. A doubled nose was chosen. The zigzag’s front end is fixed at one node for the whole wing segment and a second bead doubles the leading edge of the wing.

The front 40 mm of the RC v2 tip section. A blue zigzag ends a few millimetres behind the leading edge, leaving the skin round the nose with nothing behind it.
BeforeThe zigzags stop short of the nose.
The same front 40 mm with a purple second bead running inside the skin from the zigzag's front node round the leading edge to the next node on the lower skin.
AfterThe doubled nose skin.

The Tabs

Some wings join their segments with tabs printed standing on the tip face. The issue with the tabs is that they are separate parts/strips, so it is impossible to print them in one path. Test prints were done on LW-PLA to compare two types of travel moves. First a wipe back over the last bead with a retract and a 0.4 mm lift, and the second being just a wipe alone. Both of these were not great and had a lot of stringing (LW-PLA oozes on every travel).

An angled view of a wing section's face with four thin tabs standing on it, two along each skin either side of the spar bore. Red dashed lines join the tabs a little above them, each rising from one tab and dropping onto the next, with dots where the nozzle retracts and primes.
ImageWipe, retract and lift on a set of tabs, heights ×5.
The same view: the red dashed travel lines run straight from tab to tab at the height of the layer, with no rise and no dots.
ImageWipe alone on a set of tabs.

Next, I tried using a single material swap at the first tab layer to print the tabs out of regular PLA (which barely oozes). And this works well at the cost of more weight (although the strength of these tabs are vital, so its not completely wasted weight).

Horizontal Slots

A wing in practice is almost never a perfect outer skin. Very often slots need to be cut through the skin perpendicular to the span to attach other elements to the wing. This was something that vase mode completely fails at since these slots require a cap surface to be printed in a local section.

To achieve this, the lattice never moves to fit an outline, and where a lattice line would cross a designed slot, it stops at its wall. The cut ends are joined by shelves along the wall, so the layer is still one path.

A symmetric wing section with a slot cut in from the lower skin near the nose and running aft. Blue lattice lines drop straight across the open slot, and a purple line follows the slot's whole outline.
BeforeOne layer of a test wing, diagonals drop straight across the slot, and the doubled nose skin (purple) runs round it.
The same section: the blue lattice lines stop at the slot's walls, joined by short purple shelves along its roof and floor; nothing crosses the slot.
AfterThe lattice no longer crosses the slot.

A slot that runs square to the print bed (in the X-Y plane) would have a flat roof and floor (localized caps). The roof’s bottom layer is laid over air above the empty slot while the floor’s first layer is laid over open lattice. The slicer now closes each with solid layers over the slot’s footprint spliced into the layer’s walk to maintain the single continuous path.

Interactive · the slot’s floor, its layers and its roof
InteractiveHow the slicer prints the roof of a slot.
Next
  • A foam table. How wide PLA Aero’s bead prints, and how dense it is, changes with nozzle temperature and flow. Because the fits need to be precise, it is important to understand how LW-PLA behaves and swells at different flow and temperature.
  • Separate profiles. An example of this is where the aileron starts, the section will have one layer at full profile while the next one is smaller with the aileron cut out of it. Therefore the slicer must close what the smaller layer no longer covers with a local top cap (similar to the slot’s roof).
  • Weight. More weight-saving experiments, to bring the wing’s weight lower still.
↑ RC Aircraft Program