@jwc/jscad-raspberrypi 3.2.1 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/settings.json +4 -1
- package/dist/examples/active-cooling-fan.jscad +74 -30
- package/dist/examples/bplus.jscad +73 -29
- package/dist/examples/bplus3.jscad +73 -29
- package/dist/examples/camera-module-v1.jscad +73 -29
- package/dist/examples/camera-module-v2.jscad +73 -29
- package/dist/examples/example.jscad +79 -35
- package/dist/examples/hat-standoff.jscad +73 -29
- package/dist/examples/hat.jscad +73 -29
- package/dist/examples/hq_camera-module.jscad +75 -31
- package/dist/examples/hyper-pixel-4-rectangular.jscad +2781 -0
- package/dist/examples/miniPiTFT.jscad +73 -29
- package/dist/examples/pi-tft22.jscad +73 -29
- package/dist/examples/pi-tft24 copy.jscad +2750 -0
- package/dist/examples/pi-tft24.jscad +73 -29
- package/dist/examples/pi4.jscad +74 -30
- package/dist/examples/pi5.jscad +79 -38
- package/dist/examples/spacer.jscad +73 -29
- package/dist/index.js +112 -125
- package/dist/v1compat.js +112 -125
- package/examples/active-cooling-fan.jscad +1 -1
- package/examples/example.jscad +6 -6
- package/examples/hq_camera-module.jscad +2 -2
- package/examples/hyper-pixel-4-rectangular.jscad +10 -0
- package/examples/pi4.jscad +1 -1
- package/examples/pi5.jscad +6 -9
- package/package.json +1 -1
- package/prettier.config.js +7 -0
- package/src/active-cooling-fan.js +0 -139
- package/src/boardutils.js +11 -4
- package/src/bplus.js +102 -62
- package/src/hq_camera-module.js +24 -20
- package/src/hyper-pixel-4-rectangular.js +58 -0
- package/src/index.js +2 -1
- package/src/miniPiTFT.js +1 -1
- package/src/rpi-parts.js +23 -5
package/.vscode/settings.json
CHANGED
|
@@ -3,7 +3,7 @@ function main() {
|
|
|
3
3
|
|
|
4
4
|
var camera = RaspberryPi.ActiveCoolingFan();
|
|
5
5
|
|
|
6
|
-
return camera.
|
|
6
|
+
return camera.combineAll().Center();
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
// include:js
|
|
@@ -2254,7 +2254,8 @@ function initJscadRPi() {
|
|
|
2254
2254
|
jsCadCSG.CSG;
|
|
2255
2255
|
scadApi.booleanOps.union;
|
|
2256
2256
|
function RightSide(o, mb) {
|
|
2257
|
-
|
|
2257
|
+
var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [ 2, 0, 0 ];
|
|
2258
|
+
return o.translate(jscadUtils.array.add(o.calcSnap(mb, "z", "outside-"), o.calcSnap(mb, "x", "inside+"), o.calcSnap(mb, "y", "inside-"), offset));
|
|
2258
2259
|
}
|
|
2259
2260
|
function LeftSide(o, mb) {
|
|
2260
2261
|
return o.translate(calcLeftSide(o, mb));
|
|
@@ -2307,9 +2308,20 @@ function initJscadRPi() {
|
|
|
2307
2308
|
var cyl = jscadUtils.parts.Cylinder(6, 2).rotateX(90).align(block, "xz").snap(block, "y", "outside+").color("black");
|
|
2308
2309
|
return jscadUtils.Group("block,cylinder", [ block, cyl ]);
|
|
2309
2310
|
}
|
|
2311
|
+
function PSW() {
|
|
2312
|
+
var block = jscadUtils.parts.Cube([ 2.8, 4.5, 3.7 ]).color("gray");
|
|
2313
|
+
var cyl = jscadUtils.parts.Cylinder(2, 1).rotateY(90).align(block, "yz").snap(block, "x", "outside+").color("black");
|
|
2314
|
+
return jscadUtils.Group("block,button", [ block, cyl ]);
|
|
2315
|
+
}
|
|
2310
2316
|
function Ribbon() {
|
|
2311
2317
|
return jscadUtils.parts.Cube([ 3, 22.4, 5.7 ]).color("gray");
|
|
2312
2318
|
}
|
|
2319
|
+
function CamDisplay() {
|
|
2320
|
+
return jscadUtils.parts.Cube([ 3, 16, 5 ]).color("gray");
|
|
2321
|
+
}
|
|
2322
|
+
function PCIe() {
|
|
2323
|
+
return jscadUtils.parts.Cube([ 3, 12, 5 ]).color("gray");
|
|
2324
|
+
}
|
|
2313
2325
|
function Gpio(mb) {
|
|
2314
2326
|
var gpio = jscadUtils.parts.Cube([ 50.64, 5, 8.72 ]).color("gray");
|
|
2315
2327
|
return mb ? gpio.snap(mb, "xy", "inside-").snap(mb, "z", "outside-").midlineTo("x", 32.5).midlineTo("y", 52.5) : gpio;
|
|
@@ -2317,13 +2329,13 @@ function initJscadRPi() {
|
|
|
2317
2329
|
function BoardLed() {
|
|
2318
2330
|
return jscadUtils.parts.Cube([ 1, 2, .7 ]);
|
|
2319
2331
|
}
|
|
2320
|
-
var debug$
|
|
2332
|
+
var debug$4 = jscadUtils.Debug("jscadRPi:BPlusMounting");
|
|
2321
2333
|
function holes(mb) {
|
|
2322
2334
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
2323
2335
|
options = Object.assign(options, {
|
|
2324
2336
|
height: 8
|
|
2325
2337
|
});
|
|
2326
|
-
debug$
|
|
2338
|
+
debug$4("holes", mb, options);
|
|
2327
2339
|
var hole = MountingHole(options.diameter || 3.25, options.height).snap(mb, "xy", "inside-").align(mb, "z");
|
|
2328
2340
|
var holes = [ hole.midlineTo("x", 3.5).midlineTo("y", 3.5), hole.midlineTo("x", 61.5).midlineTo("y", 3.5), hole.midlineTo("x", 3.5).midlineTo("y", 52.5), hole.midlineTo("x", 61.5).midlineTo("y", 52.5) ];
|
|
2329
2341
|
return jscadUtils.Group("hole1,hole2,hole3,hole4", holes);
|
|
@@ -2342,9 +2354,9 @@ function initJscadRPi() {
|
|
|
2342
2354
|
holes,
|
|
2343
2355
|
pads
|
|
2344
2356
|
};
|
|
2345
|
-
var debug$
|
|
2357
|
+
var debug$3 = jscadUtils.Debug("jscadRPi:BPlus");
|
|
2346
2358
|
function pi4(group, clearance, mb) {
|
|
2347
|
-
group.add(RightSide(jscadUtils.parts.Cube([ 21.5, 16.5, 13.5 ]).color("lightgray"), mb
|
|
2359
|
+
group.add(RightSide(jscadUtils.parts.Cube([ 21.5, 16.5, 13.5 ]).color("lightgray"), mb, [ 3, 0, 0 ]).midlineTo("y", 45.75), "ethernet");
|
|
2348
2360
|
group.add(jscadUtils.parts.Cube([ clearance, 16.5, 13.5 ]).align(group.parts.ethernet, "yz").snap(group.parts.ethernet, "x", "outside-").color("red"), "clearance-ethernet", true, "clearance");
|
|
2349
2361
|
var usb = jscadUtils.Group();
|
|
2350
2362
|
usb.add(jscadUtils.parts.Cube([ 17, 13.1, 15 ]).snap(group.parts.ethernet, "x", "inside+", -1).snap(mb, "z", "outside-", 1.5).color("lightgray"), "body");
|
|
@@ -2368,30 +2380,31 @@ function initJscadRPi() {
|
|
|
2368
2380
|
group.add(BoardLed().snap(mb, "z", "outside-").midlineTo("x", 1.1).midlineTo("y", 12).color("red"), "powerled");
|
|
2369
2381
|
}
|
|
2370
2382
|
function pi5(group, clearance, mb) {
|
|
2371
|
-
group.add(jscadUtils.parts.Cube([
|
|
2372
|
-
group.add(jscadUtils.parts.Cube([
|
|
2373
|
-
group.add(RightSide(jscadUtils.parts.Cube([ 21.5, 16.5, 13.5 ]).color("lightgray"), mb
|
|
2383
|
+
group.add(jscadUtils.parts.Cube([ 17, 17, 3 ]).color("lightgray").translate([ 0, 15, 0 ]).midlineTo("x", 29 + 3.5).snap(group.parts.mb, "z", "outside-"), "cpu");
|
|
2384
|
+
group.add(jscadUtils.parts.Cube([ 17, 17, clearance ]).color("red").align(group.parts.cpu, "xy").snap(group.parts.cpu, "z", "outside-"), "clearance-cpu", true, "clearance");
|
|
2385
|
+
group.add(RightSide(jscadUtils.parts.Cube([ 21.5, 16.5, 13.5 ]).color("lightgray"), mb, [ 3, 0, 0 ]).midlineTo("y", 10.2), "ethernet");
|
|
2374
2386
|
group.add(jscadUtils.parts.Cube([ clearance, 16.5, 13.5 ]).align(group.parts.ethernet, "yz").snap(group.parts.ethernet, "x", "outside-").color("red"), "clearance-ethernet", true, "clearance");
|
|
2375
2387
|
var usb = jscadUtils.Group();
|
|
2376
|
-
usb.add(jscadUtils.parts.Cube([ 17, 13.1, 15 ]).snap(group.parts.ethernet, "x", "inside+", -1).snap(mb, "z", "outside-",
|
|
2377
|
-
usb.add(jscadUtils.parts.Cube([ 1, 15, 16 ]).snap(usb.parts.body, "x", "outside-").align(usb.parts.body, "yz").color("lightgray"), "flange");
|
|
2378
|
-
group.add(usb.clone().translate(jscadUtils.util.calcmidlineTo(usb.parts.body, "y", 29.
|
|
2379
|
-
group.add(jscadUtils.parts.Cube([ clearance, 15, 16 ]).align(group.parts.usb1, "yz").snap(group.parts.usb1, "x", "outside-").color("red"), "clearance-usb1", true);
|
|
2388
|
+
usb.add(jscadUtils.parts.Cube([ 17, 13.1, 15 ]).snap(group.parts.ethernet, "x", "inside+", -1).snap(mb, "z", "outside-", .5).color("lightgray"), "body");
|
|
2389
|
+
usb.add(jscadUtils.parts.Cube([ 1, 15, 16.5 ]).snap(usb.parts.body, "x", "outside-").align(usb.parts.body, "yz").color("lightgray"), "flange");
|
|
2390
|
+
group.add(usb.clone().translate(jscadUtils.util.calcmidlineTo(usb.parts.body, "y", 29.1)), "usb1", false, "usb1");
|
|
2391
|
+
group.add(jscadUtils.parts.Cube([ clearance, 15, 16.5 ]).align(group.parts.usb1, "yz").snap(group.parts.usb1, "x", "outside-").color("red"), "clearance-usb1", true);
|
|
2380
2392
|
group.add(usb.clone().translate(jscadUtils.util.calcmidlineTo(usb.parts.body, "y", 47)), "usb2", false, "usb2");
|
|
2381
2393
|
group.add(jscadUtils.parts.Cube([ clearance, 15, 16 ]).align(group.parts.usb2, "yz").snap(group.parts.usb2, "x", "outside-").color("red"), "clearance-usb2", true);
|
|
2382
|
-
group.add(jscadUtils.parts.Cube([ 10, 7.5, 3.2 ]).snap(usb.parts.body, "y", "inside-", -1).snap(mb, "z", "outside-").midlineTo("x",
|
|
2394
|
+
group.add(jscadUtils.parts.Cube([ 10, 7.5, 3.2 ]).snap(usb.parts.body, "y", "inside-", -1).snap(mb, "z", "outside-").midlineTo("x", 11.2).color("lightgray"), "usbc");
|
|
2383
2395
|
group.add(jscadUtils.parts.Cube([ 10, clearance, 3.2 ]).align(group.parts.usbc, "xz").snap(group.parts.usbc, "y", "outside+").color("red"), "clearance-usbc", true);
|
|
2384
|
-
group.add(jscadUtils.parts.Cube([ 7, 7.5, 3 ]).snap(usb.parts.body, "y", "inside-", -1).snap(mb, "z", "outside-").midlineTo("x",
|
|
2396
|
+
group.add(jscadUtils.parts.Cube([ 7, 7.5, 3 ]).snap(usb.parts.body, "y", "inside-", -1).snap(mb, "z", "outside-").midlineTo("x", 25.8).color("lightgray"), "hdmi1");
|
|
2385
2397
|
group.add(jscadUtils.parts.Cube([ 7, clearance, 3 ]).align(group.parts.hdmi1, "xz").snap(group.parts.hdmi1, "y", "outside+").color("red"), "clearance-hdmi1", true);
|
|
2386
|
-
group.add(jscadUtils.parts.Cube([ 7, 7.5, 3 ]).snap(usb.parts.body, "y", "inside-", -1).snap(mb, "z", "outside-").midlineTo("x",
|
|
2398
|
+
group.add(jscadUtils.parts.Cube([ 7, 7.5, 3 ]).snap(usb.parts.body, "y", "inside-", -1).snap(mb, "z", "outside-").midlineTo("x", 39.2).color("lightgray"), "hdmi2");
|
|
2387
2399
|
group.add(jscadUtils.parts.Cube([ 7, clearance, 3 ]).align(group.parts.hdmi2, "xz").snap(group.parts.hdmi2, "y", "outside+").color("red"), "clearance-hdmi2", true);
|
|
2388
|
-
group.add(
|
|
2389
|
-
group.add(
|
|
2390
|
-
group.add(
|
|
2391
|
-
group.add(Ribbon().snap(mb, "z", "outside-").midlineTo("x", 4).midlineTo("y", 24.5 + 3.5), "display");
|
|
2400
|
+
group.add(CamDisplay().snap(mb, "z", "outside-").midlineTo("x", 55), "camera0");
|
|
2401
|
+
group.add(CamDisplay().snap(mb, "z", "outside-").midlineTo("x", 50), "camera1");
|
|
2402
|
+
group.add(PCIe().snap(mb, "z", "outside-").midlineTo("x", 3.5).midlineTo("y", 30), "display");
|
|
2392
2403
|
group.add(Gpio().snap(mb, "z", "outside-").midlineTo("x", 29 + 3.5).midlineTo("y", 56 - 3.5), "gpio");
|
|
2393
|
-
group.add(BoardLed().snap(mb, "z", "outside-").midlineTo("x", 1.1).midlineTo("y",
|
|
2394
|
-
group.add(
|
|
2404
|
+
group.add(BoardLed().snap(mb, "z", "outside-").midlineTo("x", 1.1).midlineTo("y", 13.3).color("lightgreen"), "statusled");
|
|
2405
|
+
group.add(jscadUtils.parts.Cylinder(2, clearance).rotateY(90).align(group.parts.statusled, "yz").snap(mb, "x", "outside+").color("red"), "clearance-statusled", true);
|
|
2406
|
+
group.add(PSW().snap("block", mb, "z", "outside-").snap("block", mb, "x", "inside-").midlineTo("block", "y", 18.4), "powerswitch");
|
|
2407
|
+
group.add(jscadUtils.parts.Cylinder(3, clearance).rotateY(90).align(group.parts.powerswitch, "yz").snap(group.parts.powerswitch, "x", "outside+").color("red"), "clearance-powerswitch", true);
|
|
2395
2408
|
}
|
|
2396
2409
|
function BPlus() {
|
|
2397
2410
|
var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2;
|
|
@@ -2400,15 +2413,15 @@ function initJscadRPi() {
|
|
|
2400
2413
|
clearance: 5
|
|
2401
2414
|
}, options), clearance = _Object$assign.clearance;
|
|
2402
2415
|
model = !model ? 2 : model === true ? 3 : model;
|
|
2403
|
-
debug$
|
|
2416
|
+
debug$3("BPlus model:", model);
|
|
2404
2417
|
var mb = BPlusMotherboard(model == 4 ? 3 : 2);
|
|
2405
2418
|
var group = jscadUtils.Group("mb", mb);
|
|
2406
2419
|
if (model < 4) {
|
|
2407
2420
|
group.add(RightSide(EthernetJack(), mb).midlineTo("y", 10.25), "ethernet");
|
|
2408
|
-
debug$
|
|
2421
|
+
debug$3("mb", mb);
|
|
2409
2422
|
var usb = UsbJack();
|
|
2410
2423
|
var usbTranslation = jscadUtils.array.add(usb.parts.flange.calcSnap(mb, "x", "inside+"), [ 2, 0, 0 ], usb.parts.body.calcSnap(mb, "y", "inside-"), usb.parts.body.calcSnap(mb, "z", "outside-"));
|
|
2411
|
-
debug$
|
|
2424
|
+
debug$3("usbTranslation", usbTranslation, jscadUtils.util.calcmidlineTo(usb.parts.body, "y", 29));
|
|
2412
2425
|
group.add(usb.clone().translate(usbTranslation).translate(jscadUtils.util.calcmidlineTo(usb.parts.body, "y", 29)), "usb1", false, "usb1");
|
|
2413
2426
|
group.add(usb.clone().translate(usbTranslation).translate(jscadUtils.util.calcmidlineTo(usb.parts.body, "y", 47)), "usb2", false, "usb2");
|
|
2414
2427
|
group.add(MicroUsb().snap(mb, "z", "outside-").midlineTo("x", 10.6).translate([ 0, -2, 0 ]), "microusb");
|
|
@@ -2436,10 +2449,13 @@ function initJscadRPi() {
|
|
|
2436
2449
|
group.add(group.holes[2], "hole3", true);
|
|
2437
2450
|
group.add(group.holes[3], "hole4", true);
|
|
2438
2451
|
if (model >= 5) {
|
|
2439
|
-
group.holes.push(MountingHole(3.25,
|
|
2452
|
+
group.holes.push(MountingHole(3.25, 1.32).snap(mb, "xy", "inside-").align(mb, "z").midlineTo("x", 3.5).midlineTo("y", 6 + 3.5));
|
|
2440
2453
|
group.add(group.holes[4], "fan1hole", true);
|
|
2441
|
-
group.holes.push(MountingHole(3.25,
|
|
2454
|
+
group.holes.push(MountingHole(3.25, 1.32).snap(mb, "xy", "inside-").align(mb, "z").midlineTo("x", 3.5 + 58).midlineTo("y", 52.5 - 6));
|
|
2442
2455
|
group.add(group.holes[5], "fan2hole", true);
|
|
2456
|
+
var fanClearance = jscadUtils.parts.Cylinder(4.5, 4).color("red").align(group.parts.fan1hole, "xy").snap(group.parts.mb, "z", "outside+");
|
|
2457
|
+
group.add(fanClearance, "clearance-fan1", true, "clearance");
|
|
2458
|
+
group.add(fanClearance.align(group.parts.fan2hole, "xy").snap(group.parts.mb, "z", "outside+"), "clearance-fan2", true, "clearance");
|
|
2443
2459
|
}
|
|
2444
2460
|
return group;
|
|
2445
2461
|
}
|
|
@@ -2555,8 +2571,10 @@ function initJscadRPi() {
|
|
|
2555
2571
|
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
|
|
2556
2572
|
}
|
|
2557
2573
|
}
|
|
2574
|
+
var debug$2 = jscadUtils.Debug("jscadRPi:HQCameraModule");
|
|
2558
2575
|
function HQCameraModule() {
|
|
2559
2576
|
var _camera$holes;
|
|
2577
|
+
var flipTripodMount = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
2560
2578
|
var t = 1.1;
|
|
2561
2579
|
var camera = jscadUtils.Group();
|
|
2562
2580
|
camera.add(jscadUtils.parts.RoundedCube(38, 38, t, 1.4).Center().color("green", .75), "board");
|
|
@@ -2572,12 +2590,37 @@ function initJscadRPi() {
|
|
|
2572
2590
|
var mountInside = jscadUtils.parts.Cylinder(30.75, 10.2).snap(camera.parts.board, "z", "outside-").align(camera.parts.board, "xy").color("black");
|
|
2573
2591
|
camera.add(mount.subtract(mountInside), "mount");
|
|
2574
2592
|
camera.add(mount, "mount-clearance", true);
|
|
2575
|
-
var
|
|
2576
|
-
|
|
2593
|
+
var tripodMountBase = jscadUtils.parts.Cube([ 24.5, 10, 7.62 ]).snap(mount, "z", "inside+").snap(camera.parts.board, "y", "inside-", -1).align(mount, "x").color("darkgray").subtract(mountInside);
|
|
2594
|
+
var tripodMount = jscadUtils.parts.Cube([ 14, 11.5, 11.5 ]).snap(tripodMountBase, "z", flipTripodMount ? "inside-" : "inside+").snap(tripodMountBase, "y", "outside+").align(mount, "x").color("gray");
|
|
2595
|
+
camera.add(tripodMountBase.union(tripodMount), "tripodMount");
|
|
2577
2596
|
camera.add(jscadUtils.parts.Cube([ 20.8, 5.5, 3.55 - t ]).snap(camera.parts.board, "y", "inside-").snap(camera.parts.board, "z", "outside+").align(camera.parts.board, "x"), "ribbon");
|
|
2578
2597
|
camera.add(camera.parts.ribbon.enlarge(2, 4, -1).snap(camera.parts.ribbon, "y", "outside+").color("red"), "ribbon-nogo");
|
|
2598
|
+
debug$2("camera parts", camera.parts);
|
|
2579
2599
|
return camera;
|
|
2580
2600
|
}
|
|
2601
|
+
scadApi.booleanOps.union;
|
|
2602
|
+
var debug$1 = jscadUtils.Debug("jscadRPi:HyperPixel4Rectangular");
|
|
2603
|
+
function HyperPixel4Rectangular(pi) {
|
|
2604
|
+
var group = jscadUtils.Group();
|
|
2605
|
+
var board = jscadUtils.parts.Cube([ 97.85, 58.14, 1.65 ]).Center();
|
|
2606
|
+
var notch = jscadUtils.parts.RoundedCube(10.1, 58.14 - 4.57 * 2, 1.65, 1.5).align(board, "y").snap(board, "x", "inside-").snap(board, "x", "inside+").translate([ 2, 0, 0 ]);
|
|
2607
|
+
group.add(board.subtract(notch).color("green", .75), "mb");
|
|
2608
|
+
var lcd = jscadUtils.parts.Cube([ 97.1, 58.44, 6.84 - 1.65 ]).color("black");
|
|
2609
|
+
group.add(lcd.align(board, "xy").translate(lcd.calcSnap(board, "z", "outside-")).translate([ 0, 0, .5 ]), "lcd");
|
|
2610
|
+
var pad = Mountingpad(5.5, 22.78 - 5.8).snap(board, "z", "outside+").snap(board, "xy", "inside+").translate([ -15.35 + (5.5 - 2), -4.57 + (5.5 - 2), 0 ]);
|
|
2611
|
+
var pads = [ pad, pad.translate([ -58, 0, 0 ]), pad.translate([ 0, -49, 0 ]), pad.translate([ -58, -49, 0 ]) ];
|
|
2612
|
+
group.add(pads[0], "pad1");
|
|
2613
|
+
group.add(pads[1], "pad2");
|
|
2614
|
+
group.add(pads[2], "pad3");
|
|
2615
|
+
group.add(pads[3], "pad4");
|
|
2616
|
+
group.rotate("mb", "z", 180);
|
|
2617
|
+
debug$1("pi.parts", pi ? pi.parts : null);
|
|
2618
|
+
debug$1("group.parts", group.parts);
|
|
2619
|
+
if (pi) {
|
|
2620
|
+
group.align("pad1", pi.parts.hole1, "xy").snap("pad1", pi.parts.mb, "z", "outside-");
|
|
2621
|
+
}
|
|
2622
|
+
return group;
|
|
2623
|
+
}
|
|
2581
2624
|
function boardButton(name, board, midline) {
|
|
2582
2625
|
var g = jscadUtils.Group(name);
|
|
2583
2626
|
g.add(jscadUtils.parts.Cube([ 6.5, 6.5, 2 ]).color("silver").snap(board, "xy", "inside-").snap(board, "z", "outside-").midlineTo("y", midline), "base");
|
|
@@ -2603,7 +2646,7 @@ function initJscadRPi() {
|
|
|
2603
2646
|
g.add(buttonCap("buttonCap2", g.parts.button2), "buttonCap2", true, "buttonCap2-");
|
|
2604
2647
|
g.add(jscadUtils.parts.Cube([ 1, 5, .5 ]).color("blue").align(g.parts.buttonCap1, "x").snap(g.parts.buttonCap1, "y", "outside+", 1).snap(g.parts.buttonCap1, "z", "inside-"), "button-connector", true);
|
|
2605
2648
|
g.add(g.parts["button-connector"].enlarge(.5, .5, .5).color("red"), "button-connector-clearance", true);
|
|
2606
|
-
g.add(jscadUtils.parts.Tube(7, 3,
|
|
2649
|
+
g.add(jscadUtils.parts.Tube(7, 3, 8.5).snap(board, "x", "inside-").snap(board, "y", "inside+").snap(board, "z", "outside+").color("yellow"), "standoff", true);
|
|
2607
2650
|
return g;
|
|
2608
2651
|
}
|
|
2609
2652
|
function PiTFT22() {
|
|
@@ -2723,6 +2766,7 @@ function initJscadRPi() {
|
|
|
2723
2766
|
exports.HQCameraModule = HQCameraModule;
|
|
2724
2767
|
exports.Hat = Hat;
|
|
2725
2768
|
exports.HatStandoff = HatStandoff;
|
|
2769
|
+
exports.HyperPixel4Rectangular = HyperPixel4Rectangular;
|
|
2726
2770
|
exports.MiniPiTFT = miniPiTFT;
|
|
2727
2771
|
exports.PiTFT22 = PiTFT22;
|
|
2728
2772
|
exports.PiTFT24 = PiTFT24;
|
|
@@ -2254,7 +2254,8 @@ function initJscadRPi() {
|
|
|
2254
2254
|
jsCadCSG.CSG;
|
|
2255
2255
|
scadApi.booleanOps.union;
|
|
2256
2256
|
function RightSide(o, mb) {
|
|
2257
|
-
|
|
2257
|
+
var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [ 2, 0, 0 ];
|
|
2258
|
+
return o.translate(jscadUtils.array.add(o.calcSnap(mb, "z", "outside-"), o.calcSnap(mb, "x", "inside+"), o.calcSnap(mb, "y", "inside-"), offset));
|
|
2258
2259
|
}
|
|
2259
2260
|
function LeftSide(o, mb) {
|
|
2260
2261
|
return o.translate(calcLeftSide(o, mb));
|
|
@@ -2307,9 +2308,20 @@ function initJscadRPi() {
|
|
|
2307
2308
|
var cyl = jscadUtils.parts.Cylinder(6, 2).rotateX(90).align(block, "xz").snap(block, "y", "outside+").color("black");
|
|
2308
2309
|
return jscadUtils.Group("block,cylinder", [ block, cyl ]);
|
|
2309
2310
|
}
|
|
2311
|
+
function PSW() {
|
|
2312
|
+
var block = jscadUtils.parts.Cube([ 2.8, 4.5, 3.7 ]).color("gray");
|
|
2313
|
+
var cyl = jscadUtils.parts.Cylinder(2, 1).rotateY(90).align(block, "yz").snap(block, "x", "outside+").color("black");
|
|
2314
|
+
return jscadUtils.Group("block,button", [ block, cyl ]);
|
|
2315
|
+
}
|
|
2310
2316
|
function Ribbon() {
|
|
2311
2317
|
return jscadUtils.parts.Cube([ 3, 22.4, 5.7 ]).color("gray");
|
|
2312
2318
|
}
|
|
2319
|
+
function CamDisplay() {
|
|
2320
|
+
return jscadUtils.parts.Cube([ 3, 16, 5 ]).color("gray");
|
|
2321
|
+
}
|
|
2322
|
+
function PCIe() {
|
|
2323
|
+
return jscadUtils.parts.Cube([ 3, 12, 5 ]).color("gray");
|
|
2324
|
+
}
|
|
2313
2325
|
function Gpio(mb) {
|
|
2314
2326
|
var gpio = jscadUtils.parts.Cube([ 50.64, 5, 8.72 ]).color("gray");
|
|
2315
2327
|
return mb ? gpio.snap(mb, "xy", "inside-").snap(mb, "z", "outside-").midlineTo("x", 32.5).midlineTo("y", 52.5) : gpio;
|
|
@@ -2317,13 +2329,13 @@ function initJscadRPi() {
|
|
|
2317
2329
|
function BoardLed() {
|
|
2318
2330
|
return jscadUtils.parts.Cube([ 1, 2, .7 ]);
|
|
2319
2331
|
}
|
|
2320
|
-
var debug$
|
|
2332
|
+
var debug$4 = jscadUtils.Debug("jscadRPi:BPlusMounting");
|
|
2321
2333
|
function holes(mb) {
|
|
2322
2334
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
2323
2335
|
options = Object.assign(options, {
|
|
2324
2336
|
height: 8
|
|
2325
2337
|
});
|
|
2326
|
-
debug$
|
|
2338
|
+
debug$4("holes", mb, options);
|
|
2327
2339
|
var hole = MountingHole(options.diameter || 3.25, options.height).snap(mb, "xy", "inside-").align(mb, "z");
|
|
2328
2340
|
var holes = [ hole.midlineTo("x", 3.5).midlineTo("y", 3.5), hole.midlineTo("x", 61.5).midlineTo("y", 3.5), hole.midlineTo("x", 3.5).midlineTo("y", 52.5), hole.midlineTo("x", 61.5).midlineTo("y", 52.5) ];
|
|
2329
2341
|
return jscadUtils.Group("hole1,hole2,hole3,hole4", holes);
|
|
@@ -2342,9 +2354,9 @@ function initJscadRPi() {
|
|
|
2342
2354
|
holes,
|
|
2343
2355
|
pads
|
|
2344
2356
|
};
|
|
2345
|
-
var debug$
|
|
2357
|
+
var debug$3 = jscadUtils.Debug("jscadRPi:BPlus");
|
|
2346
2358
|
function pi4(group, clearance, mb) {
|
|
2347
|
-
group.add(RightSide(jscadUtils.parts.Cube([ 21.5, 16.5, 13.5 ]).color("lightgray"), mb
|
|
2359
|
+
group.add(RightSide(jscadUtils.parts.Cube([ 21.5, 16.5, 13.5 ]).color("lightgray"), mb, [ 3, 0, 0 ]).midlineTo("y", 45.75), "ethernet");
|
|
2348
2360
|
group.add(jscadUtils.parts.Cube([ clearance, 16.5, 13.5 ]).align(group.parts.ethernet, "yz").snap(group.parts.ethernet, "x", "outside-").color("red"), "clearance-ethernet", true, "clearance");
|
|
2349
2361
|
var usb = jscadUtils.Group();
|
|
2350
2362
|
usb.add(jscadUtils.parts.Cube([ 17, 13.1, 15 ]).snap(group.parts.ethernet, "x", "inside+", -1).snap(mb, "z", "outside-", 1.5).color("lightgray"), "body");
|
|
@@ -2368,30 +2380,31 @@ function initJscadRPi() {
|
|
|
2368
2380
|
group.add(BoardLed().snap(mb, "z", "outside-").midlineTo("x", 1.1).midlineTo("y", 12).color("red"), "powerled");
|
|
2369
2381
|
}
|
|
2370
2382
|
function pi5(group, clearance, mb) {
|
|
2371
|
-
group.add(jscadUtils.parts.Cube([
|
|
2372
|
-
group.add(jscadUtils.parts.Cube([
|
|
2373
|
-
group.add(RightSide(jscadUtils.parts.Cube([ 21.5, 16.5, 13.5 ]).color("lightgray"), mb
|
|
2383
|
+
group.add(jscadUtils.parts.Cube([ 17, 17, 3 ]).color("lightgray").translate([ 0, 15, 0 ]).midlineTo("x", 29 + 3.5).snap(group.parts.mb, "z", "outside-"), "cpu");
|
|
2384
|
+
group.add(jscadUtils.parts.Cube([ 17, 17, clearance ]).color("red").align(group.parts.cpu, "xy").snap(group.parts.cpu, "z", "outside-"), "clearance-cpu", true, "clearance");
|
|
2385
|
+
group.add(RightSide(jscadUtils.parts.Cube([ 21.5, 16.5, 13.5 ]).color("lightgray"), mb, [ 3, 0, 0 ]).midlineTo("y", 10.2), "ethernet");
|
|
2374
2386
|
group.add(jscadUtils.parts.Cube([ clearance, 16.5, 13.5 ]).align(group.parts.ethernet, "yz").snap(group.parts.ethernet, "x", "outside-").color("red"), "clearance-ethernet", true, "clearance");
|
|
2375
2387
|
var usb = jscadUtils.Group();
|
|
2376
|
-
usb.add(jscadUtils.parts.Cube([ 17, 13.1, 15 ]).snap(group.parts.ethernet, "x", "inside+", -1).snap(mb, "z", "outside-",
|
|
2377
|
-
usb.add(jscadUtils.parts.Cube([ 1, 15, 16 ]).snap(usb.parts.body, "x", "outside-").align(usb.parts.body, "yz").color("lightgray"), "flange");
|
|
2378
|
-
group.add(usb.clone().translate(jscadUtils.util.calcmidlineTo(usb.parts.body, "y", 29.
|
|
2379
|
-
group.add(jscadUtils.parts.Cube([ clearance, 15, 16 ]).align(group.parts.usb1, "yz").snap(group.parts.usb1, "x", "outside-").color("red"), "clearance-usb1", true);
|
|
2388
|
+
usb.add(jscadUtils.parts.Cube([ 17, 13.1, 15 ]).snap(group.parts.ethernet, "x", "inside+", -1).snap(mb, "z", "outside-", .5).color("lightgray"), "body");
|
|
2389
|
+
usb.add(jscadUtils.parts.Cube([ 1, 15, 16.5 ]).snap(usb.parts.body, "x", "outside-").align(usb.parts.body, "yz").color("lightgray"), "flange");
|
|
2390
|
+
group.add(usb.clone().translate(jscadUtils.util.calcmidlineTo(usb.parts.body, "y", 29.1)), "usb1", false, "usb1");
|
|
2391
|
+
group.add(jscadUtils.parts.Cube([ clearance, 15, 16.5 ]).align(group.parts.usb1, "yz").snap(group.parts.usb1, "x", "outside-").color("red"), "clearance-usb1", true);
|
|
2380
2392
|
group.add(usb.clone().translate(jscadUtils.util.calcmidlineTo(usb.parts.body, "y", 47)), "usb2", false, "usb2");
|
|
2381
2393
|
group.add(jscadUtils.parts.Cube([ clearance, 15, 16 ]).align(group.parts.usb2, "yz").snap(group.parts.usb2, "x", "outside-").color("red"), "clearance-usb2", true);
|
|
2382
|
-
group.add(jscadUtils.parts.Cube([ 10, 7.5, 3.2 ]).snap(usb.parts.body, "y", "inside-", -1).snap(mb, "z", "outside-").midlineTo("x",
|
|
2394
|
+
group.add(jscadUtils.parts.Cube([ 10, 7.5, 3.2 ]).snap(usb.parts.body, "y", "inside-", -1).snap(mb, "z", "outside-").midlineTo("x", 11.2).color("lightgray"), "usbc");
|
|
2383
2395
|
group.add(jscadUtils.parts.Cube([ 10, clearance, 3.2 ]).align(group.parts.usbc, "xz").snap(group.parts.usbc, "y", "outside+").color("red"), "clearance-usbc", true);
|
|
2384
|
-
group.add(jscadUtils.parts.Cube([ 7, 7.5, 3 ]).snap(usb.parts.body, "y", "inside-", -1).snap(mb, "z", "outside-").midlineTo("x",
|
|
2396
|
+
group.add(jscadUtils.parts.Cube([ 7, 7.5, 3 ]).snap(usb.parts.body, "y", "inside-", -1).snap(mb, "z", "outside-").midlineTo("x", 25.8).color("lightgray"), "hdmi1");
|
|
2385
2397
|
group.add(jscadUtils.parts.Cube([ 7, clearance, 3 ]).align(group.parts.hdmi1, "xz").snap(group.parts.hdmi1, "y", "outside+").color("red"), "clearance-hdmi1", true);
|
|
2386
|
-
group.add(jscadUtils.parts.Cube([ 7, 7.5, 3 ]).snap(usb.parts.body, "y", "inside-", -1).snap(mb, "z", "outside-").midlineTo("x",
|
|
2398
|
+
group.add(jscadUtils.parts.Cube([ 7, 7.5, 3 ]).snap(usb.parts.body, "y", "inside-", -1).snap(mb, "z", "outside-").midlineTo("x", 39.2).color("lightgray"), "hdmi2");
|
|
2387
2399
|
group.add(jscadUtils.parts.Cube([ 7, clearance, 3 ]).align(group.parts.hdmi2, "xz").snap(group.parts.hdmi2, "y", "outside+").color("red"), "clearance-hdmi2", true);
|
|
2388
|
-
group.add(
|
|
2389
|
-
group.add(
|
|
2390
|
-
group.add(
|
|
2391
|
-
group.add(Ribbon().snap(mb, "z", "outside-").midlineTo("x", 4).midlineTo("y", 24.5 + 3.5), "display");
|
|
2400
|
+
group.add(CamDisplay().snap(mb, "z", "outside-").midlineTo("x", 55), "camera0");
|
|
2401
|
+
group.add(CamDisplay().snap(mb, "z", "outside-").midlineTo("x", 50), "camera1");
|
|
2402
|
+
group.add(PCIe().snap(mb, "z", "outside-").midlineTo("x", 3.5).midlineTo("y", 30), "display");
|
|
2392
2403
|
group.add(Gpio().snap(mb, "z", "outside-").midlineTo("x", 29 + 3.5).midlineTo("y", 56 - 3.5), "gpio");
|
|
2393
|
-
group.add(BoardLed().snap(mb, "z", "outside-").midlineTo("x", 1.1).midlineTo("y",
|
|
2394
|
-
group.add(
|
|
2404
|
+
group.add(BoardLed().snap(mb, "z", "outside-").midlineTo("x", 1.1).midlineTo("y", 13.3).color("lightgreen"), "statusled");
|
|
2405
|
+
group.add(jscadUtils.parts.Cylinder(2, clearance).rotateY(90).align(group.parts.statusled, "yz").snap(mb, "x", "outside+").color("red"), "clearance-statusled", true);
|
|
2406
|
+
group.add(PSW().snap("block", mb, "z", "outside-").snap("block", mb, "x", "inside-").midlineTo("block", "y", 18.4), "powerswitch");
|
|
2407
|
+
group.add(jscadUtils.parts.Cylinder(3, clearance).rotateY(90).align(group.parts.powerswitch, "yz").snap(group.parts.powerswitch, "x", "outside+").color("red"), "clearance-powerswitch", true);
|
|
2395
2408
|
}
|
|
2396
2409
|
function BPlus() {
|
|
2397
2410
|
var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2;
|
|
@@ -2400,15 +2413,15 @@ function initJscadRPi() {
|
|
|
2400
2413
|
clearance: 5
|
|
2401
2414
|
}, options), clearance = _Object$assign.clearance;
|
|
2402
2415
|
model = !model ? 2 : model === true ? 3 : model;
|
|
2403
|
-
debug$
|
|
2416
|
+
debug$3("BPlus model:", model);
|
|
2404
2417
|
var mb = BPlusMotherboard(model == 4 ? 3 : 2);
|
|
2405
2418
|
var group = jscadUtils.Group("mb", mb);
|
|
2406
2419
|
if (model < 4) {
|
|
2407
2420
|
group.add(RightSide(EthernetJack(), mb).midlineTo("y", 10.25), "ethernet");
|
|
2408
|
-
debug$
|
|
2421
|
+
debug$3("mb", mb);
|
|
2409
2422
|
var usb = UsbJack();
|
|
2410
2423
|
var usbTranslation = jscadUtils.array.add(usb.parts.flange.calcSnap(mb, "x", "inside+"), [ 2, 0, 0 ], usb.parts.body.calcSnap(mb, "y", "inside-"), usb.parts.body.calcSnap(mb, "z", "outside-"));
|
|
2411
|
-
debug$
|
|
2424
|
+
debug$3("usbTranslation", usbTranslation, jscadUtils.util.calcmidlineTo(usb.parts.body, "y", 29));
|
|
2412
2425
|
group.add(usb.clone().translate(usbTranslation).translate(jscadUtils.util.calcmidlineTo(usb.parts.body, "y", 29)), "usb1", false, "usb1");
|
|
2413
2426
|
group.add(usb.clone().translate(usbTranslation).translate(jscadUtils.util.calcmidlineTo(usb.parts.body, "y", 47)), "usb2", false, "usb2");
|
|
2414
2427
|
group.add(MicroUsb().snap(mb, "z", "outside-").midlineTo("x", 10.6).translate([ 0, -2, 0 ]), "microusb");
|
|
@@ -2436,10 +2449,13 @@ function initJscadRPi() {
|
|
|
2436
2449
|
group.add(group.holes[2], "hole3", true);
|
|
2437
2450
|
group.add(group.holes[3], "hole4", true);
|
|
2438
2451
|
if (model >= 5) {
|
|
2439
|
-
group.holes.push(MountingHole(3.25,
|
|
2452
|
+
group.holes.push(MountingHole(3.25, 1.32).snap(mb, "xy", "inside-").align(mb, "z").midlineTo("x", 3.5).midlineTo("y", 6 + 3.5));
|
|
2440
2453
|
group.add(group.holes[4], "fan1hole", true);
|
|
2441
|
-
group.holes.push(MountingHole(3.25,
|
|
2454
|
+
group.holes.push(MountingHole(3.25, 1.32).snap(mb, "xy", "inside-").align(mb, "z").midlineTo("x", 3.5 + 58).midlineTo("y", 52.5 - 6));
|
|
2442
2455
|
group.add(group.holes[5], "fan2hole", true);
|
|
2456
|
+
var fanClearance = jscadUtils.parts.Cylinder(4.5, 4).color("red").align(group.parts.fan1hole, "xy").snap(group.parts.mb, "z", "outside+");
|
|
2457
|
+
group.add(fanClearance, "clearance-fan1", true, "clearance");
|
|
2458
|
+
group.add(fanClearance.align(group.parts.fan2hole, "xy").snap(group.parts.mb, "z", "outside+"), "clearance-fan2", true, "clearance");
|
|
2443
2459
|
}
|
|
2444
2460
|
return group;
|
|
2445
2461
|
}
|
|
@@ -2555,8 +2571,10 @@ function initJscadRPi() {
|
|
|
2555
2571
|
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
|
|
2556
2572
|
}
|
|
2557
2573
|
}
|
|
2574
|
+
var debug$2 = jscadUtils.Debug("jscadRPi:HQCameraModule");
|
|
2558
2575
|
function HQCameraModule() {
|
|
2559
2576
|
var _camera$holes;
|
|
2577
|
+
var flipTripodMount = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
2560
2578
|
var t = 1.1;
|
|
2561
2579
|
var camera = jscadUtils.Group();
|
|
2562
2580
|
camera.add(jscadUtils.parts.RoundedCube(38, 38, t, 1.4).Center().color("green", .75), "board");
|
|
@@ -2572,12 +2590,37 @@ function initJscadRPi() {
|
|
|
2572
2590
|
var mountInside = jscadUtils.parts.Cylinder(30.75, 10.2).snap(camera.parts.board, "z", "outside-").align(camera.parts.board, "xy").color("black");
|
|
2573
2591
|
camera.add(mount.subtract(mountInside), "mount");
|
|
2574
2592
|
camera.add(mount, "mount-clearance", true);
|
|
2575
|
-
var
|
|
2576
|
-
|
|
2593
|
+
var tripodMountBase = jscadUtils.parts.Cube([ 24.5, 10, 7.62 ]).snap(mount, "z", "inside+").snap(camera.parts.board, "y", "inside-", -1).align(mount, "x").color("darkgray").subtract(mountInside);
|
|
2594
|
+
var tripodMount = jscadUtils.parts.Cube([ 14, 11.5, 11.5 ]).snap(tripodMountBase, "z", flipTripodMount ? "inside-" : "inside+").snap(tripodMountBase, "y", "outside+").align(mount, "x").color("gray");
|
|
2595
|
+
camera.add(tripodMountBase.union(tripodMount), "tripodMount");
|
|
2577
2596
|
camera.add(jscadUtils.parts.Cube([ 20.8, 5.5, 3.55 - t ]).snap(camera.parts.board, "y", "inside-").snap(camera.parts.board, "z", "outside+").align(camera.parts.board, "x"), "ribbon");
|
|
2578
2597
|
camera.add(camera.parts.ribbon.enlarge(2, 4, -1).snap(camera.parts.ribbon, "y", "outside+").color("red"), "ribbon-nogo");
|
|
2598
|
+
debug$2("camera parts", camera.parts);
|
|
2579
2599
|
return camera;
|
|
2580
2600
|
}
|
|
2601
|
+
scadApi.booleanOps.union;
|
|
2602
|
+
var debug$1 = jscadUtils.Debug("jscadRPi:HyperPixel4Rectangular");
|
|
2603
|
+
function HyperPixel4Rectangular(pi) {
|
|
2604
|
+
var group = jscadUtils.Group();
|
|
2605
|
+
var board = jscadUtils.parts.Cube([ 97.85, 58.14, 1.65 ]).Center();
|
|
2606
|
+
var notch = jscadUtils.parts.RoundedCube(10.1, 58.14 - 4.57 * 2, 1.65, 1.5).align(board, "y").snap(board, "x", "inside-").snap(board, "x", "inside+").translate([ 2, 0, 0 ]);
|
|
2607
|
+
group.add(board.subtract(notch).color("green", .75), "mb");
|
|
2608
|
+
var lcd = jscadUtils.parts.Cube([ 97.1, 58.44, 6.84 - 1.65 ]).color("black");
|
|
2609
|
+
group.add(lcd.align(board, "xy").translate(lcd.calcSnap(board, "z", "outside-")).translate([ 0, 0, .5 ]), "lcd");
|
|
2610
|
+
var pad = Mountingpad(5.5, 22.78 - 5.8).snap(board, "z", "outside+").snap(board, "xy", "inside+").translate([ -15.35 + (5.5 - 2), -4.57 + (5.5 - 2), 0 ]);
|
|
2611
|
+
var pads = [ pad, pad.translate([ -58, 0, 0 ]), pad.translate([ 0, -49, 0 ]), pad.translate([ -58, -49, 0 ]) ];
|
|
2612
|
+
group.add(pads[0], "pad1");
|
|
2613
|
+
group.add(pads[1], "pad2");
|
|
2614
|
+
group.add(pads[2], "pad3");
|
|
2615
|
+
group.add(pads[3], "pad4");
|
|
2616
|
+
group.rotate("mb", "z", 180);
|
|
2617
|
+
debug$1("pi.parts", pi ? pi.parts : null);
|
|
2618
|
+
debug$1("group.parts", group.parts);
|
|
2619
|
+
if (pi) {
|
|
2620
|
+
group.align("pad1", pi.parts.hole1, "xy").snap("pad1", pi.parts.mb, "z", "outside-");
|
|
2621
|
+
}
|
|
2622
|
+
return group;
|
|
2623
|
+
}
|
|
2581
2624
|
function boardButton(name, board, midline) {
|
|
2582
2625
|
var g = jscadUtils.Group(name);
|
|
2583
2626
|
g.add(jscadUtils.parts.Cube([ 6.5, 6.5, 2 ]).color("silver").snap(board, "xy", "inside-").snap(board, "z", "outside-").midlineTo("y", midline), "base");
|
|
@@ -2603,7 +2646,7 @@ function initJscadRPi() {
|
|
|
2603
2646
|
g.add(buttonCap("buttonCap2", g.parts.button2), "buttonCap2", true, "buttonCap2-");
|
|
2604
2647
|
g.add(jscadUtils.parts.Cube([ 1, 5, .5 ]).color("blue").align(g.parts.buttonCap1, "x").snap(g.parts.buttonCap1, "y", "outside+", 1).snap(g.parts.buttonCap1, "z", "inside-"), "button-connector", true);
|
|
2605
2648
|
g.add(g.parts["button-connector"].enlarge(.5, .5, .5).color("red"), "button-connector-clearance", true);
|
|
2606
|
-
g.add(jscadUtils.parts.Tube(7, 3,
|
|
2649
|
+
g.add(jscadUtils.parts.Tube(7, 3, 8.5).snap(board, "x", "inside-").snap(board, "y", "inside+").snap(board, "z", "outside+").color("yellow"), "standoff", true);
|
|
2607
2650
|
return g;
|
|
2608
2651
|
}
|
|
2609
2652
|
function PiTFT22() {
|
|
@@ -2723,6 +2766,7 @@ function initJscadRPi() {
|
|
|
2723
2766
|
exports.HQCameraModule = HQCameraModule;
|
|
2724
2767
|
exports.Hat = Hat;
|
|
2725
2768
|
exports.HatStandoff = HatStandoff;
|
|
2769
|
+
exports.HyperPixel4Rectangular = HyperPixel4Rectangular;
|
|
2726
2770
|
exports.MiniPiTFT = miniPiTFT;
|
|
2727
2771
|
exports.PiTFT22 = PiTFT22;
|
|
2728
2772
|
exports.PiTFT24 = PiTFT24;
|