Skip to main content

Build Multi-Part Assemblies from Scratch

OCCT category icon with a stylized logo representation

This tutorial demonstrates how to create an assembly programmatically using parts and instances, then export it as a structured STEP file.

Parts, Instances, and Nodes

An assembly document organizes your 3D model into a hierarchy:

  • Parts are the unique component designs (e.g., a wheel, a door, an engine)
  • Instances are the actual placements of those parts in your model (e.g., "put a wheel at each corner of the chassis")
  • Assembly nodes are containers that group related instances together (e.g., "the drivetrain" containing engine and transmission)

Why Create an Assembly?

You can simply export flat BRep shapes to STEP files, but it's worth creating an assembly before you hit that export button. Here's why:

1. Preserved Structure in CAD Software

When you open the exported STEP file in professional CAD software like FreeCAD, Fusion 360, SolidWorks, CATIA, or Onshape, you'll see:

  • Each part listed separately in the model tree
  • Individual instances that can be selected, modified, or replaced
  • The full hierarchy of your assembly

2. Efficient File Size

When you have multiple copies of the same shape (like the 14 plugs in our example), the assembly stores the geometry once and references it multiple times with different transformations. This makes files smaller and faster to load.

3. Part Metadata

Each part and instance can have:

  • A unique ID for programmatic access
  • A human-readable name that appears in CAD software
  • Colors that are preserved in the STEP export
  • Author and organization information embedded in the file

4. Professional Workflow Compatibility

STEP files with assembly structure are the industry standard for exchanging CAD data between different software packages. Your colleagues using different CAD tools can open and work with your designs seamlessly.

STEP File Format

The STEP (Standard for the Exchange of Product Data) format is an ISO standard (ISO 10303) widely supported by virtually all CAD software. When you export with the .stpZ extension, the file is compressed for faster downloads and smaller storage.

Example: Base with Plugs Assembly

In the example below, we create an assembly with:

  • A base part with holes arranged in a circle
  • A plug part that fits into the holes
  • 14 instances of the plug positioned around the base

After running the script, download the generated .stpZ file and open it in your favorite CAD software to see the full assembly structure!

Bitbybit Platform

Creating STEP OCCT Assembly

rete logoRete
Script Source (rete)
{
"id": "rete-v2-json",
"nodes": {
"4fe8e8be91a7f5ba": {
"id": "4fe8e8be91a7f5ba",
"name": "bitbybit.occt.shapes.wire.createCircleWire",
"customName": "circle wire",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"radius": 10,
"center": [
0,
0,
0
],
"direction": [
0,
1,
0
]
},
"inputs": {
"radius": {
"connections": [
{
"node": "3b411188f9c758db",
"output": "result",
"data": {}
}
]
}
},
"position": [
364.23046875,
192.4609375
]
},
"be417d03b5d85770": {
"id": "be417d03b5d85770",
"name": "bitbybit.occt.shapes.wire.createCircleWire",
"customName": "circle wire",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"radius": 7,
"center": [
0,
0,
0
],
"direction": [
0,
1,
0
]
},
"inputs": {
"radius": {
"connections": [
{
"node": "2af6ba4512540d9c",
"output": "result",
"data": {}
}
]
}
},
"position": [
816.7140490444849,
556.3591546575002
]
},
"69519ae3aafb49fa": {
"id": "69519ae3aafb49fa",
"name": "bitbybit.math.numberSlider",
"customName": "from outer radius",
"data": {
"options": {
"min": 2,
"max": 7,
"step": 0.1,
"width": 350,
"updateOnDrag": false
},
"number": 4
},
"inputs": {},
"position": [
-344.363017592156,
983.6005689176313
]
},
"2af6ba4512540d9c": {
"id": "2af6ba4512540d9c",
"name": "bitbybit.math.subtract",
"customName": "subtract",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"first": 1,
"second": 2
},
"inputs": {
"second": {
"connections": [
{
"node": "69519ae3aafb49fa",
"output": "result",
"data": {}
}
]
},
"first": {
"connections": [
{
"node": "3b411188f9c758db",
"output": "result",
"data": {}
}
]
}
},
"position": [
371.36055072161906,
567.111764039391
]
},
"3b411188f9c758db": {
"id": "3b411188f9c758db",
"name": "bitbybit.math.numberSlider",
"customName": "main radius",
"data": {
"options": {
"min": 10,
"max": 20,
"step": 0.1,
"width": 350,
"updateOnDrag": false
},
"number": 13.3
},
"inputs": {},
"position": [
-357.85242764425567,
426.97840137892
]
},
"2490c58c788f0566": {
"id": "2490c58c788f0566",
"name": "bitbybit.math.divide",
"customName": "divide",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"first": 1,
"second": 3
},
"inputs": {
"first": {
"connections": [
{
"node": "69519ae3aafb49fa",
"output": "result",
"data": {}
}
]
}
},
"position": [
496.046276856815,
1292.564460371842
]
},
"4060c9957222ebcd": {
"id": "4060c9957222ebcd",
"name": "bitbybit.occt.shapes.wire.divideWireByParamsToPoints",
"customName": "divide wire by params to points",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"nrOfDivisions": 14,
"removeStartPoint": false,
"removeEndPoint": true
},
"inputs": {
"shape": {
"connections": [
{
"node": "be417d03b5d85770",
"output": "result",
"data": {}
}
]
}
},
"position": [
1188.6737414784734,
549.4890135906844
]
},
"9d0a571b8601732c": {
"id": "9d0a571b8601732c",
"name": "bitbybit.occt.shapes.wire.createCircleWire",
"customName": "circle wire",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"radius": 1,
"center": [
0,
0,
0
],
"direction": [
0,
1,
0
]
},
"inputs": {
"radius": {
"connections": [
{
"node": "2490c58c788f0566",
"output": "result",
"data": {}
}
]
}
},
"position": [
882.8356573520075,
1291.2236147194417
]
},
"bd98e7140385a6e8": {
"id": "bd98e7140385a6e8",
"name": "bitbybit.occt.shapes.wire.reversedWire",
"customName": "reversed wire",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
}
},
"inputs": {
"shape": {
"connections": [
{
"node": "9d0a571b8601732c",
"output": "result",
"data": {}
}
]
}
},
"position": [
1262.8796807244462,
1289.0259394305124
]
},
"77a1d4eeb5d51aeb": {
"id": "77a1d4eeb5d51aeb",
"name": "bitbybit.occt.transforms.translate",
"customName": "translate",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"translation": [
0,
0,
0
]
},
"inputs": {
"shape": {
"connections": [
{
"node": "bd98e7140385a6e8",
"output": "result",
"data": {}
}
]
},
"translation": {
"connections": [
{
"node": "2e4c94de1681cf77",
"output": "result",
"data": {}
}
]
}
},
"position": [
2093.110995458188,
372.5009228342478
]
},
"2e4c94de1681cf77": {
"id": "2e4c94de1681cf77",
"name": "bitbybit.lists.flatten",
"customName": "flatten",
"data": {
"nrLevels": 1
},
"inputs": {
"list": {
"connections": [
{
"node": "4060c9957222ebcd",
"output": "result",
"data": {}
}
]
}
},
"position": [
1697.3853300238575,
728.5089431594602
]
},
"00358cea88d40ae7": {
"id": "00358cea88d40ae7",
"name": "bitbybit.occt.shapes.face.createFaceFromWires",
"customName": "face from wires",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"planar": true
},
"inputs": {
"shapes": {
"connections": [
{
"node": "5072ed908458bdad",
"output": "list",
"data": {}
}
]
}
},
"position": [
2875.3937112061635,
202.5056771050418
]
},
"5072ed908458bdad": {
"id": "5072ed908458bdad",
"name": "bitbybit.lists.createList",
"customName": "create list",
"data": {},
"inputs": {
"listElements": {
"connections": [
{
"node": "4fe8e8be91a7f5ba",
"output": "result",
"data": {}
},
{
"node": "77a1d4eeb5d51aeb",
"output": "result",
"data": {}
},
{
"node": "19d3bc1328a4d1dd",
"output": "result",
"data": {}
}
]
}
},
"position": [
2484.192308888684,
246.52802284002826
]
},
"4425aa07fdbe0e35": {
"id": "4425aa07fdbe0e35",
"name": "bitbybit.occt.operations.extrude",
"customName": "extrude",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"direction": [
0,
1,
0
]
},
"inputs": {
"shape": {
"connections": [
{
"node": "00358cea88d40ae7",
"output": "result",
"data": {}
}
]
}
},
"position": [
3262.7843329641687,
200.30213198957557
]
},
"3cc3305e16a6d73a": {
"id": "3cc3305e16a6d73a",
"name": "bitbybit.occt.transforms.translate",
"customName": "translate",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"translation": [
0,
0,
0
]
},
"inputs": {
"shape": {
"connections": [
{
"node": "c0321f9a85a6e6bc",
"output": "result",
"data": {}
}
]
},
"translation": {
"connections": [
{
"node": "2e4c94de1681cf77",
"output": "result",
"data": {}
}
]
}
},
"position": [
2428.1754726559784,
2126.157507059406
]
},
"9c83db7e8239f74e": {
"id": "9c83db7e8239f74e",
"name": "bitbybit.occt.operations.extrude",
"customName": "extrude",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"direction": [
0,
1,
0
]
},
"inputs": {
"direction": {
"connections": [
{
"node": "c5efbda08b74a7d2",
"output": "result",
"data": {}
}
]
},
"shape": {
"connections": [
{
"node": "47267f55fd0dc09c",
"output": "result",
"data": {}
}
]
}
},
"position": [
1547.2312455459576,
1742.3182757154816
]
},
"c5efbda08b74a7d2": {
"id": "c5efbda08b74a7d2",
"name": "bitbybit.vector.vectorXYZ",
"customName": "vector xyz",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": 0,
"y": 4,
"z": 0
},
"inputs": {},
"position": [
895.5136231726993,
2027.122560459715
]
},
"47267f55fd0dc09c": {
"id": "47267f55fd0dc09c",
"name": "bitbybit.occt.shapes.face.createCircleFace",
"customName": "circle face",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"radius": 1,
"center": [
0,
0,
0
],
"direction": [
0,
1,
0
]
},
"inputs": {
"radius": {
"connections": [
{
"node": "2490c58c788f0566",
"output": "result",
"data": {}
}
]
},
"center": {
"connections": [
{
"node": "efc9692172f0e809",
"output": "result",
"data": {}
}
]
}
},
"position": [
897.026819330392,
1665.3984122841898
]
},
"efc9692172f0e809": {
"id": "efc9692172f0e809",
"name": "bitbybit.vector.vectorXYZ",
"customName": "vector xyz",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": 0,
"y": -1.5,
"z": 0
},
"inputs": {},
"position": [
492.149966205328,
1705.9174505052958
]
},
"c0321f9a85a6e6bc": {
"id": "c0321f9a85a6e6bc",
"name": "bitbybit.occt.fillets.chamferEdges",
"customName": "chamfer edges",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"distance": 0.4
},
"inputs": {
"shape": {
"connections": [
{
"node": "9c83db7e8239f74e",
"output": "result",
"data": {}
}
]
}
},
"position": [
1933.8961459964344,
1739.9618523510107
]
},
"b1f2db70c1008f7c": {
"id": "b1f2db70c1008f7c",
"name": "bitbybit.occt.fillets.chamferEdges",
"customName": "chamfer edges",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"distance": 0.4
},
"inputs": {
"shape": {
"connections": [
{
"node": "4425aa07fdbe0e35",
"output": "result",
"data": {}
}
]
}
},
"position": [
3953.0963887440007,
199.18131032042854
]
},
"6c1f6c6b5b8649e2": {
"id": "6c1f6c6b5b8649e2",
"name": "bitbybit.draw.drawAnyAsync",
"customName": "draw any async",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
}
},
"inputs": {
"options": {
"connections": [
{
"node": "86336b0f9d2d252c",
"output": "result",
"data": {}
}
]
},
"entity": {
"connections": [
{
"node": "b1f2db70c1008f7c",
"output": "result",
"data": {}
}
]
}
},
"position": [
4789.389670057871,
205.98347025524913
]
},
"86336b0f9d2d252c": {
"id": "86336b0f9d2d252c",
"name": "bitbybit.draw.optionsOcctShapeSimple",
"customName": "options occt shape simple",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"precision": 0.01,
"drawFaces": true,
"faceColour": "#001eff",
"drawEdges": true,
"edgeColour": "#ffffff",
"edgeWidth": 2,
"drawTwoSided": false,
"backFaceColour": "#0000ff",
"backFaceOpacity": 1
},
"inputs": {
"faceColour": {
"connections": [
{
"node": "6ec48045997edff0",
"output": "result",
"data": {}
}
]
}
},
"position": [
3952.6742368393698,
600.8920963947206
]
},
"54c64090204fedb9": {
"id": "54c64090204fedb9",
"name": "bitbybit.babylon.scene.drawDirectionalLight",
"customName": "draw directional light",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"direction": [
-100,
-100,
-100
],
"intensity": 3,
"diffuse": "#ffffff",
"specular": "#ffffff",
"shadowGeneratorMapSize": 1024,
"enableShadows": true,
"shadowDarkness": 0,
"shadowUsePercentageCloserFiltering": true,
"transparencyShadow": false,
"shadowContactHardeningLightSizeUVRatio": 0.2,
"shadowBias": 0.0001,
"shadowNormalBias": 0.002,
"shadowMaxZ": 1000,
"shadowMinZ": 0,
"shadowRefreshRate": 1
},
"inputs": {
"direction": {
"connections": [
{
"node": "8b9f1863796ef844",
"output": "result",
"data": {}
}
]
}
},
"position": [
417.5983457425817,
2663.7591363527213
]
},
"9c2442cf2b23c8b8": {
"id": "9c2442cf2b23c8b8",
"name": "bitbybit.occt.assembly.manager.createPart",
"customName": "create part",
"async": true,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"id": "base-with-holes",
"name": "Base With Holes",
"colorRgba": {
"r": 0.5,
"g": 0.5,
"b": 0.5,
"a": 1
}
},
"inputs": {
"colorRgba": {
"connections": [
{
"node": "a31d265397b0db2c",
"output": "result",
"data": {}
}
]
},
"shape": {
"connections": [
{
"node": "b1f2db70c1008f7c",
"output": "result",
"data": {}
}
]
}
},
"position": [
4963.231294877409,
1317.5873025740095
]
},
"a31d265397b0db2c": {
"id": "a31d265397b0db2c",
"name": "bitbybit.color.rgba1Color",
"customName": "rgba 1 color",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"colorRgba": {
"r": 0,
"g": 0,
"b": 1,
"a": 1
}
},
"inputs": {},
"position": [
3011.3047531870516,
1441.7811478324286
]
},
"6ec48045997edff0": {
"id": "6ec48045997edff0",
"name": "bitbybit.color.rgbObjToHex",
"customName": "rgb obj to hex",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"rgb": {
"r": 0,
"g": 0,
"b": 1
},
"min": 0,
"max": 1
},
"inputs": {
"rgb": {
"connections": [
{
"node": "a31d265397b0db2c",
"output": "result",
"data": {}
}
]
}
},
"position": [
3560.957619335378,
680.4396951212099
]
},
"c1ffc6bc5f489622": {
"id": "c1ffc6bc5f489622",
"name": "bitbybit.occt.assembly.manager.combineStructure",
"customName": "combine structure",
"async": true,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"parts": [],
"nodes": [],
"clearDocument": false
},
"inputs": {
"parts": {
"connections": [
{
"node": "ae93183994c1b3af",
"output": "list",
"data": {}
}
]
},
"nodes": {
"connections": [
{
"node": "3e537c2b7d44085b",
"output": "list",
"data": {}
}
]
},
"removals": {
"connections": [
{
"node": "9fc457d753ed3400",
"output": "list",
"data": {}
}
]
},
"partUpdates": {
"connections": [
{
"node": "19dabb504f020b76",
"output": "list",
"data": {}
}
]
}
},
"position": [
6192.723669762441,
1778.8757833971981
]
},
"18365fb391f22df6": {
"id": "18365fb391f22df6",
"name": "bitbybit.occt.assembly.manager.createInstanceNode",
"customName": "create instance node",
"async": true,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"id": "base-with-holes-id",
"partId": "base-with-holes",
"name": "Base With Holes Instance",
"parentId": "",
"translation": [
0,
0,
0
],
"rotation": [
0,
0,
0
],
"scale": 1,
"colorRgba": {
"r": 0,
"g": 0,
"b": 1,
"a": 1
}
},
"inputs": {
"colorRgba": {
"connections": [
{
"node": "a31d265397b0db2c",
"output": "result",
"data": {}
}
]
}
},
"position": [
4960.740311536943,
2485.354702318758
]
},
"1b50b9d990cb3056": {
"id": "1b50b9d990cb3056",
"name": "bitbybit.occt.assembly.manager.createAssemblyNode",
"customName": "create assembly node",
"async": true,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"id": "assembly-node",
"name": "Bitbybit Assembly Example",
"parentId": "",
"colorRgba": {
"r": 0.5,
"g": 0.5,
"b": 0.5,
"a": 1
}
},
"inputs": {},
"position": [
4964.808588367014,
2094.733052114731
]
},
"3e537c2b7d44085b": {
"id": "3e537c2b7d44085b",
"name": "bitbybit.lists.createList",
"customName": "create list",
"data": {},
"inputs": {
"listElements": {
"connections": [
{
"node": "1b50b9d990cb3056",
"output": "result",
"data": {}
},
{
"node": "18365fb391f22df6",
"output": "result",
"data": {}
},
{
"node": "f72a39f256c98dcf",
"output": "result",
"data": {}
}
]
}
},
"position": [
5504.49420068239,
1888.09677357345
]
},
"ae93183994c1b3af": {
"id": "ae93183994c1b3af",
"name": "bitbybit.lists.createList",
"customName": "create list",
"data": {},
"inputs": {
"listElements": {
"connections": [
{
"node": "9c2442cf2b23c8b8",
"output": "result",
"data": {}
},
{
"node": "4438120ebff3fe5d",
"output": "result",
"data": {}
}
]
}
},
"position": [
5502.5788689302735,
1720.7438554058674
]
},
"d51ccbc3953afbfb": {
"id": "d51ccbc3953afbfb",
"name": "bitbybit.occt.assembly.manager.buildAssemblyDocument",
"customName": "build assembly document",
"async": true,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
}
},
"inputs": {
"structure": {
"connections": [
{
"node": "c1ffc6bc5f489622",
"output": "result",
"data": {}
}
]
}
},
"position": [
6579.951559225871,
1776.477635862857
]
},
"1a4b8fd5054696c5": {
"id": "1a4b8fd5054696c5",
"name": "bitbybit.occt.assembly.manager.exportDocumentToStep",
"customName": "export document to step",
"async": true,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"fileName": "Bitbybit Assembly.stpZ",
"author": "Bitbybit user",
"organization": "Bitbybit",
"compress": true,
"tryDownload": true
},
"inputs": {
"document": {
"connections": [
{
"node": "d51ccbc3953afbfb",
"output": "result",
"data": {}
}
]
}
},
"position": [
6950.197906134728,
1773.5596282336016
]
},
"9fc457d753ed3400": {
"id": "9fc457d753ed3400",
"name": "bitbybit.lists.createList",
"customName": "create list",
"data": {},
"inputs": {},
"position": [
5504.811486963638,
2051.558689716352
]
},
"19dabb504f020b76": {
"id": "19dabb504f020b76",
"name": "bitbybit.lists.createList",
"customName": "create list",
"data": {},
"inputs": {},
"position": [
5507.042031820943,
2214.3198547314073
]
},
"f72a39f256c98dcf": {
"id": "f72a39f256c98dcf",
"name": "bitbybit.occt.assembly.manager.createInstanceNode",
"customName": "create instance node",
"async": true,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"id": "plug-id",
"partId": "plug",
"name": "Plug",
"parentId": "",
"translation": [
0,
0,
0
],
"rotation": [
0,
0,
0
],
"scale": 1,
"colorRgba": {
"r": 0,
"g": 0,
"b": 1,
"a": 1
}
},
"inputs": {
"translation": {
"connections": [
{
"node": "d7d867d4d2aa3bf7",
"output": "item",
"data": {}
}
]
},
"colorRgba": {
"connections": [
{
"node": "81814fe4f15a8285",
"output": "result",
"data": {}
}
]
}
},
"position": [
4968.1147498041355,
3030.1762607621604
]
},
"4438120ebff3fe5d": {
"id": "4438120ebff3fe5d",
"name": "bitbybit.occt.assembly.manager.createPart",
"customName": "create part",
"async": true,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"id": "plug",
"name": "Plug",
"colorRgba": {
"r": 0.5,
"g": 0.5,
"b": 0.5,
"a": 1
}
},
"inputs": {
"shape": {
"connections": [
{
"node": "c0321f9a85a6e6bc",
"output": "result",
"data": {}
}
]
}
},
"position": [
4963.09209876649,
1702.9640946409736
]
},
"984689ab9228f5d2": {
"id": "984689ab9228f5d2",
"name": "bitbybit.draw.drawAnyAsync",
"customName": "draw any async",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
}
},
"inputs": {
"options": {
"connections": [
{
"node": "0f77071b2ee7bae3",
"output": "result",
"data": {}
}
]
},
"entity": {
"connections": [
{
"node": "3cc3305e16a6d73a",
"output": "result",
"data": {}
}
]
}
},
"position": [
3436.051406615291,
3565.496580198114
]
},
"0f77071b2ee7bae3": {
"id": "0f77071b2ee7bae3",
"name": "bitbybit.draw.optionsOcctShapeSimple",
"customName": "options occt shape simple",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"precision": 0.01,
"drawFaces": true,
"faceColour": "#001eff",
"drawEdges": true,
"edgeColour": "#ffffff",
"edgeWidth": 2,
"drawTwoSided": true,
"backFaceColour": "#0000ff",
"backFaceOpacity": 1
},
"inputs": {
"faceColour": {
"connections": [
{
"node": "a0d125bde4c99bae",
"output": "result",
"data": {}
}
]
}
},
"position": [
3016.676849378406,
3606.9498126918593
]
},
"a0d125bde4c99bae": {
"id": "a0d125bde4c99bae",
"name": "bitbybit.color.rgbObjToHex",
"customName": "rgb obj to hex",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"rgb": {
"r": 0,
"g": 0,
"b": 1
},
"min": 0,
"max": 1
},
"inputs": {
"rgb": {
"connections": [
{
"node": "81814fe4f15a8285",
"output": "result",
"data": {}
}
]
}
},
"position": [
2641.5465861665057,
3686.8907699383594
]
},
"81814fe4f15a8285": {
"id": "81814fe4f15a8285",
"name": "bitbybit.color.rgba1Color",
"customName": "rgba 1 color",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"colorRgba": {
"r": 0,
"g": 1,
"b": 0.01568627450980392,
"a": 1
}
},
"inputs": {},
"position": [
2075.309253613974,
3299.150864248012
]
},
"d7d867d4d2aa3bf7": {
"id": "d7d867d4d2aa3bf7",
"name": "bitbybit.lists.passThrough",
"customName": "pass through",
"data": {},
"inputs": {
"item": {
"connections": [
{
"node": "2e4c94de1681cf77",
"output": "result",
"data": {}
}
]
}
},
"position": [
4582.083263909205,
3218.3212895123734
]
},
"21319ce9881ffb81": {
"id": "21319ce9881ffb81",
"name": "bitbybit.babylon.scene.twoColorLinearGradientBackground",
"customName": "two color linear gradient background",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"colorFrom": "#1a1c1f",
"colorTo": "#93aacd",
"direction": "to top",
"stopFrom": 0,
"stopTo": 100
},
"inputs": {},
"position": [
480.51796789296566,
3549.770333178538
]
},
"19d3bc1328a4d1dd": {
"id": "19d3bc1328a4d1dd",
"name": "bitbybit.occt.shapes.wire.createNGonWire",
"customName": "ngon wire",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"center": [
0,
0,
0
],
"direction": [
0,
1,
0
],
"nrCorners": 6,
"radius": 4
},
"inputs": {},
"position": [
1639.6052854704194,
-150.09986787079708
]
},
"8b9f1863796ef844": {
"id": "8b9f1863796ef844",
"name": "bitbybit.vector.vectorXYZ",
"customName": "vector xyz",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": -20,
"y": -20,
"z": -20
},
"inputs": {},
"position": [
59.97413526472212,
2681.210966919593
]
}
}
}