Skip to content
pentacular edited this page Jun 19, 2019 · 5 revisions

Open #pot-mold

const dice = (shape, level = 1) => {
  if (level < 1) {
    return shape;
  }
  const [x, y, z] = shape.measureCenter();
  const a = assemble(...shape.cut(planeX(x)));
  const b = assemble(...a.cut(planeY(y)));
  const c = assemble(...b.cut(planeZ(z)));
  if (level > 1) {
    return assemble(...c.toComponents()
                        .map(shape => shape.op(dice, level - 1)));
  } else {
    return c;
  }
}

const exterior = hull(circle(50),
                      circle(70).translate(0, 0, 100));

const pot = hull(circle(40).translate(0, 0, 15),
                 circle(60).translate(0, 0, 100));

const interior = chainHull(circle(15),
                           circle(15).translate(0, 0, 25),
                           circle(20).translate(0, 0, 30),
                           circle(40).translate(0, 0, 100));
const cutWidth = 8;                          
const [left, b] = interior.cut(planeX(cutWidth));
const [middle, right] = b.cut(planeX(-cutWidth));

const [middleLeft, middleB] = middle.cut(planeY(cutWidth));
const [middleMiddle, middleRight] = middleB.cut(planeY(-cutWidth));

const grip =
  assemble(torus({ radius: 20,
                   thickness: 10,
                   sides: 4,
                   rotation: 45 }),
           torus({ radius: 25,
                   thickness: 10,
                   sides: 4,
                   rotation: 45 })
             .scale([1, 1, 0.5])
             .translate(0, 0, 10));
const interiorPieces =
  assemble(left.as('left'),
           right.as('right'),
           middleLeft.as('middle left'),
           middleRight.as('middle right'),
           middleMiddle.as('center'),
           grip.translate(0, 0, 97).as('grip'));
           
const mold = assemble(exterior.op(dice).as('exterior').withWireframe(),
                      torus({ radius: 62,
                              thickness: 5,
                              sides: 4,
                              rotation: 45 })
                        .translate(0, 0, 50)
                        .as('groove'),
                      pot.as('pot'),
                      interiorPieces);

if (false) {
assemble(mold.keep('exterior'),
         square(160, 160)
           .left()
           .extrude(100)
           .drop())
  .scale(0.5)
  .writeStl('exterior_half.stl');

interiorPieces.keep('left').scale(0.5).writeStl('interiorLeft.stl');
interiorPieces.keep('right').scale(0.5).writeStl('interiorRight.stl');
interiorPieces.keep('middle right').scale(0.5).writeStl('interiorMiddleLeft.stl');
interiorPieces.keep('middle left').scale(0.5).writeStl('interiorMiddleRight.stl');
interiorPieces.keep('center').scale(0.5).writeStl('interiorCenter.stl');
interiorPieces.keep('grip').scale(0.5).writeStl('interiorGripg.stl');
}

return mold;
Clone this wiki locally