Things: finished parametric models
bitbybit.things is a catalogue of finished models. Each one is a whole object, a vase, a table or a house, built in one call from a handful of parameters: change a parameter and the model is built again with it. Use one as it is, as the start of your own design, or as an example of what a parametric model can be.
They are platform algorithms: they run in the editors on bitbybit.dev and in the BabylonJS runner, not in the npm packages. Every model except the two birdhouses is computed only for members of the Silver and Gold plans; without a plan, create stops the run with a message that says so (Plans).
The catalogue
| Area | Models |
|---|---|
threeDPrinting | the vases serenitySwirl and arabicArchway, the cups calmCup and dragonCup, the medal eternalLove and the phone stand desktop.phoneNest |
laserCutting | the phone holder gadgets.dropletsPhoneHolder, as an assembled model, flat drawings for cutting, or both |
furniture | the tables elegantTable, goodCoffeeTable and snakeTable, and the chair snakeChair |
architecture | the house houses.zenHideout, with its floors, walls, windows, columns, roof and stairs |
kidsCorner | the birdhouses birdhouses.wingtipVilla and birdhouses.chirpyChalet |
Building, drawing and disposing
Every model has the same three steps:
createtakes the model's parameters and builds it, standing on the ground with Y up. It returns the model's data: its shapes, the whole model as one compound and the parts it is made of.drawModeldraws that data with the model's own materials, andbitbybit.draw.drawAnyAsyncdraws it the same way, as the example below does.disposefrees the model's shapes in the kernel, for a script that builds many versions of a model one after another.
Some models add their own steps: drawOptions builds the options of their materials, the laser-cut phone holder downloads its parts as STEP and its drawings as DXF or STEP, and the house can be built at a level of detail from enums.lodEnum. The shapes are ordinary OpenCascade shapes, so a model can be measured, cut or exported to STEP like anything else.
Here the Wingtip Villa birdhouse is built with a taller chimney and a wider roof overhang, and turned half a circle so its front, with the entrance hole, faces the camera:
- Rete
- Blockly
- TypeScript
{
"id": "rete-v2-json",
"nodes": {
"villa": {
"id": "villa",
"name": "bitbybit.things.kidsCorner.birdhouses.wingtipVilla.create",
"customName": "wingtip villa",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"interiorWidth": 3,
"interiorLength": 3,
"interiorHeight": 5,
"thickness": 0.5,
"holeDiameter": 1.5,
"holeDistToBottom": 2.5,
"stickLength": 1.2,
"stickDiameter": 0.5,
"baseAttachmentHeight": 2,
"roofOverhang": 1.5,
"rotation": 180,
"chimneyHeight": 2,
"origin": [
0,
0,
0
]
},
"inputs": {},
"position": [
40,
40
]
}
},
"modules": {}
}
<xml xmlns="https://developers.google.com/blockly/xml"><block type="bitbybit.draw.drawAnyAsyncNoReturn" x="40" y="40"><value name="Entity"><block type="bitbybit.things.kidsCorner.birdhouses.wingtipVilla.create"><value name="InteriorWidth"><block type="math_number"><field name="NUM">3</field></block></value><value name="InteriorLength"><block type="math_number"><field name="NUM">3</field></block></value><value name="InteriorHeight"><block type="math_number"><field name="NUM">5</field></block></value><value name="Thickness"><block type="math_number"><field name="NUM">0.5</field></block></value><value name="HoleDiameter"><block type="math_number"><field name="NUM">1.5</field></block></value><value name="HoleDistToBottom"><block type="math_number"><field name="NUM">2.5</field></block></value><value name="StickLength"><block type="math_number"><field name="NUM">1.2</field></block></value><value name="StickDiameter"><block type="math_number"><field name="NUM">0.5</field></block></value><value name="BaseAttachmentHeight"><block type="math_number"><field name="NUM">2</field></block></value><value name="RoofOverhang"><block type="math_number"><field name="NUM">1.5</field></block></value><value name="Rotation"><block type="math_number"><field name="NUM">180</field></block></value><value name="ChimneyHeight"><block type="math_number"><field name="NUM">2</field></block></value><value name="Origin"><block type="bitbybit.point.pointXYZ"><value name="X"><block type="math_number"><field name="NUM">0</field></block></value><value name="Y"><block type="math_number"><field name="NUM">0</field></block></value><value name="Z"><block type="math_number"><field name="NUM">0</field></block></value></block></value></block></value></block></xml>
const options = new Bit.Things.KidsCorner.BirdHouses.WingtipVilla.WingtipVillaDto();
options.chimneyHeight = 2;
options.roofOverhang = 1.5;
options.rotation = 180;
const villa = await bitbybit.things.kidsCorner.birdhouses.wingtipVilla.create(options);
await bitbybit.draw.drawAnyAsync({ entity: villa });
Every function
| Function | What it does |
|---|---|
architecture.houses.zenHideout.create | Builds the house with its floors, walls, windows, columns, beams, roof and stairs, with Y up. |
architecture.houses.zenHideout.dispose | Deletes every shape of the house from the kernel to free its memory. |
architecture.houses.zenHideout.drawModel | Draws the house according to the detail level it was built at. |
enums.lodEnum | Picks a level of detail value: low, middle or high. |
furniture.chairs.snakeChair.create | Builds the snake-shaped chair body as one solid, with Y up and the seat facing +X. |
furniture.chairs.snakeChair.dispose | Deletes every shape of the chair from the kernel to free its memory. |
furniture.chairs.snakeChair.drawModel | Draws the chair body in white rough plastic. |
furniture.chairs.snakeChair.drawOptions | Collects the options that control how the snake chair is drawn. |
furniture.chairs.snakeChair.getCompoundShape | Gets the whole chair shape out of a built model. |
furniture.chairs.snakeChair.getSittingAreaCenterPoint | Gets the center of the seat at seat height. |
furniture.chairs.snakeChair.getSittingWireShape | Gets the rectangle outlining the seat at seat height. |
furniture.tables.elegantTable.create | Builds the table from its top panel, base panel and legs, standing on the ground with Y up. |
furniture.tables.elegantTable.dispose | Deletes every shape of the table from the kernel to free its memory. |
furniture.tables.elegantTable.drawModel | Draws the top, the base panel and the legs as separate meshes in wood materials. |
furniture.tables.elegantTable.drawOptions | Collects the options that control how the table is drawn. |
furniture.tables.elegantTable.getBottomPanelShape | Gets the base panel, the slab under the top panel that the legs meet, out of a built table. |
furniture.tables.elegantTable.getBottomPanelWireShape | Gets the outline of the base panel's underside out of a built table. |
furniture.tables.elegantTable.getCompoundShape | Gets the whole table shape out of a built model. |
furniture.tables.elegantTable.getLegBottomPoints | Gets the point where each leg meets the ground. |
furniture.tables.elegantTable.getLegsCompoundShape | Gets all legs of a built table together as one compound. |
furniture.tables.elegantTable.getLegShapeByIndex | Gets one leg of a built table by its 0-based index. |
furniture.tables.elegantTable.getLegShapes | Gets every leg of a built table as a list of separate solids. |
furniture.tables.elegantTable.getLegTopPoints | Gets the point where each leg meets the base panel. |
furniture.tables.elegantTable.getTableBottomCenterPoint | Gets the center of the base panel's underside. |
furniture.tables.elegantTable.getTableTopCenterPoint | Gets the center of the table's upper surface. |
furniture.tables.elegantTable.getTopPanelShape | Gets the top panel, the upper slab that overhangs the base panel, out of a built table. |
furniture.tables.elegantTable.getTopPanelWireShape | Gets the outline of the table's upper surface out of a built table. |
furniture.tables.goodCoffeeTable.create | Builds the coffee table from its framed glass top, four legs and an optional shelf, with Y up. |
furniture.tables.goodCoffeeTable.dispose | Deletes every shape of the table from the kernel to free its memory. |
furniture.tables.goodCoffeeTable.drawModel | Draws the top frame, glass, shelf and legs as separate meshes, in dark wood and black glass. |
furniture.tables.goodCoffeeTable.drawOptions | Collects the options that control how the coffee table is drawn. |
furniture.tables.goodCoffeeTable.getCompoundShape | Gets the whole table shape out of a built model. |
furniture.tables.goodCoffeeTable.getGlassPanelShape | Gets the glass panel set into the top out of a built table. |
furniture.tables.goodCoffeeTable.getGlassPanelWireShape | Gets the outline of the glass panel's upper face out of a built table. |
furniture.tables.goodCoffeeTable.getLegBottomPoints | Gets the point at the bottom of each leg. |
furniture.tables.goodCoffeeTable.getLegsCompoundShape | Gets the four legs of a built table together as one compound. |
furniture.tables.goodCoffeeTable.getLegShapeByIndex | Gets one leg of a built table by its 0-based index. |
furniture.tables.goodCoffeeTable.getLegShapes | Gets the four legs of a built table as a list of separate solids. |
furniture.tables.goodCoffeeTable.getLegTopPoints | Gets the point at the top of each leg, where it meets the top frame. |
furniture.tables.goodCoffeeTable.getShelfShape | Gets the shelf between the legs out of a built table. |
furniture.tables.goodCoffeeTable.getShelfTopWireShape | Gets an outline wire of the shelf's top out of a built table. |
furniture.tables.goodCoffeeTable.getTableShelfTopCenterPoint | Gets the center of the shelf's top. |
furniture.tables.goodCoffeeTable.getTableTopCenterPoint | Gets the center of the table's top. |
furniture.tables.goodCoffeeTable.getTopPanelShape | Gets the wooden top frame, the part that holds the glass, out of a built table. |
furniture.tables.goodCoffeeTable.getTopPanelWireShape | Gets an outline wire of the top frame out of a built table. |
furniture.tables.snakeTable.create | Builds the snake-shaped table body and its glass top, with Y up. |
furniture.tables.snakeTable.dispose | Deletes every shape of the table from the kernel to free its memory. |
furniture.tables.snakeTable.drawModel | Draws the body in white rough plastic and the glass in black glass, each as its own mesh. |
furniture.tables.snakeTable.drawOptions | Collects the options that control how the snake table is drawn. |
furniture.tables.snakeTable.getCompoundShape | Gets the whole table shape, the body and the glass together, out of a built model. |
furniture.tables.snakeTable.getGlassShape | Gets the glass panel on top of a built table. |
furniture.tables.snakeTable.getMainShape | Gets the bent, grooved body of a built table without its glass. |
furniture.tables.snakeTable.getTopCenterPoint | Gets the center of the table's top surface. |
kidsCorner.birdhouses.chirpyChalet.create | Builds the birdhouse from its boards, a sloped roof board and a perch. |
kidsCorner.birdhouses.chirpyChalet.dispose | Deletes the birdhouse shapes from the kernel to free their memory. |
kidsCorner.birdhouses.chirpyChalet.drawModel | Draws the birdhouse in textured wood with white edges. |
kidsCorner.birdhouses.wingtipVilla.create | Builds the birdhouse from its boards, a perch and a chimney. |
kidsCorner.birdhouses.wingtipVilla.dispose | Deletes the birdhouse shapes from the kernel to free their memory. |
kidsCorner.birdhouses.wingtipVilla.drawModel | Draws the birdhouse in textured wood with white edges. |
laserCutting.gadgets.dropletsPhoneHolder.create | Builds the phone holder for a phone of the given size, as an assembled model, flat drawings or both. |
laserCutting.gadgets.dropletsPhoneHolder.dispose | Deletes every shape of the phone holder from the kernel to free its memory. |
laserCutting.gadgets.dropletsPhoneHolder.download3dSTEPModel | Downloads the assembled 3D model of the phone holder as a STEP file. |
laserCutting.gadgets.dropletsPhoneHolder.downloadDXFDrawings | Downloads the flat cut and engraving outlines as a DXF file for a laser cutter. |
laserCutting.gadgets.dropletsPhoneHolder.downloadSTEPDrawings | Downloads the flat cut and engraving outlines as one STEP file. |
laserCutting.gadgets.dropletsPhoneHolder.drawModel | Draws the model in purple with white edges, the cut outlines in white and the engravings in magenta. |
laserCutting.gadgets.dropletsPhoneHolder.getCompoundShape | Gets the main shape out of a built phone holder. |
laserCutting.gadgets.dropletsPhoneHolder.getCutWiresCompound | Gets the outlines the laser cuts along, laid out flat. |
laserCutting.gadgets.dropletsPhoneHolder.getEngravingWiresCompound | Gets the outlines the laser engraves, the texts and the logo text, laid out flat. |
threeDPrinting.cups.calmCup.create | Builds a solid cup with a flared wall, a thick bottom and optional handles, standing on Y. |
threeDPrinting.cups.calmCup.dispose | Deletes the cup shape from the kernel to free its memory. |
threeDPrinting.cups.calmCup.drawModel | Draws the cup with a white metallic material and tinted edges. |
threeDPrinting.cups.dragonCup.create | Builds the scaled cup with a twisted wall, standing on Y. |
threeDPrinting.cups.dragonCup.drawModel | Draws the cup with a glossy blue metallic material and light blue edges. |
threeDPrinting.cups.dragonCup.getCompoundShape | Gets the whole cup shape out of a built model. |
threeDPrinting.desktop.phoneNest.create | Builds the phone stand together with a rounded box that stands in for the phone resting on it. |
threeDPrinting.desktop.phoneNest.dispose | Deletes every shape of the model from the kernel to free its memory. |
threeDPrinting.desktop.phoneNest.drawModel | Draws the stand in a wood material and the phone in black glass, each as its own mesh. |
threeDPrinting.desktop.phoneNest.drawOptions | Collects the options that control how the phone stand is drawn. |
threeDPrinting.desktop.phoneNest.getCompoundShape | Gets the whole model shape, the stand and the phone together, out of a built model. |
threeDPrinting.medals.eternalLove.create | Builds the heart-shaped medal with its heading and name in raised letters. |
threeDPrinting.medals.eternalLove.dispose | Deletes the medal shape from the kernel to free its memory. |
threeDPrinting.medals.eternalLove.drawModel | Draws the medal with a pale pink metallic material and tinted edges. |
threeDPrinting.vases.arabicArchway.create | Builds the arched vase by turning its profile curve around the Y axis, which is up. |
threeDPrinting.vases.arabicArchway.dispose | Deletes every shape of the vase from the kernel to free its memory. |
threeDPrinting.vases.arabicArchway.drawModel | Draws the vase with matte white walls, a dark see-through filling in the arches and tinted edges. |
threeDPrinting.vases.serenitySwirl.create | Builds the twisted, ribbed vase standing on its base and rising along Y. |
threeDPrinting.vases.serenitySwirl.dispose | Deletes the vase shape from the kernel to free its memory. |
threeDPrinting.vases.serenitySwirl.drawModel | Draws the vase with a matte white material and tinted edges. |



