Creating a scroll case¶
Scroll cases are generated by the scrollcase Python package in
scrollcase/. Given a scroll mesh, it aligns the scroll,
builds a lining that follows its surface, and wraps the lining in the split
honeycomb case: left half (with mount disc), right half, and assembly stand.
Requirements¶
- uv
- (Optional) MeshLab, for repairing a mesh that isn't watertight
Steps¶
-
Prepare the mesh. Any format meshlib reads (PLY, STL, OBJ). It should be a single watertight surface. Orientation and position don't matter. If it isn't in millimeters, set
scroll.scale. -
Write a config. Copy
scrollcase/examples/template.tomlnext to your mesh:
# Starting point for a scroll case. Copy it next to your mesh and edit.
# Anything left out comes from the style preset; every option is listed in
# the config reference, or run: scrollcase defaults --style educelab.v1
style = "educelab.v1"
name = "PHerc-XXXX" # output files are <name>-L.stl, -R.stl, ...
[scroll]
mesh = "PHerc-XXXX.ply" # relative to this file
scale = 1.0 # set if the mesh isn't in millimeters
rotate = [0, 0, 0] # degrees about X, Y, Z, applied after alignment
smoothing = "none" # "denoise" or "shrink_expand" for very detailed meshes
[split]
type = "plane" # "curve" avoids a flat seam lined up with the beam
[nubs]
# [x, z] pairs on the divider, between the lining and the shell. The build
# prints both diameters; place nubs after a first draft.
positions = []
[escape_holes]
enabled = false
[label]
line1 = "PHerc-XXXX"
line2 = ""
Set name, scroll.mesh (relative to the config file), and the label.
Every option is described in the config reference.
To start from every option instead, print a style's full config:
cd scrollcase
uv run scrollcase defaults --style educelab.v1 > my-scroll.toml
- Generate a draft.
uv run scrollcase -v build -c my-scroll.toml -o out/ --preview
This writes <name>-L.stl, -R.stl, -Stand.stl, and -Scroll.stl. The
scroll STL is the aligned scroll in case coordinates; load it with the
halves in a viewer to check placement and clearances. --preview also
writes and opens <name>-preview.html, which shows every part together.
Make the halves see-through or explode them apart to check the fit, and
use Save snapshot to save a PNG of the view.
- Adjust.
- The scroll is auto-aligned to the case axis, with its widest direction
in the split plane. Use
scroll.rotate(degrees, XYZ) to adjust it, e.g. to put a fragile edge away from the split. - Add
nubs.positionsas[x, z]pairs. Place them in the divider wall between the lining and the shell (the build prints both diameters). -
scroll.smoothing("denoise"or"shrink_expand") simplifies a very detailed lining. Smoothing never cuts into the scroll. -
Print. Overhang removal (on by default) extrudes each half's cavity toward the split, so the scroll can be lowered straight into either half without catching on the lining.
What changed from the OpenSCAD generator¶
The manual MeshLab/MeshMixer lining steps, modelRotate/modelTranslate
positioning, and slow iterative overhang removal are now automatic. The case
design and parameters are the same; parameter names are snake_case.