{
  "application": "Adaptive AgroTech Part Studio",
  "version": 2,
  "units": "mm",
  "count": 93,
  "lidCount": 12,
  "preview": {
    "width": 320,
    "height": 220,
    "method": "orthographic software rasterization of actual preset mesh"
  },
  "designs": [
    {
      "id": "sensor-rounded",
      "name": "Curved sensor enclosure",
      "group": "Enclosures",
      "description": "Rounded box with a removable locating-lip lid and four floor mounting holes.",
      "tags": [
        "sensor",
        "lid",
        "rounded"
      ],
      "number": 1,
      "mode": "enclosure",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": 45,
            "y": 25,
            "diameter": 3.2,
            "axis": "z"
          },
          {
            "x": -45,
            "y": 25,
            "diameter": 3.2,
            "axis": "z"
          },
          {
            "x": -45,
            "y": -25,
            "diameter": 3.2,
            "axis": "z"
          },
          {
            "x": 45,
            "y": -25,
            "diameter": 3.2,
            "axis": "z"
          }
        ],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/sensor-rounded.png",
      "project": "examples/sensor-rounded.partstudio.json",
      "stl": "examples/stl/sensor-rounded.stl",
      "bboxXYZ": [
        140,
        90,
        45
      ],
      "bounds": {
        "min": [
          -70,
          -45,
          0
        ],
        "max": [
          70,
          45,
          45
        ]
      },
      "volumeMM3": 79357.7073,
      "surfaceAreaMM2": 61394.7685,
      "triangles": 2348,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "capsule-case",
      "name": "Capsule enclosure",
      "group": "Enclosures",
      "description": "Smooth capsule footprint for a handheld controller or sensor.",
      "tags": [
        "handheld",
        "lid",
        "capsule"
      ],
      "number": 2,
      "mode": "enclosure",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 170,
        "W": 75,
        "H": 40,
        "base": 3,
        "wall": 2.4,
        "radius": 20,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "capsule",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/capsule-case.png",
      "project": "examples/capsule-case.partstudio.json",
      "stl": "examples/stl/capsule-case.stl",
      "bboxXYZ": [
        170,
        75,
        40
      ],
      "bounds": {
        "min": [
          -85,
          -37.5,
          0
        ],
        "max": [
          85,
          37.5,
          40
        ]
      },
      "volumeMM3": 71740.6349,
      "surfaceAreaMM2": 55290.739,
      "triangles": 780,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "freeform-case",
      "name": "Freeform housing",
      "group": "Enclosures",
      "description": "A smoothed editable outline for an asymmetric electronics housing.",
      "tags": [
        "custom sketch",
        "organic",
        "lid"
      ],
      "number": 3,
      "mode": "enclosure",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 35,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "custom",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 2,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/freeform-case.png",
      "project": "examples/freeform-case.partstudio.json",
      "stl": "examples/stl/freeform-case.stl",
      "bboxXYZ": [
        140,
        90,
        35
      ],
      "bounds": {
        "min": [
          -70,
          -45,
          0
        ],
        "max": [
          70,
          45,
          35
        ]
      },
      "volumeMM3": 59993.1915,
      "surfaceAreaMM2": 45881.6067,
      "triangles": 188,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "pcb-boss-case",
      "name": "PCB enclosure with bosses",
      "group": "Enclosures",
      "description": "Four raised board supports with blind pilot holes; measure your board before setting spacing.",
      "tags": [
        "electronics",
        "bosses",
        "blind holes"
      ],
      "number": 4,
      "mode": "enclosure",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [
          {
            "name": "PCB support bosses",
            "enabled": true,
            "scope": "body",
            "operation": "add",
            "shape": "cylinder",
            "x": -48,
            "y": -25,
            "z": 2.95,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 9,
            "d": 9,
            "topD": 6,
            "nx": 2,
            "ny": 2,
            "dx": 96,
            "dy": 50
          },
          {
            "name": "Blind screw pilots",
            "enabled": true,
            "scope": "body",
            "operation": "cut",
            "shape": "cylinder",
            "x": -48,
            "y": -25,
            "z": 5,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 8,
            "d": 2.8,
            "topD": 6,
            "nx": 2,
            "ny": 2,
            "dx": 96,
            "dy": 50
          }
        ],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/pcb-boss-case.png",
      "project": "examples/pcb-boss-case.partstudio.json",
      "stl": "examples/stl/pcb-boss-case.stl",
      "bboxXYZ": [
        140,
        90,
        45
      ],
      "bounds": {
        "min": [
          -70,
          -45,
          0
        ],
        "max": [
          70,
          45,
          45
        ]
      },
      "volumeMM3": 81558.9632,
      "surfaceAreaMM2": 62594.9852,
      "triangles": 3868,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "vented-case",
      "name": "Vented electronics case",
      "group": "Enclosures",
      "description": "A rounded body and matching lid with an editable eight-slot ventilation array.",
      "tags": [
        "vents",
        "array",
        "lid"
      ],
      "number": 5,
      "mode": "enclosure",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 150,
        "W": 100,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [
          {
            "name": "Lid ventilation slots",
            "enabled": true,
            "scope": "lid",
            "operation": "cut",
            "shape": "box",
            "x": 0,
            "y": -28,
            "z": -0.1,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 65,
            "W": 3,
            "H": 3.4,
            "d": 10,
            "topD": 6,
            "nx": 1,
            "ny": 8,
            "dx": 0,
            "dy": 8
          }
        ],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/vented-case.png",
      "project": "examples/vented-case.partstudio.json",
      "stl": "examples/stl/vented-case.stl",
      "bboxXYZ": [
        150,
        100,
        45
      ],
      "bounds": {
        "min": [
          -75,
          -50,
          0
        ],
        "max": [
          75,
          50,
          45
        ]
      },
      "volumeMM3": 90686.1481,
      "surfaceAreaMM2": 69618.4468,
      "triangles": 796,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "sideport-case",
      "name": "Connector port enclosure",
      "group": "Enclosures",
      "description": "Two finite-depth apertures in one wall, plus internal board supports.",
      "tags": [
        "ports",
        "pockets",
        "electronics"
      ],
      "number": 6,
      "mode": "enclosure",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [
          {
            "name": "PCB support bosses",
            "enabled": true,
            "scope": "body",
            "operation": "add",
            "shape": "cylinder",
            "x": -48,
            "y": -25,
            "z": 2.95,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 9,
            "d": 9,
            "topD": 6,
            "nx": 2,
            "ny": 2,
            "dx": 96,
            "dy": 50
          },
          {
            "name": "Blind screw pilots",
            "enabled": true,
            "scope": "body",
            "operation": "cut",
            "shape": "cylinder",
            "x": -48,
            "y": -25,
            "z": 5,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 8,
            "d": 2.8,
            "topD": 6,
            "nx": 2,
            "ny": 2,
            "dx": 96,
            "dy": 50
          },
          {
            "name": "Rectangular cable port",
            "enabled": true,
            "scope": "body",
            "operation": "cut",
            "shape": "box",
            "x": 69,
            "y": -13,
            "z": 13,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 8,
            "W": 20,
            "H": 13,
            "d": 10,
            "topD": 6,
            "nx": 1,
            "ny": 1,
            "dx": 0,
            "dy": 0
          },
          {
            "name": "Round cable port",
            "enabled": true,
            "scope": "body",
            "operation": "cut",
            "shape": "cylinder",
            "x": 66,
            "y": 23,
            "z": 24,
            "rx": 0,
            "ry": 90,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 10,
            "d": 12,
            "topD": 6,
            "nx": 1,
            "ny": 1,
            "dx": 0,
            "dy": 0
          }
        ],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/sideport-case.png",
      "project": "examples/sideport-case.partstudio.json",
      "stl": "examples/stl/sideport-case.stl",
      "bboxXYZ": [
        140,
        90,
        45
      ],
      "bounds": {
        "min": [
          -70,
          -45,
          0
        ],
        "max": [
          70,
          45,
          45
        ]
      },
      "volumeMM3": 80663.6674,
      "surfaceAreaMM2": 62097.8488,
      "triangles": 4292,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "divider-case",
      "name": "Divided instrument case",
      "group": "Enclosures",
      "description": "A full-height central divider separates two compartments in one enclosure.",
      "tags": [
        "partition",
        "electronics",
        "lid"
      ],
      "number": 7,
      "mode": "enclosure",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 150,
        "W": 100,
        "H": 42,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [
          {
            "name": "Internal divider",
            "enabled": true,
            "scope": "body",
            "operation": "add",
            "shape": "box",
            "x": 0,
            "y": 0,
            "z": 2.95,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 2.8,
            "W": 95.5,
            "H": 33,
            "d": 10,
            "topD": 6,
            "nx": 1,
            "ny": 1,
            "dx": 0,
            "dy": 0
          }
        ],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/divider-case.png",
      "project": "examples/divider-case.partstudio.json",
      "stl": "examples/stl/divider-case.stl",
      "bboxXYZ": [
        150,
        100,
        42
      ],
      "bounds": {
        "min": [
          -75,
          -50,
          0
        ],
        "max": [
          75,
          50,
          42
        ]
      },
      "volumeMM3": 96146.2502,
      "surfaceAreaMM2": 72938.3985,
      "triangles": 812,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "ribbed-case",
      "name": "Ribbed protective case",
      "group": "Enclosures",
      "description": "Parallel reinforcing ribs joined to the floor of a rounded enclosure.",
      "tags": [
        "ribs",
        "array",
        "floor"
      ],
      "number": 8,
      "mode": "enclosure",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 150,
        "W": 90,
        "H": 38,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [
          {
            "name": "Floor ribs",
            "enabled": true,
            "scope": "body",
            "operation": "add",
            "shape": "box",
            "x": 0,
            "y": -24,
            "z": 2.95,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 100,
            "W": 2.8,
            "H": 8,
            "d": 10,
            "topD": 6,
            "nx": 1,
            "ny": 4,
            "dx": 0,
            "dy": 16
          }
        ],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/ribbed-case.png",
      "project": "examples/ribbed-case.partstudio.json",
      "stl": "examples/stl/ribbed-case.stl",
      "bboxXYZ": [
        150,
        90,
        38
      ],
      "bounds": {
        "min": [
          -75,
          -45,
          0
        ],
        "max": [
          75,
          45,
          38
        ]
      },
      "volumeMM3": 85656.3648,
      "surfaceAreaMM2": 65235.0407,
      "triangles": 860,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "elliptic-case",
      "name": "Elliptical instrument case",
      "group": "Enclosures",
      "description": "An oval shell and locating lid for circular sensors or hand-sized instruments.",
      "tags": [
        "oval",
        "lid",
        "sensor"
      ],
      "number": 9,
      "mode": "enclosure",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 130,
        "W": 95,
        "H": 35,
        "base": 3,
        "wall": 2.6,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "ellipse",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/elliptic-case.png",
      "project": "examples/elliptic-case.partstudio.json",
      "stl": "examples/stl/elliptic-case.stl",
      "bboxXYZ": [
        130,
        95,
        35
      ],
      "bounds": {
        "min": [
          -65,
          -47.5,
          0
        ],
        "max": [
          65,
          47.5,
          35
        ]
      },
      "volumeMM3": 57976.5442,
      "surfaceAreaMM2": 42681.4799,
      "triangles": 764,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "hex-case",
      "name": "Hexagonal electronics pod",
      "group": "Enclosures",
      "description": "Six-sided enclosure with a matching lid and a central floor opening.",
      "tags": [
        "polygon",
        "lid",
        "sensor"
      ],
      "number": 10,
      "mode": "enclosure",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 115,
        "W": 100,
        "H": 42,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": 0,
            "y": 0,
            "diameter": 12,
            "axis": "z"
          }
        ],
        "cutouts": [],
        "features": [],
        "outline": "polygon",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/hex-case.png",
      "project": "examples/hex-case.partstudio.json",
      "stl": "examples/stl/hex-case.stl",
      "bboxXYZ": [
        115,
        100,
        42
      ],
      "bounds": {
        "min": [
          -57.5,
          -50,
          0
        ],
        "max": [
          57.5,
          50,
          42
        ]
      },
      "volumeMM3": 57586.2339,
      "surfaceAreaMM2": 44898.0098,
      "triangles": 432,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "robot-electronics",
      "name": "Robot electronics body",
      "group": "Robot bodywork",
      "description": "A chamfer-nose robot footprint with an open electronics cavity and matching lid.",
      "tags": [
        "robot",
        "chassis",
        "lid"
      ],
      "number": 11,
      "mode": "enclosure",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 220,
        "W": 140,
        "H": 55,
        "base": 4,
        "wall": 3,
        "radius": 12,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "robot",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-electronics.png",
      "project": "examples/robot-electronics.partstudio.json",
      "stl": "examples/stl/robot-electronics.stl",
      "bboxXYZ": [
        220,
        140,
        55
      ],
      "bounds": {
        "min": [
          -110,
          -70,
          0
        ],
        "max": [
          110,
          70,
          55
        ]
      },
      "volumeMM3": 214334.5779,
      "surfaceAreaMM2": 126321.414,
      "triangles": 828,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "robot-chassis",
      "name": "Robot chassis plate",
      "group": "Robot bodywork",
      "description": "A flat robot-nose chassis with four mounting holes; add your own fixtures.",
      "tags": [
        "chassis",
        "plate",
        "holes"
      ],
      "number": 12,
      "mode": "extrude",
      "params": {
        "mode": "extrude",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 200,
        "W": 130,
        "H": 6,
        "base": 3,
        "wall": 2.4,
        "radius": 10,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": 65,
            "y": 35,
            "diameter": 4.2,
            "axis": "z"
          },
          {
            "x": -65,
            "y": 35,
            "diameter": 4.2,
            "axis": "z"
          },
          {
            "x": -65,
            "y": -35,
            "diameter": 4.2,
            "axis": "z"
          },
          {
            "x": 65,
            "y": -35,
            "diameter": 4.2,
            "axis": "z"
          }
        ],
        "cutouts": [],
        "features": [],
        "outline": "robot",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-chassis.png",
      "project": "examples/robot-chassis.partstudio.json",
      "stl": "examples/stl/robot-chassis.stl",
      "bboxXYZ": [
        200,
        130,
        6
      ],
      "bounds": {
        "min": [
          -100,
          -65,
          0
        ],
        "max": [
          100,
          65,
          6
        ]
      },
      "volumeMM3": 145594.4031,
      "surfaceAreaMM2": 52469.2296,
      "triangles": 1964,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "battery-tray",
      "name": "Battery tray",
      "group": "Robot bodywork",
      "description": "Low open tray with two floor strap slots for a custom battery pack.",
      "tags": [
        "battery",
        "straps",
        "tray"
      ],
      "number": 13,
      "mode": "enclosure",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 155,
        "W": 80,
        "H": 28,
        "base": 4,
        "wall": 3,
        "radius": 10,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [
          {
            "shape": "rect",
            "x": -48,
            "y": 0,
            "w": 5,
            "h": 38,
            "r": 2.5,
            "axis": "z"
          },
          {
            "shape": "rect",
            "x": 48,
            "y": 0,
            "w": 5,
            "h": 38,
            "r": 2.5,
            "axis": "z"
          }
        ],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/battery-tray.png",
      "project": "examples/battery-tray.partstudio.json",
      "stl": "examples/stl/battery-tray.stl",
      "bboxXYZ": [
        155,
        80,
        28
      ],
      "bounds": {
        "min": [
          -77.5,
          -40,
          0
        ],
        "max": [
          77.5,
          40,
          28
        ]
      },
      "volumeMM3": 79703.0398,
      "surfaceAreaMM2": 47637.1549,
      "triangles": 1588,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "taper-body",
      "name": "Tapered body blank",
      "group": "Robot bodywork",
      "description": "A solid rounded blank with a smaller top, ready for pockets and mounting features.",
      "tags": [
        "taper",
        "fairing",
        "solid"
      ],
      "number": 14,
      "mode": "extrude",
      "params": {
        "mode": "extrude",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 100,
        "H": 50,
        "base": 3,
        "wall": 2.4,
        "radius": 22,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 0.7,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/taper-body.png",
      "project": "examples/taper-body.partstudio.json",
      "stl": "examples/stl/taper-body.stl",
      "bboxXYZ": [
        140,
        100,
        50
      ],
      "bounds": {
        "min": [
          -70,
          -50,
          0
        ],
        "max": [
          70,
          50,
          50
        ]
      },
      "volumeMM3": 495795.7607,
      "surfaceAreaMM2": 40302.2933,
      "triangles": 396,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "wheel-guard",
      "name": "Curved wheel guard",
      "group": "Robot bodywork",
      "description": "A cylindrical fender segment with adjustable radius, width and coverage angle.",
      "tags": [
        "fender",
        "curved shell",
        "wheel"
      ],
      "number": 15,
      "mode": "panel",
      "params": {
        "mode": "panel",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 65,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 3,
        "radius": 65,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 140,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/wheel-guard.png",
      "project": "examples/wheel-guard.partstudio.json",
      "stl": "examples/stl/wheel-guard.stl",
      "bboxXYZ": [
        122.16,
        65,
        43.7948
      ],
      "bounds": {
        "min": [
          -61.08002035319805,
          -32.5,
          0
        ],
        "max": [
          61.08002035319805,
          32.5,
          43.7947511151433
        ]
      },
      "volumeMM3": 30235.3096,
      "surfaceAreaMM2": 21487.6126,
      "triangles": 308,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Curved panels can need supports. Check orientation and overhangs in your slicer."
      ]
    },
    {
      "id": "broad-fender",
      "name": "Wide wheel fender",
      "group": "Robot bodywork",
      "description": "A broad half-arch shell with four mounting holes through its crown.",
      "tags": [
        "fender",
        "arch",
        "mounting"
      ],
      "number": 16,
      "mode": "panel",
      "params": {
        "mode": "panel",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 95,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 3.2,
        "radius": 85,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": 22,
            "y": 30,
            "diameter": 4.2,
            "axis": "z"
          },
          {
            "x": -22,
            "y": 30,
            "diameter": 4.2,
            "axis": "z"
          },
          {
            "x": -22,
            "y": -30,
            "diameter": 4.2,
            "axis": "z"
          },
          {
            "x": 22,
            "y": -30,
            "diameter": 4.2,
            "axis": "z"
          }
        ],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 180,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/broad-fender.png",
      "project": "examples/broad-fender.partstudio.json",
      "stl": "examples/stl/broad-fender.stl",
      "bboxXYZ": [
        170,
        95,
        85
      ],
      "bounds": {
        "min": [
          -85,
          -47.5,
          0
        ],
        "max": [
          85,
          47.5,
          85
        ]
      },
      "volumeMM3": 79409.9546,
      "surfaceAreaMM2": 52116.4995,
      "triangles": 1972,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Curved panels can need supports. Check orientation and overhangs in your slicer."
      ]
    },
    {
      "id": "camera-hood",
      "name": "Camera hood shell",
      "group": "Robot bodywork",
      "description": "A short, nearly closed cylindrical shield with an open underside.",
      "tags": [
        "camera",
        "shade",
        "shell"
      ],
      "number": 17,
      "mode": "panel",
      "params": {
        "mode": "panel",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 65,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 32,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 270,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/camera-hood.png",
      "project": "examples/camera-hood.partstudio.json",
      "stl": "examples/stl/camera-hood.stl",
      "bboxXYZ": [
        64,
        65,
        54.6274
      ],
      "bounds": {
        "min": [
          -32,
          -32.5,
          0
        ],
        "max": [
          32,
          32.5,
          54.627416998147964
        ]
      },
      "volumeMM3": 22625.9248,
      "surfaceAreaMM2": 19873.2202,
      "triangles": 580,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Curved panels can need supports. Check orientation and overhangs in your slicer."
      ]
    },
    {
      "id": "sensor-deck",
      "name": "Raised sensor deck",
      "group": "Robot bodywork",
      "description": "A robot-nose deck with four raised mounting bosses and through bores.",
      "tags": [
        "deck",
        "bosses",
        "sensor"
      ],
      "number": 18,
      "mode": "extrude",
      "params": {
        "mode": "extrude",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 150,
        "W": 100,
        "H": 5,
        "base": 3,
        "wall": 2.4,
        "radius": 8,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": 42,
            "y": 28,
            "diameter": 4.2,
            "axis": "z"
          },
          {
            "x": -42,
            "y": 28,
            "diameter": 4.2,
            "axis": "z"
          },
          {
            "x": -42,
            "y": -28,
            "diameter": 4.2,
            "axis": "z"
          },
          {
            "x": 42,
            "y": -28,
            "diameter": 4.2,
            "axis": "z"
          }
        ],
        "cutouts": [],
        "features": [
          {
            "name": "Mounting pillars",
            "enabled": true,
            "scope": "body",
            "operation": "add",
            "shape": "cylinder",
            "x": -42,
            "y": -28,
            "z": 4.95,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 14,
            "d": 13,
            "topD": 6,
            "nx": 2,
            "ny": 2,
            "dx": 84,
            "dy": 56
          }
        ],
        "outline": "robot",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/sensor-deck.png",
      "project": "examples/sensor-deck.partstudio.json",
      "stl": "examples/stl/sensor-deck.stl",
      "bboxXYZ": [
        150,
        100,
        18.95
      ],
      "bounds": {
        "min": [
          -75,
          -50,
          0
        ],
        "max": [
          75,
          50,
          18.95
        ]
      },
      "volumeMM3": 76492.5581,
      "surfaceAreaMM2": 33506.9497,
      "triangles": 3500,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "sensor-l-bracket",
      "name": "L-shaped sensor bracket",
      "group": "Mounts & brackets",
      "description": "An L bracket with paired base holes and an upright mounting hole.",
      "tags": [
        "L bracket",
        "sensor",
        "mount"
      ],
      "number": 19,
      "mode": "bracket",
      "params": {
        "mode": "bracket",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 65,
        "W": 40,
        "H": 42,
        "base": 3,
        "wall": 4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": 12,
            "y": -11,
            "diameter": 3.2,
            "axis": "z"
          },
          {
            "x": 12,
            "y": 11,
            "diameter": 3.2,
            "axis": "z"
          },
          {
            "x": 0,
            "y": 25,
            "diameter": 5,
            "axis": "x"
          }
        ],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/sensor-l-bracket.png",
      "project": "examples/sensor-l-bracket.partstudio.json",
      "stl": "examples/stl/sensor-l-bracket.stl",
      "bboxXYZ": [
        65,
        40,
        42
      ],
      "bounds": {
        "min": [
          -32.5,
          -20,
          0
        ],
        "max": [
          32.5,
          20,
          42
        ]
      },
      "volumeMM3": 16337.2224,
      "surfaceAreaMM2": 9455.8422,
      "triangles": 1192,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Mounting cuts pass through the entire part in their chosen direction. Check their placement on the base or upright."
      ]
    },
    {
      "id": "gusset-angle",
      "name": "Gusseted angle bracket",
      "group": "Mounts & brackets",
      "description": "Side gussets reinforce the junction between the mounting foot and upright.",
      "tags": [
        "gusset",
        "angle",
        "reinforced"
      ],
      "number": 20,
      "mode": "bracket",
      "params": {
        "mode": "bracket",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 70,
        "W": 45,
        "H": 50,
        "base": 3,
        "wall": 4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": 15,
            "y": -11,
            "diameter": 4.2,
            "axis": "z"
          },
          {
            "x": 15,
            "y": 11,
            "diameter": 4.2,
            "axis": "z"
          },
          {
            "x": 0,
            "y": 31,
            "diameter": 5,
            "axis": "x"
          }
        ],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 4
      },
      "preview": "assets/previews/gusset-angle.png",
      "project": "examples/gusset-angle.partstudio.json",
      "stl": "examples/stl/gusset-angle.stl",
      "bboxXYZ": [
        70,
        45,
        50
      ],
      "bounds": {
        "min": [
          -35,
          -22.5,
          0
        ],
        "max": [
          35,
          22.5,
          50
        ]
      },
      "volumeMM3": 32825.8018,
      "surfaceAreaMM2": 17616.9391,
      "triangles": 1208,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Mounting cuts pass through the entire part in their chosen direction. Check their placement on the base or upright."
      ]
    },
    {
      "id": "u-mount",
      "name": "U-shaped sensor cradle",
      "group": "Mounts & brackets",
      "description": "Two upright walls form a cradle with aligned transverse mounting holes.",
      "tags": [
        "U bracket",
        "cradle",
        "sensor"
      ],
      "number": 21,
      "mode": "bracket",
      "params": {
        "mode": "bracket",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 70,
        "W": 38,
        "H": 45,
        "base": 3,
        "wall": 4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": 0,
            "y": 28,
            "diameter": 6.2,
            "axis": "x"
          },
          {
            "x": 0,
            "y": -10,
            "diameter": 4.2,
            "axis": "z"
          },
          {
            "x": 0,
            "y": 10,
            "diameter": 4.2,
            "axis": "z"
          }
        ],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "u",
        "gusset": 0
      },
      "preview": "assets/previews/u-mount.png",
      "project": "examples/u-mount.partstudio.json",
      "stl": "examples/stl/u-mount.stl",
      "bboxXYZ": [
        70,
        38,
        45
      ],
      "bounds": {
        "min": [
          -35,
          -19,
          0
        ],
        "max": [
          35,
          19,
          45
        ]
      },
      "volumeMM3": 22751.8905,
      "surfaceAreaMM2": 13157.2791,
      "triangles": 1594,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Mounting cuts pass through the entire part in their chosen direction. Check their placement on the base or upright."
      ]
    },
    {
      "id": "slotted-angle",
      "name": "Slotted adjustment bracket",
      "group": "Mounts & brackets",
      "description": "Two base slots and one upright slot allow position adjustment.",
      "tags": [
        "adjustable",
        "slots",
        "L bracket"
      ],
      "number": 22,
      "mode": "bracket",
      "params": {
        "mode": "bracket",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 75,
        "W": 48,
        "H": 55,
        "base": 3,
        "wall": 5,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [
          {
            "shape": "rect",
            "x": 9,
            "y": -12,
            "w": 30,
            "h": 5,
            "r": 2.5,
            "axis": "z"
          },
          {
            "shape": "rect",
            "x": 9,
            "y": 12,
            "w": 30,
            "h": 5,
            "r": 2.5,
            "axis": "z"
          },
          {
            "shape": "rect",
            "x": 0,
            "y": 33,
            "w": 20,
            "h": 6,
            "r": 3,
            "axis": "x"
          }
        ],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/slotted-angle.png",
      "project": "examples/slotted-angle.partstudio.json",
      "stl": "examples/stl/slotted-angle.stl",
      "bboxXYZ": [
        75,
        48,
        55
      ],
      "bounds": {
        "min": [
          -37.5,
          -24,
          0
        ],
        "max": [
          37.5,
          24,
          55
        ]
      },
      "volumeMM3": 27992.5199,
      "surfaceAreaMM2": 13818.2905,
      "triangles": 1214,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Mounting cuts pass through the entire part in their chosen direction. Check their placement on the base or upright."
      ]
    },
    {
      "id": "motor-prototype-mount",
      "name": "Prototype motor face mount",
      "group": "Mounts & brackets",
      "description": "L-shaped mounting plate with a centre aperture and four generic face holes.",
      "tags": [
        "motor",
        "prototype",
        "mounting"
      ],
      "number": 23,
      "mode": "bracket",
      "params": {
        "mode": "bracket",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 65,
        "W": 72,
        "H": 74,
        "base": 3,
        "wall": 5,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": 0,
            "y": 39,
            "diameter": 26,
            "axis": "x"
          },
          {
            "x": -22,
            "y": 17,
            "diameter": 4.2,
            "axis": "x"
          },
          {
            "x": 22,
            "y": 17,
            "diameter": 4.2,
            "axis": "x"
          },
          {
            "x": -22,
            "y": 61,
            "diameter": 4.2,
            "axis": "x"
          },
          {
            "x": 22,
            "y": 61,
            "diameter": 4.2,
            "axis": "x"
          },
          {
            "x": 15,
            "y": -23,
            "diameter": 5.2,
            "axis": "z"
          },
          {
            "x": 15,
            "y": 23,
            "diameter": 5.2,
            "axis": "z"
          }
        ],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/motor-prototype-mount.png",
      "project": "examples/motor-prototype-mount.partstudio.json",
      "stl": "examples/stl/motor-prototype-mount.stl",
      "bboxXYZ": [
        65,
        72,
        74
      ],
      "bounds": {
        "min": [
          -32.5,
          -36,
          0
        ],
        "max": [
          32.5,
          36,
          74
        ]
      },
      "volumeMM3": 45098.1383,
      "surfaceAreaMM2": 20934.7698,
      "triangles": 2742,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Mounting cuts pass through the entire part in their chosen direction. Check their placement on the base or upright."
      ]
    },
    {
      "id": "fork-cradle",
      "name": "Tall fork cradle",
      "group": "Mounts & brackets",
      "description": "A tall narrow U support with transverse bores and mounting slots.",
      "tags": [
        "fork",
        "pivot",
        "cradle"
      ],
      "number": 24,
      "mode": "bracket",
      "params": {
        "mode": "bracket",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 50,
        "W": 30,
        "H": 70,
        "base": 3,
        "wall": 5,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": 0,
            "y": 53,
            "diameter": 8,
            "axis": "x"
          }
        ],
        "cutouts": [
          {
            "shape": "rect",
            "x": 0,
            "y": -8,
            "w": 22,
            "h": 4.5,
            "r": 2.25,
            "axis": "z"
          },
          {
            "shape": "rect",
            "x": 0,
            "y": 8,
            "w": 22,
            "h": 4.5,
            "r": 2.25,
            "axis": "z"
          }
        ],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "u",
        "gusset": 0
      },
      "preview": "assets/previews/fork-cradle.png",
      "project": "examples/fork-cradle.partstudio.json",
      "stl": "examples/stl/fork-cradle.stl",
      "bboxXYZ": [
        50,
        30,
        70
      ],
      "bounds": {
        "min": [
          -25,
          -15,
          0
        ],
        "max": [
          25,
          15,
          70
        ]
      },
      "volumeMM3": 25551.2744,
      "surfaceAreaMM2": 13063.1387,
      "triangles": 1606,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Mounting cuts pass through the entire part in their chosen direction. Check their placement on the base or upright."
      ]
    },
    {
      "id": "corner-foot",
      "name": "Corner mounting foot",
      "group": "Mounts & brackets",
      "description": "Compact low angle for fixing a cover or panel at right angles.",
      "tags": [
        "corner",
        "panel",
        "foot"
      ],
      "number": 25,
      "mode": "bracket",
      "params": {
        "mode": "bracket",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 35,
        "W": 45,
        "H": 28,
        "base": 3,
        "wall": 4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": 5,
            "y": -12,
            "diameter": 4.2,
            "axis": "z"
          },
          {
            "x": 5,
            "y": 12,
            "diameter": 4.2,
            "axis": "z"
          },
          {
            "x": -12,
            "y": 17,
            "diameter": 4.2,
            "axis": "x"
          },
          {
            "x": 12,
            "y": 17,
            "diameter": 4.2,
            "axis": "x"
          }
        ],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/corner-foot.png",
      "project": "examples/corner-foot.partstudio.json",
      "stl": "examples/stl/corner-foot.stl",
      "bboxXYZ": [
        35,
        45,
        28
      ],
      "bounds": {
        "min": [
          -17.5,
          -22.5,
          0
        ],
        "max": [
          17.5,
          22.5,
          28
        ]
      },
      "volumeMM3": 10398.4874,
      "surfaceAreaMM2": 6242.3211,
      "triangles": 1580,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Mounting cuts pass through the entire part in their chosen direction. Check their placement on the base or upright."
      ]
    },
    {
      "id": "upright-stop",
      "name": "Upright fixture stop",
      "group": "Mounts & brackets",
      "description": "Wide reinforced upright with a large central adjustment slot.",
      "tags": [
        "fixture",
        "stop",
        "gusset"
      ],
      "number": 26,
      "mode": "bracket",
      "params": {
        "mode": "bracket",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 65,
        "W": 80,
        "H": 55,
        "base": 3,
        "wall": 5,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [
          {
            "shape": "rect",
            "x": 0,
            "y": 30,
            "w": 35,
            "h": 7,
            "r": 3.5,
            "axis": "x"
          },
          {
            "shape": "rect",
            "x": 15,
            "y": -23,
            "w": 25,
            "h": 6,
            "r": 3,
            "axis": "z"
          },
          {
            "shape": "rect",
            "x": 15,
            "y": 23,
            "w": 25,
            "h": 6,
            "r": 3,
            "axis": "z"
          }
        ],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 5
      },
      "preview": "assets/previews/upright-stop.png",
      "project": "examples/upright-stop.partstudio.json",
      "stl": "examples/stl/upright-stop.stl",
      "bboxXYZ": [
        65,
        80,
        55
      ],
      "bounds": {
        "min": [
          -32.5,
          -40,
          0
        ],
        "max": [
          32.5,
          40,
          55
        ]
      },
      "volumeMM3": 58394.1753,
      "surfaceAreaMM2": 25947.2087,
      "triangles": 1232,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Mounting cuts pass through the entire part in their chosen direction. Check their placement on the base or upright."
      ]
    },
    {
      "id": "pipe-flange",
      "name": "Four-bolt tube flange",
      "group": "Flanges & couplings",
      "description": "Circular flange and raised hub with a central bore and four bolt holes.",
      "tags": [
        "flange",
        "tube",
        "bolt circle"
      ],
      "number": 27,
      "mode": "flange",
      "params": {
        "mode": "flange",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 90,
        "boreD": 26,
        "hubD": 40,
        "hubH": 20,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 68,
        "boltD": 5.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/pipe-flange.png",
      "project": "examples/pipe-flange.partstudio.json",
      "stl": "examples/stl/pipe-flange.stl",
      "bboxXYZ": [
        90,
        90,
        26
      ],
      "bounds": {
        "min": [
          -45,
          -45,
          0
        ],
        "max": [
          45,
          45,
          26
        ]
      },
      "volumeMM3": 48954.2736,
      "surfaceAreaMM2": 18207.8131,
      "triangles": 2704,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "six-bolt-flange",
      "name": "Six-bolt mounting flange",
      "group": "Flanges & couplings",
      "description": "Thin circular mounting flange with six evenly spaced holes.",
      "tags": [
        "flange",
        "plate",
        "six bolt"
      ],
      "number": 28,
      "mode": "flange",
      "params": {
        "mode": "flange",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 110,
        "boreD": 45,
        "hubD": 62,
        "hubH": 5,
        "flangeT": 7,
        "boltCount": 6,
        "boltCircle": 85,
        "boltD": 5.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/six-bolt-flange.png",
      "project": "examples/six-bolt-flange.partstudio.json",
      "stl": "examples/stl/six-bolt-flange.stl",
      "bboxXYZ": [
        110,
        110,
        12
      ],
      "bounds": {
        "min": [
          -55,
          -55,
          0
        ],
        "max": [
          55,
          55,
          12
        ]
      },
      "volumeMM3": 61597.4415,
      "surfaceAreaMM2": 21334.2857,
      "triangles": 3480,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "blind-flange",
      "name": "Solid blanking flange",
      "group": "Flanges & couplings",
      "description": "A closed circular plate with a bolt circle and no central bore.",
      "tags": [
        "blank",
        "cover",
        "bolt circle"
      ],
      "number": 29,
      "mode": "flange",
      "params": {
        "mode": "flange",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 85,
        "boreD": 0,
        "hubD": 30,
        "hubH": 0,
        "flangeT": 7,
        "boltCount": 6,
        "boltCircle": 64,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/blind-flange.png",
      "project": "examples/blind-flange.partstudio.json",
      "stl": "examples/stl/blind-flange.stl",
      "bboxXYZ": [
        85,
        85,
        7
      ],
      "bounds": {
        "min": [
          -42.5,
          -42.5,
          0
        ],
        "max": [
          42.5,
          42.5,
          7
        ]
      },
      "volumeMM3": 39111.6887,
      "surfaceAreaMM2": 13597.7602,
      "triangles": 2708,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "sensor-flange",
      "name": "Raised sensor collar",
      "group": "Flanges & couplings",
      "description": "Tall annular collar on a three-hole mounting flange.",
      "tags": [
        "collar",
        "sensor",
        "three bolt"
      ],
      "number": 30,
      "mode": "flange",
      "params": {
        "mode": "flange",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 78,
        "boreD": 32,
        "hubD": 42,
        "hubH": 32,
        "flangeT": 5,
        "boltCount": 3,
        "boltCircle": 60,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/sensor-flange.png",
      "project": "examples/sensor-flange.partstudio.json",
      "stl": "examples/stl/sensor-flange.stl",
      "bboxXYZ": [
        78,
        78,
        37
      ],
      "bounds": {
        "min": [
          -39,
          -39,
          0
        ],
        "max": [
          39,
          39,
          37
        ]
      },
      "volumeMM3": 38233.6752,
      "surfaceAreaMM2": 17222.9051,
      "triangles": 2316,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "shaft-hub",
      "name": "Shaft hub with cross bore",
      "group": "Flanges & couplings",
      "description": "Flanged hub with an axial bore and radial through hole for a prototype pin.",
      "tags": [
        "shaft",
        "hub",
        "cross hole"
      ],
      "number": 31,
      "mode": "flange",
      "params": {
        "mode": "flange",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": 0,
            "y": 18,
            "diameter": 3.2,
            "axis": "x"
          }
        ],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 56,
        "boreD": 10,
        "hubD": 26,
        "hubH": 20,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 41,
        "boltD": 3.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/shaft-hub.png",
      "project": "examples/shaft-hub.partstudio.json",
      "stl": "examples/stl/shaft-hub.stl",
      "bboxXYZ": [
        56,
        56,
        26
      ],
      "bounds": {
        "min": [
          -28,
          -28,
          0
        ],
        "max": [
          28,
          28,
          26
        ]
      },
      "volumeMM3": 23015.8619,
      "surfaceAreaMM2": 8577.8573,
      "triangles": 3560,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "counterbore-flange",
      "name": "Counterbored mounting flange",
      "group": "Flanges & couplings",
      "description": "Four bolt holes with shallow counterbores in the top flange face.",
      "tags": [
        "counterbore",
        "flange",
        "recess"
      ],
      "number": 32,
      "mode": "flange",
      "params": {
        "mode": "flange",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [
          {
            "name": "East counterbore",
            "enabled": true,
            "scope": "body",
            "operation": "cut",
            "shape": "cylinder",
            "x": 31,
            "y": 0,
            "z": 4,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 4.2,
            "d": 8,
            "topD": 6,
            "nx": 1,
            "ny": 1,
            "dx": 0,
            "dy": 0
          },
          {
            "name": "North counterbore",
            "enabled": true,
            "scope": "body",
            "operation": "cut",
            "shape": "cylinder",
            "x": 0,
            "y": 31,
            "z": 4,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 4.2,
            "d": 8,
            "topD": 6,
            "nx": 1,
            "ny": 1,
            "dx": 0,
            "dy": 0
          },
          {
            "name": "West counterbore",
            "enabled": true,
            "scope": "body",
            "operation": "cut",
            "shape": "cylinder",
            "x": -31,
            "y": 0,
            "z": 4,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 4.2,
            "d": 8,
            "topD": 6,
            "nx": 1,
            "ny": 1,
            "dx": 0,
            "dy": 0
          },
          {
            "name": "South counterbore",
            "enabled": true,
            "scope": "body",
            "operation": "cut",
            "shape": "cylinder",
            "x": 0,
            "y": -31,
            "z": 4,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 4.2,
            "d": 8,
            "topD": 6,
            "nx": 1,
            "ny": 1,
            "dx": 0,
            "dy": 0
          }
        ],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 85,
        "boreD": 22,
        "hubD": 34,
        "hubH": 13,
        "flangeT": 8,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/counterbore-flange.png",
      "project": "examples/counterbore-flange.partstudio.json",
      "stl": "examples/stl/counterbore-flange.stl",
      "bboxXYZ": [
        85,
        85,
        21
      ],
      "bounds": {
        "min": [
          -42.5,
          -42.5,
          0
        ],
        "max": [
          42.5,
          42.5,
          21
        ]
      },
      "volumeMM3": 48155.8741,
      "surfaceAreaMM2": 16058.9476,
      "triangles": 4240,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "bushing-flange",
      "name": "Flanged guide bushing",
      "group": "Flanges & couplings",
      "description": "A smooth guide sleeve with a shoulder and no bolt pattern.",
      "tags": [
        "bushing",
        "sleeve",
        "shoulder"
      ],
      "number": 33,
      "mode": "flange",
      "params": {
        "mode": "flange",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 44,
        "boreD": 14,
        "hubD": 24,
        "hubH": 30,
        "flangeT": 5,
        "boltCount": 0,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/bushing-flange.png",
      "project": "examples/bushing-flange.partstudio.json",
      "stl": "examples/stl/bushing-flange.stl",
      "bboxXYZ": [
        44,
        44,
        35
      ],
      "bounds": {
        "min": [
          -22,
          -22,
          0
        ],
        "max": [
          22,
          22,
          35
        ]
      },
      "volumeMM3": 15775.2348,
      "surfaceAreaMM2": 7222.9104,
      "triangles": 1152,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "straight-tube",
      "name": "Straight circular tube",
      "group": "Tubes & transitions",
      "description": "An open tube with editable outside diameter, radial wall and length.",
      "tags": [
        "tube",
        "sleeve",
        "straight"
      ],
      "number": 34,
      "mode": "adapter",
      "params": {
        "mode": "adapter",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 36,
        "W": 36,
        "H": 65,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/straight-tube.png",
      "project": "examples/straight-tube.partstudio.json",
      "stl": "examples/stl/straight-tube.stl",
      "bboxXYZ": [
        36,
        36,
        65
      ],
      "bounds": {
        "min": [
          -18,
          -18,
          0
        ],
        "max": [
          18,
          18,
          65
        ]
      },
      "volumeMM3": 16455.218,
      "surfaceAreaMM2": 14226.342,
      "triangles": 768,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "conical-reducer",
      "name": "Conical tube reducer",
      "group": "Tubes & transitions",
      "description": "An open concentric transition between two outside diameters.",
      "tags": [
        "reducer",
        "duct",
        "taper"
      ],
      "number": 35,
      "mode": "adapter",
      "params": {
        "mode": "adapter",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 65,
        "W": 32,
        "H": 70,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/conical-reducer.png",
      "project": "examples/conical-reducer.partstudio.json",
      "stl": "examples/stl/conical-reducer.stl",
      "bboxXYZ": [
        65,
        65,
        70
      ],
      "bounds": {
        "min": [
          -32.5,
          -32.5,
          0
        ],
        "max": [
          32.5,
          32.5,
          70
        ]
      },
      "volumeMM3": 24313.6395,
      "surfaceAreaMM2": 21521.8709,
      "triangles": 768,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "flanged-reducer",
      "name": "Flanged duct reducer",
      "group": "Tubes & transitions",
      "description": "A wide-to-narrow tube transition with a mounting flange at its base.",
      "tags": [
        "reducer",
        "flange",
        "duct"
      ],
      "number": 36,
      "mode": "adapter",
      "params": {
        "mode": "adapter",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 75,
        "W": 42,
        "H": 60,
        "base": 3,
        "wall": 3,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": 31,
            "y": 31,
            "diameter": 4.2,
            "axis": "z"
          },
          {
            "x": -31,
            "y": 31,
            "diameter": 4.2,
            "axis": "z"
          },
          {
            "x": -31,
            "y": -31,
            "diameter": 4.2,
            "axis": "z"
          },
          {
            "x": 31,
            "y": -31,
            "diameter": 4.2,
            "axis": "z"
          }
        ],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 12,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/flanged-reducer.png",
      "project": "examples/flanged-reducer.partstudio.json",
      "stl": "examples/stl/flanged-reducer.stl",
      "bboxXYZ": [
        99,
        99,
        60
      ],
      "bounds": {
        "min": [
          -49.5,
          -49.5,
          0
        ],
        "max": [
          49.5,
          49.5,
          60
        ]
      },
      "volumeMM3": 51843.1194,
      "surfaceAreaMM2": 30313.3662,
      "triangles": 2704,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "expanding-nozzle",
      "name": "Expanding outlet",
      "group": "Tubes & transitions",
      "description": "An open taper that widens toward the outlet.",
      "tags": [
        "diffuser",
        "taper",
        "tube"
      ],
      "number": 37,
      "mode": "adapter",
      "params": {
        "mode": "adapter",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 28,
        "W": 62,
        "H": 55,
        "base": 3,
        "wall": 2.2,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/expanding-nozzle.png",
      "project": "examples/expanding-nozzle.partstudio.json",
      "stl": "examples/stl/expanding-nozzle.stl",
      "bboxXYZ": [
        62,
        62,
        55
      ],
      "bounds": {
        "min": [
          -31,
          -31,
          0
        ],
        "max": [
          31,
          31,
          55
        ]
      },
      "volumeMM3": 16258.0668,
      "surfaceAreaMM2": 16068.7482,
      "triangles": 768,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "elbow-90",
      "name": "90° curved tube",
      "group": "Tubes & transitions",
      "description": "A constant-section hollow elbow with editable centreline bend radius.",
      "tags": [
        "elbow",
        "tube",
        "90 degree"
      ],
      "number": 38,
      "mode": "elbow",
      "params": {
        "mode": "elbow",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 30,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/elbow-90.png",
      "project": "examples/elbow-90.partstudio.json",
      "stl": "examples/stl/elbow-90.stl",
      "bboxXYZ": [
        38.7868,
        84.8528,
        30
      ],
      "bounds": {
        "min": [
          -19.393398282201783,
          -42.426406871192846,
          0
        ],
        "max": [
          19.39339828220178,
          42.426406871192846,
          30
        ]
      },
      "volumeMM3": 14698.5028,
      "surfaceAreaMM2": 12671.4202,
      "triangles": 37248,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Bends may require supports. Check the tube interior and print orientation in your slicer."
      ]
    },
    {
      "id": "elbow-45",
      "name": "45° curved tube",
      "group": "Tubes & transitions",
      "description": "A shallow tube bend for routing a prototype duct or protective conduit.",
      "tags": [
        "elbow",
        "conduit",
        "45 degree"
      ],
      "number": 39,
      "mode": "elbow",
      "params": {
        "mode": "elbow",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.2,
        "bendRadius": 55,
        "bendAngle": 45,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/elbow-45.png",
      "project": "examples/elbow-45.partstudio.json",
      "stl": "examples/stl/elbow-45.stl",
      "bboxXYZ": [
        27.2732,
        51.2796,
        24
      ],
      "bounds": {
        "min": [
          -13.636590051007339,
          -25.639789968461013,
          0
        ],
        "max": [
          13.636590051007339,
          25.639789968461013,
          24
        ]
      },
      "volumeMM3": 6503.7923,
      "surfaceAreaMM2": 6216.857,
      "triangles": 37248,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Bends may require supports. Check the tube interior and print orientation in your slicer."
      ]
    },
    {
      "id": "return-tube",
      "name": "180° return tube",
      "group": "Tubes & transitions",
      "description": "A U bend with open ends and a constant circular section.",
      "tags": [
        "U bend",
        "tube",
        "return"
      ],
      "number": 40,
      "mode": "elbow",
      "params": {
        "mode": "elbow",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 22,
        "tubeWall": 2.2,
        "bendRadius": 40,
        "bendAngle": 180,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/return-tube.png",
      "project": "examples/return-tube.partstudio.json",
      "stl": "examples/stl/return-tube.stl",
      "bboxXYZ": [
        51,
        102,
        22
      ],
      "bounds": {
        "min": [
          -25.5,
          -51,
          0
        ],
        "max": [
          25.5,
          51,
          22
        ]
      },
      "volumeMM3": 17181.4567,
      "surfaceAreaMM2": 15902.4198,
      "triangles": 37248,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Bends may require supports. Check the tube interior and print orientation in your slicer."
      ]
    },
    {
      "id": "cable-curve",
      "name": "Solid curved rod",
      "group": "Tubes & transitions",
      "description": "A solid circular-section arc for designing handles, stops or spacers.",
      "tags": [
        "rod",
        "handle",
        "arc"
      ],
      "number": 41,
      "mode": "elbow",
      "params": {
        "mode": "elbow",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 12,
        "tubeWall": 6,
        "bendRadius": 50,
        "bendAngle": 150,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/cable-curve.png",
      "project": "examples/cable-curve.partstudio.json",
      "stl": "examples/stl/cable-curve.stl",
      "bboxXYZ": [
        44.612,
        108.1837,
        12
      ],
      "bounds": {
        "min": [
          -22.305981007744542,
          -54.09184627218782,
          0
        ],
        "max": [
          22.30598100774455,
          54.09184627218782,
          12
        ]
      },
      "volumeMM3": 14792.0057,
      "surfaceAreaMM2": 5159.5725,
      "triangles": 18620,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Bends may require supports. Check the tube interior and print orientation in your slicer."
      ]
    },
    {
      "id": "spoked-wheel",
      "name": "Six-spoke wheel",
      "group": "Wheels & rollers",
      "description": "A simple flat wheel with a rim, radial spokes, hub and central shaft bore.",
      "tags": [
        "wheel",
        "spokes",
        "hub"
      ],
      "number": 42,
      "mode": "wheel",
      "params": {
        "mode": "wheel",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 20,
        "base": 3,
        "wall": 7,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 110,
        "boreD": 10,
        "hubD": 30,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 8,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/spoked-wheel.png",
      "project": "examples/spoked-wheel.partstudio.json",
      "stl": "examples/stl/spoked-wheel.stl",
      "bboxXYZ": [
        110,
        110,
        20
      ],
      "bounds": {
        "min": [
          -55,
          -55,
          0
        ],
        "max": [
          55,
          55,
          20
        ]
      },
      "volumeMM3": 89615.7663,
      "surfaceAreaMM2": 30488.4463,
      "triangles": 1368,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "three-spoke-wheel",
      "name": "Three-spoke lightweight wheel",
      "group": "Wheels & rollers",
      "description": "Wide spokes and an open web for a compact prototype wheel.",
      "tags": [
        "wheel",
        "three spoke",
        "open web"
      ],
      "number": 43,
      "mode": "wheel",
      "params": {
        "mode": "wheel",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 16,
        "base": 3,
        "wall": 6,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 90,
        "boreD": 8,
        "hubD": 24,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 3,
        "spokeW": 13,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/three-spoke-wheel.png",
      "project": "examples/three-spoke-wheel.partstudio.json",
      "stl": "examples/stl/three-spoke-wheel.stl",
      "bboxXYZ": [
        90,
        90,
        16
      ],
      "bounds": {
        "min": [
          -45,
          -45,
          0
        ],
        "max": [
          45,
          45,
          16
        ]
      },
      "volumeMM3": 48858.2568,
      "surfaceAreaMM2": 17593.6567,
      "triangles": 1332,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "handwheel",
      "name": "Eight-spoke handwheel",
      "group": "Wheels & rollers",
      "description": "A large thin wheel for manual adjustment or mechanism demonstrations.",
      "tags": [
        "handwheel",
        "eight spoke",
        "mechanism"
      ],
      "number": 44,
      "mode": "wheel",
      "params": {
        "mode": "wheel",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 14,
        "base": 3,
        "wall": 10,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 135,
        "boreD": 12,
        "hubD": 34,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 8,
        "spokeW": 6,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/handwheel.png",
      "project": "examples/handwheel.partstudio.json",
      "stl": "examples/stl/handwheel.stl",
      "bboxXYZ": [
        135,
        135,
        14
      ],
      "bounds": {
        "min": [
          -67.5,
          -67.5,
          0
        ],
        "max": [
          67.5,
          67.5,
          14
        ]
      },
      "volumeMM3": 93305.0134,
      "surfaceAreaMM2": 34109.1266,
      "triangles": 1504,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "solid-roller",
      "name": "Shouldered cylindrical roller",
      "group": "Wheels & rollers",
      "description": "Revolved roller with wide end shoulders and a continuous axial bore.",
      "tags": [
        "roller",
        "shoulder",
        "revolve"
      ],
      "number": 45,
      "mode": "revolve",
      "params": {
        "mode": "revolve",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            5,
            0
          ],
          [
            24,
            0
          ],
          [
            24,
            4
          ],
          [
            20,
            4
          ],
          [
            20,
            34
          ],
          [
            24,
            34
          ],
          [
            24,
            38
          ],
          [
            5,
            38
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/solid-roller.png",
      "project": "examples/solid-roller.partstudio.json",
      "stl": "examples/stl/solid-roller.stl",
      "bboxXYZ": [
        48,
        48,
        38
      ],
      "bounds": {
        "min": [
          -24,
          -24,
          0
        ],
        "max": [
          24,
          24,
          38
        ]
      },
      "volumeMM3": 49155.9455,
      "surfaceAreaMM2": 10733.6019,
      "triangles": 1536,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Profile coordinates are radius and height in millimetres; the profile is revolved through 360°."
      ]
    },
    {
      "id": "v-pulley",
      "name": "V-groove pulley prototype",
      "group": "Wheels & rollers",
      "description": "A pulley with an editable V groove; match the groove to the actual belt.",
      "tags": [
        "pulley",
        "groove",
        "prototype"
      ],
      "number": 46,
      "mode": "revolve",
      "params": {
        "mode": "revolve",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            4,
            0
          ],
          [
            24,
            0
          ],
          [
            24,
            4
          ],
          [
            17,
            9
          ],
          [
            24,
            14
          ],
          [
            24,
            18
          ],
          [
            4,
            18
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/v-pulley.png",
      "project": "examples/v-pulley.partstudio.json",
      "stl": "examples/stl/v-pulley.stl",
      "bboxXYZ": [
        48,
        48,
        18
      ],
      "bounds": {
        "min": [
          -24,
          -24,
          0
        ],
        "max": [
          24,
          24,
          18
        ]
      },
      "volumeMM3": 26883.3022,
      "surfaceAreaMM2": 7389.4063,
      "triangles": 1344,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Profile coordinates are radius and height in millimetres; the profile is revolved through 360°."
      ]
    },
    {
      "id": "spool",
      "name": "Cable spool",
      "group": "Wheels & rollers",
      "description": "A narrow core between two large flanges with an axial hole.",
      "tags": [
        "spool",
        "cable",
        "revolve"
      ],
      "number": 47,
      "mode": "revolve",
      "params": {
        "mode": "revolve",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            4,
            0
          ],
          [
            30,
            0
          ],
          [
            30,
            4
          ],
          [
            16,
            4
          ],
          [
            16,
            34
          ],
          [
            30,
            34
          ],
          [
            30,
            38
          ],
          [
            4,
            38
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/spool.png",
      "project": "examples/spool.partstudio.json",
      "stl": "examples/stl/spool.stl",
      "bboxXYZ": [
        60,
        60,
        38
      ],
      "bounds": {
        "min": [
          -30,
          -30,
          0
        ],
        "max": [
          30,
          30,
          38
        ]
      },
      "volumeMM3": 44804.8061,
      "surfaceAreaMM2": 15071.8139,
      "triangles": 1536,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Profile coordinates are radius and height in millimetres; the profile is revolved through 360°."
      ]
    },
    {
      "id": "flanged-guide-roller",
      "name": "Single-flange guide roller",
      "group": "Wheels & rollers",
      "description": "A bore-through roller with a guide flange at one end.",
      "tags": [
        "guide",
        "roller",
        "flange"
      ],
      "number": 48,
      "mode": "revolve",
      "params": {
        "mode": "revolve",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            5,
            0
          ],
          [
            28,
            0
          ],
          [
            28,
            5
          ],
          [
            19,
            5
          ],
          [
            19,
            32
          ],
          [
            5,
            32
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/flanged-guide-roller.png",
      "project": "examples/flanged-guide-roller.partstudio.json",
      "stl": "examples/stl/flanged-guide-roller.stl",
      "bboxXYZ": [
        56,
        56,
        32
      ],
      "bounds": {
        "min": [
          -28,
          -28,
          0
        ],
        "max": [
          28,
          28,
          32
        ]
      },
      "volumeMM3": 40394.0191,
      "surfaceAreaMM2": 9872.8516,
      "triangles": 1152,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Profile coordinates are radius and height in millimetres; the profile is revolved through 360°."
      ]
    },
    {
      "id": "star-knob",
      "name": "Six-lobe hand knob",
      "group": "Knobs & hardware",
      "description": "Star-profile knob with a blind central screw pilot.",
      "tags": [
        "knob",
        "star",
        "blind hole"
      ],
      "number": 49,
      "mode": "extrude",
      "params": {
        "mode": "extrude",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 52,
        "W": 52,
        "H": 16,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [
          {
            "name": "Blind screw pilot",
            "enabled": true,
            "scope": "body",
            "operation": "cut",
            "shape": "cylinder",
            "x": 0,
            "y": 0,
            "z": 4,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 13,
            "d": 5,
            "topD": 6,
            "nx": 1,
            "ny": 1,
            "dx": 0,
            "dy": 0
          }
        ],
        "outline": "star",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.76,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/star-knob.png",
      "project": "examples/star-knob.partstudio.json",
      "stl": "examples/stl/star-knob.stl",
      "bboxXYZ": [
        52,
        52,
        16
      ],
      "bounds": {
        "min": [
          -26,
          -26,
          0
        ],
        "max": [
          26,
          26,
          16
        ]
      },
      "volumeMM3": 28240.0183,
      "surfaceAreaMM2": 6500.2588,
      "triangles": 428,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "wing-knob",
      "name": "Wing grip knob",
      "group": "Knobs & hardware",
      "description": "A smooth two-wing custom outline with a centred shaft opening.",
      "tags": [
        "knob",
        "wings",
        "custom sketch"
      ],
      "number": 50,
      "mode": "extrude",
      "params": {
        "mode": "extrude",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 65,
        "W": 25,
        "H": 14,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": 0,
            "y": 0,
            "diameter": 5.2,
            "axis": "z"
          }
        ],
        "cutouts": [],
        "features": [],
        "outline": "custom",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 2,
        "points": [
          [
            -0.5,
            -0.28
          ],
          [
            -0.18,
            -0.23
          ],
          [
            0,
            -0.5
          ],
          [
            0.18,
            -0.23
          ],
          [
            0.5,
            -0.28
          ],
          [
            0.5,
            0.28
          ],
          [
            0.18,
            0.23
          ],
          [
            0,
            0.5
          ],
          [
            -0.18,
            0.23
          ],
          [
            -0.5,
            0.28
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/wing-knob.png",
      "project": "examples/wing-knob.partstudio.json",
      "stl": "examples/stl/wing-knob.stl",
      "bboxXYZ": [
        65,
        25,
        14
      ],
      "bounds": {
        "min": [
          -32.5,
          -12.5,
          0
        ],
        "max": [
          32.5,
          12.5,
          14
        ]
      },
      "volumeMM3": 14655.0993,
      "surfaceAreaMM2": 4461.5631,
      "triangles": 544,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "tapered-knob",
      "name": "Tapered control knob",
      "group": "Knobs & hardware",
      "description": "A revolved solid grip with a blind shaft recess opening from the top.",
      "tags": [
        "knob",
        "revolve",
        "shaft recess"
      ],
      "number": 51,
      "mode": "revolve",
      "params": {
        "mode": "revolve",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [
          {
            "name": "Blind shaft recess",
            "enabled": true,
            "scope": "body",
            "operation": "cut",
            "shape": "cylinder",
            "x": 0,
            "y": 0,
            "z": 8,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 18,
            "d": 6,
            "topD": 6,
            "nx": 1,
            "ny": 1,
            "dx": 0,
            "dy": 0
          }
        ],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            17,
            0
          ],
          [
            19,
            3
          ],
          [
            17,
            20
          ],
          [
            13,
            24
          ],
          [
            0,
            24
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/tapered-knob.png",
      "project": "examples/tapered-knob.partstudio.json",
      "stl": "examples/stl/tapered-knob.stl",
      "bboxXYZ": [
        38,
        38,
        24
      ],
      "bounds": {
        "min": [
          -19,
          -19,
          0
        ],
        "max": [
          19,
          19,
          24
        ]
      },
      "volumeMM3": 22754.0103,
      "surfaceAreaMM2": 4615.4628,
      "triangles": 1150,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Profile coordinates are radius and height in millimetres; the profile is revolved through 360°."
      ]
    },
    {
      "id": "rounded-foot",
      "name": "Tapered equipment foot",
      "group": "Knobs & hardware",
      "description": "A wide circular foot with a tapered upper body and central screw recess.",
      "tags": [
        "foot",
        "support",
        "revolve"
      ],
      "number": 52,
      "mode": "revolve",
      "params": {
        "mode": "revolve",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [
          {
            "name": "Top screw recess",
            "enabled": true,
            "scope": "body",
            "operation": "cut",
            "shape": "cylinder",
            "x": 0,
            "y": 0,
            "z": 6,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 14,
            "d": 8,
            "topD": 6,
            "nx": 1,
            "ny": 1,
            "dx": 0,
            "dy": 0
          },
          {
            "name": "Small through bore",
            "enabled": true,
            "scope": "body",
            "operation": "cut",
            "shape": "cylinder",
            "x": 0,
            "y": 0,
            "z": -1,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 20,
            "d": 4.2,
            "topD": 6,
            "nx": 1,
            "ny": 1,
            "dx": 0,
            "dy": 0
          }
        ],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            22,
            0
          ],
          [
            22,
            3
          ],
          [
            17,
            8
          ],
          [
            14,
            18
          ],
          [
            0,
            18
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/rounded-foot.png",
      "project": "examples/rounded-foot.partstudio.json",
      "stl": "examples/stl/rounded-foot.stl",
      "bboxXYZ": [
        44,
        44,
        18
      ],
      "bounds": {
        "min": [
          -22,
          -22,
          0
        ],
        "max": [
          22,
          22,
          18
        ]
      },
      "volumeMM3": 17439.7392,
      "surfaceAreaMM2": 4784.9025,
      "triangles": 1536,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Profile coordinates are radius and height in millimetres; the profile is revolved through 360°."
      ]
    },
    {
      "id": "spacer",
      "name": "Tubular spacer",
      "group": "Knobs & hardware",
      "description": "A straight sleeve for setting distance between two plates.",
      "tags": [
        "spacer",
        "standoff",
        "tube"
      ],
      "number": 53,
      "mode": "revolve",
      "params": {
        "mode": "revolve",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            2.6,
            0
          ],
          [
            5,
            0
          ],
          [
            5,
            18
          ],
          [
            2.6,
            18
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/spacer.png",
      "project": "examples/spacer.partstudio.json",
      "stl": "examples/stl/spacer.stl",
      "bboxXYZ": [
        10,
        10,
        18
      ],
      "bounds": {
        "min": [
          -5,
          -5,
          0
        ],
        "max": [
          5,
          5,
          18
        ]
      },
      "volumeMM3": 1030.7115,
      "surfaceAreaMM2": 973.9098,
      "triangles": 768,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Profile coordinates are radius and height in millimetres; the profile is revolved through 360°."
      ]
    },
    {
      "id": "hex-standoff",
      "name": "Hexagonal standoff",
      "group": "Knobs & hardware",
      "description": "Six-sided spacer with a straight unthreaded bore.",
      "tags": [
        "hexagon",
        "standoff",
        "unthreaded"
      ],
      "number": 54,
      "mode": "primitive",
      "params": {
        "mode": "primitive",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 12,
        "W": 12,
        "H": 24,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": 0,
            "y": 0,
            "diameter": 3.2,
            "axis": "z"
          }
        ],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "prism",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/hex-standoff.png",
      "project": "examples/hex-standoff.partstudio.json",
      "stl": "examples/stl/hex-standoff.stl",
      "bboxXYZ": [
        12,
        10.3923,
        24
      ],
      "bounds": {
        "min": [
          -6,
          -5.196152422706632,
          0
        ],
        "max": [
          6,
          5.196152422706632,
          24
        ]
      },
      "volumeMM3": 2051.8562,
      "surfaceAreaMM2": 1276.2193,
      "triangles": 408,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "recessed-washer",
      "name": "Recessed washer",
      "group": "Knobs & hardware",
      "description": "Thick washer with a shallow circular counterbore for a screw head.",
      "tags": [
        "washer",
        "counterbore",
        "recess"
      ],
      "number": 55,
      "mode": "primitive",
      "params": {
        "mode": "primitive",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 24,
        "W": 24,
        "H": 6,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": 0,
            "y": 0,
            "diameter": 5.2,
            "axis": "z"
          }
        ],
        "cutouts": [],
        "features": [
          {
            "name": "Screw head counterbore",
            "enabled": true,
            "scope": "body",
            "operation": "cut",
            "shape": "cylinder",
            "x": 0,
            "y": 0,
            "z": 3.1,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 3,
            "d": 10,
            "topD": 6,
            "nx": 1,
            "ny": 1,
            "dx": 0,
            "dy": 0
          }
        ],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "cylinder",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/recessed-washer.png",
      "project": "examples/recessed-washer.partstudio.json",
      "stl": "examples/stl/recessed-washer.stl",
      "bboxXYZ": [
        24,
        24,
        6
      ],
      "bounds": {
        "min": [
          -12,
          -12,
          0
        ],
        "max": [
          12,
          12,
          6
        ]
      },
      "volumeMM3": 2419.0075,
      "surfaceAreaMM2": 1455.7208,
      "triangles": 1152,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "drill-guide",
      "name": "Drill-guide block prototype",
      "group": "Fixtures & organizers",
      "description": "A rectangular block with five evenly spaced guide holes; use bushings where wear matters.",
      "tags": [
        "guide",
        "holes",
        "array"
      ],
      "number": 56,
      "mode": "extrude",
      "params": {
        "mode": "extrude",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 105,
        "W": 35,
        "H": 18,
        "base": 3,
        "wall": 2.4,
        "radius": 4,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [
          {
            "name": "Guide hole array",
            "enabled": true,
            "scope": "body",
            "operation": "cut",
            "shape": "cylinder",
            "x": -36,
            "y": 0,
            "z": -1,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 20,
            "d": 5,
            "topD": 6,
            "nx": 5,
            "ny": 1,
            "dx": 18,
            "dy": 0
          }
        ],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/drill-guide.png",
      "project": "examples/drill-guide.partstudio.json",
      "stl": "examples/stl/drill-guide.stl",
      "bboxXYZ": [
        105,
        35,
        18
      ],
      "bounds": {
        "min": [
          -52.5,
          -17.5,
          0
        ],
        "max": [
          52.5,
          17.5,
          18
        ]
      },
      "volumeMM3": 64136.2484,
      "surfaceAreaMM2": 13456.0228,
      "triangles": 2336,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "counterbore-plate",
      "name": "Counterbored fixture plate",
      "group": "Fixtures & organizers",
      "description": "A thick mounting plate with four recessed screw seats.",
      "tags": [
        "fixture",
        "counterbore",
        "plate"
      ],
      "number": 57,
      "mode": "extrude",
      "params": {
        "mode": "extrude",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 100,
        "W": 70,
        "H": 10,
        "base": 3,
        "wall": 2.4,
        "radius": 8,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": 35,
            "y": 20,
            "diameter": 4.2,
            "axis": "z"
          },
          {
            "x": -35,
            "y": 20,
            "diameter": 4.2,
            "axis": "z"
          },
          {
            "x": -35,
            "y": -20,
            "diameter": 4.2,
            "axis": "z"
          },
          {
            "x": 35,
            "y": -20,
            "diameter": 4.2,
            "axis": "z"
          }
        ],
        "cutouts": [],
        "features": [
          {
            "name": "Counterbore pattern",
            "enabled": true,
            "scope": "body",
            "operation": "cut",
            "shape": "cylinder",
            "x": -35,
            "y": -20,
            "z": 6,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 5,
            "d": 8,
            "topD": 6,
            "nx": 2,
            "ny": 2,
            "dx": 70,
            "dy": 40
          }
        ],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/counterbore-plate.png",
      "project": "examples/counterbore-plate.partstudio.json",
      "stl": "examples/stl/counterbore-plate.stl",
      "bboxXYZ": [
        100,
        70,
        10
      ],
      "bounds": {
        "min": [
          -50,
          -35,
          0
        ],
        "max": [
          50,
          35,
          10
        ]
      },
      "volumeMM3": 68313.2417,
      "surfaceAreaMM2": 17760.3138,
      "triangles": 3484,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "socket-tray",
      "name": "Circular pocket organizer",
      "group": "Fixtures & organizers",
      "description": "Six shallow round pockets in a solid tray, with material left below each pocket.",
      "tags": [
        "organizer",
        "blind pockets",
        "array"
      ],
      "number": 58,
      "mode": "extrude",
      "params": {
        "mode": "extrude",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 125,
        "W": 80,
        "H": 18,
        "base": 3,
        "wall": 2.4,
        "radius": 8,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [
          {
            "name": "Pocket grid",
            "enabled": true,
            "scope": "body",
            "operation": "cut",
            "shape": "cylinder",
            "x": -38,
            "y": -18,
            "z": 4,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 15,
            "d": 28,
            "topD": 6,
            "nx": 3,
            "ny": 2,
            "dx": 38,
            "dy": 36
          }
        ],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/socket-tray.png",
      "project": "examples/socket-tray.partstudio.json",
      "stl": "examples/stl/socket-tray.stl",
      "bboxXYZ": [
        125,
        80,
        18
      ],
      "bounds": {
        "min": [
          -62.5,
          -40,
          0
        ],
        "max": [
          62.5,
          40,
          18
        ]
      },
      "volumeMM3": 127322.2697,
      "surfaceAreaMM2": 34410.1612,
      "triangles": 2700,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "cable-comb",
      "name": "Cable comb",
      "group": "Fixtures & organizers",
      "description": "An upright comb with five open circular channels joined by a solid base.",
      "tags": [
        "cable",
        "comb",
        "slots"
      ],
      "number": 59,
      "mode": "extrude",
      "params": {
        "mode": "extrude",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 105,
        "W": 16,
        "H": 24,
        "base": 3,
        "wall": 2.4,
        "radius": 2,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": -38,
            "y": 22,
            "diameter": 12,
            "axis": "y"
          },
          {
            "x": -19,
            "y": 22,
            "diameter": 12,
            "axis": "y"
          },
          {
            "x": 0,
            "y": 22,
            "diameter": 12,
            "axis": "y"
          },
          {
            "x": 19,
            "y": 22,
            "diameter": 12,
            "axis": "y"
          },
          {
            "x": 38,
            "y": 22,
            "diameter": 12,
            "axis": "y"
          }
        ],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/cable-comb.png",
      "project": "examples/cable-comb.partstudio.json",
      "stl": "examples/stl/cable-comb.stl",
      "bboxXYZ": [
        105,
        16,
        24
      ],
      "bounds": {
        "min": [
          -52.5,
          -8,
          0
        ],
        "max": [
          52.5,
          8,
          24
        ]
      },
      "volumeMM3": 33833.5722,
      "surfaceAreaMM2": 9207.4213,
      "triangles": 1616,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "slotted-fixture",
      "name": "Slotted mounting plate",
      "group": "Fixtures & organizers",
      "description": "Four elongated slots provide two-axis mounting flexibility.",
      "tags": [
        "fixture",
        "slots",
        "plate"
      ],
      "number": 60,
      "mode": "extrude",
      "params": {
        "mode": "extrude",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 115,
        "W": 80,
        "H": 7,
        "base": 3,
        "wall": 2.4,
        "radius": 8,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [
          {
            "shape": "rect",
            "x": -25,
            "y": -23,
            "w": 32,
            "h": 6,
            "r": 3,
            "axis": "z"
          },
          {
            "shape": "rect",
            "x": 25,
            "y": -23,
            "w": 32,
            "h": 6,
            "r": 3,
            "axis": "z"
          },
          {
            "shape": "rect",
            "x": -25,
            "y": 23,
            "w": 32,
            "h": 6,
            "r": 3,
            "axis": "z"
          },
          {
            "shape": "rect",
            "x": 25,
            "y": 23,
            "w": 32,
            "h": 6,
            "r": 3,
            "axis": "z"
          }
        ],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/slotted-fixture.png",
      "project": "examples/slotted-fixture.partstudio.json",
      "stl": "examples/stl/slotted-fixture.stl",
      "bboxXYZ": [
        115,
        80,
        7
      ],
      "bounds": {
        "min": [
          -57.5,
          -40,
          0
        ],
        "max": [
          57.5,
          40,
          7
        ]
      },
      "volumeMM3": 58855.3126,
      "surfaceAreaMM2": 21433.2926,
      "triangles": 1980,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "ribbed-platform",
      "name": "Raised rib platform",
      "group": "Fixtures & organizers",
      "description": "Parallel raised ribs on a solid plate for spacing, support or airflow.",
      "tags": [
        "ribs",
        "array",
        "platform"
      ],
      "number": 61,
      "mode": "extrude",
      "params": {
        "mode": "extrude",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 120,
        "W": 90,
        "H": 5,
        "base": 3,
        "wall": 2.4,
        "radius": 7,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [
          {
            "name": "Raised ribs",
            "enabled": true,
            "scope": "body",
            "operation": "add",
            "shape": "box",
            "x": 0,
            "y": -30,
            "z": 4.95,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 100,
            "W": 3,
            "H": 9,
            "d": 10,
            "topD": 6,
            "nx": 1,
            "ny": 6,
            "dx": 0,
            "dy": 12
          }
        ],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/ribbed-platform.png",
      "project": "examples/ribbed-platform.partstudio.json",
      "stl": "examples/stl/ribbed-platform.stl",
      "bboxXYZ": [
        120,
        90,
        13.95
      ],
      "bounds": {
        "min": [
          -60,
          -45,
          0
        ],
        "max": [
          60,
          45,
          13.95
        ]
      },
      "volumeMM3": 69899.1408,
      "surfaceAreaMM2": 34617.7286,
      "triangles": 492,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "peg-fixture",
      "name": "Peg positioning fixture",
      "group": "Fixtures & organizers",
      "description": "A six-peg locating plate with cylindrical posts merged into its base.",
      "tags": [
        "pegs",
        "array",
        "positioning"
      ],
      "number": 62,
      "mode": "extrude",
      "params": {
        "mode": "extrude",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 110,
        "W": 70,
        "H": 6,
        "base": 3,
        "wall": 2.4,
        "radius": 8,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [
          {
            "name": "Locating peg grid",
            "enabled": true,
            "scope": "body",
            "operation": "add",
            "shape": "cylinder",
            "x": -34,
            "y": -20,
            "z": 5.95,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 18,
            "d": 10,
            "topD": 6,
            "nx": 3,
            "ny": 2,
            "dx": 34,
            "dy": 40
          }
        ],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/peg-fixture.png",
      "project": "examples/peg-fixture.partstudio.json",
      "stl": "examples/stl/peg-fixture.stl",
      "bboxXYZ": [
        110,
        70,
        23.95
      ],
      "bounds": {
        "min": [
          -55,
          -35,
          0
        ],
        "max": [
          55,
          35,
          23.95
        ]
      },
      "volumeMM3": 54322.2109,
      "surfaceAreaMM2": 20750.2673,
      "triangles": 2700,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "twisted-profile",
      "name": "Twisted profile",
      "group": "Sketch & profile studies",
      "description": "A smoothed freeform extrusion with taper and twist; edit the control points.",
      "tags": [
        "twist",
        "custom sketch",
        "taper"
      ],
      "number": 63,
      "mode": "extrude",
      "params": {
        "mode": "extrude",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 75,
        "W": 65,
        "H": 90,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "custom",
        "topScale": 0.8,
        "twist": 45,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 2,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/twisted-profile.png",
      "project": "examples/twisted-profile.partstudio.json",
      "stl": "examples/stl/twisted-profile.stl",
      "bboxXYZ": [
        75,
        65,
        90
      ],
      "bounds": {
        "min": [
          -37.5,
          -32.5,
          0
        ],
        "max": [
          37.5,
          32.5,
          90
        ]
      },
      "volumeMM3": 297856.3759,
      "surfaceAreaMM2": 25256.2616,
      "triangles": 812,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "solid-dome",
      "name": "Circular sensor dome · solid",
      "group": "Sketch & profile studies",
      "description": "A rotational solid generated from an editable radius-height polygon.",
      "tags": [
        "dome",
        "revolve",
        "solid"
      ],
      "number": 64,
      "mode": "revolve",
      "params": {
        "mode": "revolve",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/solid-dome.png",
      "project": "examples/solid-dome.partstudio.json",
      "stl": "examples/stl/solid-dome.stl",
      "bboxXYZ": [
        70,
        70,
        48
      ],
      "bounds": {
        "min": [
          -35,
          -35,
          0
        ],
        "max": [
          35,
          35,
          48
        ]
      },
      "volumeMM3": 139162.1623,
      "surfaceAreaMM2": 14443.0657,
      "triangles": 960,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Profile coordinates are radius and height in millimetres; the profile is revolved through 360°."
      ]
    },
    {
      "id": "circular-sleeve",
      "name": "Circular sleeve",
      "group": "Sketch & profile studies",
      "description": "A revolved sleeve with a thicker base collar and an open centre.",
      "tags": [
        "sleeve",
        "revolve",
        "profile"
      ],
      "number": 65,
      "mode": "revolve",
      "params": {
        "mode": "revolve",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            22,
            0
          ],
          [
            30,
            0
          ],
          [
            30,
            6
          ],
          [
            25,
            6
          ],
          [
            25,
            45
          ],
          [
            22,
            45
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/circular-sleeve.png",
      "project": "examples/circular-sleeve.partstudio.json",
      "stl": "examples/stl/circular-sleeve.stl",
      "bboxXYZ": [
        60,
        60,
        45
      ],
      "bounds": {
        "min": [
          -30,
          -30,
          0
        ],
        "max": [
          30,
          30,
          45
        ]
      },
      "volumeMM3": 25099.1049,
      "surfaceAreaMM2": 16086.9664,
      "triangles": 1152,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Profile coordinates are radius and height in millimetres; the profile is revolved through 360°."
      ]
    },
    {
      "id": "organic-plate",
      "name": "Organic mounting plate",
      "group": "Sketch & profile studies",
      "description": "An asymmetric rounded plate with an editable freeform outline and three holes.",
      "tags": [
        "organic",
        "custom sketch",
        "plate"
      ],
      "number": 66,
      "mode": "extrude",
      "params": {
        "mode": "extrude",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 120,
        "W": 90,
        "H": 6,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": -27,
            "y": -12,
            "diameter": 5.2,
            "axis": "z"
          },
          {
            "x": 24,
            "y": -9,
            "diameter": 5.2,
            "axis": "z"
          },
          {
            "x": 18,
            "y": 18,
            "diameter": 5.2,
            "axis": "z"
          }
        ],
        "cutouts": [],
        "features": [],
        "outline": "custom",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 3,
        "points": [
          [
            -0.5,
            -0.35
          ],
          [
            -0.2,
            -0.5
          ],
          [
            0.25,
            -0.42
          ],
          [
            0.5,
            -0.1
          ],
          [
            0.3,
            0.5
          ],
          [
            -0.12,
            0.2
          ],
          [
            -0.5,
            0.4
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/organic-plate.png",
      "project": "examples/organic-plate.partstudio.json",
      "stl": "examples/stl/organic-plate.stl",
      "bboxXYZ": [
        120,
        90,
        6
      ],
      "bounds": {
        "min": [
          -60,
          -45,
          0
        ],
        "max": [
          60,
          45,
          6
        ]
      },
      "volumeMM3": 51065.1174,
      "surfaceAreaMM2": 19431.3343,
      "triangles": 1384,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "star-profile",
      "name": "Twelve-lobe profile blank",
      "group": "Sketch & profile studies",
      "description": "A radial lobed extrusion for grips or shape studies; it is not a meshing gear tooth profile.",
      "tags": [
        "lobes",
        "star",
        "profile"
      ],
      "number": 67,
      "mode": "extrude",
      "params": {
        "mode": "extrude",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 75,
        "W": 75,
        "H": 14,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": 0,
            "y": 0,
            "diameter": 10,
            "axis": "z"
          }
        ],
        "cutouts": [],
        "features": [],
        "outline": "star",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 12,
        "starRatio": 0.8,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/star-profile.png",
      "project": "examples/star-profile.partstudio.json",
      "stl": "examples/stl/star-profile.stl",
      "bboxXYZ": [
        75,
        75,
        14
      ],
      "bounds": {
        "min": [
          -37.5,
          -37.5,
          0
        ],
        "max": [
          37.5,
          37.5,
          14
        ]
      },
      "volumeMM3": 47818.027,
      "surfaceAreaMM2": 11144.6213,
      "triangles": 480,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "basic-box",
      "name": "Rectangular solid",
      "group": "Basic solids",
      "description": "A dimensioned box for starting a component from basic geometry.",
      "tags": [
        "box",
        "primitive",
        "blank"
      ],
      "number": 68,
      "mode": "primitive",
      "params": {
        "mode": "primitive",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 60,
        "W": 40,
        "H": 25,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/basic-box.png",
      "project": "examples/basic-box.partstudio.json",
      "stl": "examples/stl/basic-box.stl",
      "bboxXYZ": [
        60,
        40,
        25
      ],
      "bounds": {
        "min": [
          -30,
          -20,
          0
        ],
        "max": [
          30,
          20,
          25
        ]
      },
      "volumeMM3": 60000,
      "surfaceAreaMM2": 9800,
      "triangles": 12,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "basic-cylinder",
      "name": "Cylinder",
      "group": "Basic solids",
      "description": "A circular solid with independent diameter and height.",
      "tags": [
        "cylinder",
        "primitive",
        "blank"
      ],
      "number": 69,
      "mode": "primitive",
      "params": {
        "mode": "primitive",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 45,
        "W": 45,
        "H": 50,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "cylinder",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/basic-cylinder.png",
      "project": "examples/basic-cylinder.partstudio.json",
      "stl": "examples/stl/basic-cylinder.stl",
      "bboxXYZ": [
        45,
        45,
        50
      ],
      "bounds": {
        "min": [
          -22.5,
          -22.5,
          0
        ],
        "max": [
          22.5,
          22.5,
          50
        ]
      },
      "volumeMM3": 79464.802,
      "surfaceAreaMM2": 10245.914,
      "triangles": 380,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "basic-cone",
      "name": "Cone",
      "group": "Basic solids",
      "description": "A pointed circular cone; increase the top diameter to form a frustum.",
      "tags": [
        "cone",
        "primitive",
        "taper"
      ],
      "number": 70,
      "mode": "primitive",
      "params": {
        "mode": "primitive",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 55,
        "W": 0,
        "H": 70,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "cone",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/basic-cone.png",
      "project": "examples/basic-cone.partstudio.json",
      "stl": "examples/stl/basic-cone.stl",
      "bboxXYZ": [
        55,
        55,
        70
      ],
      "bounds": {
        "min": [
          -27.5,
          -27.5,
          0
        ],
        "max": [
          27.5,
          27.5,
          70
        ]
      },
      "volumeMM3": 55396.4505,
      "surfaceAreaMM2": 8870.0176,
      "triangles": 190,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "basic-frustum",
      "name": "Conical frustum",
      "group": "Basic solids",
      "description": "A truncated cone with separately adjustable top and bottom diameters.",
      "tags": [
        "frustum",
        "primitive",
        "taper"
      ],
      "number": 71,
      "mode": "primitive",
      "params": {
        "mode": "primitive",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 65,
        "W": 30,
        "H": 42,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "cone",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/basic-frustum.png",
      "project": "examples/basic-frustum.partstudio.json",
      "stl": "examples/stl/basic-frustum.stl",
      "bboxXYZ": [
        65,
        65,
        42
      ],
      "bounds": {
        "min": [
          -32.5,
          -32.5,
          0
        ],
        "max": [
          32.5,
          32.5,
          42
        ]
      },
      "volumeMM3": 77738.1594,
      "surfaceAreaMM2": 10810.3102,
      "triangles": 380,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "basic-ellipsoid",
      "name": "Ellipsoid",
      "group": "Basic solids",
      "description": "A smooth solid scaled independently along X, Y and Z.",
      "tags": [
        "ellipsoid",
        "sphere",
        "primitive"
      ],
      "number": 72,
      "mode": "primitive",
      "params": {
        "mode": "primitive",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 75,
        "W": 50,
        "H": 40,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "ellipsoid",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/basic-ellipsoid.png",
      "project": "examples/basic-ellipsoid.partstudio.json",
      "stl": "examples/stl/basic-ellipsoid.stl",
      "bboxXYZ": [
        75,
        50,
        40
      ],
      "bounds": {
        "min": [
          -37.5,
          -25,
          0
        ],
        "max": [
          37.5,
          25,
          40
        ]
      },
      "volumeMM3": 78342.2938,
      "surfaceAreaMM2": 9319.1575,
      "triangles": 4608,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "basic-torus",
      "name": "Torus ring",
      "group": "Basic solids",
      "description": "A circular ring with independent major and minor radii.",
      "tags": [
        "torus",
        "ring",
        "primitive"
      ],
      "number": 73,
      "mode": "primitive",
      "params": {
        "mode": "primitive",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "torus",
        "majorRadius": 30,
        "minorRadius": 7,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/basic-torus.png",
      "project": "examples/basic-torus.partstudio.json",
      "stl": "examples/stl/basic-torus.stl",
      "bboxXYZ": [
        74,
        74,
        14
      ],
      "bounds": {
        "min": [
          -37,
          -37,
          0
        ],
        "max": [
          37,
          37,
          14
        ]
      },
      "volumeMM3": 28975.2279,
      "surfaceAreaMM2": 8285.2902,
      "triangles": 18432,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "basic-prism",
      "name": "Triangular prism",
      "group": "Basic solids",
      "description": "A regular polygonal prism; adjust side count to create other prisms.",
      "tags": [
        "polygon",
        "prism",
        "primitive"
      ],
      "number": 74,
      "mode": "primitive",
      "params": {
        "mode": "primitive",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 65,
        "W": 65,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 3,
        "starRatio": 0.65,
        "primitive": "prism",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/basic-prism.png",
      "project": "examples/basic-prism.partstudio.json",
      "stl": "examples/stl/basic-prism.stl",
      "bboxXYZ": [
        48.75,
        56.2917,
        45
      ],
      "bounds": {
        "min": [
          -16.249999999999996,
          -28.14582562299426,
          0
        ],
        "max": [
          32.5,
          28.14582562299426,
          45
        ]
      },
      "volumeMM3": 61744.905,
      "surfaceAreaMM2": 10343.5909,
      "triangles": 8,
      "components": 1,
      "watertight": true,
      "warnings": []
    },
    {
      "id": "robot-ribbed-tub",
      "name": "Ribbed open tub",
      "group": "Modular robot kit",
      "description": "Protected open body with floor ribs, deep walls and four reinforced side interfaces.",
      "tags": [
        "robot",
        "modular",
        "4 wheels",
        "chassis",
        "ribbed-tub"
      ],
      "number": 75,
      "mode": "robot",
      "params": {
        "mode": "robot",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 300,
        "W": 180,
        "H": 55,
        "base": 6,
        "wall": 5,
        "radius": 16,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-ribbed-tub.png",
      "project": "examples/robot-ribbed-tub.partstudio.json",
      "stl": "examples/stl/robot-ribbed-tub.stl",
      "bboxXYZ": [
        300,
        180,
        55
      ],
      "bounds": {
        "min": [
          -150,
          -90,
          0
        ],
        "max": [
          150,
          90,
          55
        ]
      },
      "volumeMM3": 743532.0585,
      "surfaceAreaMM2": 231387.3246,
      "triangles": 6804,
      "components": 1,
      "watertight": true,
      "warnings": [
        "No load rating is implied. Material, layer orientation, fasteners, axle torque and impact loading require engineering verification.",
        "Body exceeds 250 mm in at least one direction. Confirm your print bed or choose the split-frame half exports.",
        "Side adapter holes: pitch 28 mm, diameter 5.4 mm, Z 27.5 mm. Wheel axle is 36 mm below this fixing datum.",
        "Driven hub wheels require a metal anti-rotation/torque interface designed for their actual axle flats and stall torque."
      ]
    },
    {
      "id": "robot-ladder",
      "name": "Twin-rail ladder frame",
      "group": "Modular robot kit",
      "description": "Two deep rails and transverse beams leave the center open for interchangeable modules.",
      "tags": [
        "robot",
        "modular",
        "4 wheels",
        "chassis",
        "ladder"
      ],
      "number": 76,
      "mode": "robot",
      "params": {
        "mode": "robot",
        "robotPart": "chassis",
        "robotShape": "ladder",
        "L": 300,
        "W": 180,
        "H": 55,
        "base": 6,
        "wall": 5,
        "radius": 16,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-ladder.png",
      "project": "examples/robot-ladder.partstudio.json",
      "stl": "examples/stl/robot-ladder.stl",
      "bboxXYZ": [
        300,
        180,
        55
      ],
      "bounds": {
        "min": [
          -150,
          -90,
          0
        ],
        "max": [
          150,
          90,
          55
        ]
      },
      "volumeMM3": 863852.2082,
      "surfaceAreaMM2": 139620.1927,
      "triangles": 6690,
      "components": 1,
      "watertight": true,
      "warnings": [
        "No load rating is implied. Material, layer orientation, fasteners, axle torque and impact loading require engineering verification.",
        "Body exceeds 250 mm in at least one direction. Confirm your print bed or choose the split-frame half exports.",
        "Side adapter holes: pitch 28 mm, diameter 5.4 mm, Z 27.5 mm. Wheel axle is 36 mm below this fixing datum.",
        "Driven hub wheels require a metal anti-rotation/torque interface designed for their actual axle flats and stall torque."
      ]
    },
    {
      "id": "robot-spine",
      "name": "H-frame with central spine",
      "group": "Modular robot kit",
      "description": "One wide central beam links two transverse axle beams and four side mounting pads.",
      "tags": [
        "robot",
        "modular",
        "4 wheels",
        "chassis",
        "spine"
      ],
      "number": 77,
      "mode": "robot",
      "params": {
        "mode": "robot",
        "robotPart": "chassis",
        "robotShape": "spine",
        "L": 300,
        "W": 180,
        "H": 55,
        "base": 6,
        "wall": 5,
        "radius": 16,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-spine.png",
      "project": "examples/robot-spine.partstudio.json",
      "stl": "examples/stl/robot-spine.stl",
      "bboxXYZ": [
        300,
        180,
        55
      ],
      "bounds": {
        "min": [
          -150,
          -90,
          0
        ],
        "max": [
          150,
          90,
          55
        ]
      },
      "volumeMM3": 929558.5873,
      "surfaceAreaMM2": 136482.1121,
      "triangles": 8076,
      "components": 1,
      "watertight": true,
      "warnings": [
        "No load rating is implied. Material, layer orientation, fasteners, axle torque and impact loading require engineering verification.",
        "Body exceeds 250 mm in at least one direction. Confirm your print bed or choose the split-frame half exports.",
        "Side adapter holes: pitch 28 mm, diameter 5.4 mm, Z 27.5 mm. Wheel axle is 36 mm below this fixing datum.",
        "Driven hub wheels require a metal anti-rotation/torque interface designed for their actual axle flats and stall torque."
      ]
    },
    {
      "id": "robot-chamfered",
      "name": "Chamfered utility deck",
      "group": "Modular robot kit",
      "description": "A low chamfered outline with edge rails, an open center deck and four tall wheel pads.",
      "tags": [
        "robot",
        "modular",
        "4 wheels",
        "chassis",
        "chamfered"
      ],
      "number": 78,
      "mode": "robot",
      "params": {
        "mode": "robot",
        "robotPart": "chassis",
        "robotShape": "chamfered",
        "L": 300,
        "W": 180,
        "H": 55,
        "base": 6,
        "wall": 5,
        "radius": 16,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-chamfered.png",
      "project": "examples/robot-chamfered.partstudio.json",
      "stl": "examples/stl/robot-chamfered.stl",
      "bboxXYZ": [
        300,
        180,
        55
      ],
      "bounds": {
        "min": [
          -150,
          -90,
          0
        ],
        "max": [
          150,
          90,
          55
        ]
      },
      "volumeMM3": 601846.7565,
      "surfaceAreaMM2": 176885.6437,
      "triangles": 6514,
      "components": 1,
      "watertight": true,
      "warnings": [
        "No load rating is implied. Material, layer orientation, fasteners, axle torque and impact loading require engineering verification.",
        "Body exceeds 250 mm in at least one direction. Confirm your print bed or choose the split-frame half exports.",
        "Side adapter holes: pitch 28 mm, diameter 5.4 mm, Z 27.5 mm. Wheel axle is 36 mm below this fixing datum.",
        "Driven hub wheels require a metal anti-rotation/torque interface designed for their actual axle flats and stall torque."
      ]
    },
    {
      "id": "robot-capsule",
      "name": "Capsule body with outriggers",
      "group": "Modular robot kit",
      "description": "Rounded tub with transverse beams connecting four flat bolt-on mounting pads.",
      "tags": [
        "robot",
        "modular",
        "4 wheels",
        "chassis",
        "capsule"
      ],
      "number": 79,
      "mode": "robot",
      "params": {
        "mode": "robot",
        "robotPart": "chassis",
        "robotShape": "capsule",
        "L": 300,
        "W": 180,
        "H": 55,
        "base": 6,
        "wall": 5,
        "radius": 16,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-capsule.png",
      "project": "examples/robot-capsule.partstudio.json",
      "stl": "examples/stl/robot-capsule.stl",
      "bboxXYZ": [
        300,
        180,
        55
      ],
      "bounds": {
        "min": [
          -150,
          -90,
          0
        ],
        "max": [
          150,
          90,
          55
        ]
      },
      "volumeMM3": 874522.1002,
      "surfaceAreaMM2": 206762.9216,
      "triangles": 7680,
      "components": 1,
      "watertight": true,
      "warnings": [
        "No load rating is implied. Material, layer orientation, fasteners, axle torque and impact loading require engineering verification.",
        "Body exceeds 250 mm in at least one direction. Confirm your print bed or choose the split-frame half exports.",
        "Side adapter holes: pitch 28 mm, diameter 5.4 mm, Z 27.5 mm. Wheel axle is 36 mm below this fixing datum.",
        "Driven hub wheels require a metal anti-rotation/torque interface designed for their actual axle flats and stall torque."
      ]
    },
    {
      "id": "robot-split-frame",
      "name": "Split modular frame",
      "group": "Modular robot kit",
      "description": "Two separately printable frame halves join using two bolted splice plates.",
      "tags": [
        "robot",
        "modular",
        "4 wheels",
        "chassis",
        "split-frame"
      ],
      "number": 80,
      "mode": "robot",
      "params": {
        "mode": "robot",
        "robotPart": "chassis",
        "robotShape": "split-frame",
        "L": 300,
        "W": 180,
        "H": 55,
        "base": 6,
        "wall": 5,
        "radius": 16,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-split-frame.png",
      "project": "examples/robot-split-frame.partstudio.json",
      "stl": "examples/stl/robot-split-frame.stl",
      "bboxXYZ": [
        149.6,
        180,
        55
      ],
      "bounds": {
        "min": [
          -74.8,
          -90,
          0
        ],
        "max": [
          74.8,
          90,
          55
        ]
      },
      "volumeMM3": 445916.1968,
      "surfaceAreaMM2": 80129.7498,
      "triangles": 4924,
      "components": 1,
      "watertight": true,
      "warnings": [
        "No load rating is implied. Material, layer orientation, fasteners, axle torque and impact loading require engineering verification.",
        "This is the front half only. Export the other half and two 104 × 22 mm splice plates; assemble using eight through bolts.",
        "Body exceeds 250 mm in at least one direction. Confirm your print bed or choose the split-frame half exports.",
        "Side adapter holes: pitch 28 mm, diameter 5.4 mm, Z 27.5 mm. Wheel axle is 36 mm below this fixing datum.",
        "Driven hub wheels require a metal anti-rotation/torque interface designed for their actual axle flats and stall torque."
      ]
    },
    {
      "id": "robot-split-frame-rear",
      "name": "Split modular frame · rear half",
      "group": "Modular robot kit",
      "description": "Rear half of the split frame. Print with the front half and two splice plates.",
      "tags": [
        "robot",
        "modular",
        "4 wheels",
        "chassis",
        "split",
        "rear"
      ],
      "number": 81,
      "mode": "robot",
      "params": {
        "mode": "robot",
        "robotPart": "chassis",
        "robotShape": "split-frame",
        "L": 300,
        "W": 180,
        "H": 55,
        "base": 6,
        "wall": 5,
        "radius": 16,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "rear",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-split-frame-rear.png",
      "project": "examples/robot-split-frame-rear.partstudio.json",
      "stl": "examples/stl/robot-split-frame-rear.stl",
      "bboxXYZ": [
        149.6,
        180,
        55
      ],
      "bounds": {
        "min": [
          -74.8,
          -90,
          0
        ],
        "max": [
          74.8,
          90,
          55
        ]
      },
      "volumeMM3": 445916.1968,
      "surfaceAreaMM2": 80129.7498,
      "triangles": 4922,
      "components": 1,
      "watertight": true,
      "warnings": [
        "No load rating is implied. Material, layer orientation, fasteners, axle torque and impact loading require engineering verification.",
        "This is the rear half only. Export the other half and two 104 × 22 mm splice plates; assemble using eight through bolts.",
        "Body exceeds 250 mm in at least one direction. Confirm your print bed or choose the split-frame half exports.",
        "Side adapter holes: pitch 28 mm, diameter 5.4 mm, Z 27.5 mm. Wheel axle is 36 mm below this fixing datum.",
        "Driven hub wheels require a metal anti-rotation/torque interface designed for their actual axle flats and stall torque."
      ]
    },
    {
      "id": "robot-wheel-carrier",
      "name": "Ribbed wheel adapter",
      "group": "Modular robot kit",
      "description": "Two side-interface bolts and a generic axle bore. Use a separately engineered metal torque plate for hub motors.",
      "tags": [
        "robot",
        "modular",
        "4 wheels",
        "wheel mount",
        "flat print",
        "gussets"
      ],
      "number": 82,
      "mode": "robot",
      "params": {
        "mode": "robot",
        "robotPart": "wheel-carrier",
        "robotShape": "ribbed-tub",
        "L": 64,
        "W": 76,
        "H": 6,
        "base": 6,
        "wall": 4,
        "radius": 8,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-wheel-carrier.png",
      "project": "examples/robot-wheel-carrier.partstudio.json",
      "stl": "examples/stl/robot-wheel-carrier.stl",
      "bboxXYZ": [
        64,
        76,
        10
      ],
      "bounds": {
        "min": [
          -32,
          -38,
          0
        ],
        "max": [
          32,
          38,
          10
        ]
      },
      "volumeMM3": 31233.9693,
      "surfaceAreaMM2": 12829.1143,
      "triangles": 1960,
      "components": 1,
      "watertight": true,
      "warnings": [
        "No load rating is implied. Material, layer orientation, fasteners, axle torque and impact loading require engineering verification.",
        "Print flat. Rotate the finished adapter vertical; fixing holes are at local Y=+axleDrop/2 and axle aperture at Y=−axleDrop/2.",
        "Generic round axle aperture only. Add a separately engineered metal keyed torque plate for driven hub motors."
      ]
    },
    {
      "id": "robot-crossmember",
      "name": "Transverse crossmember",
      "group": "Modular robot kit",
      "description": "Fits the standard 162 mm top-pad span of the 180 mm chassis. Resize width together with the body.",
      "tags": [
        "robot",
        "modular",
        "4 wheels",
        "beam",
        "top interface"
      ],
      "number": 83,
      "mode": "robot",
      "params": {
        "mode": "robot",
        "robotPart": "crossmember",
        "robotShape": "ribbed-tub",
        "L": 40,
        "W": 180,
        "H": 20,
        "base": 6,
        "wall": 5,
        "radius": 5,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-crossmember.png",
      "project": "examples/robot-crossmember.partstudio.json",
      "stl": "examples/stl/robot-crossmember.stl",
      "bboxXYZ": [
        40,
        180,
        20
      ],
      "bounds": {
        "min": [
          -20,
          -90,
          0
        ],
        "max": [
          20,
          90,
          20
        ]
      },
      "volumeMM3": 141729.8535,
      "surfaceAreaMM2": 24157.2209,
      "triangles": 1692,
      "components": 1,
      "watertight": true,
      "warnings": [
        "No load rating is implied. Material, layer orientation, fasteners, axle torque and impact loading require engineering verification."
      ]
    },
    {
      "id": "robot-rail",
      "name": "Longitudinal rail",
      "group": "Modular robot kit",
      "description": "Solid deep rail with 20 mm pitch vertical bolt holes; a building block for custom frames.",
      "tags": [
        "robot",
        "modular",
        "4 wheels",
        "beam",
        "rail"
      ],
      "number": 84,
      "mode": "robot",
      "params": {
        "mode": "robot",
        "robotPart": "rail",
        "robotShape": "ribbed-tub",
        "L": 200,
        "W": 22,
        "H": 28,
        "base": 6,
        "wall": 5,
        "radius": 3,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-rail.png",
      "project": "examples/robot-rail.partstudio.json",
      "stl": "examples/stl/robot-rail.stl",
      "bboxXYZ": [
        200,
        22,
        28
      ],
      "bounds": {
        "min": [
          -100,
          -11,
          0
        ],
        "max": [
          100,
          11,
          28
        ]
      },
      "volumeMM3": 117211.3667,
      "surfaceAreaMM2": 24933.4969,
      "triangles": 3632,
      "components": 1,
      "watertight": true,
      "warnings": [
        "No load rating is implied. Material, layer orientation, fasteners, axle torque and impact loading require engineering verification."
      ]
    },
    {
      "id": "robot-splice",
      "name": "Split-frame splice plate",
      "group": "Modular robot kit",
      "description": "Print two. Four bolts per plate join the two frame halves under their side rails.",
      "tags": [
        "robot",
        "modular",
        "4 wheels",
        "joiner",
        "split",
        "splice"
      ],
      "number": 85,
      "mode": "robot",
      "params": {
        "mode": "robot",
        "robotPart": "splice",
        "robotShape": "ribbed-tub",
        "L": 104,
        "W": 22,
        "H": 6,
        "base": 6,
        "wall": 5,
        "radius": 3,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-splice.png",
      "project": "examples/robot-splice.partstudio.json",
      "stl": "examples/stl/robot-splice.stl",
      "bboxXYZ": [
        104,
        22,
        6
      ],
      "bounds": {
        "min": [
          -52,
          -11,
          0
        ],
        "max": [
          52,
          11,
          6
        ]
      },
      "volumeMM3": 13131.2973,
      "surfaceAreaMM2": 6265.0926,
      "triangles": 1692,
      "components": 1,
      "watertight": true,
      "warnings": [
        "No load rating is implied. Material, layer orientation, fasteners, axle torque and impact loading require engineering verification.",
        "Use two plates under the split-frame rails. Match plate width to railW; four bores are at X=−40,−20,+20,+40 mm."
      ]
    },
    {
      "id": "robot-deck",
      "name": "Removable top deck",
      "group": "Modular robot kit",
      "description": "Four through holes match the reinforced pads at the selected wheelbase and body width.",
      "tags": [
        "robot",
        "modular",
        "4 wheels",
        "cover",
        "deck",
        "top interface"
      ],
      "number": 86,
      "mode": "robot",
      "params": {
        "mode": "robot",
        "robotPart": "deck",
        "robotShape": "ribbed-tub",
        "L": 300,
        "W": 180,
        "H": 6,
        "base": 6,
        "wall": 5,
        "radius": 16,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-deck.png",
      "project": "examples/robot-deck.partstudio.json",
      "stl": "examples/stl/robot-deck.stl",
      "bboxXYZ": [
        300,
        180,
        6
      ],
      "bounds": {
        "min": [
          -150,
          -90,
          0
        ],
        "max": [
          150,
          90,
          6
        ]
      },
      "volumeMM3": 322474.5009,
      "surfaceAreaMM2": 113972.403,
      "triangles": 3244,
      "components": 1,
      "watertight": true,
      "warnings": [
        "No load rating is implied. Material, layer orientation, fasteners, axle torque and impact loading require engineering verification.",
        "Match this deck width and wheelbase to the chassis. The four pad bolts pass vertically into the chassis."
      ]
    },
    {
      "id": "robot-housing",
      "name": "Robot upper housing",
      "group": "Modular robot kit",
      "description": "Open-bottom upper shell with accessible lower mounting feet and nut pockets in the four roof bosses.",
      "tags": [
        "robot",
        "modular",
        "4 wheels",
        "body",
        "housing",
        "roof interface"
      ],
      "number": 87,
      "mode": "robot",
      "params": {
        "mode": "robot",
        "robotPart": "housing",
        "robotShape": "ribbed-tub",
        "L": 300,
        "W": 180,
        "H": 70,
        "base": 6,
        "wall": 3,
        "radius": 16,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-housing.png",
      "project": "examples/robot-housing.partstudio.json",
      "stl": "examples/stl/robot-housing.stl",
      "bboxXYZ": [
        300,
        180,
        70
      ],
      "bounds": {
        "min": [
          -150,
          -90,
          0
        ],
        "max": [
          150,
          90,
          70
        ]
      },
      "volumeMM3": 225427.1676,
      "surfaceAreaMM2": 146377.8211,
      "triangles": 6112,
      "components": 1,
      "watertight": true,
      "warnings": [
        "No load rating is implied. Material, layer orientation, fasteners, axle torque and impact loading require engineering verification.",
        "Open-bottom housing: its four lower feet bolt through the deck into the chassis pads. Install these bolts before fitting the roof.",
        "Roof bolt bores Ø5.4 mm; slide matching nuts into the 8.4 × 4.5 mm inward-facing pockets. Verify actual fastener fit; pockets are not threaded.",
        "Print housing with lower feet on the bed; the inward roof bosses and nut-pocket ceilings may need supports."
      ]
    },
    {
      "id": "robot-roof",
      "name": "Robot removable roof",
      "group": "Modular robot kit",
      "description": "Flat removable roof. Four corner holes match the upper housing; print separately.",
      "tags": [
        "robot",
        "modular",
        "4 wheels",
        "cover",
        "roof",
        "lid"
      ],
      "number": 88,
      "mode": "robot",
      "params": {
        "mode": "robot",
        "robotPart": "roof",
        "robotShape": "ribbed-tub",
        "L": 300,
        "W": 180,
        "H": 4,
        "base": 4,
        "wall": 3,
        "radius": 16,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-roof.png",
      "project": "examples/robot-roof.partstudio.json",
      "stl": "examples/stl/robot-roof.stl",
      "bboxXYZ": [
        300,
        180,
        4
      ],
      "bounds": {
        "min": [
          -150,
          -90,
          0
        ],
        "max": [
          150,
          90,
          4
        ]
      },
      "volumeMM3": 214734.186,
      "surfaceAreaMM2": 111367.9564,
      "triangles": 1692,
      "components": 1,
      "watertight": true,
      "warnings": [
        "No load rating is implied. Material, layer orientation, fasteners, axle torque and impact loading require engineering verification.",
        "Four roof bolt centers: X = ±136 mm, Y = ±76 mm, diameter 5.4 mm. Match the housing dimensions and inset."
      ]
    },
    {
      "id": "robot-bumper",
      "name": "Deck-mounted bumper",
      "group": "Modular robot kit",
      "description": "Two-bolt flange and reinforced upstand. Mount to an adapter or drilled deck; not a rated impact absorber.",
      "tags": [
        "robot",
        "modular",
        "4 wheels",
        "bumper",
        "flange"
      ],
      "number": 89,
      "mode": "robot",
      "params": {
        "mode": "robot",
        "robotPart": "bumper",
        "robotShape": "ribbed-tub",
        "L": 46,
        "W": 140,
        "H": 30,
        "base": 6,
        "wall": 5,
        "radius": 5,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-bumper.png",
      "project": "examples/robot-bumper.partstudio.json",
      "stl": "examples/stl/robot-bumper.stl",
      "bboxXYZ": [
        46,
        140,
        30
      ],
      "bounds": {
        "min": [
          -23,
          -70,
          0
        ],
        "max": [
          23,
          70,
          30
        ]
      },
      "volumeMM3": 59162.0915,
      "surfaceAreaMM2": 23601.7327,
      "triangles": 900,
      "components": 1,
      "watertight": true,
      "warnings": [
        "No load rating is implied. Material, layer orientation, fasteners, axle torque and impact loading require engineering verification.",
        "Requires a matching two-hole adapter or drilled deck. It is not a rated collision-energy absorber."
      ]
    },
    {
      "id": "robot-battery-cradle",
      "name": "Strapped battery cradle",
      "group": "Modular robot kit",
      "description": "Open tray with unobstructed strap slots and the central 28 mm square mounting grid.",
      "tags": [
        "robot",
        "modular",
        "4 wheels",
        "battery",
        "straps"
      ],
      "number": 90,
      "mode": "robot",
      "params": {
        "mode": "robot",
        "robotPart": "battery-cradle",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 28,
        "base": 5,
        "wall": 4,
        "radius": 9,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-battery-cradle.png",
      "project": "examples/robot-battery-cradle.partstudio.json",
      "stl": "examples/stl/robot-battery-cradle.stl",
      "bboxXYZ": [
        140,
        90,
        28
      ],
      "bounds": {
        "min": [
          -70,
          -45,
          0
        ],
        "max": [
          70,
          45,
          28
        ]
      },
      "volumeMM3": 99972.0171,
      "surfaceAreaMM2": 47380.219,
      "triangles": 2116,
      "components": 1,
      "watertight": true,
      "warnings": [
        "No load rating is implied. Material, layer orientation, fasteners, axle torque and impact loading require engineering verification.",
        "Battery dimensions, cooling, cable clearance and restraint loads must be verified. Use straps, not a friction fit alone."
      ]
    },
    {
      "id": "robot-mast-foot",
      "name": "Sensor mast foot",
      "group": "Modular robot kit",
      "description": "A four-bolt base and generic 16 mm unthreaded socket; confirm actual mast fit before printing.",
      "tags": [
        "robot",
        "modular",
        "4 wheels",
        "mast",
        "sensor",
        "socket"
      ],
      "number": 91,
      "mode": "robot",
      "params": {
        "mode": "robot",
        "robotPart": "mast-foot",
        "robotShape": "ribbed-tub",
        "L": 68,
        "W": 68,
        "H": 32,
        "base": 6,
        "wall": 4,
        "radius": 6,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 16,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-mast-foot.png",
      "project": "examples/robot-mast-foot.partstudio.json",
      "stl": "examples/stl/robot-mast-foot.stl",
      "bboxXYZ": [
        68,
        68,
        32
      ],
      "bounds": {
        "min": [
          -34,
          -34,
          0
        ],
        "max": [
          34,
          34,
          32
        ]
      },
      "volumeMM3": 33534.8199,
      "surfaceAreaMM2": 14245.2396,
      "triangles": 2488,
      "components": 1,
      "watertight": true,
      "warnings": [
        "No load rating is implied. Material, layer orientation, fasteners, axle torque and impact loading require engineering verification.",
        "Socket is unthreaded and open from the top; retain the mast with a suitable clamp or engineered fastener."
      ]
    },
    {
      "id": "robot-corner-gusset",
      "name": "Triangular corner gusset",
      "group": "Modular robot kit",
      "description": "Flat gusset with three through bolts for custom modular joints.",
      "tags": [
        "robot",
        "modular",
        "4 wheels",
        "gusset",
        "brace"
      ],
      "number": 92,
      "mode": "robot",
      "params": {
        "mode": "robot",
        "robotPart": "corner-gusset",
        "robotShape": "ribbed-tub",
        "L": 65,
        "W": 65,
        "H": 6,
        "base": 6,
        "wall": 5,
        "radius": 4,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-corner-gusset.png",
      "project": "examples/robot-corner-gusset.partstudio.json",
      "stl": "examples/stl/robot-corner-gusset.stl",
      "bboxXYZ": [
        65,
        65,
        6
      ],
      "bounds": {
        "min": [
          -32.5,
          -32.5,
          0
        ],
        "max": [
          32.5,
          32.5,
          6
        ]
      },
      "volumeMM3": 12263.0545,
      "surfaceAreaMM2": 5724.5364,
      "triangles": 1172,
      "components": 1,
      "watertight": true,
      "warnings": [
        "No load rating is implied. Material, layer orientation, fasteners, axle torque and impact loading require engineering verification."
      ]
    },
    {
      "id": "robot-cable-bridge",
      "name": "Cable bridge",
      "group": "Modular robot kit",
      "description": "Raised arch and two mounting feet with the standard 28 mm fixing pitch.",
      "tags": [
        "robot",
        "modular",
        "4 wheels",
        "cable",
        "organizer"
      ],
      "number": 93,
      "mode": "robot",
      "params": {
        "mode": "robot",
        "robotPart": "cable-bridge",
        "robotShape": "ribbed-tub",
        "L": 58,
        "W": 18,
        "H": 16,
        "base": 4,
        "wall": 4,
        "radius": 4,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "body",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-cable-bridge.png",
      "project": "examples/robot-cable-bridge.partstudio.json",
      "stl": "examples/stl/robot-cable-bridge.stl",
      "bboxXYZ": [
        58,
        18,
        16
      ],
      "bounds": {
        "min": [
          -29,
          -9,
          0
        ],
        "max": [
          29,
          9,
          16
        ]
      },
      "volumeMM3": 5695.0451,
      "surfaceAreaMM2": 3763.1323,
      "triangles": 992,
      "components": 1,
      "watertight": true,
      "warnings": [
        "No load rating is implied. Material, layer orientation, fasteners, axle torque and impact loading require engineering verification.",
        "The small cable opening may bridge without support on a calibrated printer; inspect the sliced roof."
      ]
    }
  ],
  "lidExamples": [
    {
      "number": 1,
      "id": "sensor-rounded-lid",
      "templateId": "sensor-rounded",
      "name": "Curved sensor enclosure · matching lid",
      "group": "Enclosures",
      "mode": "enclosure",
      "part": "lid",
      "description": "Matching locating-lip lid for Curved sensor enclosure. Print separately and test the configured fit clearance.",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": 45,
            "y": 25,
            "diameter": 3.2,
            "axis": "z"
          },
          {
            "x": -45,
            "y": 25,
            "diameter": 3.2,
            "axis": "z"
          },
          {
            "x": -45,
            "y": -25,
            "diameter": 3.2,
            "axis": "z"
          },
          {
            "x": 45,
            "y": -25,
            "diameter": 3.2,
            "axis": "z"
          }
        ],
        "cutouts": [],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "lid",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/sensor-rounded-lid.png",
      "project": "examples/sensor-rounded-lid.partstudio.json",
      "stl": "examples/stl/sensor-rounded-lid.stl",
      "bboxXYZ": [
        140,
        90,
        8
      ],
      "bounds": {
        "min": [
          -70,
          -45,
          0
        ],
        "max": [
          70,
          45,
          8
        ]
      },
      "volumeMM3": 41725.5498,
      "surfaceAreaMM2": 30034.6373,
      "triangles": 2748,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Lid fit uses the specified clearance per side. Print a fit sample for your printer and material."
      ]
    },
    {
      "number": 2,
      "id": "capsule-case-lid",
      "templateId": "capsule-case",
      "name": "Capsule enclosure · matching lid",
      "group": "Enclosures",
      "mode": "enclosure",
      "part": "lid",
      "description": "Matching locating-lip lid for Capsule enclosure. Print separately and test the configured fit clearance.",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 170,
        "W": 75,
        "H": 40,
        "base": 3,
        "wall": 2.4,
        "radius": 20,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "capsule",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "lid",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/capsule-case-lid.png",
      "project": "examples/capsule-case-lid.partstudio.json",
      "stl": "examples/stl/capsule-case-lid.stl",
      "bboxXYZ": [
        170,
        75,
        8
      ],
      "bounds": {
        "min": [
          -85,
          -37.5,
          0
        ],
        "max": [
          85,
          37.5,
          8
        ]
      },
      "volumeMM3": 39435.6772,
      "surfaceAreaMM2": 28369.9409,
      "triangles": 1172,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Lid fit uses the specified clearance per side. Print a fit sample for your printer and material."
      ]
    },
    {
      "number": 3,
      "id": "freeform-case-lid",
      "templateId": "freeform-case",
      "name": "Freeform housing · matching lid",
      "group": "Enclosures",
      "mode": "enclosure",
      "part": "lid",
      "description": "Matching locating-lip lid for Freeform housing. Print separately and test the configured fit clearance.",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 35,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "custom",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "lid",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 2,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/freeform-case-lid.png",
      "project": "examples/freeform-case-lid.partstudio.json",
      "stl": "examples/stl/freeform-case-lid.stl",
      "bboxXYZ": [
        140,
        90,
        8
      ],
      "bounds": {
        "min": [
          -70,
          -45,
          0
        ],
        "max": [
          70,
          45,
          8
        ]
      },
      "volumeMM3": 35744.5816,
      "surfaceAreaMM2": 25674.4318,
      "triangles": 284,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Lid fit uses the specified clearance per side. Print a fit sample for your printer and material."
      ]
    },
    {
      "number": 4,
      "id": "pcb-boss-case-lid",
      "templateId": "pcb-boss-case",
      "name": "PCB enclosure with bosses · matching lid",
      "group": "Enclosures",
      "mode": "enclosure",
      "part": "lid",
      "description": "Matching locating-lip lid for PCB enclosure with bosses. Print separately and test the configured fit clearance.",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [
          {
            "name": "PCB support bosses",
            "enabled": true,
            "scope": "body",
            "operation": "add",
            "shape": "cylinder",
            "x": -48,
            "y": -25,
            "z": 2.95,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 9,
            "d": 9,
            "topD": 6,
            "nx": 2,
            "ny": 2,
            "dx": 96,
            "dy": 50
          },
          {
            "name": "Blind screw pilots",
            "enabled": true,
            "scope": "body",
            "operation": "cut",
            "shape": "cylinder",
            "x": -48,
            "y": -25,
            "z": 5,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 8,
            "d": 2.8,
            "topD": 6,
            "nx": 2,
            "ny": 2,
            "dx": 96,
            "dy": 50
          }
        ],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "lid",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/pcb-boss-case-lid.png",
      "project": "examples/pcb-boss-case-lid.partstudio.json",
      "stl": "examples/stl/pcb-boss-case-lid.stl",
      "bboxXYZ": [
        140,
        90,
        8
      ],
      "bounds": {
        "min": [
          -70,
          -45,
          0
        ],
        "max": [
          70,
          45,
          8
        ]
      },
      "volumeMM3": 41821.9906,
      "surfaceAreaMM2": 29978.3156,
      "triangles": 1196,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Lid fit uses the specified clearance per side. Print a fit sample for your printer and material."
      ]
    },
    {
      "number": 5,
      "id": "vented-case-lid",
      "templateId": "vented-case",
      "name": "Vented electronics case · matching lid",
      "group": "Enclosures",
      "mode": "enclosure",
      "part": "lid",
      "description": "Matching locating-lip lid for Vented electronics case. Print separately and test the configured fit clearance.",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 150,
        "W": 100,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [
          {
            "name": "Lid ventilation slots",
            "enabled": true,
            "scope": "lid",
            "operation": "cut",
            "shape": "box",
            "x": 0,
            "y": -28,
            "z": -0.1,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 65,
            "W": 3,
            "H": 3.4,
            "d": 10,
            "topD": 6,
            "nx": 1,
            "ny": 8,
            "dx": 0,
            "dy": 8
          }
        ],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "lid",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/vented-case-lid.png",
      "project": "examples/vented-case-lid.partstudio.json",
      "stl": "examples/stl/vented-case-lid.stl",
      "bboxXYZ": [
        150,
        100,
        8
      ],
      "bounds": {
        "min": [
          -75,
          -50,
          0
        ],
        "max": [
          75,
          50,
          8
        ]
      },
      "volumeMM3": 44821.9906,
      "surfaceAreaMM2": 35442.3156,
      "triangles": 1356,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Lid fit uses the specified clearance per side. Print a fit sample for your printer and material."
      ]
    },
    {
      "number": 6,
      "id": "sideport-case-lid",
      "templateId": "sideport-case",
      "name": "Connector port enclosure · matching lid",
      "group": "Enclosures",
      "mode": "enclosure",
      "part": "lid",
      "description": "Matching locating-lip lid for Connector port enclosure. Print separately and test the configured fit clearance.",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 140,
        "W": 90,
        "H": 45,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [
          {
            "name": "PCB support bosses",
            "enabled": true,
            "scope": "body",
            "operation": "add",
            "shape": "cylinder",
            "x": -48,
            "y": -25,
            "z": 2.95,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 9,
            "d": 9,
            "topD": 6,
            "nx": 2,
            "ny": 2,
            "dx": 96,
            "dy": 50
          },
          {
            "name": "Blind screw pilots",
            "enabled": true,
            "scope": "body",
            "operation": "cut",
            "shape": "cylinder",
            "x": -48,
            "y": -25,
            "z": 5,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 8,
            "d": 2.8,
            "topD": 6,
            "nx": 2,
            "ny": 2,
            "dx": 96,
            "dy": 50
          },
          {
            "name": "Rectangular cable port",
            "enabled": true,
            "scope": "body",
            "operation": "cut",
            "shape": "box",
            "x": 69,
            "y": -13,
            "z": 13,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 8,
            "W": 20,
            "H": 13,
            "d": 10,
            "topD": 6,
            "nx": 1,
            "ny": 1,
            "dx": 0,
            "dy": 0
          },
          {
            "name": "Round cable port",
            "enabled": true,
            "scope": "body",
            "operation": "cut",
            "shape": "cylinder",
            "x": 66,
            "y": 23,
            "z": 24,
            "rx": 0,
            "ry": 90,
            "rz": 0,
            "L": 10,
            "W": 10,
            "H": 10,
            "d": 12,
            "topD": 6,
            "nx": 1,
            "ny": 1,
            "dx": 0,
            "dy": 0
          }
        ],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "lid",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/sideport-case-lid.png",
      "project": "examples/sideport-case-lid.partstudio.json",
      "stl": "examples/stl/sideport-case-lid.stl",
      "bboxXYZ": [
        140,
        90,
        8
      ],
      "bounds": {
        "min": [
          -70,
          -45,
          0
        ],
        "max": [
          70,
          45,
          8
        ]
      },
      "volumeMM3": 41821.9906,
      "surfaceAreaMM2": 29978.3156,
      "triangles": 1196,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Lid fit uses the specified clearance per side. Print a fit sample for your printer and material."
      ]
    },
    {
      "number": 7,
      "id": "divider-case-lid",
      "templateId": "divider-case",
      "name": "Divided instrument case · matching lid",
      "group": "Enclosures",
      "mode": "enclosure",
      "part": "lid",
      "description": "Matching locating-lip lid for Divided instrument case. Print separately and test the configured fit clearance.",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 150,
        "W": 100,
        "H": 42,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [
          {
            "name": "Internal divider",
            "enabled": true,
            "scope": "body",
            "operation": "add",
            "shape": "box",
            "x": 0,
            "y": 0,
            "z": 2.95,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 2.8,
            "W": 95.5,
            "H": 33,
            "d": 10,
            "topD": 6,
            "nx": 1,
            "ny": 1,
            "dx": 0,
            "dy": 0
          }
        ],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "lid",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/divider-case-lid.png",
      "project": "examples/divider-case-lid.partstudio.json",
      "stl": "examples/stl/divider-case-lid.stl",
      "bboxXYZ": [
        150,
        100,
        8
      ],
      "bounds": {
        "min": [
          -75,
          -50,
          0
        ],
        "max": [
          75,
          50,
          8
        ]
      },
      "volumeMM3": 49501.9906,
      "surfaceAreaMM2": 35298.3156,
      "triangles": 1196,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Lid fit uses the specified clearance per side. Print a fit sample for your printer and material."
      ]
    },
    {
      "number": 8,
      "id": "ribbed-case-lid",
      "templateId": "ribbed-case",
      "name": "Ribbed protective case · matching lid",
      "group": "Enclosures",
      "mode": "enclosure",
      "part": "lid",
      "description": "Matching locating-lip lid for Ribbed protective case. Print separately and test the configured fit clearance.",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 150,
        "W": 90,
        "H": 38,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [
          {
            "name": "Floor ribs",
            "enabled": true,
            "scope": "body",
            "operation": "add",
            "shape": "box",
            "x": 0,
            "y": -24,
            "z": 2.95,
            "rx": 0,
            "ry": 0,
            "rz": 0,
            "L": 100,
            "W": 2.8,
            "H": 8,
            "d": 10,
            "topD": 6,
            "nx": 1,
            "ny": 4,
            "dx": 0,
            "dy": 16
          }
        ],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "lid",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/ribbed-case-lid.png",
      "project": "examples/ribbed-case-lid.partstudio.json",
      "stl": "examples/stl/ribbed-case-lid.stl",
      "bboxXYZ": [
        150,
        90,
        8
      ],
      "bounds": {
        "min": [
          -75,
          -45,
          0
        ],
        "max": [
          75,
          45,
          8
        ]
      },
      "volumeMM3": 44761.9906,
      "surfaceAreaMM2": 32038.3156,
      "triangles": 1196,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Lid fit uses the specified clearance per side. Print a fit sample for your printer and material."
      ]
    },
    {
      "number": 9,
      "id": "elliptic-case-lid",
      "templateId": "elliptic-case",
      "name": "Elliptical instrument case · matching lid",
      "group": "Enclosures",
      "mode": "enclosure",
      "part": "lid",
      "description": "Matching locating-lip lid for Elliptical instrument case. Print separately and test the configured fit clearance.",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 130,
        "W": 95,
        "H": 35,
        "base": 3,
        "wall": 2.6,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "ellipse",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "lid",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/elliptic-case-lid.png",
      "project": "examples/elliptic-case-lid.partstudio.json",
      "stl": "examples/stl/elliptic-case-lid.stl",
      "bboxXYZ": [
        130,
        95,
        8
      ],
      "bounds": {
        "min": [
          -65,
          -47.5,
          0
        ],
        "max": [
          65,
          47.5,
          8
        ]
      },
      "volumeMM3": 33360.7048,
      "surfaceAreaMM2": 23746.2189,
      "triangles": 1148,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Lid fit uses the specified clearance per side. Print a fit sample for your printer and material."
      ]
    },
    {
      "number": 10,
      "id": "hex-case-lid",
      "templateId": "hex-case",
      "name": "Hexagonal electronics pod · matching lid",
      "group": "Enclosures",
      "mode": "enclosure",
      "part": "lid",
      "description": "Matching locating-lip lid for Hexagonal electronics pod. Print separately and test the configured fit clearance.",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 115,
        "W": 100,
        "H": 42,
        "base": 3,
        "wall": 2.4,
        "radius": 18,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [
          {
            "x": 0,
            "y": 0,
            "diameter": 12,
            "axis": "z"
          }
        ],
        "cutouts": [],
        "features": [],
        "outline": "polygon",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "lid",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/hex-case-lid.png",
      "project": "examples/hex-case-lid.partstudio.json",
      "stl": "examples/stl/hex-case-lid.stl",
      "bboxXYZ": [
        115,
        100,
        8
      ],
      "bounds": {
        "min": [
          -57.5,
          -50,
          0
        ],
        "max": [
          57.5,
          50,
          8
        ]
      },
      "volumeMM3": 29422.8601,
      "surfaceAreaMM2": 21428.5317,
      "triangles": 456,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Lid fit uses the specified clearance per side. Print a fit sample for your printer and material."
      ]
    },
    {
      "number": 11,
      "id": "robot-electronics-lid",
      "templateId": "robot-electronics",
      "name": "Robot electronics body · matching lid",
      "group": "Robot bodywork",
      "mode": "enclosure",
      "part": "lid",
      "description": "Matching locating-lip lid for Robot electronics body. Print separately and test the configured fit clearance.",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 220,
        "W": 140,
        "H": 55,
        "base": 4,
        "wall": 3,
        "radius": 12,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [],
        "features": [],
        "outline": "robot",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "lid",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/robot-electronics-lid.png",
      "project": "examples/robot-electronics-lid.partstudio.json",
      "stl": "examples/stl/robot-electronics-lid.stl",
      "bboxXYZ": [
        220,
        140,
        8
      ],
      "bounds": {
        "min": [
          -110,
          -70,
          0
        ],
        "max": [
          110,
          70,
          8
        ]
      },
      "volumeMM3": 95805.1276,
      "surfaceAreaMM2": 65842.4109,
      "triangles": 1244,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Lid fit uses the specified clearance per side. Print a fit sample for your printer and material."
      ]
    },
    {
      "number": 12,
      "id": "battery-tray-lid",
      "templateId": "battery-tray",
      "name": "Battery tray · matching lid",
      "group": "Robot bodywork",
      "mode": "enclosure",
      "part": "lid",
      "description": "Matching locating-lip lid for Battery tray. Print separately and test the configured fit clearance.",
      "params": {
        "mode": "enclosure",
        "robotPart": "chassis",
        "robotShape": "ribbed-tub",
        "L": 155,
        "W": 80,
        "H": 28,
        "base": 4,
        "wall": 3,
        "radius": 10,
        "wheelbase": 200,
        "mountPitch": 28,
        "mountD": 5.4,
        "axleD": 12.4,
        "axleDrop": 36,
        "railW": 22,
        "ribHeight": 14,
        "splitSection": "front",
        "roofInset": 14,
        "roofD": 5.4,
        "nutAF": 8.4,
        "nutDepth": 4.5,
        "interfacePadDepth": 0,
        "wheelDia": 165,
        "wheelWidth": 45,
        "segments": 96,
        "holes": [],
        "cutouts": [
          {
            "shape": "rect",
            "x": -48,
            "y": 0,
            "w": 5,
            "h": 38,
            "r": 2.5,
            "axis": "z"
          },
          {
            "shape": "rect",
            "x": 48,
            "y": 0,
            "w": 5,
            "h": 38,
            "r": 2.5,
            "axis": "z"
          }
        ],
        "features": [],
        "outline": "rounded",
        "topScale": 1,
        "twist": 0,
        "hollow": false,
        "part": "lid",
        "lidThickness": 3,
        "lipHeight": 5,
        "clearance": 0.25,
        "smoothing": 0,
        "points": [
          [
            -0.5,
            -0.4
          ],
          [
            0.2,
            -0.5
          ],
          [
            0.5,
            -0.25
          ],
          [
            0.45,
            0.35
          ],
          [
            0,
            0.5
          ],
          [
            -0.5,
            0.3
          ]
        ],
        "profile": [
          [
            0,
            0
          ],
          [
            35,
            0
          ],
          [
            35,
            8
          ],
          [
            33,
            25
          ],
          [
            27,
            37
          ],
          [
            16,
            45
          ],
          [
            0,
            48
          ]
        ],
        "sweep": 120,
        "sides": 6,
        "starRatio": 0.65,
        "primitive": "box",
        "majorRadius": 30,
        "minorRadius": 6,
        "outerD": 80,
        "boreD": 20,
        "hubD": 36,
        "hubH": 15,
        "flangeT": 6,
        "boltCount": 4,
        "boltCircle": 62,
        "boltD": 4.2,
        "flangeWidth": 0,
        "tubeOD": 24,
        "tubeWall": 2.4,
        "bendRadius": 45,
        "bendAngle": 90,
        "spokes": 6,
        "spokeW": 7,
        "bracketStyle": "l",
        "gusset": 0
      },
      "preview": "assets/previews/battery-tray-lid.png",
      "project": "examples/battery-tray-lid.partstudio.json",
      "stl": "examples/stl/battery-tray-lid.stl",
      "bboxXYZ": [
        155,
        80,
        8
      ],
      "bounds": {
        "min": [
          -77.5,
          -40,
          0
        ],
        "max": [
          77.5,
          40,
          8
        ]
      },
      "volumeMM3": 42178.5572,
      "surfaceAreaMM2": 29967.731,
      "triangles": 1988,
      "components": 1,
      "watertight": true,
      "warnings": [
        "Lid fit uses the specified clearance per side. Print a fit sample for your printer and material."
      ]
    }
  ]
}
