{
 "commands": [
  {
   "command": "parameters.add",
   "params": {
    "name": "board_l",
    "expression": "51 mm"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "board_w",
    "expression": "21 mm"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "board_t",
    "expression": "1 mm"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "hole_d",
    "expression": "2.1 mm"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "hole_in_long",
    "expression": "4.8 mm"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "hole_in_short",
    "expression": "2 mm"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "wall",
    "expression": "2 mm"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "clear",
    "expression": "1 mm"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "floor_t",
    "expression": "2 mm"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "post_h",
    "expression": "3 mm"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "post_d",
    "expression": "4.5 mm"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "pin_d",
    "expression": "1.9 mm"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "pin_h",
    "expression": "2 mm"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "H",
    "expression": "12 mm"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "usb_w",
    "expression": "8 mm"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "usb_h",
    "expression": "3.5 mm"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "lid_t",
    "expression": "2 mm"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "lip_t",
    "expression": "1 mm"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "lip_h",
    "expression": "2.5 mm"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "fit",
    "expression": "0.15 mm"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "gap",
    "expression": "10 mm"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "in_l",
    "expression": "board_l + 2*clear"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "in_w",
    "expression": "board_w + 2*clear"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "W",
    "expression": "in_l + 2*wall"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "D",
    "expression": "in_w + 2*wall"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "hx",
    "expression": "board_l/2 - hole_in_short"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "hy",
    "expression": "board_w/2 - hole_in_long"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "lidY",
    "expression": "D + gap"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "board_z",
    "expression": "floor_t + post_h"
   }
  },
  {
   "command": "parameters.add",
   "params": {
    "name": "usb_z",
    "expression": "board_z + board_t - 0.5 mm"
   }
  },
  {
   "command": "solid.box",
   "params": {
    "length": "W",
    "width": "D",
    "height": "H",
    "center": [
     0,
     0,
     "H/2"
    ],
    "name": "Shell",
    "body_name": "Base"
   }
  },
  {
   "command": "solid.box",
   "params": {
    "length": "in_l",
    "width": "in_w",
    "height": "H",
    "center": [
     0,
     0,
     "floor_t + H/2"
    ],
    "operation": "cut",
    "targets": [
     "Base"
    ],
    "name": "Cavity"
   }
  },
  {
   "command": "solid.cylinder",
   "params": {
    "diameter": "post_d",
    "height": "post_h + 0.5 mm",
    "base": [
     "hx",
     "hy",
     "floor_t - 0.5 mm"
    ],
    "operation": "join",
    "targets": [
     "Base"
    ],
    "name": "Post"
   }
  },
  {
   "command": "solid.cylinder",
   "params": {
    "diameter": "pin_d",
    "height": "pin_h + 0.5 mm",
    "base": [
     "hx",
     "hy",
     "board_z - 0.5 mm"
    ],
    "operation": "join",
    "targets": [
     "Base"
    ],
    "name": "Pin"
   }
  },
  {
   "command": "solid.pattern.rectangular",
   "params": {
    "features": [
     "Post",
     "Pin"
    ],
    "dir1": [
     -1,
     0,
     0
    ],
    "count1": 2,
    "spacing1": "2*hx",
    "dir2": [
     0,
     -1,
     0
    ],
    "count2": 2,
    "spacing2": "2*hy",
    "name": "Posts"
   }
  },
  {
   "command": "solid.box",
   "params": {
    "length": "wall + 2 mm",
    "width": "usb_w",
    "height": "usb_h",
    "center": [
     "W/2 - wall/2",
     0,
     "usb_z + usb_h/2"
    ],
    "operation": "cut",
    "targets": [
     "Base"
    ],
    "name": "USBCutout"
   }
  },
  {
   "command": "solid.box",
   "params": {
    "length": "W",
    "width": "D",
    "height": "lid_t",
    "center": [
     0,
     "lidY",
     "lid_t/2"
    ],
    "operation": "new",
    "name": "LidPlate",
    "body_name": "Lid"
   }
  },
  {
   "command": "solid.box",
   "params": {
    "length": "in_l - 2*fit",
    "width": "in_w - 2*fit",
    "height": "lip_h + 0.5 mm",
    "center": [
     0,
     "lidY",
     "lid_t - 0.5 mm + (lip_h + 0.5 mm)/2"
    ],
    "operation": "join",
    "targets": [
     "Lid"
    ],
    "name": "LipOuter"
   }
  },
  {
   "command": "solid.box",
   "params": {
    "length": "in_l - 2*fit - 2*lip_t",
    "width": "in_w - 2*fit - 2*lip_t",
    "height": "lip_h + 1 mm",
    "center": [
     0,
     "lidY",
     "lid_t + (lip_h + 1 mm)/2"
    ],
    "operation": "cut",
    "targets": [
     "Lid"
    ],
    "name": "LipInner"
   }
  },
  {
   "command": "appearance.assign",
   "params": {
    "bodies": [
     "Base"
    ],
    "color": "#2e7d32"
   }
  },
  {
   "command": "appearance.assign",
   "params": {
    "bodies": [
     "Lid"
    ],
    "color": "#90caf9"
   }
  },
  {
   "command": "document.inspect",
   "params": {
    "measure": true
   }
  }
 ]
}