feat(editor): add --gen-mesh-candle wax-pillar primitive

80th procedural mesh primitive. Wax pillar candle:

  • saucer (optional) — wider shallow disc base, the drip
    catcher that sits on the table
  • wax — thin tall pillar standing on the saucer (or
    directly on the ground if saucerR=0)

Uses the addClosedCylinderY helper for both pieces — same
two-cylinder pattern as --gen-mesh-bird-bath but with a
much skinnier upper cylinder. The 81-line handler is
mostly arg parsing + validation; geometry is just two
helper calls.

Useful for chapels / shrines, vigil scenes, witch-hut
ritual surfaces, alchemist labs, séance tables, festival-
of-lights ground decoration. Set saucerR=0 for a plain
candle without the saucer (e.g. for stack-them-on-a-cake
contexts).

Watertight under weld (verified — wax + saucer are two
independent closed cylinders).

Milestone: now at 80 procedural mesh primitives.
This commit is contained in:
Kelsi 2026-05-09 13:32:43 -07:00
parent 74b8795aa3
commit b47649b078
3 changed files with 53 additions and 1 deletions

View file

@ -308,6 +308,8 @@ void printUsage(const char* argv0) {
std::printf(" Planter box: long open-top wood basin + visible soil-fill block (window sills / kitchen / balcony)\n");
std::printf(" --gen-mesh-urn <wom-base> [bodyR] [bodyH] [footR] [footH] [neckR] [neckH] [lipR] [lipH] [sides]\n");
std::printf(" Urn: 4-tier vertical pottery vessel (foot + body + neck + lip) — temple / mausoleum / kitchen storage\n");
std::printf(" --gen-mesh-candle <wom-base> [waxR] [waxH] [saucerR] [saucerH] [sides]\n");
std::printf(" Candle: thin wax pillar on optional saucer base (set saucerR=0 to skip) — chapels / vigil scenes\n");
std::printf(" --gen-camp-pack <outDir>\n");
std::printf(" Convenience: emit tent + firepit + bedroll + canopy + woodpile + haystack into outDir as 6 .wom files\n");
std::printf(" --gen-blacksmith-pack <outDir>\n");