-
Notifications
You must be signed in to change notification settings - Fork 5
Project: Pot Mold
pentacular edited this page Jun 19, 2019
·
5 revisions
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;