benikigai/ec-1Public
EC-1 Wireless Controller
SHA-256 762e5f5ed9c46913c5ba254d0914fa47f36e933ad7c70f7256a2b4c332aa7769
{
"generator": "tools/make_cad.py",
"synthetic": true,
"units": {
"length": "mm",
"volume": "mm3",
"area": "mm2"
},
"frame": "origin at footprint centre, z = 0 at the underside of the bottom shell, +x face-button side, +y away from the player, +z up",
"tessellation": {
"linear_deflection_mm": 0.05,
"angular_deflection_rad": 0.15
},
"parts": {
"part:top-shell": {
"title": "Top shell",
"step": "parts/top-shell.step",
"glb": "parts/top-shell.glb",
"quantity_per_unit": 1,
"frame": "product",
"volume_mm3": 14731.544,
"surface_area_mm2": 19694.063,
"bbox_mm": {
"min": [
-60.0,
-28.0,
2.0
],
"max": [
60.0,
28.0,
22.0
],
"size": [
120.0,
56.0,
20.0
]
},
"centroid_mm": [
1.302,
-0.942,
18.884
],
"materials": [
"shell-charcoal"
],
"mesh_triangles": 20996
},
"part:bottom-shell": {
"title": "Bottom shell",
"step": "parts/bottom-shell.step",
"glb": "parts/bottom-shell.glb",
"quantity_per_unit": 1,
"frame": "product",
"volume_mm3": 15702.44,
"surface_area_mm2": 20655.576,
"bbox_mm": {
"min": [
-60.0,
-28.0,
-0.0
],
"max": [
60.0,
28.0,
12.0
],
"size": [
120.0,
56.0,
12.0
]
},
"centroid_mm": [
0.011,
-0.098,
2.95
],
"materials": [
"shell-charcoal"
],
"mesh_triangles": 14504
},
"part:button-cap": {
"title": "Face button cap",
"step": "parts/button-cap.step",
"glb": "parts/button-cap.glb",
"quantity_per_unit": 4,
"frame": "instance-local (own axis at x = y = 0, product z)",
"volume_mm3": 326.511,
"surface_area_mm2": 335.315,
"bbox_mm": {
"min": [
-4.7,
-4.7,
12.5
],
"max": [
4.7,
4.7,
25.5
],
"size": [
9.4,
9.4,
13.0
]
},
"centroid_mm": [
-0.0,
0.0,
21.255
],
"materials": [
"button-offwhite"
],
"mesh_triangles": 4890
},
"part:shoulder-button": {
"title": "Shoulder button",
"step": "parts/shoulder-button.step",
"glb": "parts/shoulder-button.glb",
"quantity_per_unit": 2,
"frame": "instance-local (own axis at x = y = 0, product z)",
"volume_mm3": 621.245,
"surface_area_mm2": 588.414,
"bbox_mm": {
"min": [
-12.0,
20.0,
14.3
],
"max": [
12.0,
29.5,
19.7
],
"size": [
24.0,
9.5,
5.4
]
},
"centroid_mm": [
-0.0,
26.536,
17.0
],
"materials": [
"button-offwhite"
],
"mesh_triangles": 2274
},
"part:dome-sheet": {
"title": "Silicone dome sheet",
"step": "parts/dome-sheet.step",
"glb": "parts/dome-sheet.glb",
"quantity_per_unit": 1,
"frame": "product",
"volume_mm3": 574.395,
"surface_area_mm2": 1421.786,
"bbox_mm": {
"min": [
19.0,
-9.0,
11.0
],
"max": [
45.0,
17.0,
12.5
],
"size": [
26.0,
26.0,
1.5
]
},
"centroid_mm": [
32.0,
4.0,
11.444
],
"materials": [
"dome-silicone"
],
"mesh_triangles": 2956
},
"part:stick-module": {
"title": "Analog stick module",
"step": "parts/stick-module.step",
"glb": "parts/stick-module.glb",
"quantity_per_unit": 1,
"frame": "product",
"volume_mm3": 3886.431,
"surface_area_mm2": 2316.272,
"bbox_mm": {
"min": [
-45.0,
-9.0,
11.0
],
"max": [
-19.0,
17.0,
28.0
],
"size": [
26.0,
26.0,
17.0
]
},
"centroid_mm": [
-32.0,
4.0,
17.736
],
"materials": [
"stick-body-grey",
"stick-cap-black"
],
"mesh_triangles": 10386
},
"part:main-pcba": {
"title": "Main PCBA",
"step": "parts/main-pcba.step",
"glb": "parts/main-pcba.glb",
"quantity_per_unit": 1,
"frame": "product",
"volume_mm3": 5513.225,
"surface_area_mm2": 11196.3,
"bbox_mm": {
"min": [
-56.0,
-24.0,
6.4
],
"max": [
56.0,
26.0,
13.5
],
"size": [
112.0,
50.0,
7.1
]
},
"centroid_mm": [
0.083,
0.299,
10.471
],
"materials": [
"pcb-green",
"ic-black",
"antenna-white",
"led-white",
"connector-silver"
],
"mesh_triangles": 2628
},
"part:battery": {
"title": "Li-ion pouch battery",
"step": "parts/battery.step",
"glb": "parts/battery.glb",
"quantity_per_unit": 1,
"frame": "product",
"volume_mm3": 6751.644,
"surface_area_mm2": 3218.426,
"bbox_mm": {
"min": [
-20.0,
-25.5,
2.0
],
"max": [
20.0,
7.0,
11.8
],
"size": [
40.0,
32.5,
9.8
]
},
"centroid_mm": [
0.035,
-7.193,
4.995
],
"materials": [
"battery-silver",
"battery-lead-red"
],
"mesh_triangles": 3112
},
"part:haptic-lra": {
"title": "Haptic LRA",
"step": "parts/haptic-lra.step",
"glb": "parts/haptic-lra.glb",
"quantity_per_unit": 1,
"frame": "product",
"volume_mm3": 249.117,
"surface_area_mm2": 274.161,
"bbox_mm": {
"min": [
-50.0,
-16.0,
2.0
],
"max": [
-37.0,
-6.0,
5.2
],
"size": [
13.0,
10.0,
3.2
]
},
"centroid_mm": [
-44.95,
-11.0,
3.58
],
"materials": [
"haptic-grey",
"flex-amber"
],
"mesh_triangles": 1352
},
"part:screw-m2x6": {
"title": "Screw M2 x 6 pan head",
"step": "parts/screw-m2x6.step",
"glb": "parts/screw-m2x6.glb",
"quantity_per_unit": 4,
"frame": "instance-local (own axis at x = y = 0, product z)",
"volume_mm3": 31.301,
"surface_area_mm2": 78.446,
"bbox_mm": {
"min": [
-1.9,
-1.9,
0.0
],
"max": [
1.9,
1.9,
7.3
],
"size": [
3.8,
3.8,
7.3
]
},
"centroid_mm": [
-0.0,
0.0,
2.819
],
"materials": [
"screw-steel"
],
"mesh_triangles": 4580
},
"part:rating-label": {
"title": "Rating label",
"step": "parts/rating-label.step",
"glb": "parts/rating-label.glb",
"quantity_per_unit": 1,
"frame": "product",
"volume_mm3": 35.914,
"surface_area_mm2": 726.512,
"bbox_mm": {
"min": [
-15.0,
-16.0,
-0.1
],
"max": [
15.0,
-4.0,
0.0
],
"size": [
30.0,
12.0,
0.1
]
},
"centroid_mm": [
-0.0,
-10.0,
-0.05
],
"materials": [
"label-white"
],
"mesh_triangles": 348
},
"part:light-pipe": {
"title": "LED light pipe",
"step": "parts/light-pipe.step",
"glb": "parts/light-pipe.glb",
"quantity_per_unit": 1,
"frame": "product",
"volume_mm3": 26.724,
"surface_area_mm2": 83.07,
"bbox_mm": {
"min": [
-2.25,
16.5,
11.8
],
"max": [
2.25,
19.5,
22.0
],
"size": [
4.5,
3.0,
10.2
]
},
"centroid_mm": [
-0.0,
18.0,
18.369
],
"materials": [
"light-pipe-clear"
],
"mesh_triangles": 1036
}
},
"instances": [
{
"id": "part:top-shell",
"part": "part:top-shell",
"translation": [
0.0,
0.0,
0.0
],
"exploded_offset": [
0.0,
0.0,
112.0
],
"usd_prim": "/Product/TopShell",
"assembly": "asm:top-sub"
},
{
"id": "part:button-cap#1",
"part": "part:button-cap",
"translation": [
32.0,
13.0,
0.0
],
"exploded_offset": [
0.0,
0.0,
72.0
],
"usd_prim": "/Product/ButtonCap_1",
"assembly": "asm:top-sub"
},
{
"id": "part:button-cap#2",
"part": "part:button-cap",
"translation": [
41.0,
4.0,
0.0
],
"exploded_offset": [
0.0,
0.0,
72.0
],
"usd_prim": "/Product/ButtonCap_2",
"assembly": "asm:top-sub"
},
{
"id": "part:button-cap#3",
"part": "part:button-cap",
"translation": [
32.0,
-5.0,
0.0
],
"exploded_offset": [
0.0,
0.0,
72.0
],
"usd_prim": "/Product/ButtonCap_3",
"assembly": "asm:top-sub"
},
{
"id": "part:button-cap#4",
"part": "part:button-cap",
"translation": [
23.0,
4.0,
0.0
],
"exploded_offset": [
0.0,
0.0,
72.0
],
"usd_prim": "/Product/ButtonCap_4",
"assembly": "asm:top-sub"
},
{
"id": "part:shoulder-button#1",
"part": "part:shoulder-button",
"translation": [
-38.0,
0.0,
0.0
],
"exploded_offset": [
0.0,
4.0,
60.0
],
"usd_prim": "/Product/ShoulderButton_L",
"assembly": "asm:top-sub"
},
{
"id": "part:shoulder-button#2",
"part": "part:shoulder-button",
"translation": [
38.0,
0.0,
0.0
],
"exploded_offset": [
0.0,
4.0,
60.0
],
"usd_prim": "/Product/ShoulderButton_R",
"assembly": "asm:top-sub"
},
{
"id": "part:dome-sheet",
"part": "part:dome-sheet",
"translation": [
0.0,
0.0,
0.0
],
"exploded_offset": [
0.0,
0.0,
50.0
],
"usd_prim": "/Product/DomeSheet",
"assembly": "asm:top-sub"
},
{
"id": "part:light-pipe",
"part": "part:light-pipe",
"translation": [
0.0,
0.0,
0.0
],
"exploded_offset": [
0.0,
0.0,
112.0
],
"usd_prim": "/Product/LightPipe",
"assembly": "asm:top-sub"
},
{
"id": "part:bottom-shell",
"part": "part:bottom-shell",
"translation": [
0.0,
0.0,
0.0
],
"exploded_offset": [
0.0,
0.0,
0.0
],
"usd_prim": "/Product/BottomShell",
"assembly": "asm:core"
},
{
"id": "part:battery",
"part": "part:battery",
"translation": [
0.0,
0.0,
0.0
],
"exploded_offset": [
0.0,
0.0,
18.0
],
"usd_prim": "/Product/Battery",
"assembly": "asm:core"
},
{
"id": "part:haptic-lra",
"part": "part:haptic-lra",
"translation": [
0.0,
0.0,
0.0
],
"exploded_offset": [
0.0,
0.0,
18.0
],
"usd_prim": "/Product/HapticLRA",
"assembly": "asm:core"
},
{
"id": "part:main-pcba",
"part": "part:main-pcba",
"translation": [
0.0,
0.0,
0.0
],
"exploded_offset": [
0.0,
0.0,
34.0
],
"usd_prim": "/Product/MainPCBA",
"assembly": "asm:core"
},
{
"id": "part:stick-module",
"part": "part:stick-module",
"translation": [
0.0,
0.0,
0.0
],
"exploded_offset": [
0.0,
0.0,
54.0
],
"usd_prim": "/Product/StickModule",
"assembly": "asm:core"
},
{
"id": "part:screw-m2x6#1",
"part": "part:screw-m2x6",
"translation": [
-50.0,
18.0,
0.0
],
"exploded_offset": [
0.0,
0.0,
-18.0
],
"usd_prim": "/Product/Screw_1",
"assembly": "asm:ec-1"
},
{
"id": "part:screw-m2x6#2",
"part": "part:screw-m2x6",
"translation": [
50.0,
18.0,
0.0
],
"exploded_offset": [
0.0,
0.0,
-18.0
],
"usd_prim": "/Product/Screw_2",
"assembly": "asm:ec-1"
},
{
"id": "part:screw-m2x6#3",
"part": "part:screw-m2x6",
"translation": [
50.0,
-18.0,
0.0
],
"exploded_offset": [
0.0,
0.0,
-18.0
],
"usd_prim": "/Product/Screw_3",
"assembly": "asm:ec-1"
},
{
"id": "part:screw-m2x6#4",
"part": "part:screw-m2x6",
"translation": [
-50.0,
-18.0,
0.0
],
"exploded_offset": [
0.0,
0.0,
-18.0
],
"usd_prim": "/Product/Screw_4",
"assembly": "asm:ec-1"
},
{
"id": "part:rating-label",
"part": "part:rating-label",
"translation": [
0.0,
0.0,
0.0
],
"exploded_offset": [
0.0,
0.0,
-8.0
],
"usd_prim": "/Product/RatingLabel",
"assembly": "asm:ec-1"
}
],
"fit_checks": {
"interferences": [
{
"a": "part:top-shell",
"b": "part:screw-m2x6#1",
"volume_mm3": 4.423,
"expected": true,
"note": "thread engagement: \u00d82 thread-forming screw in the top-shell boss's \u00d81.7 pilot"
},
{
"a": "part:top-shell",
"b": "part:screw-m2x6#2",
"volume_mm3": 4.423,
"expected": true,
"note": "thread engagement: \u00d82 thread-forming screw in the top-shell boss's \u00d81.7 pilot"
},
{
"a": "part:top-shell",
"b": "part:screw-m2x6#3",
"volume_mm3": 4.423,
"expected": true,
"note": "thread engagement: \u00d82 thread-forming screw in the top-shell boss's \u00d81.7 pilot"
},
{
"a": "part:top-shell",
"b": "part:screw-m2x6#4",
"volume_mm3": 4.423,
"expected": true,
"note": "thread engagement: \u00d82 thread-forming screw in the top-shell boss's \u00d81.7 pilot"
}
],
"clearances": [
{
"a": "part:button-cap#1",
"b": "part:top-shell",
"min_distance_mm": 0.1,
"what": "face button in its hole and sleeve"
},
{
"a": "part:button-cap#2",
"b": "part:top-shell",
"min_distance_mm": 0.1,
"what": "face button in its hole and sleeve"
},
{
"a": "part:button-cap#3",
"b": "part:top-shell",
"min_distance_mm": 0.1,
"what": "face button in its hole and sleeve"
},
{
"a": "part:button-cap#4",
"b": "part:top-shell",
"min_distance_mm": 0.1,
"what": "face button in its hole and sleeve"
},
{
"a": "part:shoulder-button#1",
"b": "part:top-shell",
"min_distance_mm": 0.19,
"what": "shoulder button in its slot"
},
{
"a": "part:shoulder-button#2",
"b": "part:top-shell",
"min_distance_mm": 0.19,
"what": "shoulder button in its slot"
},
{
"a": "part:stick-module",
"b": "part:top-shell",
"min_distance_mm": 0.6,
"what": "stick module under the shell / in the \u00d821 hole"
},
{
"a": "part:main-pcba",
"b": "part:top-shell",
"min_distance_mm": 0.3,
"what": "PCBA clearance holes around the top-shell bosses"
},
{
"a": "part:main-pcba",
"b": "part:bottom-shell",
"min_distance_mm": 0.0,
"what": "PCBA to bottom shell (sits on the support ribs)"
},
{
"a": "part:light-pipe",
"b": "part:top-shell",
"min_distance_mm": 0.05,
"what": "light pipe head in the LED window / collar under the skin"
},
{
"a": "part:light-pipe",
"b": "part:main-pcba",
"min_distance_mm": 0.2,
"what": "light pipe to the LED"
},
{
"a": "part:haptic-lra",
"b": "part:top-shell",
"min_distance_mm": 1.102,
"what": "LRA to the top-shell boss at (-50, -18)"
},
{
"a": "part:screw-m2x6#1",
"b": "part:bottom-shell",
"min_distance_mm": 0.0,
"what": "screw head in its counterbore"
},
{
"a": "part:screw-m2x6#2",
"b": "part:bottom-shell",
"min_distance_mm": 0.0,
"what": "screw head in its counterbore"
},
{
"a": "part:screw-m2x6#3",
"b": "part:bottom-shell",
"min_distance_mm": 0.0,
"what": "screw head in its counterbore"
},
{
"a": "part:screw-m2x6#4",
"b": "part:bottom-shell",
"min_distance_mm": 0.0,
"what": "screw head in its counterbore"
},
{
"a": "part:battery",
"b": "part:bottom-shell",
"min_distance_mm": 0.4,
"what": "battery in its pocket"
},
{
"a": "part:battery",
"b": "part:main-pcba",
"min_distance_mm": 0.05,
"what": "battery to PCBA (lead touches the connector)"
},
{
"a": "part:haptic-lra",
"b": "part:bottom-shell",
"min_distance_mm": 0.352,
"what": "LRA to bottom shell and boss collar"
},
{
"a": "part:haptic-lra",
"b": "part:battery",
"min_distance_mm": 17.0,
"what": "LRA to battery"
},
{
"a": "part:dome-sheet",
"b": "part:top-shell",
"min_distance_mm": 3.444,
"what": "dome sheet to top shell"
},
{
"a": "part:button-cap#1",
"b": "part:dome-sheet",
"min_distance_mm": 0.0,
"what": "button stem resting on its dome"
},
{
"a": "part:button-cap#2",
"b": "part:dome-sheet",
"min_distance_mm": 0.0,
"what": "button stem resting on its dome"
},
{
"a": "part:button-cap#3",
"b": "part:dome-sheet",
"min_distance_mm": 0.0,
"what": "button stem resting on its dome"
},
{
"a": "part:button-cap#4",
"b": "part:dome-sheet",
"min_distance_mm": 0.0,
"what": "button stem resting on its dome"
},
{
"a": "top-shell boss (-50, 18)",
"b": "part:bottom-shell",
"min_distance_mm": 0.15,
"what": "boss in its locating collar"
},
{
"a": "top-shell boss (50, 18)",
"b": "part:bottom-shell",
"min_distance_mm": 0.15,
"what": "boss in its locating collar"
},
{
"a": "top-shell boss (50, -18)",
"b": "part:bottom-shell",
"min_distance_mm": 0.15,
"what": "boss in its locating collar"
},
{
"a": "top-shell boss (-50, -18)",
"b": "part:bottom-shell",
"min_distance_mm": 0.15,
"what": "boss in its locating collar"
},
{
"a": "PCBA antenna (52, 0)",
"b": "part:bottom-shell",
"min_distance_mm": 0.9,
"what": "antenna to the nearest snap-hook nub"
},
{
"a": "PCBA antenna",
"b": "part:haptic-lra",
"min_distance_mm": 87.361,
"what": "antenna to LRA (>= 5 required)"
}
],
"concentricity": [
{
"what": "stick cap centre vs hole centre (-32, 4)",
"offset_mm": 0.0
},
{
"what": "button-cap#1 centre vs hole (32, 13)",
"offset_mm": 0.0
},
{
"what": "button-cap#2 centre vs hole (41, 4)",
"offset_mm": 0.0
},
{
"what": "button-cap#3 centre vs hole (32, -5)",
"offset_mm": 0.0
},
{
"what": "button-cap#4 centre vs hole (23, 4)",
"offset_mm": 0.0
},
{
"what": "screw thread engagement in the top-shell boss (mm, per screw)",
"offset_mm": [
5.3,
5.3,
5.3,
5.3
]
}
]
},
"notes": [
"Screw construction (revised): the four OD 5 screw bosses (\u00d81.7 pilot) are on the top shell and hang from the skin down to z 2.0 at (\u00b150, \u00b118). The bottom shell has \u00d84 x 1.3 counterbores, \u00d82.2 through-holes and an ID 5.3 / OD 6.5 locating collar (z 1.6..4.0) around each boss; it has no bosses of its own. The M2 x 6 head sits in the counterbore (z 0..1.3) and the thread engages the top-shell boss from z 2.0 to 7.3, clamping the shells together at the parting line.",
"Main PCBA has four \u00d85.6 clearance holes for the bosses and rests on four 1.2 mm support ribs on the bottom-shell walls (tops at z 10): +x and -x walls at y = 10, +y wall at x = -25, -y wall at x = 30.",
"Chip antenna moved from (50, 18) to (52, 0), off the boss path.",
"New part part:light-pipe (clear PC): \u00d81.4 rod from z 11.8 (0.2 above the LED) to a 4.5 x 3 x 0.6 retention collar under the skin, then a 2.9 x 1.4 head that fills the 3 x 1.5 window and ends flush with the top surface at z 22. Exploded with the top shell (+112).",
"LRA moved from (-45, -14) to (-45, -11): at the contract position the \u00d810 motor overlaps the \u00d85 screw boss at (-50, -18) by 1.1 mm.",
"Face-button flange sits at z 19.5..20.3 (contract z 21..21.8 lies inside the 1.6 mm top skin); stem z 12.5..19.5.",
"Stick module square frame ends at z 19 and a round \u00d817 gimbal housing rises to z 21 inside the \u00d821 hole; an 18 x 18 block to z 21 would cut 0.6 mm into the shell ceiling at z 20.4.",
"USB-C receptacle hangs under the board edge (z 6.4..9.6) so its mouth lines up with the shell opening centred at z 8.",
"Dome sheet: 0.8 mm base (z 11..11.8) with \u00d86 domes rising to z 12.5 where the button stems rest.",
"Battery part includes its lead: a 2.4 x 0.6 ribbon routed past the board edge into the connector at (12, -18), so its bounding box reaches z 11.8."
]
}