Laptop holder runner example

Laptop holder runner example script details
Author
matas
Type
Typescript logo image
typescript
App Version
0.15.14
Visibility
public
Date Created
Jul 10, 2024, 12:32:24 PM
Last Edit Date
Jul 29, 2024, 3:59:09 PM

Script Details

The Code
Bit.mockBitbybitRunnerInputs({ "Laptop Type": "MacBook Pro 16", "Number Laptops": "3", "Color": "Black", }); const inputs = Bit.getBitbybitRunnerInputs(); const laptops: Laptop[] = [] let laptop: Laptop; switch (inputs["Laptop Type"]) { case "MacBook Pro 16": laptop = { length: 1.63, width: 35.8, height: 24.6 }; break; case "MacBook Pro 14": laptop = { length: 1.57, width: 31.3, height: 22.2 } break; case "MacBook Air": laptop = { length: 1.2, width: 30.5, height: 21.6 } break; default: break; } let flipColor = false; switch (inputs["Color"]) { case "Blue": flipColor = true; break; default: break; } console.log("laptop ", laptop); const nrLaptops = +inputs["Number Laptops"]; for (let i = 0; i < nrLaptops; i++) { laptops.push({ ...laptop }); } const whiteColor = "#ffffff"; const holderColor = "#333333"; const laptopLiftedHeight = 3; const distanceBetweenLaptops = 1.7; const exportSTEP = false; bitbybit.babylon.scene.backgroundColour({ colour: "#bbbbbb" }); const pointLightConf = new Bit.Inputs.BabylonScene.PointLightDto(); pointLightConf.position = [-15, 20, -5]; pointLightConf.intensity = 8000; pointLightConf.diffuse = "#3333ff"; pointLightConf.radius = 0; bitbybit.babylon.scene.drawPointLight(pointLightConf); const controlPoints = [ [-12.5, 0, 0], [-8, 13, 0], [-4, 11, 0], [-2, 6, 0], [2, 6, 0], [4, 14, 0], [8, 17, 0], [12.5, 0, 0] ] as Bit.Inputs.Base.Point3[]; let laptopStand; let laptopStandMesh; const laptopsFilletsMesh = []; async function start() { const ground = await bitbybit.occt.shapes.face.createCircleFace({ center: [0, 0, 0], direction: [0, 1, 0], radius: 75, }); const groundOptions = new Bit.Inputs.Draw.DrawOcctShapeOptions(); groundOptions.faceColour = whiteColor; groundOptions.drawEdges = false; await bitbybit.draw.drawAnyAsync({ entity: ground, options: groundOptions }); const renderLaptops = async (laptops) => { laptops.forEach(laptop => { laptop.center = [0, laptop.height / 2 + laptopLiftedHeight, 0] as Bit.Inputs.Base.Point3; }); let laptopFillets = []; let totalDistance = 0; let previousLaptopLength = 0; laptops.forEach(async (laptop, index) => { totalDistance += distanceBetweenLaptops + laptop.length / 2 + previousLaptopLength / 2; previousLaptopLength = laptop.length; laptop.center[2] = totalDistance; const laptopBaseModel = await bitbybit.occt.shapes.solid.createBox({ width: laptop.width, length: laptop.length, height: laptop.height, center: laptop.center }); const laptopFillet = await bitbybit.occt.fillets.filletEdges({ shape: laptopBaseModel, indexes: undefined, radius: 0.2 }); laptopFillets.push(laptopFillet); const laptopVisModel = await bitbybit.occt.shapes.solid.createBox({ width: laptop.width, length: laptop.length - 0.01, height: laptop.height, center: laptop.center }); const laptopVisFillet = await bitbybit.occt.fillets.filletEdges({ shape: laptopVisModel, indexes: undefined, radius: 0.2 }); laptopFillets.push(laptopFillet); const di = new Bit.Inputs.OCCT.DrawShapeDto(laptopVisFillet); di.faceOpacity = 0.2; di.edgeWidth = 5; di.edgeOpacity = 0.6; di.edgeColour = whiteColor; di.faceColour = whiteColor; const laptopFilletMesh = await bitbybit.occt.drawShape(di); laptopsFilletsMesh.push(laptopFilletMesh); }) const polygonWire = await bitbybit.occt.shapes.wire.createPolygonWire({ points: controlPoints }); const extrusion = await bitbybit.occt.operations.extrude({ shape: polygonWire, direction: [0, 0, totalDistance += distanceBetweenLaptops + previousLaptopLength / 2] }); const laptopStandFillet = await bitbybit.occt.fillets.filletEdges({ shape: extrusion, indexes: undefined, radius: 1 }); const laptopStandThick = await bitbybit.occt.operations.makeThickSolidSimple({ shape: laptopStandFillet, offset: -0.5 }); laptopStand = await bitbybit.occt.booleans.difference({ shape: laptopStandThick, shapes: laptopFillets, keepEdges: false }); const li = new Bit.Inputs.OCCT.DrawShapeDto(laptopStand); li.faceOpacity = 1; if (flipColor) { li.faceColour = "#0000ff"; li.edgeColour = whiteColor; } else { li.faceColour = holderColor; li.edgeColour = whiteColor; } li.edgeWidth = 5; laptopStandMesh = await bitbybit.draw.drawAnyAsync({ entity: laptopStand, options: li }); const laptopsMeshes = await Promise.all(laptopsFilletsMesh); return [laptopStandMesh, ...laptopsMeshes]; } const meshes = await renderLaptops(laptops); return { meshes }; } class Laptop { width: number; length: number; height: number; center?: Bit.Inputs.Base.Point3; } Bit.setBitbybitRunnerResult(start());