@jwc/jscad-raspberrypi 3.2.0 → 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 +210 -171
- package/dist/examples/bplus.jscad +209 -170
- package/dist/examples/bplus3.jscad +209 -170
- package/dist/examples/camera-module-v1.jscad +209 -170
- package/dist/examples/camera-module-v2.jscad +209 -170
- package/dist/examples/example.jscad +215 -176
- package/dist/examples/hat-standoff.jscad +209 -170
- package/dist/examples/hat.jscad +209 -170
- package/dist/examples/hq_camera-module.jscad +211 -172
- package/dist/examples/hyper-pixel-4-rectangular.jscad +2781 -0
- package/dist/examples/miniPiTFT.jscad +209 -170
- package/dist/examples/pi-tft22.jscad +209 -170
- package/dist/examples/pi-tft24 copy.jscad +2750 -0
- package/dist/examples/pi-tft24.jscad +209 -170
- package/dist/examples/pi4.jscad +210 -171
- package/dist/examples/pi5.jscad +215 -179
- package/dist/examples/spacer.jscad +209 -170
- 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 +3 -3
- 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/dist/v1compat.js
CHANGED
|
@@ -35,115 +35,32 @@ function initJscadRPi() {
|
|
|
35
35
|
// include:compat
|
|
36
36
|
// ../dist/index.js
|
|
37
37
|
/*
|
|
38
|
-
* @jwc/jscad-raspberrypi version 3.1
|
|
38
|
+
* @jwc/jscad-raspberrypi version 3.2.1
|
|
39
39
|
* https://johnwebbcole.gitlab.io/jscad-raspberrypi
|
|
40
40
|
*/
|
|
41
41
|
var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
42
42
|
'use strict';
|
|
43
43
|
|
|
44
|
-
/**
|
|
45
|
-
* Returns an Adafruit miniPiTFT Hat with buttons.
|
|
46
|
-
*
|
|
47
|
-
* Default parts: board,screen,display,button1,button2
|
|
48
|
-
*
|
|
49
|
-
* All parts: board,screen,display,display-clearance,button1,button1-base,button1-push,button2,button2-base,button2-push,buttonCap1,buttonCap1-cap,buttonCap1-clearance,buttonCap2,buttonCap2-cap,buttonCap2-clearance,button-connector,button-connector-clearance,standoff
|
|
50
|
-
*
|
|
51
|
-
* 
|
|
52
|
-
* @function activeCoolingFan
|
|
53
|
-
*/
|
|
54
44
|
function activeCoolingFan() {
|
|
55
45
|
var g = jscadUtils.Group('ActiveCoolingFan');
|
|
56
46
|
var board = jscadUtils.parts.Cube([64, 42.5, 1]).subtract(jscadUtils.parts.Cube([64 - 58, 31.3, 1]).translate([0, 42.5 - 31.3, 0]).color('orange').union(jscadUtils.parts.Cube([28, 42.5 - 31.3, 1]).translate([64 - 28, 0, 0]).color('blue'))).union(jscadUtils.parts.Cube([19, 40, 9]).translate([64 - 58, 2.5, 0])).color('silver').union(jscadUtils.parts.Cube([30, 30, 9]).translate([64 - 58 + 19, 42.5 - 31.3, 0]).color('black'));
|
|
57
47
|
g.add(board, 'board');
|
|
58
|
-
|
|
59
|
-
// g.add(
|
|
60
|
-
// Parts.Cube([31, 18, 2])
|
|
61
|
-
// .color('white')
|
|
62
|
-
// .snap(board, 'x', 'inside+')
|
|
63
|
-
// .snap(board, 'y', 'inside-')
|
|
64
|
-
// .snap(board, 'z', 'outside-'),
|
|
65
|
-
// 'screen'
|
|
66
|
-
// );
|
|
67
|
-
|
|
68
|
-
// g.add(
|
|
69
|
-
// Parts.Cube([util.inch(0.98), util.inch(0.58), 2.01])
|
|
70
|
-
// .color('black')
|
|
71
|
-
// .snap(board, 'x', 'inside-', util.inch(0.34))
|
|
72
|
-
// .snap(board, 'y', 'inside+', -util.inch(0.32))
|
|
73
|
-
// .snap(board, 'z', 'outside-'),
|
|
74
|
-
// 'display'
|
|
75
|
-
// );
|
|
76
|
-
|
|
77
|
-
// g.add(
|
|
78
|
-
// g.parts.display
|
|
79
|
-
// .stretch('z', 5)
|
|
80
|
-
// .chamfer(-5, 'z+')
|
|
81
|
-
// .align(g.parts.display, 'xy')
|
|
82
|
-
// .color('red'),
|
|
83
|
-
// 'display-clearance',
|
|
84
|
-
// true
|
|
85
|
-
// );
|
|
86
|
-
|
|
87
|
-
// g.add(
|
|
88
|
-
// boardButton('button1', board, util.inch(0.53)),
|
|
89
|
-
// 'button1',
|
|
90
|
-
// false,
|
|
91
|
-
// 'button1-'
|
|
92
|
-
// );
|
|
93
|
-
|
|
94
|
-
// g.add(
|
|
95
|
-
// boardButton('button2', board, util.inch(0.18)),
|
|
96
|
-
// 'button2',
|
|
97
|
-
// false,
|
|
98
|
-
// 'button2-'
|
|
99
|
-
// );
|
|
100
|
-
|
|
101
|
-
// g.add(
|
|
102
|
-
// buttonCap('buttonCap1', g.parts.button1),
|
|
103
|
-
// 'buttonCap1',
|
|
104
|
-
// true,
|
|
105
|
-
// 'buttonCap1-'
|
|
106
|
-
// );
|
|
107
|
-
// g.add(
|
|
108
|
-
// buttonCap('buttonCap2', g.parts.button2),
|
|
109
|
-
// 'buttonCap2',
|
|
110
|
-
// true,
|
|
111
|
-
// 'buttonCap2-'
|
|
112
|
-
// );
|
|
113
|
-
|
|
114
|
-
// g.add(
|
|
115
|
-
// Parts.Cube([1, 5, 0.5])
|
|
116
|
-
// .color('blue')
|
|
117
|
-
// .align(g.parts.buttonCap1, 'x')
|
|
118
|
-
// .snap(g.parts.buttonCap1, 'y', 'outside+', 1)
|
|
119
|
-
// .snap(g.parts.buttonCap1, 'z', 'inside-'),
|
|
120
|
-
// 'button-connector',
|
|
121
|
-
// true
|
|
122
|
-
// );
|
|
123
|
-
|
|
124
|
-
// g.add(
|
|
125
|
-
// g.parts['button-connector'].enlarge(0.5, 0.5, 0.5).color('red'),
|
|
126
|
-
// 'button-connector-clearance',
|
|
127
|
-
// true
|
|
128
|
-
// );
|
|
129
|
-
|
|
130
|
-
// g.add(
|
|
131
|
-
// Parts.Tube(7, 3, 7.5)
|
|
132
|
-
// .snap(board, 'x', 'inside-')
|
|
133
|
-
// .snap(board, 'y', 'inside+')
|
|
134
|
-
// .snap(board, 'z', 'outside+')
|
|
135
|
-
// .color('yellow'),
|
|
136
|
-
// 'standoff',
|
|
137
|
-
// true
|
|
138
|
-
// );
|
|
139
|
-
|
|
140
48
|
return g;
|
|
141
49
|
}
|
|
142
50
|
|
|
143
51
|
jsCadCSG.CSG;
|
|
144
52
|
scadApi.booleanOps.union;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* @function RightSide
|
|
56
|
+
* @param {CSG} o A csg object to be placed on the right side of the motherboard}
|
|
57
|
+
* @param {CSG} mb A csg motherboard object
|
|
58
|
+
* @param {Array<number>} [offset=[2, 0, 0]] An offset to apply after positioning ex. [2,0,0]
|
|
59
|
+
* @return {CSG} The translated CSG object
|
|
60
|
+
*/
|
|
145
61
|
function RightSide(o, mb) {
|
|
146
|
-
|
|
62
|
+
var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [2, 0, 0];
|
|
63
|
+
return o.translate(jscadUtils.array.add(o.calcSnap(mb, 'z', 'outside-'), o.calcSnap(mb, 'x', 'inside+'), o.calcSnap(mb, 'y', 'inside-'), offset));
|
|
147
64
|
}
|
|
148
65
|
function LeftSide(o, mb) {
|
|
149
66
|
return o.translate(calcLeftSide(o, mb));
|
|
@@ -197,9 +114,20 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
197
114
|
var cyl = jscadUtils.parts.Cylinder(6, 2).rotateX(90).align(block, "xz").snap(block, "y", "outside+").color("black");
|
|
198
115
|
return jscadUtils.Group("block,cylinder", [block, cyl]);
|
|
199
116
|
}
|
|
117
|
+
function PSW() {
|
|
118
|
+
var block = jscadUtils.parts.Cube([2.8, 4.5, 3.7]).color("gray");
|
|
119
|
+
var cyl = jscadUtils.parts.Cylinder(2, 1).rotateY(90).align(block, "yz").snap(block, "x", "outside+").color("black");
|
|
120
|
+
return jscadUtils.Group("block,button", [block, cyl]);
|
|
121
|
+
}
|
|
200
122
|
function Ribbon() {
|
|
201
123
|
return jscadUtils.parts.Cube([3, 22.4, 5.7]).color("gray");
|
|
202
124
|
}
|
|
125
|
+
function CamDisplay() {
|
|
126
|
+
return jscadUtils.parts.Cube([3, 16, 5]).color("gray");
|
|
127
|
+
}
|
|
128
|
+
function PCIe() {
|
|
129
|
+
return jscadUtils.parts.Cube([3, 12, 5]).color("gray");
|
|
130
|
+
}
|
|
203
131
|
function Gpio(mb) {
|
|
204
132
|
var gpio = jscadUtils.parts.Cube([50.64, 5, 8.72]).color("gray");
|
|
205
133
|
return mb ? gpio.snap(mb, "xy", "inside-").snap(mb, "z", "outside-").midlineTo("x", 32.5).midlineTo("y", 52.5) : gpio;
|
|
@@ -208,13 +136,13 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
208
136
|
return jscadUtils.parts.Cube([1, 2, 0.7]);
|
|
209
137
|
}
|
|
210
138
|
|
|
211
|
-
var debug$
|
|
139
|
+
var debug$4 = jscadUtils.Debug('jscadRPi:BPlusMounting');
|
|
212
140
|
function holes(mb) {
|
|
213
141
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
214
142
|
options = Object.assign(options, {
|
|
215
143
|
height: 8
|
|
216
144
|
});
|
|
217
|
-
debug$
|
|
145
|
+
debug$4('holes', mb, options);
|
|
218
146
|
|
|
219
147
|
// var hole = LeftSide(MountingHole(options && options.diameter || undefined, options && options.height || 8), mb);
|
|
220
148
|
var hole = MountingHole(options.diameter || 3.25, options.height).snap(mb, 'xy', 'inside-').align(mb, 'z');
|
|
@@ -249,12 +177,12 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
249
177
|
pads: pads
|
|
250
178
|
};
|
|
251
179
|
|
|
252
|
-
var debug$
|
|
180
|
+
var debug$3 = jscadUtils.Debug('jscadRPi:BPlus');
|
|
253
181
|
function pi4(group, clearance, mb) {
|
|
254
182
|
/**
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
group.add(RightSide(jscadUtils.parts.Cube([21.5, 16.5, 13.5]).color('lightgray'), mb
|
|
183
|
+
* Model 4
|
|
184
|
+
*/
|
|
185
|
+
group.add(RightSide(jscadUtils.parts.Cube([21.5, 16.5, 13.5]).color('lightgray'), mb, [3, 0, 0]).midlineTo('y', 45.75), 'ethernet');
|
|
258
186
|
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');
|
|
259
187
|
var usb = jscadUtils.Group();
|
|
260
188
|
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');
|
|
@@ -286,34 +214,49 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
286
214
|
* Model 5
|
|
287
215
|
*/
|
|
288
216
|
|
|
289
|
-
group.add(jscadUtils.parts.Cube([
|
|
290
|
-
group.add(jscadUtils.parts.Cube([
|
|
291
|
-
|
|
217
|
+
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');
|
|
218
|
+
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');
|
|
219
|
+
|
|
220
|
+
// group.add(Parts.Cube([1, 1, 15.1 - 1.46]).snap(mb, 'x', 'inside+')
|
|
221
|
+
// .snap(mb, 'y', 'inside-').snap(mb, 'z', 'outside-'), 'dimcheck1');
|
|
222
|
+
|
|
223
|
+
// group.add(Parts.Cube([3.06, 1, 1]).snap(mb, 'x', 'outside-')
|
|
224
|
+
// .snap(mb, 'y', 'inside-').align(mb, 'z'), 'dimcheck2');
|
|
225
|
+
|
|
226
|
+
group.add(RightSide(jscadUtils.parts.Cube([21.5, 16.5, 13.5]).color('lightgray'), mb, [3, 0, 0]).midlineTo('y', 10.2), 'ethernet');
|
|
292
227
|
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');
|
|
228
|
+
|
|
229
|
+
// group.add(Parts.Cube([1, 1, 17.5 - 1.46]).snap(mb, 'x', 'inside+')
|
|
230
|
+
// .snap(mb, 'y', 'inside+').snap(mb, 'z', 'outside-'), 'dimcheck3');
|
|
231
|
+
|
|
232
|
+
// group.add(Parts.Cube([3, 1, 1]).snap(mb, 'x', 'outside-')
|
|
233
|
+
// .snap(mb, 'y', 'inside+').align(mb, 'z'), 'dimcheck4');
|
|
234
|
+
|
|
293
235
|
var usb = jscadUtils.Group();
|
|
294
|
-
usb.add(jscadUtils.parts.Cube([17, 13.1, 15]).snap(group.parts.ethernet, 'x', 'inside+', -1).snap(mb, 'z', 'outside-',
|
|
295
|
-
usb.add(jscadUtils.parts.Cube([1, 15, 16]).snap(usb.parts.body, 'x', 'outside-').align(usb.parts.body, 'yz').color('lightgray'), 'flange');
|
|
236
|
+
usb.add(jscadUtils.parts.Cube([17, 13.1, 15]).snap(group.parts.ethernet, 'x', 'inside+', -1).snap(mb, 'z', 'outside-', 0.5).color('lightgray'), 'body');
|
|
237
|
+
usb.add(jscadUtils.parts.Cube([1, 15, 16.5]).snap(usb.parts.body, 'x', 'outside-').align(usb.parts.body, 'yz').color('lightgray'), 'flange');
|
|
296
238
|
group.add(usb.clone()
|
|
297
239
|
// .translate(usbTranslation)
|
|
298
|
-
.translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 29.
|
|
299
|
-
group.add(jscadUtils.parts.Cube([clearance, 15, 16]).align(group.parts.usb1, 'yz').snap(group.parts.usb1, 'x', 'outside-').color('red'), 'clearance-usb1', true);
|
|
240
|
+
.translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 29.1)), 'usb1', false, 'usb1');
|
|
241
|
+
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);
|
|
300
242
|
group.add(usb.clone()
|
|
301
243
|
// .translate(usbTranslation)
|
|
302
244
|
.translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 47)), 'usb2', false, 'usb2');
|
|
303
245
|
group.add(jscadUtils.parts.Cube([clearance, 15, 16]).align(group.parts.usb2, 'yz').snap(group.parts.usb2, 'x', 'outside-').color('red'), 'clearance-usb2', true);
|
|
304
|
-
group.add(jscadUtils.parts.Cube([10, 7.5, 3.2]).snap(usb.parts.body, 'y', 'inside-', -1).snap(mb, 'z', 'outside-').midlineTo('x',
|
|
246
|
+
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');
|
|
305
247
|
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);
|
|
306
|
-
group.add(jscadUtils.parts.Cube([7, 7.5, 3]).snap(usb.parts.body, 'y', 'inside-', -1).snap(mb, 'z', 'outside-').midlineTo('x',
|
|
248
|
+
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');
|
|
307
249
|
group.add(jscadUtils.parts.Cube([7, clearance, 3]).align(group.parts.hdmi1, 'xz').snap(group.parts.hdmi1, 'y', 'outside+').color('red'), 'clearance-hdmi1', true);
|
|
308
|
-
group.add(jscadUtils.parts.Cube([7, 7.5, 3]).snap(usb.parts.body, 'y', 'inside-', -1).snap(mb, 'z', 'outside-').midlineTo('x',
|
|
250
|
+
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');
|
|
309
251
|
group.add(jscadUtils.parts.Cube([7, clearance, 3]).align(group.parts.hdmi2, 'xz').snap(group.parts.hdmi2, 'y', 'outside+').color('red'), 'clearance-hdmi2', true);
|
|
310
|
-
group.add(
|
|
311
|
-
group.add(
|
|
312
|
-
group.add(
|
|
313
|
-
group.add(Ribbon().snap(mb, 'z', 'outside-').midlineTo('x', 4).midlineTo('y', 24.5 + 3.5), 'display');
|
|
252
|
+
group.add(CamDisplay().snap(mb, 'z', 'outside-').midlineTo('x', 55), 'camera0');
|
|
253
|
+
group.add(CamDisplay().snap(mb, 'z', 'outside-').midlineTo('x', 50), 'camera1');
|
|
254
|
+
group.add(PCIe().snap(mb, 'z', 'outside-').midlineTo('x', 3.5).midlineTo('y', 30), 'display');
|
|
314
255
|
group.add(Gpio().snap(mb, 'z', 'outside-').midlineTo('x', 29 + 3.5).midlineTo('y', 56 - 3.5), 'gpio');
|
|
315
|
-
group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y',
|
|
316
|
-
group.add(
|
|
256
|
+
group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 13.3).color('lightgreen'), 'statusled');
|
|
257
|
+
group.add(jscadUtils.parts.Cylinder(2, clearance).rotateY(90).align(group.parts.statusled, 'yz').snap(mb, 'x', 'outside+').color('red'), 'clearance-statusled', true);
|
|
258
|
+
group.add(PSW().snap('block', mb, 'z', 'outside-').snap('block', mb, 'x', 'inside-').midlineTo('block', 'y', 18.4), 'powerswitch');
|
|
259
|
+
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);
|
|
317
260
|
}
|
|
318
261
|
|
|
319
262
|
/**
|
|
@@ -357,7 +300,7 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
357
300
|
}, options),
|
|
358
301
|
clearance = _Object$assign.clearance;
|
|
359
302
|
model = !model ? 2 : model === true ? 3 : model;
|
|
360
|
-
debug$
|
|
303
|
+
debug$3('BPlus model:', model);
|
|
361
304
|
var mb = BPlusMotherboard(model == 4 ? 3 : 2);
|
|
362
305
|
var group = jscadUtils.Group('mb', mb);
|
|
363
306
|
|
|
@@ -367,10 +310,10 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
367
310
|
if (model < 4) {
|
|
368
311
|
// Right side parts
|
|
369
312
|
group.add(RightSide(EthernetJack(), mb).midlineTo('y', 10.25), 'ethernet');
|
|
370
|
-
debug$
|
|
313
|
+
debug$3('mb', mb);
|
|
371
314
|
var usb = UsbJack();
|
|
372
315
|
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-'));
|
|
373
|
-
debug$
|
|
316
|
+
debug$3('usbTranslation', usbTranslation, jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 29));
|
|
374
317
|
group.add(usb.clone().translate(usbTranslation).translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 29)), 'usb1', false, 'usb1');
|
|
375
318
|
group.add(usb.clone().translate(usbTranslation).translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 47)), 'usb2', false, 'usb2');
|
|
376
319
|
group.add(MicroUsb().snap(mb, 'z', 'outside-').midlineTo('x', 10.6).translate([0, -2, 0]), 'microusb');
|
|
@@ -400,10 +343,13 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
400
343
|
|
|
401
344
|
/** Add fan mounting holes for PI 5 */
|
|
402
345
|
if (model >= 5) {
|
|
403
|
-
group.holes.push(MountingHole(3.25,
|
|
346
|
+
group.holes.push(MountingHole(3.25, 1.32).snap(mb, 'xy', 'inside-').align(mb, 'z').midlineTo('x', 3.5).midlineTo('y', 6 + 3.5));
|
|
404
347
|
group.add(group.holes[4], 'fan1hole', true);
|
|
405
|
-
group.holes.push(MountingHole(3.25,
|
|
348
|
+
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));
|
|
406
349
|
group.add(group.holes[5], 'fan2hole', true);
|
|
350
|
+
var fanClearance = jscadUtils.parts.Cylinder(4.5, 4).color('red').align(group.parts.fan1hole, 'xy').snap(group.parts.mb, 'z', 'outside+');
|
|
351
|
+
group.add(fanClearance, 'clearance-fan1', true, 'clearance');
|
|
352
|
+
group.add(fanClearance.align(group.parts.fan2hole, 'xy').snap(group.parts.mb, 'z', 'outside+'), 'clearance-fan2', true, 'clearance');
|
|
407
353
|
}
|
|
408
354
|
return group;
|
|
409
355
|
}
|
|
@@ -578,7 +524,9 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
578
524
|
}
|
|
579
525
|
}
|
|
580
526
|
|
|
581
|
-
|
|
527
|
+
var debug$2 = jscadUtils.Debug('jscadRPi:HQCameraModule');
|
|
528
|
+
|
|
529
|
+
/** @typedef {import("@jwc/jscad-utils/src/group").JsCadUtilsGroup} JsCadUtilsGroup */
|
|
582
530
|
|
|
583
531
|
/**
|
|
584
532
|
* Returns a Raspberry Pi HQ camera JsCadUtilsGroup object.
|
|
@@ -612,10 +560,12 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
612
560
|
* ]
|
|
613
561
|
*
|
|
614
562
|
* @function CameraModuleV2
|
|
563
|
+
* @param {boolean} [flipTripodMount=false] - Flip the tripod mount to the other side of the board.
|
|
615
564
|
* @return {JsCadUtilsGroup} {description}
|
|
616
565
|
*/
|
|
617
566
|
function HQCameraModule() {
|
|
618
567
|
var _camera$holes;
|
|
568
|
+
var flipTripodMount = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
619
569
|
var t = 1.1;
|
|
620
570
|
var camera = jscadUtils.Group();
|
|
621
571
|
camera.add(jscadUtils.parts.RoundedCube(38, 38, t, 1.4).Center().color('green', 0.75), 'board');
|
|
@@ -631,13 +581,49 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
631
581
|
var mountInside = jscadUtils.parts.Cylinder(30.75, 10.2).snap(camera.parts.board, 'z', 'outside-').align(camera.parts.board, 'xy').color('black');
|
|
632
582
|
camera.add(mount.subtract(mountInside), 'mount');
|
|
633
583
|
camera.add(mount, 'mount-clearance', true);
|
|
634
|
-
var
|
|
635
|
-
|
|
584
|
+
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);
|
|
585
|
+
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');
|
|
586
|
+
camera.add(tripodMountBase.union(tripodMount), 'tripodMount');
|
|
636
587
|
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');
|
|
637
588
|
camera.add(camera.parts.ribbon.enlarge(2, 4, -1).snap(camera.parts.ribbon, 'y', 'outside+').color('red'), 'ribbon-nogo');
|
|
589
|
+
debug$2("camera parts", camera.parts);
|
|
638
590
|
return camera;
|
|
639
591
|
}
|
|
640
592
|
|
|
593
|
+
scadApi.booleanOps.union;
|
|
594
|
+
var debug$1 = jscadUtils.Debug('jscadRPi:HyperPixel4Rectangular');
|
|
595
|
+
|
|
596
|
+
/** @typedef {typeof import("@jwc/jscad-utils/src/group").JsCadUtilsGroup} JsCadUtilsGroup */
|
|
597
|
+
|
|
598
|
+
function HyperPixel4Rectangular(pi) {
|
|
599
|
+
var group = jscadUtils.Group();
|
|
600
|
+
var board = jscadUtils.parts.Cube([97.85, 58.14, 1.65]).Center();
|
|
601
|
+
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]);
|
|
602
|
+
group.add(board.subtract(notch).color('green', 0.75), 'mb');
|
|
603
|
+
var lcd = jscadUtils.parts.Cube([97.1, 58.44, 6.84 - 1.65]).color('black');
|
|
604
|
+
group.add(lcd.align(board, 'xy').translate(lcd.calcSnap(board, 'z', 'outside-')).translate([0, 0, 0.5]), 'lcd');
|
|
605
|
+
|
|
606
|
+
// group.add(Parts.Cube([15.35, 1, 10]).snap(board, 'x', 'inside+').snap(board, 'y', 'outside+').snap(board, 'z', 'outside+'), 'connector1');
|
|
607
|
+
|
|
608
|
+
// group.add(Parts.Cube([1, 1, 1.36]).snap(board, 'x', 'inside-').snap(board, 'y', 'inside-').snap(board, 'z', 'outside+'), 'dimcheck2');
|
|
609
|
+
|
|
610
|
+
// group.add(Parts.Cube([1, 1, 17.04]).snap(board, 'x', 'inside-').snap(board, 'y', 'inside+').snap(board, 'z', 'outside+'), 'dimcheck3');
|
|
611
|
+
|
|
612
|
+
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]);
|
|
613
|
+
var pads = [pad, pad.translate([-58, 0, 0]), pad.translate([0, -49, 0]), pad.translate([-58, -49, 0])];
|
|
614
|
+
group.add(pads[0], 'pad1');
|
|
615
|
+
group.add(pads[1], 'pad2');
|
|
616
|
+
group.add(pads[2], 'pad3');
|
|
617
|
+
group.add(pads[3], 'pad4');
|
|
618
|
+
group.rotate('mb', 'z', 180);
|
|
619
|
+
debug$1('pi.parts', pi ? pi.parts : null);
|
|
620
|
+
debug$1('group.parts', group.parts);
|
|
621
|
+
if (pi) {
|
|
622
|
+
group.align('pad1', pi.parts.hole1, 'xy').snap('pad1', pi.parts.mb, 'z', 'outside-');
|
|
623
|
+
}
|
|
624
|
+
return group;
|
|
625
|
+
}
|
|
626
|
+
|
|
641
627
|
function boardButton(name, board, midline) {
|
|
642
628
|
var g = jscadUtils.Group(name);
|
|
643
629
|
g.add(jscadUtils.parts.Cube([6.5, 6.5, 2]).color('silver').snap(board, 'xy', 'inside-').snap(board, 'z', 'outside-').midlineTo('y', midline), 'base');
|
|
@@ -679,7 +665,7 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
679
665
|
g.add(buttonCap('buttonCap2', g.parts.button2), 'buttonCap2', true, 'buttonCap2-');
|
|
680
666
|
g.add(jscadUtils.parts.Cube([1, 5, 0.5]).color('blue').align(g.parts.buttonCap1, 'x').snap(g.parts.buttonCap1, 'y', 'outside+', 1).snap(g.parts.buttonCap1, 'z', 'inside-'), 'button-connector', true);
|
|
681
667
|
g.add(g.parts['button-connector'].enlarge(0.5, 0.5, 0.5).color('red'), 'button-connector-clearance', true);
|
|
682
|
-
g.add(jscadUtils.parts.Tube(7, 3,
|
|
668
|
+
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);
|
|
683
669
|
return g;
|
|
684
670
|
}
|
|
685
671
|
|
|
@@ -905,6 +891,7 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
905
891
|
exports.HQCameraModule = HQCameraModule;
|
|
906
892
|
exports.Hat = Hat;
|
|
907
893
|
exports.HatStandoff = HatStandoff;
|
|
894
|
+
exports.HyperPixel4Rectangular = HyperPixel4Rectangular;
|
|
908
895
|
exports.MiniPiTFT = miniPiTFT;
|
|
909
896
|
exports.PiTFT22 = PiTFT22;
|
|
910
897
|
exports.PiTFT24 = PiTFT24;
|
package/examples/example.jscad
CHANGED
|
@@ -15,17 +15,17 @@ function main() {
|
|
|
15
15
|
RaspberryPi.MiniPiTFT()
|
|
16
16
|
.snap('board', pi.parts.mb, 'x', 'inside-')
|
|
17
17
|
.snap('board', pi.parts.mb, 'y', 'inside+')
|
|
18
|
-
.snap('board', pi.parts.mb, 'z', 'outside-',
|
|
18
|
+
.snap('board', pi.parts.mb, 'z', 'outside-', 9),
|
|
19
19
|
'miniPiTFT',
|
|
20
20
|
true,
|
|
21
21
|
'miniPiTFT'
|
|
22
22
|
);
|
|
23
23
|
|
|
24
|
-
pi.add(RaspberryPi.ActiveCoolingFan()
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
// pi.add(RaspberryPi.ActiveCoolingFan()
|
|
25
|
+
// .snap('board', pi.parts.mb, 'x', 'inside-')
|
|
26
|
+
// .snap('board', pi.parts.mb, 'y', 'inside+')
|
|
27
|
+
// .snap('board', pi.parts.cpu, 'z', 'outside-', 1)
|
|
28
|
+
// .translate([0, -6, 0]), "activeCoolingFan", true, 'activeCoolingFan');
|
|
29
29
|
|
|
30
30
|
return pi.combineAll();
|
|
31
31
|
}
|
package/examples/pi4.jscad
CHANGED
package/examples/pi5.jscad
CHANGED
|
@@ -3,15 +3,12 @@ function main() {
|
|
|
3
3
|
|
|
4
4
|
var pi = RaspberryPi.BPlus(5, 25);
|
|
5
5
|
|
|
6
|
-
pi.add(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
),
|
|
13
|
-
'screen'
|
|
14
|
-
);
|
|
6
|
+
// pi.add(
|
|
7
|
+
// RaspberryPi.PiTFT24({}, pi.parts.mb),
|
|
8
|
+
// 'screen',
|
|
9
|
+
// true,
|
|
10
|
+
// 'screen'
|
|
11
|
+
// );
|
|
15
12
|
|
|
16
13
|
return pi.combineAll().Center();
|
|
17
14
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jwc/jscad-raspberrypi",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0",
|
|
4
4
|
"description": "jscad parts library for RaspberryPi",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@jscad/csg": "0.7.0",
|
|
31
31
|
"@jscad/scad-api": "0.5.1",
|
|
32
|
-
"@jwc/jscad-utils": "4.
|
|
32
|
+
"@jwc/jscad-utils": "4.9.0"
|
|
33
33
|
},
|
|
34
34
|
"ava": {
|
|
35
35
|
"files": [
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"gulp-watch": "5.0.1",
|
|
74
74
|
"looks-same": "10.0.1",
|
|
75
75
|
"nyc": "17.1.0",
|
|
76
|
-
"rollup": "4.52.
|
|
76
|
+
"rollup": "4.52.2",
|
|
77
77
|
"vuepress-jsdoc": "5.0.0"
|
|
78
78
|
}
|
|
79
79
|
}
|