Script: Drone in Rete

Drone in Rete picture
Type
Rete logo indicatorrete
Date Created
Oct 12, 2026, 2:28:45 PM
Last Edit Date
Oct 12, 2026, 2:49:49 PM

Project Information

Drone example demonstrating 3D app development in multi-file environment.

View Full Project

Script Code

This script is large, so only its beginning is shown here. Open it in the editor to see all of it.

{"id":"rete-v2-json","nodes":{"f76ccf6f72f1c500":{"id":"f76ccf6f72f1c500","name":"bitbybit.groups.group","customName":"Sizes","async":false,"drawable":false,"data":{"description":"","groupWidth":1547,"groupHeight":1024,"groupColor":"#f0cebb","groupOpacity":0.15},"inputs":{},"position":[0,0]},"6ba3682774530749":{"id":"6ba3682774530749","name":"bitbybit.comments.comment","customName":"Comment","async":false,"drawable":false,"data":{"commentText":"### Sizes\nThree sliders drive the whole drone: **arms**, **arm length** and **propeller** diameter, in millimetres. Arms come in steps of two, so the propellers can alternate their spin. *fit propeller* keeps the propeller clear of its neighbours and the canopy.","commentWidth":440,"commentHeight":202,"commentTextColor":"#f0cebb","commentBackgroundColor":"#1a1c1f","commentOpacity":0.85,"commentTextScale":1},"inputs":{},"position":[24,64],"parent":"f76ccf6f72f1c500"},"3cd26cf2e0f4e288":{"id":"3cd26cf2e0f4e288","name":"bitbybit.math.numberSlider","customName":"arms","async":false,"drawable":false,"data":{"options":{"min":4,"max":8,"step":2},"number":4},"inputs":{},"position":[24,290],"parent":"f76ccf6f72f1c500"},"7bb8bdd6a9a62983":{"id":"7bb8bdd6a9a62983","name":"bitbybit.math.numberSlider","customName":"arm length","async":false,"drawable":false,"data":{"options":{"min":120,"max":260,"step":5},"number":185},"inputs":{},"position":[24,449],"parent":"f76ccf6f72f1c500"},"c8c1604a5ea31f67":{"id":"c8c1604a5ea31f67","name":"bitbybit.math.numberSlider","customName":"propeller","async":false,"drawable":false,"data":{"options":{"min":100,"max":300,"step":5},"number":230},"inputs":{},"position":[24,608],"parent":"f76ccf6f72f1c500"},"06abdff8fb0917f0":{"id":"06abdff8fb0917f0","name":"bitbybit.lists.createList","customName":"sizes","async":false,"drawable":false,"data":{},"inputs":{"listElements":{"connections":[{"node":"3cd26cf2e0f4e288","output":"result","data":{}},{"node":"7bb8bdd6a9a62983","output":"result","data":{}},{"node":"c8c1604a5ea31f67","output":"result","data":{}}]}},"position":[614,64],"parent":"f76ccf6f72f1c500"},"99812753de6947a6":{"id":"99812753de6947a6","name":"bitbybit.code.typeScriptEditor","customName":"fit propeller","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":true},"options":{},"code":{"code":"const start99812753de6947a6 = async (inputs: any, index: number) => {\n    const [arms, length, diameter] = inputs;\n    const neighbours = 2 * length * Math.sin(Math.PI / arms) - 10;\n    const canopy = 2 * (length - 68);\n    const largest = Math.floor(Math.min(neighbours, canopy) / 5) * 5;\n    return Math.min(diameter, largest);\n}"}},"inputs":{"inputs":{"connections":[{"node":"06abdff8fb0917f0","output":"list","data":{}}]}},"position":[949,64],"parent":"f76ccf6f72f1c500"},"86a4136a3e0d72d3":{"id":"86a4136a3e0d72d3","name":"bitbybit.groups.group","customName":"Scene","async":false,"drawable":false,"data":{"description":"","groupWidth":1520,"groupHeight":1025,"groupColor":"#f0cebb","groupOpacity":0.15},"inputs":{},"position":[0,1144]},"896027381380ee34":{"id":"896027381380ee34","name":"bitbybit.comments.comment","customName":"Comment","async":false,"drawable":false,"data":{"commentText":"### Scene\nA dark background, a city environment the metal reflects, a sun that casts shadows, and a camera that starts outside the drone.","commentWidth":440,"commentHeight":158,"commentTextColor":"#f0cebb","commentBackgroundColor":"#1a1c1f","commentOpacity":0.85,"commentTextScale":1},"inputs":{},"position":[24,1208],"parent":"86a4136a3e0d72d3"},"8c2a3ea8e5d031bc":{"id":"8c2a3ea8e5d031bc","name":"bitbybit.babylon.scene.backgroundColour","customName":"background","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"colour":"#15171a"},"inputs":{},"position":[24,1390],"parent":"86a4136a3e0d72d3"},"5cc8e7031e1f747b":{"id":"5cc8e7031e1f747b","name":"bitbybit.babylon.scene.enableSkybox","customName":"environment","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"skybox":"city","size":1000,"blur":0.1,"environmentIntensity":0.4,"hideSkybox":true,"enableGroundProjection":false,"projectedGroundRadius":20,"projectedGroundHeight":3},"inputs":{},"position":[24,1647],"parent":"86a4136a3e0d72d3"},"57b123938bee2151":{"id":"57b123938bee2151","name":"bitbybit.babylon.scene.drawDirectionalLight","customName":"sun","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"direction":[-0.45,-1,-0.3],"intensity":2,"diffuse":"#ffffff","specular":"#ffffff","shadowGeneratorMapSize":4096,"enableShadows":true,"shadowDarkness":0,"shadowUsePercentageCloserFiltering":true,"transparencyShadow":false,"shadowContactHardeningLightSizeUVRatio":0.2,"shadowBias":0.0003,"shadowNormalBias":1,"shadowMaxZ":1000,"shadowMinZ":-1000,"shadowRefreshRate":1},"inputs":{},"position":[584,1208],"parent":"86a4136a3e0d72d3"},"1be2dac4430fdf4b":{"id":"1be2dac4430fdf4b","name":"bitbybit.babylon.scene.adjustActiveArcRotateCamera","customName":"view","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"position":[620,380,760],"lookAt":[0,-20,0],"lowerBetaLimit":1,"upperBetaLimit":179,"angularSensibilityX":1000,"angularSensibilityY":1000,"maxZ":20000,"panningSensibility":2,"wheelPrecision":3},"inputs":{},"position":[1175,1208],"parent":"86a4136a3e0d72d3"},"4f296fff2bf2d8ce":{"id":"4f296fff2bf2d8ce","name":"bitbybit.groups.group","customName":"Materials","async":false,"drawable":false,"data":{"description":"","groupWidth":4471,"groupHeight":4510,"groupColor":"#f0cebb","groupOpacity":0.15},"inputs":{},"position":[9054,0]},"756588cfe9804dd8":{"id":"756588cfe9804dd8","name":"bitbybit.comments.comment","customName":"Comment","async":false,"drawable":false,"data":{"commentText":"### Materials\nEach material is physically based: a colour, how metallic and how rough. It sits a little behind its edges, so the edges drawn over it stay sharp: white on dark materials, black on light ones. Parts from anywhere in the graph can share a draw.","commentWidth":440,"commentHeight":202,"commentTextColor":"#f0cebb","commentBackgroundColor":"#1a1c1f","commentOpacity":0.85,"commentTextScale":1},"inputs":{},"position":[9078,64],"parent":"4f296fff2bf2d8ce"},"e015aa341890c1fd":{"id":"e015aa341890c1fd","name":"bitbybit.groups.group","customName":"Frame plate","async":false,"drawable":false,"data":{"description":"","groupWidth":4209,"groupHeight":1358,"groupColor":"#f0cebb","groupOpacity":0.15},"inputs":{},"position":[2863,0]},"3c80bf287a00931c":{"id":"3c80bf287a00931c","name":"bitbybit.comments.comment","customName":"Comment","async":false,"drawable":false,"data":{"commentText":"### Frame plate\nOne carbon plate, 3 mm thick with rounded corners. Hexagon vents front and back and four leg openings are cut out of it; the top plate is the same shape, 13 mm higher.","commentWidth":440,"commentHeight":180,"commentTextColor":"#f0cebb","commentBackgroundColor":"#1a1c1f","commentOpacity":0.85,"commentTextScale":1},"inputs":{},"position":[2887,64],"parent":"e015aa341890c1fd"},"e0082fb411145b8c":{"id":"e0082fb411145b8c","name":"bitbybit.occt.shapes.wire.createRectangleWire","customName":"plate rectangle","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"width":96,"length":150,"center":[0,0,0],"direction":[0,1,0]},"inputs":{},"position":[2887,268],"parent":"e015aa341890c1fd"},"2204d6db1c6c12b3":{"id":"2204d6db1c6c12b3","name":"bitbybit.occt.fillets.fillet2d","customName":"plate outline","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"radius":26},"inputs":{"shape":{"connections":[{"node":"e0082fb411145b8c","output":"result","data":{}}]}},"position":[3447,64],"parent":"e015aa341890c1fd"},"5e4bce83059bd0b0":{"id":"5e4bce83059bd0b0","name":"bitbybit.occt.shapes.face.createFaceFromWire","customName":"plate face","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"planar":true},"inputs":{"shape":{"connections":[{"node":"2204d6db1c6c12b3","output":"result","data":{}}]}},"position":[3899,64],"parent":"e015aa341890c1fd"},"28a406c9f210d81e":{"id":"28a406c9f210d81e","name":"bitbybit.occt.operations.extrude","customName":"plate slab","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"direction":[0,3,0]},"inputs":{"shape":{"connections":[{"node":"5e4bce83059bd0b0","output":"result","data":{}}]}},"position":[4350,64],"parent":"e015aa341890c1fd"},"66de8267ba8fbe1a":{"id":"66de8267ba8fbe1a","name":"bitbybit.math.number","customName":"hex wall","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"number":0.8},"inputs":{},"position":[2887,638],"parent":"e015aa341890c1fd"},"9a88a2df56621fb0":{"id":"9a88a2df56621fb0","name":"bitbybit.lists.createList","customName":"scale pattern","async":false,"drawable":false,"data":{},"inputs":{"listElements":{"connections":[{"node":"66de8267ba8fbe1a","output":"result","data":{}}]}},"position":[3447,443],"parent":"e015aa341890c1fd"},"c8e108529875bf50":{"id":"c8e108529875bf50","name":"bitbybit.occt.shapes.wire.hexagonsInGrid","customName":"vent hexagons","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"width":56,"height":20,"nrHexagonsInWidth":5,"nrHexagonsInHeight":2,"flatTop":true,"extendTop":false,"extendBottom":false,"extendLeft":false,"extendRight":false},"inputs":{"scalePatternWidth":{"connections":[{"node":"9a88a2df56621fb0","output":"list","data":{}}]},"scalePatternHeight":{"connections":[{"node":"9a88a2df56621fb0","output":"list","data":{}}]}},"position":[3899,366],"parent":"e015aa341890c1fd"},"a29d3ac1b71bebf4":{"id":"a29d3ac1b71bebf4","name":"bitbybit.occt.shapes.face.createFacesFromWires","customName":"vent faces","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"planar":true},"inputs":{"shapes":{"connections":[{"node":"c8e108529875bf50","output":"result","data":{}}]}},"position":[4350,363],"parent":"e015aa341890c1fd"},"3ec3347868a9af67":{"id":"3ec3347868a9af67","name":"bitbybit.occt.operations.extrudeShapes","customName":"vent prisms","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"direction":[0,3,0]},"inputs":{"shapes":{"connections":[{"node":"a29d3ac1b71bebf4","output":"result","data":{}}]}},"position":[4770,64],"parent":"e015aa341890c1fd"},"3b92125c4401411d":{"id":"3b92125c4401411d","name":"bitbybit.occt.shapes.compound.makeCompound","customName":"vent set","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false}},"inputs":{"shapes":{"connections":[{"node":"3ec3347868a9af67","output":"result","data":{}}]}},"position":[5190,64],"parent":"e015aa341890c1fd"},"1fea786243392cd2":{"id":"1fea786243392cd2","name":"bitbybit.occt.transforms.translate","customName":"front vents","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"translation":[0,0,60]},"inputs":{"shape":{"connections":[{"node":"3b92125c4401411d","output":"result","data":{}}]}},"position":[5576,64],"parent":"e015aa341890c1fd"},"e58dc236f6df345a":{"id":"e58dc236f6df345a","name":"bitbybit.occt.transforms.translate","customName":"back vents","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"translation":[0,0,-60]},"inputs":{"shape":{"connections":[{"node":"3b92125c4401411d","output":"result","data":{}}]}},"position":[5576,363],"parent":"e015aa341890c1fd"},"03f2f29b432e2dbc":{"id":"03f2f29b432e2dbc","name":"bitbybit.lists.createList","customName":"cut-outs","async":false,"drawable":false,"data":{},"inputs":{"listElements":{"connections":[{"node":"1fea786243392cd2","output":"result","data":{}},{"node":"e58dc236f6df345a","output":"result","data":{}},{"node":"5f9d636df6418035","output":"result","data":{}}]}},"position":[6008,64],"parent":"e015aa341890c1fd"},"0bcaa7c9e52e0bb6":{"id":"0bcaa7c9e52e0bb6","name":"bitbybit.occt.booleans.difference","customName":"plate","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"keepEdges":false,"strategy":"oneAfterAnother"},"inputs":{"shape":{"connections":[{"node":"28a406c9f210d81e","output":"result","data":{}}]},"shapes":{"connections":[{"node":"03f2f29b432e2dbc","output":"list","data":{}}]}},"position":[6368,64],"parent":"e015aa341890c1fd"},"048fee24a1f882ed":{"id":"048fee24a1f882ed","name":"bitbybit.occt.transforms.translate","customName":"top plate","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"translation":[0,13,0]},"inputs":{"shape":{"connections":[{"node":"0bcaa7c9e52e0bb6","output":"result","data":{}}]}},"position":[6736,64],"parent":"e015aa341890c1fd"},"df692f6a4959f755":{"id":"df692f6a4959f755","name":"bitbybit.babylon.material.pbrMetallicRoughness.create","customName":"carbon material","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"name":"carbon","baseColor":"#23262b","emissiveColor":"#000000","metallic":0.35,"roughness":0.45,"alpha":1,"backFaceCulling":false,"zOffset":2},"inputs":{},"position":[9078,290],"parent":"4f296fff2bf2d8ce"},"ff3ab1cc8cfc5308":{"id":"ff3ab1cc8cfc5308","name":"bitbybit.draw.optionsOcctShape","customName":"carbon look","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"faceOpacity":1,"edgeOpacity":1,"edgeColour":"#f2f2f2","faceColour":"#ff0000","vertexColour":"#ff00ff","edgeWidth":6,"vertexSize":0.03,"drawEdges":true,"drawFaces":true,"drawVertices":false,"precision":0.05,"angularDeflection":0.5,"relativeDeflection":false,"drawEdgeIndexes":false,"edgeIndexHeight":0.06,"edgeIndexColour":"#ff00ff","drawFaceIndexes":false,"faceIndexHeight":0.06,"faceIndexColour":"#0000ff","drawTwoSided":false,"backFaceColour":"#0000ff","backFaceOpacity":1,"edgeArrowSize":0,"edgeArrowAngle":15,"keepMeshData":false,"allowQualityDecrease":true,"forceFaceDeflection":false,"drawIsoCurves":false,"isoCurvesU":5,"isoCurvesV":5,"isoCurvesColour":"#808080","surfaceAnalysis":"none","draftDirection":[0,1,0]},"inputs":{"faceMaterial":{"connections":[{"node":"df692f6a4959f755","output":"result","data":{}}]}},"position":[10065,64],"parent":"4f296fff2bf2d8ce"},"70d7d035fc4b7ea2":{"id":"70d7d035fc4b7ea2","name":"bitbybit.draw.drawAnyAsync","customName":"carbon","async":true,"drawable":true,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false}},"inputs":{"options":{"connections":[{"node":"ff3ab1cc8cfc5308","output":"result","data":{}}]},"entity":{"connections":[{"node":"0bcaa7c9e52e0bb6","output":"result","data":{}},{"node":"048fee24a1f882ed","output":"result","data":{}},{"node":"e878ed854ab76b8f","output":"copies","data":{}},{"node":"57edd2996cf03498","output":"copies","data":{}}]}},"position":[13236,64],"parent":"4f296fff2bf2d8ce"},"3a2e66a525e10413":{"id":"3a2e66a525e10413","name":"bitbybit.groups.group","customName":"Modules","async":false,"drawable":false,"data":{"description":"","groupWidth":488,"groupHeight":448,"groupColor":"#f0cebb","groupOpacity":0.15},"inputs":{},"position":[0,2289]},"1f1f1c449648adfb":{"id":"1f1f1c449648adfb","name":"bitbybit.comments.comment","customName":"Comment","async":false,"drawable":false,"data":{"commentText":"### Modules\nA module is a graph used many times. Double-click one to go inside; every instance of it changes with it.","commentWidth":440,"commentHeight":158,"commentTextColor":"#f0cebb","commentBackgroundColor":"#1a1c1f","commentOpacity":0.85,"commentTextScale":1},"inputs":{},"position":[24,2353],"parent":"3a2e66a525e10413"},"06bf028b1e8d35a4":{"id":"06bf028b1e8d35a4","name":"bitbybit.modules.definition","customName":"Around","async":false,"drawable":false,"data":{"moduleId":"module_e07d2900372f77c7","moduleName":"Around"},"inputs":{},"position":[24,2535],"parent":"3a2e66a525e10413"},"99af658df4b8c37a":{"id":"99af658df4b8c37a","name":"bitbybit.math.number","customName":"legs","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"number":4},"inputs":{},"position":[24,767],"parent":"f76ccf6f72f1c500"},"6616c877a80ade55":{"id":"6616c877a80ade55","name":"bitbybit.occt.shapes.solid.createCylinder","customName":"leg opening","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"radius":6,"height":3,"center":[52,0,0],"direction":[0,1,0],"angle":360,"originOnCenter":false},"inputs":{},"position":[2887,895],"parent":"e015aa341890c1fd"},"ead6e5b69d9dca81":{"id":"ead6e5b69d9dca81","name":"bitbybit.modules.module","customName":"leg openings around","async":false,"drawable":false,"data":{"moduleId":"module_e07d2900372f77c7","embedded":false},"inputs":{"shape":{"connections":[{"node":"6616c877a80ade55","output":"result","data":{}}]},"count":{"connections":[{"node":"99af658df4b8c37a","output":"result","data":{}}]}},"position":[3447,602],"parent":"e015aa341890c1fd"},"5f9d636df6418035":{"id":"5f9d636df6418035","name":"bitbybit.occt.shapes.compound.makeCompound","customName":"leg openings","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false}},"inputs":{"shapes":{"connections":[{"node":"ead6e5b69d9dca81","output":"copies","data":{}}]}},"position":[3899,1096],"parent":"e015aa341890c1fd"},"1388335f1c0427d1":{"id":"1388335f1c0427d1","name":"bitbybit.groups.group","customName":"M3 bolt","async":false,"drawable":false,"data":{"description":"","groupWidth":1182,"groupHeight":549,"groupColor":"#f0cebb","groupOpacity":0.15},"inputs":{},"position":[0,2857]},"e611f6c7f6446c0f":{"id":"e611f6c7f6446c0f","name":"bitbybit.comments.comment","customName":"Comment","async":false,"drawable":false,"data":{"commentText":"### M3 bolt\nA socket-head bolt from a code component: a profile revolved into its body, with a hexagon socket cut into the head. The standoffs and the legs use it.","commentWidth":440,"commentHeight":158,"commentTextColor":"#f0cebb","commentBackgroundColor":"#1a1c1f","commentOpacity":0.85,"commentTextScale":1},"inputs":{},"position":[24,2921],"parent":"1388335f1c0427d1"},"035d49b79981fd13":{"id":"035d49b79981fd13","name":"bitbybit.math.number","customName":"bolt length","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"number":8},"inputs":{},"position":[24,3103],"parent":"1388335f1c0427d1"},"2a9a6821b1fa56c6":{"id":"2a9a6821b1fa56c6","name":"bitbybit.code.typeScriptEditor","customName":"M3 bolt","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":true},"options":{},"code":{"code":"const start2a9a6821b1fa56c6 = async (inputs: any, index: number) => {\n    const length = inputs;\n    const profile = [[0, -3, 0], [2.35, -3, 0], [2.75, -2.6, 0], [2.75, 0, 0], [1.5, 0, 0], [1.5, length - 0.4, 0], [1.1, length, 0], [0, length, 0]];\n    const outline = await bitbybit.occt.shapes.wire.createPolygonWire({ points: profile });\n    const face = await bitbybit.occt.shapes.face.createFaceFromWire({ shape: outline, planar: true });\n    const body = await bitbybit.occt.operations.revolve({ shape: face, angle: 360, direction: [0, 1, 0], copy: false });\n    const hexagon = await bitbybit.occt.shapes.wire.createNGonWire({ nrCorners: 6, radius: 1.45, center: [0, -3.5, 0], direction: [0, 1, 0] });\n    const socketFace = await bitbybit.occt.shapes.face.createFaceFromWire({ shape: hexagon, planar: true });\n    const socket = await bitbybit.occt.operations.extrude({ shape: socketFace, direction: [0, 2.5, 0] });\n    return bitbybit.occt.booleans.difference({ shape: body, shapes: [socket], keepEdges: false });\n}"}},"inputs":{"inputs":{"connections":[{"node":"035d49b79981fd13","output":"result","data":{}}]}},"position":[584,2921],"parent":"1388335f1c0427d1"},"cdd3c18049d04f7e":{"id":"cdd3c18049d04f7e","name":"bitbybit.groups.group","customName":"Standoffs","async":false,"drawable":false,"data":{"description":"","groupWidth":2817,"groupHeight":1835,"groupColor":"#f0cebb","groupOpacity":0.15},"inputs":{},"position":[2863,1478]},"0e65a40ccf39eefc":{"id":"0e65a40ccf39eefc","name":"bitbybit.comments.comment","customName":"Comment","async":false,"drawable":false,"data":{"commentText":"### Standoffs\nPosts that hold the plates 10 mm apart, bolted from above and below. They stand between the arms, so they are turned back half a step before Around repeats them.","commentWidth":440,"commentHeight":180,"commentTextColor":"#f0cebb","commentBackgroundColor":"#1a1c1f","commentOpacity":0.85,"commentTextScale":1},"inputs":{},"position":[2887,1542],"parent":"cdd3c18049d04f7e"},"1e3d1b707015a4ea":{"id":"1e3d1b707015a4ea","name":"bitbybit.occt.shapes.solid.createCylinder","customName":"standoff","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"radius":3.2,"height":10,"center":[40,3,0],"direction":[0,1,0],"angle":360,"originOnCenter":false},"inputs":{},"position":[2887,1746],"parent":"cdd3c18049d04f7e"},"16f243826b5eff97":{"id":"16f243826b5eff97","name":"bitbybit.occt.transforms.translate","customName":"lower bolt","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"translation":[40,0,0]},"inputs":{"shape":{"connections":[{"node":"2a9a6821b1fa56c6","output":"result","data":{}}]}},"position":[2887,2193],"parent":"cdd3c18049d04f7e"},"31e1cb6641690e8e":{"id":"31e1cb6641690e8e","name":"bitbybit.occt.transforms.rotate","customName":"flipped bolt","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"axis":[1,0,0],"angle":180},"inputs":{"shape":{"connections":[{"node":"2a9a6821b1fa56c6","output":"result","data":{}}]}},"position":[2887,2492],"parent":"cdd3c18049d04f7e"},"0e7705019e0edacb":{"id":"0e7705019e0edacb","name":"bitbybit.occt.transforms.translate","customName":"upper bolt","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"translation":[40,16,0]},"inputs":{"shape":{"connections":[{"node":"31e1cb6641690e8e","output":"result","data":{}}]}},"position":[3581,1542],"parent":"cdd3c18049d04f7e"},"0fbbf2ce0e9242db":{"id":"0fbbf2ce0e9242db","name":"bitbybit.lists.createList","customName":"standoff bolts","async":false,"drawable":false,"data":{},"inputs":{"listElements":{"connections":[{"node":"16f243826b5eff97","output":"result","data":{}},{"node":"0e7705019e0edacb","output":"result","data":{}}]}},"position":[4050,1542],"parent":"cdd3c18049d04f7e"},"894cb1d3c0d66381":{"id":"894cb1d3c0d66381","name":"bitbybit.occt.shapes.compound.makeCompound","customName":"bolt pair","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false}},"inputs":{"shapes":{"connections":[{"node":"0fbbf2ce0e9242db","output":"list","data":{}}]}},"position":[4477,1542],"parent":"cdd3c18049d04f7e"},"83ce840d88109654":{"id":"83ce840d88109654","name":"bitbybit.code.typeScriptEditor","customName":"half a step back","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":true},"options":{},"code":{"code":"const start83ce840d88109654 = async (inputs: any, index: number) => {\n    return -180 / inputs;\n}"}},"inputs":{"inputs":{"connections":[{"node":"3cd26cf2e0f4e288","output":"result","data":{}}]}},"position":[2887,2828],"parent":"cdd3c18049d04f7e"},"53e7ef459c157e34":{"id":"53e7ef459c157e34","name":"bitbybit.occt.transforms.rotate","customName":"standoff between arms","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"axis":[0,1,0],"angle":0},"inputs":{"shape":{"connections":[{"node":"1e3d1b707015a4ea","output":"result","data":{}}]},"angle":{"connections":[{"node":"83ce840d88109654","output":"result","data":{}}]}},"position":[3581,1841],"parent":"cdd3c18049d04f7e"},"81576187e7bf3283":{"id":"81576187e7bf3283","name":"bitbybit.occt.transforms.rotate","customName":"bolts between arms","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"axis":[0,1,0],"angle":0},"inputs":{"shape":{"connections":[{"node":"894cb1d3c0d66381","output":"result","data":{}}]},"angle":{"connections":[{"node":"83ce840d88109654","output":"result","data":{}}]}},"position":[4863,1542],"parent":"cdd3c18049d04f7e"},"1e2ae0e5a87cbe40":{"id":"1e2ae0e5a87cbe40","name":"bitbybit.modules.module","customName":"standoffs around","async":false,"drawable":false,"data":{"moduleId":"module_e07d2900372f77c7","embedded":false},"inputs":{"shape":{"connections":[{"node":"53e7ef459c157e34","output":"result","data":{}}]},"count":{"connections":[{"node":"3cd26cf2e0f4e288","output":"result","data":{}}]}},"position":[4050,1701],"parent":"cdd3c18049d04f7e"},"e377ce47888c5b3e":{"id":"e377ce47888c5b3e","name":"bitbybit.modules.module","customName":"standoff bolts around","async":false,"drawable":false,"data":{"moduleId":"module_e07d2900372f77c7","embedded":false},"inputs":{"shape":{"connections":[{"node":"81576187e7bf3283","output":"result","data":{}}]},"count":{"connections":[{"node":"3cd26cf2e0f4e288","output":"result","data":{}}]}},"position":[5307,1542],"parent":"cdd3c18049d04f7e"},"871753d3056afe66":{"id":"871753d3056afe66","name":"bitbybit.babylon.material.pbrMetallicRoughness.create","customName":"accent material","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"name":"accent","baseColor":"#f0cebb","emissiveColor":"#000000","metallic":0.85,"roughness":0.35,"alpha":1,"backFaceCulling":false,"zOffset":2},"inputs":{},"position":[9078,809],"parent":"4f296fff2bf2d8ce"},"52b03e68dc7dc971":{"id":"52b03e68dc7dc971","name":"bitbybit.draw.optionsOcctShape","customName":"accent look","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"faceOpacity":1,"edgeOpacity":1,"edgeColour":"#0d0e10","faceColour":"#ff0000","vertexColour":"#ff00ff","edgeWidth":4,"vertexSize":0.03,"drawEdges":true,"drawFaces":true,"drawVertices":false,"precision":0.05,"angularDeflection":0.5,"relativeDeflection":false,"drawEdgeIndexes":false,"edgeIndexHeight":0.06,"edgeIndexColour":"#ff00ff","drawFaceIndexes":false,"faceIndexHeight":0.06,"faceIndexColour":"#0000ff","drawTwoSided":false,"backFaceColour":"#0000ff","backFaceOpacity":1,"edgeArrowSize":0,"edgeArrowAngle":15,"keepMeshData":false,"allowQualityDecrease":true,"forceFaceDeflection":false,"drawIsoCurves":false,"isoCurvesU":5,"isoCurvesV":5,"isoCurvesColour":"#808080","surfaceAnalysis":"none","draftDirection":[0,1,0]},"inputs":{"faceMaterial":{"connections":[{"node":"871753d3056afe66","output":"result","data":{}}]}},"position":[10065,1689],"parent":"4f296fff2bf2d8ce"},"4866e77cf0ac75ea":{"id":"4866e77cf0ac75ea","name":"bitbybit.draw.drawAnyAsync","customName":"accent","async":true,"drawable":true,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false}},"inputs":{"options":{"connections":[{"node":"52b03e68dc7dc971","output":"result","data":{}}]},"entity":{"connections":[{"node":"1e2ae0e5a87cbe40","output":"copies","data":{}},{"node":"5659c77ed2647d09","output":"result","data":{}},{"node":"b561ea9c301029c7","output":"result","data":{}}]}},"position":[13236,406],"parent":"4f296fff2bf2d8ce"},"9342d7f3c54ffee2":{"id":"9342d7f3c54ffee2","name":"bitbybit.babylon.material.pbrMetallicRoughness.create","customName":"steel material","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"name":"steel","baseColor":"#1c1c1e","emissiveColor":"#000000","metallic":0.9,"roughness":0.42,"alpha":1,"backFaceCulling":false,"zOffset":2},"inputs":{},"position":[9078,1328],"parent":"4f296fff2bf2d8ce"},"780844dd15319225":{"id":"780844dd15319225","name":"bitbybit.draw.optionsOcctShape","customName":"steel look","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"faceOpacity":1,"edgeOpacity":1,"edgeColour":"#f2f2f2","faceColour":"#ff0000","vertexColour":"#ff00ff","edgeWidth":4,"vertexSize":0.03,"drawEdges":true,"drawFaces":true,"drawVertices":false,"precision":0.05,"angularDeflection":0.5,"relativeDeflection":false,"drawEdgeIndexes":false,"edgeIndexHeight":0.06,"edgeIndexColour":"#ff00ff","drawFaceIndexes":false,"faceIndexHeight":0.06,"faceIndexColour":"#0000ff","drawTwoSided":false,"backFaceColour":"#0000ff","backFaceOpacity":1,"edgeArrowSize":0,"edgeArrowAngle":15,"keepMeshData":false,"allowQualityDecrease":true,"forceFaceDeflection":false,"drawIsoCurves":false,"isoCurvesU":5,"isoCurvesV":5,"isoCurvesColour":"#808080","surfaceAnalysis":"none","draftDirection":[0,1,0]},"inputs":{"faceMaterial":{"connections":[{"node":"9342d7f3c54ffee2","output":"result","data":{}}]}},"position":[10518,64],"parent":"4f296fff2bf2d8ce"},"aa4e22479d6e01c0":{"id":"aa4e22479d6e01c0","name":"bitbybit.draw.drawAnyAsync","customName":"steel","async":true,"drawable":true,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false}},"inputs":{"options":{"connections":[{"node":"780844dd15319225","output":"result","data":{}}]},"entity":{"connections":[{"node":"e377ce47888c5b3e","output":"copies","data":{}},{"node":"5007c40eac83b48c","output":"copies","data":{}},{"node":"321cd1a9f9ccff35","output":"copies","data":{}},{"node":"8c624beca6ae04f4","output":"copies","data":{}}]}},"position":[13236,748],"parent":"4f296fff2bf2d8ce"},"8c628461fcd2ca1c":{"id":"8c628461fcd2ca1c","name":"bitbybit.modules.definition","customName":"Arm","async":false,"drawable":false,"data":{"moduleId":"module_1b640754df2b28cd","moduleName":"Arm"},"inputs":{},"position":[24,2636],"parent":"3a2e66a525e10413"},"fe5f89ce79a40a4d":{"id":"fe5f89ce79a40a4d","name":"bitbybit.groups.group","customName":"Arms","async":false,"drawable":false,"data":{"description":"","groupWidth":898,"groupHeight":884,"groupColor":"#f0cebb","groupOpacity":0.15},"inputs":{},"position":[2863,3433]},"0166cd1d2ad2fbed":{"id":"0166cd1d2ad2fbed","name":"bitbybit.comments.comment","customName":"Comment","async":false,"drawable":false,"data":{"commentText":"### Arms\nOne Arm instance makes an arm from the sliders. Around instances repeat each of its parts as many times as the arms slider says.","commentWidth":440,"commentHeight":158,"commentTextColor":"#f0cebb","commentBackgroundColor":"#1a1c1f","commentOpacity":0.85,"commentTextScale":1},"inputs":{},"position":[2887,3497],"parent":"fe5f89ce79a40a4d"},"e8c03ef3f8c1f4f9":{"id":"e8c03ef3f8c1f4f9","name":"bitbybit.modules.module","customName":"one arm","async":false,"drawable":false,"data":{"moduleId":"module_1b640754df2b28cd","embedded":false},"inputs":{"length":{"connections":[{"node":"7bb8bdd6a9a62983","output":"result","data":{}}]},"propeller":{"connections":[{"node":"99812753de6947a6","output":"result","data":{}}]}},"position":[2887,3679],"parent":"fe5f89ce79a40a4d"},"e878ed854ab76b8f":{"id":"e878ed854ab76b8f","name":"bitbybit.modules.module","customName":"arms around","async":false,"drawable":false,"data":{"moduleId":"module_e07d2900372f77c7","embedded":false},"inputs":{"shape":{"connections":[{"node":"e8c03ef3f8c1f4f9","output":"arm","data":{}}]},"count":{"connections":[{"node":"3cd26cf2e0f4e288","output":"result","data":{}}]}},"position":[3447,3497],"parent":"fe5f89ce79a40a4d"},"2610f2bcd35f6305":{"id":"2610f2bcd35f6305","name":"bitbybit.modules.module","customName":"motors around","async":false,"drawable":false,"data":{"moduleId":"module_e07d2900372f77c7","embedded":false},"inputs":{"shape":{"connections":[{"node":"e8c03ef3f8c1f4f9","output":"motor","data":{}}]},"count":{"connections":[{"node":"3cd26cf2e0f4e288","output":"result","data":{}}]}},"position":[3447,3702],"parent":"fe5f89ce79a40a4d"},"ca8884bdb218d13e":{"id":"ca8884bdb218d13e","name":"bitbybit.modules.module","customName":"stators around","async":false,"drawable":false,"data":{"moduleId":"module_e07d2900372f77c7","embedded":false},"inputs":{"shape":{"connections":[{"node":"e8c03ef3f8c1f4f9","output":"stator","data":{}}]},"count":{"connections":[{"node":"3cd26cf2e0f4e288","output":"result","data":{}}]}},"position":[3447,3907],"parent":"fe5f89ce79a40a4d"},"aa80d49bb0cf0e44":{"id":"aa80d49bb0cf0e44","name":"bitbybit.babylon.material.pbrMetallicRoughness.create","customName":"aluminium material","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"name":"aluminium","baseColor":"#b9bec6","emissiveColor":"#000000","metallic":1,"roughness":0.32,"alpha":1,"backFaceCulling":false,"zOffset":2},"inputs":{},"position":[9078,1847],"parent":"4f296fff2bf2d8ce"},"5551b2bf06fafe82":{"id":"5551b2bf06fafe82","name":"bitbybit.draw.optionsOcctShape","customName":"aluminium look","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"faceOpacity":1,"edgeOpacity":1,"edgeColour":"#0d0e10","faceColour":"#ff0000","vertexColour":"#ff00ff","edgeWidth":4,"vertexSize":0.03,"drawEdges":true,"drawFaces":true,"drawVertices":false,"precision":0.05,"angularDeflection":0.5,"relativeDeflection":false,"drawEdgeIndexes":false,"edgeIndexHeight":0.06,"edgeIndexColour":"#ff00ff","drawFaceIndexes":false,"faceIndexHeight":0.06,"faceIndexColour":"#0000ff","drawTwoSided":false,"backFaceColour":"#0000ff","backFaceOpacity":1,"edgeArrowSize":0,"edgeArrowAngle":15,"keepMeshData":false,"allowQualityDecrease":true,"forceFaceDeflection":false,"drawIsoCurves":false,"isoCurvesU":5,"isoCurvesV":5,"isoCurvesColour":"#808080","surfaceAnalysis":"none","draftDirection":[0,1,0]},"inputs":{"faceMaterial":{"connections":[{"node":"aa80d49bb0cf0e44","output":"result","data":{}}]}},"position":[10518,1689],"parent":"4f296fff2bf2d8ce"},"b33f88c76a8018cd":{"id":"b33f88c76a8018cd","name":"bitbybit.draw.drawAnyAsync","customName":"aluminium","async":true,"drawable":true,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false}},"inputs":{"options":{"connections":[{"node":"5551b2bf06fafe82","output":"result","data":{}}]},"entity":{"connections":[{"node":"2610f2bcd35f6305","output":"copies","data":{}},{"node":"58c458a3a5c243de","output":"copies","data":{}},{"node":"bce1e79ac1754448","output":"result","data":{}}]}},"position":[13236,1090],"parent":"4f296fff2bf2d8ce"},"5ca4c2ced641b2d9":{"id":"5ca4c2ced641b2d9","name":"bitbybit.babylon.material.pbrMetallicRoughness.create","customName":"copper material","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"name":"copper","baseColor":"#b87333","emissiveColor":"#000000","metallic":1,"roughness":0.5,"alpha":1,"backFaceCulling":false,"zOffset":2},"inputs":{},"position":[9078,2366],"parent":"4f296fff2bf2d8ce"},"eecfd8525a75e0ca":{"id":"eecfd8525a75e0ca","name":"bitbybit.draw.optionsOcctShape","customName":"copper look","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"faceOpacity":1,"edgeOpacity":1,"edgeColour":"#0d0e10","faceColour":"#ff0000","vertexColour":"#ff00ff","edgeWidth":4,"vertexSize":0.03,"drawEdges":true,"drawFaces":true,"drawVertices":false,"precision":0.05,"angularDeflection":0.5,"relativeDeflection":false,"drawEdgeIndexes":false,"edgeIndexHeight":0.06,"edgeIndexColour":"#ff00ff","drawFaceIndexes":false,"faceIndexHeight":0.06,"faceIndexColour":"#0000ff","drawTwoSided":false,"backFaceColour":"#0000ff","backFaceOpacity":1,"edgeArrowSize":0,"edgeArrowAngle":15,"keepMeshData":false,"allowQualityDecrease":true,"forceFaceDeflection":false,"drawIsoCurves":false,"isoCurvesU":5,"isoCurvesV":5,"isoCurvesColour":"#808080","surfaceAnalysis":"none","draftDirection":[0,1,0]},"inputs":{"faceMaterial":{"connections":[{"node":"5ca4c2ced641b2d9","output":"result","data":{}}]}},"position":[10971,64],"parent":"4f296fff2bf2d8ce"},"cc9cca5f8a4a17e2":{"id":"cc9cca5f8a4a17e2","name":"bitbybit.draw.drawAnyAsync","customName":"copper","async":true,"drawable":true,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false}},"inputs":{"options":{"connections":[{"node":"eecfd8525a75e0ca","output":"result","data":{}}]},"entity":{"connections":[{"node":"ca8884bdb218d13e","output":"copies","data":{}}]}},"position":[13236,1432],"parent":"4f296fff2bf2d8ce"},"29337403c546a27d":{"id":"29337403c546a27d","name":"bitbybit.groups.group","customName":"Spin","async":false,"drawable":false,"data":{"description":"","groupWidth":1182,"groupHeight":549,"groupColor":"#f0cebb","groupOpacity":0.15},"inputs":{},"position":[7472,0]},"80a5d0bdd318f4f5":{"id":"80a5d0bdd318f4f5","name":"bitbybit.comments.comment","customName":"Comment","async":false,"drawable":false,"data":{"commentText":"### Spin\nNeighbouring propellers turn opposite ways, so the drone does not spin. Every second propeller is mirrored across its own arm, and each is turned a little, so the blades do not all line up.","commentWidth":440,"commentHeight":180,"commentTextColor":"#f0cebb","commentBackgroundColor":"#1a1c1f","commentOpacity":0.85,"commentTextScale":1},"inputs":{},"position":[7496,64],"parent":"29337403c546a27d"},"58d318c35993476f":{"id":"58d318c35993476f","name":"bitbybit.modules.module","customName":"propellers around","async":false,"drawable":false,"data":{"moduleId":"module_e07d2900372f77c7","embedded":false},"inputs":{"shape":{"connections":[{"node":"e8c03ef3f8c1f4f9","output":"propeller","data":{}}]},"count":{"connections":[{"node":"3cd26cf2e0f4e288","output":"result","data":{}}]}},"position":[7496,268],"parent":"29337403c546a27d"},"5659c77ed2647d09":{"id":"5659c77ed2647d09","name":"bitbybit.code.typeScriptEditor","customName":"alternate spin","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":true},"options":{},"code":{"code":"const start5659c77ed2647d09 = async (inputs: any, index: number) => {\n    const propellers = inputs;\n    const count = propellers.length;\n    const spun = [];\n    for (const [i, propeller] of propellers.entries()) {\n        const angle = (i + 0.5) * 360 / count * Math.PI / 180;\n        const centre = (await bitbybit.occt.analysis.measure.tightBoundingBox({ shape: propeller })).center;\n        const turned = await bitbybit.occt.transforms.rotateAroundCenter({ shape: propeller, angle: i * 37, center: [centre[0], 0, centre[2]], axis: [0, 1, 0] });\n        spun.push(i % 2 === 0 ? turned : await bitbybit.occt.transforms.mirrorAlongNormal({ shape: turned, origin: [0, 0, 0], normal: [Math.sin(angle), 0, Math.cos(angle)] }));\n    }\n    return spun;\n}"}},"inputs":{"inputs":{"connections":[{"node":"58d318c35993476f","output":"copies","data":{}}]}},"position":[8056,64],"parent":"29337403c546a27d"},"273c5f46c3e6ca82":{"id":"273c5f46c3e6ca82","name":"bitbybit.groups.group","customName":"Lights","async":false,"drawable":false,"data":{"description":"","groupWidth":1182,"groupHeight":1034,"groupColor":"#f0cebb","groupOpacity":0.15},"inputs":{},"position":[7472,669]},"d311009995692ff2":{"id":"d311009995692ff2","name":"bitbybit.comments.comment","customName":"Comment","async":false,"drawable":false,"data":{"commentText":"### Lights\nGreen at the front, red at the back, as on an aircraft: two code components sort the lights by the side they are on.","commentWidth":440,"commentHeight":158,"commentTextColor":"#f0cebb","commentBackgroundColor":"#1a1c1f","commentOpacity":0.85,"commentTextScale":1},"inputs":{},"position":[7496,733],"parent":"273c5f46c3e6ca82"},"5007c40eac83b48c":{"id":"5007c40eac83b48c","name":"bitbybit.modules.module","customName":"bolts around","async":false,"drawable":false,"data":{"moduleId":"module_e07d2900372f77c7","embedded":false},"inputs":{"shape":{"connections":[{"node":"e8c03ef3f8c1f4f9","output":"bolts","data":{}}]},"count":{"connections":[{"node":"3cd26cf2e0f4e288","output":"result","data":{}}]}},"position":[3447,4112],"parent":"fe5f89ce79a40a4d"},"514ed3857482d37a":{"id":"514ed3857482d37a","name":"bitbybit.modules.module","customName":"lights around","async":false,"drawable":false,"data":{"moduleId":"module_e07d2900372f77c7","embedded":false},"inputs":{"shape":{"connections":[{"node":"e8c03ef3f8c1f4f9","output":"light","data":{}}]},"count":{"connections":[{"node":"3cd26cf2e0f4e288","output":"result","data":{}}]}},"position":[7496,915],"parent":"273c5f46c3e6ca82"},"d188faf10f534fc8":{"id":"d188faf10f534fc8","name":"bitbybit.code.typeScriptEditor","customName":"front lights","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":true},"options":{},"code":{"code":"const startd188faf10f534fc8 = async (inputs: any, index: number) => {\n    const lights = [];\n    for (const light of inputs) {\n        const centre = (await bitbybit.occt.analysis.measure.tightBoundingBox({ shape: light })).center;\n        if (centre[2] > 0) {\n            lights.push(light);\n        }\n    }\n    return lights;\n}"}},"inputs":{"inputs":{"connections":[{"node":"514ed3857482d37a","output":"copies","data":{}}]}},"position":[8056,733],"parent":"273c5f46c3e6ca82"},"a7fd811b4bd8d49c":{"id":"a7fd811b4bd8d49c","name":"bitbybit.code.typeScriptEditor","customName":"back lights","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":true},"options":{},"code":{"code":"const starta7fd811b4bd8d49c = async (inputs: any, index: number) => {\n    const lights = [];\n    for (const light of inputs) {\n        const centre = (await bitbybit.occt.analysis.measure.tightBoundingBox({ shape: light })).center;\n        if (centre[2] <= 0) {\n            lights.push(light);\n        }\n    }\n    return lights;\n}"}},"inputs":{"inputs":{"connections":[{"node":"514ed3857482d37a","output":"copies","data":{}}]}},"position":[8056,1218],"parent":"273c5f46c3e6ca82"},"27b3d01b400e073f":{"id":"27b3d01b400e073f","name":"bitbybit.babylon.material.pbrMetallicRoughness.create","customName":"green light material","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"name":"green light","baseColor":"#22ff66","emissiveColor":"#22ff66","metallic":0,"roughness":0.2,"alpha":1,"backFaceCulling":false,"zOffset":2},"inputs":{},"position":[9078,2885],"parent":"4f296fff2bf2d8ce"},"daf3c06c36893e37":{"id":"daf3c06c36893e37","name":"bitbybit.draw.optionsOcctShape","customName":"green light look","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"faceOpacity":1,"edgeOpacity":1,"edgeColour":"#ffffff","faceColour":"#ff0000","vertexColour":"#ff00ff","edgeWidth":2,"vertexSize":0.03,"drawEdges":false,"drawFaces":true,"drawVertices":false,"precision":0.05,"angularDeflection":0.5,"relativeDeflection":false,"drawEdgeIndexes":false,"edgeIndexHeight":0.06,"edgeIndexColour":"#ff00ff","drawFaceIndexes":false,"faceIndexHeight":0.06,"faceIndexColour":"#0000ff","drawTwoSided":false,"backFaceColour":"#0000ff","backFaceOpacity":1,"edgeArrowSize":0,"edgeArrowAngle":15,"keepMeshData":false,"allowQualityDecrease":true,"forceFaceDeflection":false,"drawIsoCurves":false,"isoCurvesU":5,"isoCurvesV":5,"isoCurvesColour":"#808080","surfaceAnalysis":"none","draftDirection":[0,1,0]},"inputs":{"faceMaterial":{"connections":[{"node":"27b3d01b400e073f","output":"result","data":{}}]}},"position":[10971,1689],"parent":"4f296fff2bf2d8ce"},"c18bed881e96eebf":{"id":"c18bed881e96eebf","name":"bitbybit.draw.drawAnyAsync","customName":"green light","async":true,"drawable":true,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false}},"inputs":{"options":{"connections":[{"node":"daf3c06c36893e37","output":"result","data":{}}]},"entity":{"connections":[{"node":"d188faf10f534fc8","output":"result","data":{}}]}},"position":[13236,1774],"parent":"4f296fff2bf2d8ce"},"b0e0bbcc88559f9d":{"id":"b0e0bbcc88559f9d","name":"bitbybit.babylon.material.pbrMetallicRoughness.create","customName":"red light material","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"name":"red light","baseColor":"#ff2a2a","emissiveColor":"#ff2a2a","metallic":0,"roughness":0.2,"alpha":1,"backFaceCulling":false,"zOffset":2},"inputs":{},"position":[9078,3404],"parent":"4f296fff2bf2d8ce"},"a523551d99e53757":{"id":"a523551d99e53757","name":"bitbybit.draw.optionsOcctShape","customName":"red light look","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"faceOpacity":1,"edgeOpacity":1,"edgeColour":"#ffffff","faceColour":"#ff0000","vertexColour":"#ff00ff","edgeWidth":2,"vertexSize":0.03,"drawEdges":false,"drawFaces":true,"drawVertices":false,"precision":0.05,"angularDeflection":0.5,"relativeDeflection":false,"drawEdgeIndexes":false,"edgeIndexHeight":0.06,"edgeIndexColour":"#ff00ff","drawFaceIndexes":false,"faceIndexHeight":0.06,"faceIndexColour":"#0000ff","drawTwoSided":false,"backFaceColour":"#0000ff","backFaceOpacity":1,"edgeArrowSize":0,"edgeArrowAngle":15,"keepMeshData":false,"allowQualityDecrease":true,"forceFaceDeflection":false,"drawIsoCurves":false,"isoCurvesU":5,"isoCurvesV":5,"isoCurvesColour":"#808080","surfaceAnalysis":"none","draftDirection":[0,1,0]},"inputs":{"faceMaterial":{"connections":[{"node":"b0e0bbcc88559f9d","output":"result","data":{}}]}},"position":[11424,64],"parent":"4f296fff2bf2d8ce"},"49aa50416cfee8fe":{"id":"49aa50416cfee8fe","name":"bitbybit.draw.drawAnyAsync","customName":"red light","async":true,"drawable":true,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false}},"inputs":{"options":{"connections":[{"node":"a523551d99e53757","output":"result","data":{}}]},"entity":{"connections":[{"node":"a7fd811b4bd8d49c","output":"result","data":{}}]}},"position":[13236,2116],"parent":"4f296fff2bf2d8ce"},"8de14ad4d536ecb8":{"id":"8de14ad4d536ecb8","name":"bitbybit.groups.group","customName":"Canopy","async":false,"drawable":false,"data":{"description":"","groupWidth":2170,"groupHeight":1150,"groupColor":"#f0cebb","groupOpacity":0.15},"inputs":{},"position":[0,3526]},"8f7715fa1b3dd1c2":{"id":"8f7715fa1b3dd1c2","name":"bitbybit.comments.comment","customName":"Comment","async":false,"drawable":false,"data":{"commentText":"### Canopy\nLofted through five rounded rectangles that narrow as they rise. A honeycomb of hexagons is traced on its sides, and a hatch closes the top.","commentWidth":440,"commentHeight":158,"commentTextColor":"#f0cebb","commentBackgroundColor":"#1a1c1f","commentOpacity":0.85,"commentTextScale":1},"inputs":{},"position":[24,3590],"parent":"8de14ad4d536ecb8"},"da2b97476d03cc08":{"id":"da2b97476d03cc08","name":"bitbybit.code.typeScriptEditor","customName":"canopy sections","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":true},"options":{},"code":{"code":"const startda2b97476d03cc08 = async (inputs: any, index: number) => {\n    const sections = [[0, 140, 90, 26, 4], [12, 132, 84, 24, 6], [22, 110, 70, 19, 9], [29, 76, 48, 13, 10], [32, 52, 36, 10, 10]];\n    const wires = [];\n    for (const [y, length, width, radius, forward] of sections) {\n        const rectangle = await bitbybit.occt.shapes.wire.createRectangleWire({ width, length, center: [0, y, forward], direction: [0, 1, 0] });\n        wires.push(await bitbybit.occt.fillets.fillet2d({ shape: rectangle, radius }));\n    }\n    return wires;\n}"}},"inputs":{},"position":[24,3772],"parent":"8de14ad4d536ecb8"},"99b7febb562698b0":{"id":"99b7febb562698b0","name":"bitbybit.occt.operations.loft","customName":"canopy loft","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"makeSolid":true},"inputs":{"shapes":{"connections":[{"node":"da2b97476d03cc08","output":"result","data":{}}]}},"position":[718,3590],"parent":"8de14ad4d536ecb8"},"f146117a7991e090":{"id":"f146117a7991e090","name":"bitbybit.occt.transforms.translate","customName":"canopy","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"translation":[0,16,0]},"inputs":{"shape":{"connections":[{"node":"99b7febb562698b0","output":"result","data":{}}]}},"position":[1120,3590],"parent":"8de14ad4d536ecb8"},"e88dc8002074783f":{"id":"e88dc8002074783f","name":"bitbybit.babylon.material.pbrMetallicRoughness.create","customName":"paint material","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"name":"paint","baseColor":"#1f2b4d","emissiveColor":"#000000","metallic":0.1,"roughness":0.25,"alpha":1,"backFaceCulling":false,"zOffset":2},"inputs":{},"position":[9078,3923],"parent":"4f296fff2bf2d8ce"},"9735989ab6738c87":{"id":"9735989ab6738c87","name":"bitbybit.draw.optionsOcctShape","customName":"paint look","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"faceOpacity":1,"edgeOpacity":1,"edgeColour":"#f2f2f2","faceColour":"#ff0000","vertexColour":"#ff00ff","edgeWidth":6,"vertexSize":0.03,"drawEdges":true,"drawFaces":true,"drawVertices":false,"precision":0.05,"angularDeflection":0.5,"relativeDeflection":false,"drawEdgeIndexes":false,"edgeIndexHeight":0.06,"edgeIndexColour":"#ff00ff","drawFaceIndexes":false,"faceIndexHeight":0.06,"faceIndexColour":"#0000ff","drawTwoSided":false,"backFaceColour":"#0000ff","backFaceOpacity":1,"edgeArrowSize":0,"edgeArrowAngle":15,"keepMeshData":false,"allowQualityDecrease":true,"forceFaceDeflection":false,"drawIsoCurves":false,"isoCurvesU":5,"isoCurvesV":5,"isoCurvesColour":"#808080","surfaceAnalysis":"none","draftDirection":[0,1,0]},"inputs":{"faceMaterial":{"connections":[{"node":"e88dc8002074783f","output":"result","data":{}}]}},"position":[11424,1689],"parent":"4f296fff2bf2d8ce"},"44d7777399305ab0":{"id":"44d7777399305ab0","name":"bitbybit.draw.drawAnyAsync","customName":"paint","async":true,"drawable":true,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false}},"inputs":{"options":{"connections":[{"node":"9735989ab6738c87","output":"result","data":{}}]},"entity":{"connections":[{"node":"f146117a7991e090","output":"result","data":{}},{"node":"79b158dbbe51a78d","output":"result","data":{}}]}},"position":[13236,2458],"parent":"4f296fff2bf2d8ce"},"a7f7437bb73aa81c":{"id":"a7f7437bb73aa81c","name":"bitbybit.code.typeScriptEditor","customName":"honeycomb","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":true},"options":{},"code":{"code":"const starta7f7437bb73aa81c = async (inputs: any, index: number) => {\n    const canopy = inputs;\n    const centre = (await bitbybit.occt.analysis.measure.tightBoundingBox({ shape: canopy })).center;\n    const grown = await bitbybit.occt.transforms.scale3d({ shape: canopy, scale: [1.02, 1.02, 1.02], center: [centre[0], 0, centre[2]] });\n    const faces = await bitbybit.occt.shapes.face.getFaces({ shape: grown });\n    const areas = await bitbybit.occt.shapes.face.getFacesAreas({ shapes: faces });\n    const largestSide = Math.max(...areas.slice(0, -2));\n    const wires = [];\n    for (const [i, face] of faces.entries()) {\n        const normal = await bitbybit.occt.shapes.face.normalOnUV({ shape: face, paramU: 0.5, paramV: 0.5 });\n        if (Math.abs(normal[1]) > 0.9) {\n            continue;\n        }\n        const across = areas[i] > largestSide * 0.7 ? 8 : 5;\n        wires.push(...await bitbybit.occt.shapes.face.subdivideToHexagonWires({ shape: face, nrHexagonsU: across, nrHexagonsV: 3, flatU: false, scalePatternU: [0.8], scalePatternV: [0.8], filletPattern: [0.35], offsetFromBorderU: 0.05, offsetFromBorderV: 0.08 }));\n    }\n    return bitbybit.occt.shapes.compound.makeCompound({ shapes: wires });\n}"}},"inputs":{"inputs":{"connections":[{"node":"99b7febb562698b0","output":"result","data":{}}]}},"position":[1120,3889],"parent":"8de14ad4d536ecb8"},"0676e1bd7bbff847":{"id":"0676e1bd7bbff847","name":"bitbybit.occt.transforms.translate","customName":"honeycomb on canopy","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"translation":[0,16,0]},"inputs":{"shape":{"connections":[{"node":"a7f7437bb73aa81c","output":"result","data":{}}]}},"position":[1814,3590],"parent":"8de14ad4d536ecb8"},"0435c09397582ee1":{"id":"0435c09397582ee1","name":"bitbybit.draw.optionsOcctShape","customName":"honeycomb look","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"faceOpacity":1,"edgeOpacity":1,"edgeColour":"#f2f2f2","faceColour":"#ff0000","vertexColour":"#ff00ff","edgeWidth":8,"vertexSize":0.03,"drawEdges":true,"drawFaces":true,"drawVertices":false,"precision":0.05,"angularDeflection":0.5,"relativeDeflection":false,"drawEdgeIndexes":false,"edgeIndexHeight":0.06,"edgeIndexColour":"#ff00ff","drawFaceIndexes":false,"faceIndexHeight":0.06,"faceIndexColour":"#0000ff","drawTwoSided":false,"backFaceColour":"#0000ff","backFaceOpacity":1,"edgeArrowSize":0,"edgeArrowAngle":15,"keepMeshData":false,"allowQualityDecrease":true,"forceFaceDeflection":false,"drawIsoCurves":false,"isoCurvesU":5,"isoCurvesV":5,"isoCurvesColour":"#808080","surfaceAnalysis":"none","draftDirection":[0,1,0]},"inputs":{"faceMaterial":{"connections":[{"node":"e88dc8002074783f","output":"result","data":{}}]}},"position":[11877,64],"parent":"4f296fff2bf2d8ce"},"5c23a5d4ded6334e":{"id":"5c23a5d4ded6334e","name":"bitbybit.draw.drawAnyAsync","customName":"honeycomb","async":true,"drawable":true,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false}},"inputs":{"options":{"connections":[{"node":"0435c09397582ee1","output":"result","data":{}}]},"entity":{"connections":[{"node":"0676e1bd7bbff847","output":"result","data":{}}]}},"position":[13236,2800],"parent":"4f296fff2bf2d8ce"},"d8d221be2bb19e5c":{"id":"d8d221be2bb19e5c","name":"bitbybit.occt.shapes.wire.createRectangleWire","customName":"hatch rectangle","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"width":34,"length":50,"center":[0,48,10],"direction":[0,1,0]},"inputs":{},"position":[24,4257],"parent":"8de14ad4d536ecb8"},"4a74bd01fe96f9f3":{"id":"4a74bd01fe96f9f3","name":"bitbybit.occt.fillets.fillet2d","customName":"hatch outline","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"radius":9},"inputs":{"shape":{"connections":[{"node":"d8d221be2bb19e5c","output":"result","data":{}}]}},"position":[718,3892],"parent":"8de14ad4d536ecb8"},"434f07a94c33b1c6":{"id":"434f07a94c33b1c6","name":"bitbybit.occt.shapes.face.createFaceFromWire","customName":"hatch face","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"planar":true},"inputs":{"shape":{"connections":[{"node":"4a74bd01fe96f9f3","output":"result","data":{}}]}},"position":[1120,4374],"parent":"8de14ad4d536ecb8"},"f0051446b806b8e1":{"id":"f0051446b806b8e1","name":"bitbybit.occt.operations.extrude","customName":"hatch","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"direction":[0,1.4,0]},"inputs":{"shape":{"connections":[{"node":"434f07a94c33b1c6","output":"result","data":{}}]}},"position":[1814,3889],"parent":"8de14ad4d536ecb8"},"1d98ae31011cdfcf":{"id":"1d98ae31011cdfcf","name":"bitbybit.groups.group","customName":"Logo","async":false,"drawable":false,"data":{"description":"","groupWidth":2818,"groupHeight":699,"groupColor":"#f0cebb","groupOpacity":0.15},"inputs":{},"position":[2863,4437]},"7cf2693162605105":{"id":"7cf2693162605105","name":"bitbybit.comments.comment","customName":"Comment","async":false,"drawable":false,"data":{"commentText":"### Logo\nThe bitbybit logo, read from a STEP file on the CDN, scaled to 26 mm and centred on the hatch: cut through the hatch, and set into the cut a little smaller as a white emblem.","commentWidth":440,"commentHeight":180,"commentTextColor":"#f0cebb","commentBackgroundColor":"#1a1c1f","commentOpacity":0.85,"commentTextScale":1},"inputs":{},"position":[2887,4501],"parent":"1d98ae31011cdfcf"},"3003e170090be2b7":{"id":"3003e170090be2b7","name":"bitbybit.asset.fetchText","customName":"logo file","async":true,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"url":"https://git-cdn.bitbybit.dev/latest/assets/logo/logo-faces.stp"},"inputs":{},"position":[2887,4705],"parent":"1d98ae31011cdfcf"},"9c2a04330e2dfe86":{"id":"9c2a04330e2dfe86","name":"bitbybit.occt.io.loadSTEPorIGESFromText","customName":"logo shape","async":true,"drawable":false,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"text":"","fileType":"step","adjustZtoY":true},"inputs":{"text":{"connections":[{"node":"3003e170090be2b7","output":"result","data":{}}]}},"position":[3447,4501],"parent":"1d98ae31011cdfcf"},"846c1429314c7857":{"id":"846c1429314c7857","name":"bitbybit.code.typeScriptEditor","customName":"logo on the hatch","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":true},"options":{},"code":{"code":"const start846c1429314c7857 = async (inputs: any, index: number) => {\n    const mirrored = await bitbybit.occt.transforms.mirrorAlongNormal({ shape: inputs, origin: [0, 0, 0], normal: [1, 0, 0] });\n    const size = (await bitbybit.occt.analysis.measure.tightBoundingBox({ shape: mirrored })).size;\n    const scaled = await bitbybit.occt.transforms.scale({ shape: mirrored, factor: 26 / Math.max(size[0], size[2]) });\n    const box = await bitbybit.occt.analysis.measure.tightBoundingBox({ shape: scaled });\n    return bitbybit.occt.transforms.translate({ shape: scaled, translation: [-box.center[0], 47.9 - box.min[1], 10 - box.center[2]] });\n}"}},"inputs":{"inputs":{"connections":[{"node":"9c2a04330e2dfe86","output":"result","data":{}}]}},"position":[3824,4501],"parent":"1d98ae31011cdfcf"},"d9aa5c72eb468afb":{"id":"d9aa5c72eb468afb","name":"bitbybit.occt.operations.extrude","customName":"logo cut","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"direction":[0,1.7,0]},"inputs":{"shape":{"connections":[{"node":"846c1429314c7857","output":"result","data":{}}]}},"position":[4518,4501],"parent":"1d98ae31011cdfcf"},"4828bae55fcbcac5":{"id":"4828bae55fcbcac5","name":"bitbybit.lists.createList","customName":"logo cut-outs","async":false,"drawable":false,"data":{},"inputs":{"listElements":{"connections":[{"node":"d9aa5c72eb468afb","output":"result","data":{}}]}},"position":[4938,4501],"parent":"1d98ae31011cdfcf"},"79b158dbbe51a78d":{"id":"79b158dbbe51a78d","name":"bitbybit.occt.booleans.difference","customName":"hatch with logo","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"keepEdges":false,"strategy":"oneAfterAnother"},"inputs":{"shape":{"connections":[{"node":"f0051446b806b8e1","output":"result","data":{}}]},"shapes":{"connections":[{"node":"4828bae55fcbcac5","output":"list","data":{}}]}},"position":[5358,4501],"parent":"1d98ae31011cdfcf"},"a27ce75c35681976":{"id":"a27ce75c35681976","name":"bitbybit.occt.transforms.scale3d","customName":"emblem faces","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"scale":[0.96,1,0.96],"center":[0,47.9,10]},"inputs":{"shape":{"connections":[{"node":"846c1429314c7857","output":"result","data":{}}]}},"position":[4518,4800],"parent":"1d98ae31011cdfcf"},"81f254cd60c52af4":{"id":"81f254cd60c52af4","name":"bitbybit.occt.operations.extrude","customName":"emblem","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"direction":[0,1.1,0]},"inputs":{"shape":{"connections":[{"node":"a27ce75c35681976","output":"result","data":{}}]}},"position":[4938,4660],"parent":"1d98ae31011cdfcf"},"52b57a77b32439dd":{"id":"52b57a77b32439dd","name":"bitbybit.babylon.material.pbrMetallicRoughness.create","customName":"emblem material","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"name":"emblem","baseColor":"#f4f4f4","emissiveColor":"#000000","metallic":0.2,"roughness":0.5,"alpha":1,"backFaceCulling":false,"zOffset":2},"inputs":{},"position":[9638,64],"parent":"4f296fff2bf2d8ce"},"9e2b2f86721d51d6":{"id":"9e2b2f86721d51d6","name":"bitbybit.draw.optionsOcctShape","customName":"emblem look","async":false,"drawable":false,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false},"faceOpacity":1,"edgeOpacity":1,"edgeColour":"#0d0e10","faceColour":"#ff0000","vertexColour":"#ff00ff","edgeWidth":4,"vertexSize":0.03,"drawEdges":true,"drawFaces":true,"drawVertices":false,"precision":0.05,"angularDeflection":0.5,"relativeDeflection":false,"drawEdgeIndexes":false,"edgeIndexHeight":0.06,"edgeIndexColour":"#ff00ff","drawFaceIndexes":false,"faceIndexHeight":0.06,"faceIndexColour":"#0000ff","drawTwoSided":false,"backFaceColour":"#0000ff","backFaceOpacity":1,"edgeArrowSize":0,"edgeArrowAngle":15,"keepMeshData":false,"allowQualityDecrease":true,"forceFaceDeflection":false,"drawIsoCurves":false,"isoCurvesU":5,"isoCurvesV":5,"isoCurvesColour":"#808080","surfaceAnalysis":"none","draftDirection":[0,1,0]},"inputs":{"faceMaterial":{"connections":[{"node":"52b57a77b32439dd","output":"result","data":{}}]}},"position":[11877,1689],"parent":"4f296fff2bf2d8ce"},"7414c7837dfe2e9f":{"id":"7414c7837dfe2e9f","name":"bitbybit.draw.drawAnyAsync","customName":"emblem","async":true,"drawable":true,"data":{"genericNodeData":{"hide":false,"oneOnOne":false,"flatten":0,"forceExecution":false}},"inputs":{"options":{"connections":[{"node":"9e2b2f86721d51d6","output":"result","data":{}}]},"entity":{"connections":[{"node":"81f254cd60c52af4","output":"result","data":{}}]}},"position":[13236,3142],"parent":"4f296fff2bf2d8ce"},"e48760cbd24beccf":{"id":"e48760cbd24beccf","name":"bitbybit.groups.group","customName":"Electronics","async":false,"drawable":false,"data":{"description":"","groupWidth":1753,"groupHeight":1625,"groupColor":"#f0cebb","groupOpacity":0.15},"inputs":{},"position":[0,4796]},"41497d1f5df7c7e8":{"id":"41497d1f5df7c7e8","name":"bitbybit.comments.comment","customName":"Comment","async":false,"drawable":false,"data":{"commentText":"### Electronics\nThe GPS sits on a mast behind the canopy, clear of the frame, and two antennas angle down and back from the bottom plate.","commentWidth":440,"commentHeight":158,"commentTextColor":"#f0cebb","commentBackgroundColor":"#1a1c1f","commentOpacity":0.85,"commentTextScale":1},"inputs":{},"position":[24,4860],"parent":"e48760cbd24beccf"},"5c01484d8c5cba2e":{"id":"5c01484d8c5cba2e","name":"bitbybit.occt.shapes.solid.createCylinder","customName":"GPS mast","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"radius":2.5,"height":34,"center":[0,16,-70],"direction":[0,1,0],"angle":360,"originOnCenter":false},"inputs":{},"position":[24,5042],"parent":"e48760cbd24beccf"},"969fcd02ae0d7979":{"id":"969fcd02ae0d7979","name":"bitbybit.occt.shapes.solid.createCylinder","customName":"GPS puck","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"radius":11,"height":6,"center":[0,50,-70],"direction":[0,1,0],"angle":360,"originOnCenter":false},"inputs":{},"position":[24,5489],"parent":"e48760cbd24beccf"},"70d7418c5b622fea":{"id":"70d7418c5b622fea","name":"bitbybit.occt.fillets.filletEdges","customName":"rounded puck","async":true,"drawable":true,"data":{"genericNodeData":{"hide":true,"oneOnOne":false,"flatten":0,"forceExecution":false},"radius":1.5},"inputs":{"shape":{"connections":[{"node":"969fcd02ae0d7979","
Plans & Pricing

Choose Your Plan

Editor plans for 3D development, API keys for server-side CAD algorithms

B2B

ENTERPRISE

Custom pricing

Custom software development, dedicated servers & CAD automation at scale.

CAD Automation & Software
  • Custom software development
  • Cloud CAD automation pipelines
  • 3D configurators (STEP & GLTF)
  • Batch export jobs
  • Custom algorithms & deployment
Infrastructure & Support
  • Custom compute allocation
  • Dedicated / VPS server tenants
  • Long-running computation jobs
  • Custom upload limits & overage
  • SLA & premium support