@jwc/jscad-raspberrypi 3.1.0 → 3.2.1
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 +22 -0
- package/README.md +0 -12
- package/dist/examples/active-cooling-fan.jscad +2737 -0
- package/dist/examples/bplus.jscad +350 -334
- package/dist/examples/bplus3.jscad +350 -334
- package/dist/examples/camera-module-v1.jscad +350 -334
- package/dist/examples/camera-module-v2.jscad +350 -334
- package/dist/examples/example.jscad +366 -343
- package/dist/examples/hat-standoff.jscad +350 -334
- package/dist/examples/hat.jscad +350 -334
- package/dist/examples/hq_camera-module.jscad +2737 -0
- package/dist/examples/miniPiTFT.jscad +2737 -0
- package/dist/examples/pi-tft22.jscad +350 -334
- package/dist/examples/pi-tft24.jscad +350 -334
- package/dist/examples/pi4.jscad +2737 -0
- package/dist/examples/pi5.jscad +2747 -0
- package/dist/examples/spacer.jscad +350 -334
- package/dist/index.js +191 -102
- package/dist/v1compat.js +191 -102
- package/examples/active-cooling-fan.jscad +10 -0
- package/examples/example.jscad +16 -9
- package/examples/hq_camera-module.jscad +10 -0
- package/examples/miniPiTFT.jscad +10 -0
- package/examples/pi4.jscad +10 -0
- package/examples/pi5.jscad +20 -0
- package/gulpfile.js +4 -4
- package/package.json +31 -39
- package/src/active-cooling-fan.js +160 -0
- package/src/bplus.js +38 -2
- package/src/index.js +6 -9
package/dist/index.js
CHANGED
|
@@ -1,17 +1,111 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* @jwc/jscad-raspberrypi version 3.0
|
|
2
|
+
* @jwc/jscad-raspberrypi version 3.2.0
|
|
3
3
|
* https://johnwebbcole.gitlab.io/jscad-raspberrypi
|
|
4
4
|
*/
|
|
5
5
|
var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
6
6
|
'use strict';
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Returns an Adafruit miniPiTFT Hat with buttons.
|
|
10
|
+
*
|
|
11
|
+
* Default parts: board,screen,display,button1,button2
|
|
12
|
+
*
|
|
13
|
+
* 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
|
|
14
|
+
*
|
|
15
|
+
* 
|
|
16
|
+
* @function activeCoolingFan
|
|
17
|
+
*/
|
|
18
|
+
function activeCoolingFan() {
|
|
19
|
+
var g = jscadUtils.Group('ActiveCoolingFan');
|
|
20
|
+
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'));
|
|
21
|
+
g.add(board, 'board');
|
|
9
22
|
|
|
10
|
-
|
|
11
|
-
|
|
23
|
+
// g.add(
|
|
24
|
+
// Parts.Cube([31, 18, 2])
|
|
25
|
+
// .color('white')
|
|
26
|
+
// .snap(board, 'x', 'inside+')
|
|
27
|
+
// .snap(board, 'y', 'inside-')
|
|
28
|
+
// .snap(board, 'z', 'outside-'),
|
|
29
|
+
// 'screen'
|
|
30
|
+
// );
|
|
31
|
+
|
|
32
|
+
// g.add(
|
|
33
|
+
// Parts.Cube([util.inch(0.98), util.inch(0.58), 2.01])
|
|
34
|
+
// .color('black')
|
|
35
|
+
// .snap(board, 'x', 'inside-', util.inch(0.34))
|
|
36
|
+
// .snap(board, 'y', 'inside+', -util.inch(0.32))
|
|
37
|
+
// .snap(board, 'z', 'outside-'),
|
|
38
|
+
// 'display'
|
|
39
|
+
// );
|
|
40
|
+
|
|
41
|
+
// g.add(
|
|
42
|
+
// g.parts.display
|
|
43
|
+
// .stretch('z', 5)
|
|
44
|
+
// .chamfer(-5, 'z+')
|
|
45
|
+
// .align(g.parts.display, 'xy')
|
|
46
|
+
// .color('red'),
|
|
47
|
+
// 'display-clearance',
|
|
48
|
+
// true
|
|
49
|
+
// );
|
|
50
|
+
|
|
51
|
+
// g.add(
|
|
52
|
+
// boardButton('button1', board, util.inch(0.53)),
|
|
53
|
+
// 'button1',
|
|
54
|
+
// false,
|
|
55
|
+
// 'button1-'
|
|
56
|
+
// );
|
|
57
|
+
|
|
58
|
+
// g.add(
|
|
59
|
+
// boardButton('button2', board, util.inch(0.18)),
|
|
60
|
+
// 'button2',
|
|
61
|
+
// false,
|
|
62
|
+
// 'button2-'
|
|
63
|
+
// );
|
|
64
|
+
|
|
65
|
+
// g.add(
|
|
66
|
+
// buttonCap('buttonCap1', g.parts.button1),
|
|
67
|
+
// 'buttonCap1',
|
|
68
|
+
// true,
|
|
69
|
+
// 'buttonCap1-'
|
|
70
|
+
// );
|
|
71
|
+
// g.add(
|
|
72
|
+
// buttonCap('buttonCap2', g.parts.button2),
|
|
73
|
+
// 'buttonCap2',
|
|
74
|
+
// true,
|
|
75
|
+
// 'buttonCap2-'
|
|
76
|
+
// );
|
|
77
|
+
|
|
78
|
+
// g.add(
|
|
79
|
+
// Parts.Cube([1, 5, 0.5])
|
|
80
|
+
// .color('blue')
|
|
81
|
+
// .align(g.parts.buttonCap1, 'x')
|
|
82
|
+
// .snap(g.parts.buttonCap1, 'y', 'outside+', 1)
|
|
83
|
+
// .snap(g.parts.buttonCap1, 'z', 'inside-'),
|
|
84
|
+
// 'button-connector',
|
|
85
|
+
// true
|
|
86
|
+
// );
|
|
87
|
+
|
|
88
|
+
// g.add(
|
|
89
|
+
// g.parts['button-connector'].enlarge(0.5, 0.5, 0.5).color('red'),
|
|
90
|
+
// 'button-connector-clearance',
|
|
91
|
+
// true
|
|
92
|
+
// );
|
|
93
|
+
|
|
94
|
+
// g.add(
|
|
95
|
+
// Parts.Tube(7, 3, 7.5)
|
|
96
|
+
// .snap(board, 'x', 'inside-')
|
|
97
|
+
// .snap(board, 'y', 'inside+')
|
|
98
|
+
// .snap(board, 'z', 'outside+')
|
|
99
|
+
// .color('yellow'),
|
|
100
|
+
// 'standoff',
|
|
101
|
+
// true
|
|
102
|
+
// );
|
|
12
103
|
|
|
13
|
-
|
|
14
|
-
|
|
104
|
+
return g;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
jsCadCSG.CSG;
|
|
108
|
+
scadApi.booleanOps.union;
|
|
15
109
|
function RightSide(o, mb) {
|
|
16
110
|
return o.translate(jscadUtils.array.add(o.calcSnap(mb, 'z', 'outside-'), o.calcSnap(mb, 'x', 'inside+'), o.calcSnap(mb, 'y', 'inside-'), [2, 0, 0]));
|
|
17
111
|
}
|
|
@@ -78,18 +172,20 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
78
172
|
return jscadUtils.parts.Cube([1, 2, 0.7]);
|
|
79
173
|
}
|
|
80
174
|
|
|
81
|
-
var debug = jscadUtils.Debug('jscadRPi:BPlusMounting');
|
|
175
|
+
var debug$2 = jscadUtils.Debug('jscadRPi:BPlusMounting');
|
|
82
176
|
function holes(mb) {
|
|
83
177
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
84
178
|
options = Object.assign(options, {
|
|
85
179
|
height: 8
|
|
86
180
|
});
|
|
87
|
-
debug('holes', mb, options);
|
|
181
|
+
debug$2('holes', mb, options);
|
|
88
182
|
|
|
183
|
+
// var hole = LeftSide(MountingHole(options && options.diameter || undefined, options && options.height || 8), mb);
|
|
89
184
|
var hole = MountingHole(options.diameter || 3.25, options.height).snap(mb, 'xy', 'inside-').align(mb, 'z');
|
|
90
185
|
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)];
|
|
91
186
|
return jscadUtils.Group('hole1,hole2,hole3,hole4', holes);
|
|
92
187
|
}
|
|
188
|
+
|
|
93
189
|
/**
|
|
94
190
|
* Create mounting pads for a Raspberry PI model B.
|
|
95
191
|
* @function pads
|
|
@@ -99,7 +195,6 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
99
195
|
* @param {number} [options.height=4] An options object.
|
|
100
196
|
* @return {JsCadUtilsGroup} {description}
|
|
101
197
|
*/
|
|
102
|
-
|
|
103
198
|
function pads(mb) {
|
|
104
199
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
105
200
|
options = Object.assign({
|
|
@@ -107,9 +202,11 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
107
202
|
height: 4
|
|
108
203
|
}, options);
|
|
109
204
|
var pad = Mountingpad(undefined, options.height).snap(mb, 'z', options.snap).snap(mb, 'xy', 'inside-');
|
|
110
|
-
var pads = [pad.midlineTo('x', 3.5).midlineTo('y', 3.5), pad.midlineTo('x', 61.5).midlineTo('y', 3.5), pad.midlineTo('x', 3.5).midlineTo('y', 52.5), pad.midlineTo('x', 61.5).midlineTo('y', 52.5)];
|
|
205
|
+
var pads = [pad.midlineTo('x', 3.5).midlineTo('y', 3.5), pad.midlineTo('x', 61.5).midlineTo('y', 3.5), pad.midlineTo('x', 3.5).midlineTo('y', 52.5), pad.midlineTo('x', 61.5).midlineTo('y', 52.5)];
|
|
111
206
|
|
|
112
|
-
|
|
207
|
+
// var b = mb.getBounds();
|
|
208
|
+
return jscadUtils.Group('pad1,pad2,pad3,pad4', pads);
|
|
209
|
+
// });
|
|
113
210
|
}
|
|
114
211
|
var BPlusMounting = {
|
|
115
212
|
holes: holes,
|
|
@@ -117,7 +214,6 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
117
214
|
};
|
|
118
215
|
|
|
119
216
|
var debug$1 = jscadUtils.Debug('jscadRPi:BPlus');
|
|
120
|
-
|
|
121
217
|
function pi4(group, clearance, mb) {
|
|
122
218
|
/**
|
|
123
219
|
* Model 4
|
|
@@ -127,10 +223,12 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
127
223
|
var usb = jscadUtils.Group();
|
|
128
224
|
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');
|
|
129
225
|
usb.add(jscadUtils.parts.Cube([1, 15, 16]).snap(usb.parts.body, 'x', 'outside-').align(usb.parts.body, 'yz').color('lightgray'), 'flange');
|
|
130
|
-
group.add(usb.clone()
|
|
226
|
+
group.add(usb.clone()
|
|
227
|
+
// .translate(usbTranslation)
|
|
131
228
|
.translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 27)), 'usb1', false, 'usb1');
|
|
132
229
|
group.add(jscadUtils.parts.Cube([clearance, 15, 16]).align(group.parts.usb1, 'yz').snap(group.parts.usb1, 'x', 'outside-').color('red'), 'clearance-usb1', true);
|
|
133
|
-
group.add(usb.clone()
|
|
230
|
+
group.add(usb.clone()
|
|
231
|
+
// .translate(usbTranslation)
|
|
134
232
|
.translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 9)), 'usb2', false, 'usb2');
|
|
135
233
|
group.add(jscadUtils.parts.Cube([clearance, 15, 16]).align(group.parts.usb2, 'yz').snap(group.parts.usb2, 'x', 'outside-').color('red'), 'clearance-usb2', true);
|
|
136
234
|
group.add(jscadUtils.parts.Cube([10, 7.5, 3.2]).snap(usb.parts.body, 'y', 'inside-', -1).snap(mb, 'z', 'outside-').midlineTo('x', 3.5 + 7.7).color('lightgray'), 'usbc');
|
|
@@ -147,20 +245,24 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
147
245
|
group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 8).color('lightgreen'), 'activityled');
|
|
148
246
|
group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 12).color('red'), 'powerled');
|
|
149
247
|
}
|
|
150
|
-
|
|
151
248
|
function pi5(group, clearance, mb) {
|
|
152
249
|
/**
|
|
153
|
-
|
|
154
|
-
|
|
250
|
+
* Model 5
|
|
251
|
+
*/
|
|
252
|
+
|
|
253
|
+
group.add(jscadUtils.parts.Cube([12, 12, 3]).color('lightgray').translate([24, 15, 2]), 'cpu');
|
|
254
|
+
group.add(jscadUtils.parts.Cube([12, 12, clearance]).color('red').translate([24, 15, 2]), 'clearance-cpu', true, 'clearance');
|
|
155
255
|
group.add(RightSide(jscadUtils.parts.Cube([21.5, 16.5, 13.5]).color('lightgray'), mb).translate([2, 0, 0]).midlineTo('y', 10.2), 'ethernet');
|
|
156
256
|
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');
|
|
157
257
|
var usb = jscadUtils.Group();
|
|
158
258
|
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');
|
|
159
259
|
usb.add(jscadUtils.parts.Cube([1, 15, 16]).snap(usb.parts.body, 'x', 'outside-').align(usb.parts.body, 'yz').color('lightgray'), 'flange');
|
|
160
|
-
group.add(usb.clone()
|
|
260
|
+
group.add(usb.clone()
|
|
261
|
+
// .translate(usbTranslation)
|
|
161
262
|
.translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 29.7)), 'usb1', false, 'usb1');
|
|
162
263
|
group.add(jscadUtils.parts.Cube([clearance, 15, 16]).align(group.parts.usb1, 'yz').snap(group.parts.usb1, 'x', 'outside-').color('red'), 'clearance-usb1', true);
|
|
163
|
-
group.add(usb.clone()
|
|
264
|
+
group.add(usb.clone()
|
|
265
|
+
// .translate(usbTranslation)
|
|
164
266
|
.translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 47)), 'usb2', false, 'usb2');
|
|
165
267
|
group.add(jscadUtils.parts.Cube([clearance, 15, 16]).align(group.parts.usb2, 'yz').snap(group.parts.usb2, 'x', 'outside-').color('red'), 'clearance-usb2', true);
|
|
166
268
|
group.add(jscadUtils.parts.Cube([10, 7.5, 3.2]).snap(usb.parts.body, 'y', 'inside-', -1).snap(mb, 'z', 'outside-').midlineTo('x', 3.5 + 7.7).color('lightgray'), 'usbc');
|
|
@@ -177,6 +279,7 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
177
279
|
group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 8).color('lightgreen'), 'activityled');
|
|
178
280
|
group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 12).color('red'), 'powerled');
|
|
179
281
|
}
|
|
282
|
+
|
|
180
283
|
/**
|
|
181
284
|
* Returns a complete RaspberryPi B Plus model.
|
|
182
285
|
* 
|
|
@@ -210,25 +313,21 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
210
313
|
// include:js
|
|
211
314
|
// endinject
|
|
212
315
|
*/
|
|
213
|
-
|
|
214
|
-
|
|
215
316
|
function BPlus() {
|
|
216
317
|
var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2;
|
|
217
318
|
var options = arguments.length > 1 ? arguments[1] : undefined;
|
|
218
|
-
|
|
219
319
|
var _Object$assign = Object.assign({
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
320
|
+
clearance: 5
|
|
321
|
+
}, options),
|
|
322
|
+
clearance = _Object$assign.clearance;
|
|
224
323
|
model = !model ? 2 : model === true ? 3 : model;
|
|
225
324
|
debug$1('BPlus model:', model);
|
|
226
325
|
var mb = BPlusMotherboard(model == 4 ? 3 : 2);
|
|
227
326
|
var group = jscadUtils.Group('mb', mb);
|
|
327
|
+
|
|
228
328
|
/**
|
|
229
329
|
* Model 1, 2, 3
|
|
230
330
|
*/
|
|
231
|
-
|
|
232
331
|
if (model < 4) {
|
|
233
332
|
// Right side parts
|
|
234
333
|
group.add(RightSide(EthernetJack(), mb).midlineTo('y', 10.25), 'ethernet');
|
|
@@ -244,7 +343,6 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
244
343
|
group.add(Ribbon().snap(mb, 'z', 'outside-').midlineTo('x', 45), 'camera');
|
|
245
344
|
group.add(Ribbon().snap(mb, 'z', 'outside-').midlineTo('x', 3.5).midlineTo('y', 28), 'display');
|
|
246
345
|
group.add(Gpio().snap(mb, 'z', 'outside-').midlineTo('x', 32.5).midlineTo('y', 52.5), 'gpio');
|
|
247
|
-
|
|
248
346
|
if (model == 3) {
|
|
249
347
|
group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 7.9).color('lightgreen'), 'activityled');
|
|
250
348
|
group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 11.5).color('red'), 'powerled');
|
|
@@ -257,13 +355,20 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
257
355
|
} else {
|
|
258
356
|
pi5(group, clearance, mb);
|
|
259
357
|
}
|
|
260
|
-
|
|
261
358
|
group.add(jscadUtils.parts.Cube([15.2, 12, 1.5]).snap(mb, 'z', 'outside+').midlineTo('y', 28).translate([-2.5, 0, 0]).color('silver'), 'microsd');
|
|
262
359
|
group.holes = holes(mb).array();
|
|
263
360
|
group.add(group.holes[0], 'hole1', true);
|
|
264
361
|
group.add(group.holes[1], 'hole2', true);
|
|
265
362
|
group.add(group.holes[2], 'hole3', true);
|
|
266
363
|
group.add(group.holes[3], 'hole4', true);
|
|
364
|
+
|
|
365
|
+
/** Add fan mounting holes for PI 5 */
|
|
366
|
+
if (model >= 5) {
|
|
367
|
+
group.holes.push(MountingHole(3.25, 8).snap(mb, 'xy', 'inside-').align(mb, 'z').midlineTo('x', 3.5).midlineTo('y', 6 + 3.5));
|
|
368
|
+
group.add(group.holes[4], 'fan1hole', true);
|
|
369
|
+
group.holes.push(MountingHole(3.25, 8).snap(mb, 'xy', 'inside-').align(mb, 'z').midlineTo('x', 3.5 + 58).midlineTo('y', 52.5 - 6));
|
|
370
|
+
group.add(group.holes[5], 'fan2hole', true);
|
|
371
|
+
}
|
|
267
372
|
return group;
|
|
268
373
|
}
|
|
269
374
|
|
|
@@ -277,8 +382,7 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
277
382
|
* @exports CameraModuleV1
|
|
278
383
|
* @memberof RaspberryPi
|
|
279
384
|
*/
|
|
280
|
-
|
|
281
|
-
function CameraModuleV1() {
|
|
385
|
+
function CameraModuleV1$1() {
|
|
282
386
|
var t = 1.1;
|
|
283
387
|
var height = {
|
|
284
388
|
sensor: 5.9 - t,
|
|
@@ -286,11 +390,9 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
286
390
|
};
|
|
287
391
|
var g = jscadUtils.Group();
|
|
288
392
|
g.add(jscadUtils.parts.Cube([24, 25, t]).Center().color('green', 0.75), 'board');
|
|
289
|
-
|
|
290
393
|
function Hole(x, y) {
|
|
291
394
|
return jscadUtils.parts.Cylinder(2.2, t).snap(g.parts.board, 'xy', 'inside-').midlineTo('x', x).midlineTo('y', y);
|
|
292
395
|
}
|
|
293
|
-
|
|
294
396
|
g.holes = [Hole(2, 2).color('yellow'), Hole(2, 23), Hole(12.5 + 2, 2), Hole(12.5 + 2, 23)];
|
|
295
397
|
g.add(jscadUtils.Group('hole0,hole1,hole2,hole3', g.holes), 'hole', false, 'holes');
|
|
296
398
|
var mounts = g.holes.reduce(function (m, h, i) {
|
|
@@ -304,7 +406,9 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
304
406
|
}, {});
|
|
305
407
|
g.add(jscadUtils.Group(pins), 'pins', true, 'pins');
|
|
306
408
|
g.add(jscadUtils.parts.Cube([8.5, 8.5, 2]).snap(g.parts.board, 'xy', 'inside-').snap(g.parts.board, 'z', 'outside-').midlineTo('x', 12.5 + 2).midlineTo('y', 8.5 + 4).color('black'), 'sensor');
|
|
307
|
-
g.add(jscadUtils.parts.Cube([8.5, 8.5, height.sensor - 2]).align(g.parts.sensor, 'xy').snap(g.parts.sensor, 'z', 'outside-').color('gray'), 'lense');
|
|
409
|
+
g.add(jscadUtils.parts.Cube([8.5, 8.5, height.sensor - 2]).align(g.parts.sensor, 'xy').snap(g.parts.sensor, 'z', 'outside-').color('gray'), 'lense');
|
|
410
|
+
|
|
411
|
+
// var lenseribbon = Parts.Cube([7.56, 10, 2])
|
|
308
412
|
// .snap(board, 'z', 'outside-')
|
|
309
413
|
// .midlineTo('x', 12.5)
|
|
310
414
|
// .snap(lense, 'y', 'outside-')
|
|
@@ -327,8 +431,7 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
327
431
|
* @function CameraModuleV2
|
|
328
432
|
* @return {JsCadUtilsGroup} {description}
|
|
329
433
|
*/
|
|
330
|
-
|
|
331
|
-
function CameraModuleV1$1() {
|
|
434
|
+
function CameraModuleV1() {
|
|
332
435
|
var t = 1.1;
|
|
333
436
|
var height = {
|
|
334
437
|
sensor: 4 - t,
|
|
@@ -336,11 +439,9 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
336
439
|
};
|
|
337
440
|
var g = jscadUtils.Group();
|
|
338
441
|
g.add(jscadUtils.parts.RoundedCube(23.862, 25, t, 2).Center().color('green', 0.75), 'board');
|
|
339
|
-
|
|
340
442
|
function Hole(x, y) {
|
|
341
443
|
return jscadUtils.parts.Cylinder(2.2, t).snap(g.parts.board, 'xy', 'inside-').midlineTo('x', x).midlineTo('y', y);
|
|
342
444
|
}
|
|
343
|
-
|
|
344
445
|
g.holes = [Hole(2, 2).color('yellow'), Hole(2, 23), Hole(14.5, 2), Hole(14.5, 23)];
|
|
345
446
|
g.add(jscadUtils.Group('hole0,hole1,hole2,hole3', g.holes), 'hole', false, 'holes');
|
|
346
447
|
var mounts = g.holes.reduce(function (m, h, i) {
|
|
@@ -365,6 +466,7 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
365
466
|
}
|
|
366
467
|
|
|
367
468
|
var union$1 = scadApi.booleanOps.union;
|
|
469
|
+
|
|
368
470
|
/** @typedef {typeof import("@jwc/jscad-utils/src/group").JsCadUtilsGroup} JsCadUtilsGroup */
|
|
369
471
|
|
|
370
472
|
/**
|
|
@@ -374,24 +476,24 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
374
476
|
* @param {CSG} [pi] A CSG object, intended to be a RaspberryPi CSG to align the Hat with.
|
|
375
477
|
* @return {JsCadUtilsGroup} A group object with the `mb`, `gpio` and `holes` for a blank RPi hat.
|
|
376
478
|
*/
|
|
377
|
-
|
|
378
479
|
function Hat(pi) {
|
|
379
480
|
var hat = jscadUtils.Group();
|
|
380
|
-
hat.add(jscadUtils.parts.Board(65.02, 56.39, 3.56, 1.62).color('darkgreen', 0.75), 'mb');
|
|
481
|
+
hat.add(jscadUtils.parts.Board(65.02, 56.39, 3.56, 1.62).color('darkgreen', 0.75), 'mb');
|
|
482
|
+
|
|
483
|
+
// if (pi) {
|
|
381
484
|
// mb = mb.translate(mb.calcSnap(pi, 'xy', 'inside-'));
|
|
382
485
|
// }
|
|
383
486
|
|
|
384
487
|
var hole = MountingHole().snap(hat.parts.mb, 'xy', 'inside-');
|
|
385
488
|
var holes = union$1(hole.midlineTo('x', 3.56).midlineTo('y', 3.56), hole.midlineTo('x', 61.47).midlineTo('y', 3.56), hole.midlineTo('x', 3.56).midlineTo('y', 52.46), hole.midlineTo('x', 61.47).midlineTo('y', 52.46));
|
|
386
|
-
hat.add(Gpio(hat.parts.mb).snap(hat.parts.mb, 'z', 'outside+'), 'gpio');
|
|
387
|
-
// var
|
|
489
|
+
hat.add(Gpio(hat.parts.mb).snap(hat.parts.mb, 'z', 'outside+'), 'gpio');
|
|
490
|
+
// var gpio = Gpio(mb).snap(mb, 'z', 'outside+');
|
|
388
491
|
|
|
492
|
+
// var hat = Group('mb,gpio', [mb, gpio]);
|
|
389
493
|
hat.holes = holes;
|
|
390
|
-
|
|
391
494
|
if (pi) {
|
|
392
495
|
hat.translate(hat.parts.mb.calcSnap(pi, 'xy', 'inside-')).translate(hat.parts.gpio.calcSnap(pi, 'z', 'outside-'));
|
|
393
496
|
}
|
|
394
|
-
|
|
395
497
|
return hat;
|
|
396
498
|
}
|
|
397
499
|
|
|
@@ -405,7 +507,6 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
405
507
|
* @param {number} [options.height] The height of the standoff.
|
|
406
508
|
* @return {JsCadUtilsGroup} A group object with the `mb`, `gpio` and `holes` for a blank RPi hat.
|
|
407
509
|
*/
|
|
408
|
-
|
|
409
510
|
function HatStandoff() {
|
|
410
511
|
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
411
512
|
options = Object.assign({
|
|
@@ -416,38 +517,30 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
416
517
|
return standoff.union(peg);
|
|
417
518
|
}
|
|
418
519
|
|
|
419
|
-
function
|
|
420
|
-
|
|
520
|
+
function _arrayLikeToArray(r, a) {
|
|
521
|
+
(null == a || a > r.length) && (a = r.length);
|
|
522
|
+
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
|
|
523
|
+
return n;
|
|
421
524
|
}
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
function _iterableToArray(iter) {
|
|
428
|
-
if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
function _unsupportedIterableToArray(o, minLen) {
|
|
432
|
-
if (!o) return;
|
|
433
|
-
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
434
|
-
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
435
|
-
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
436
|
-
if (n === "Map" || n === "Set") return Array.from(o);
|
|
437
|
-
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
525
|
+
function _arrayWithoutHoles(r) {
|
|
526
|
+
if (Array.isArray(r)) return _arrayLikeToArray(r);
|
|
438
527
|
}
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
if (len == null || len > arr.length) len = arr.length;
|
|
442
|
-
|
|
443
|
-
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
|
444
|
-
|
|
445
|
-
return arr2;
|
|
528
|
+
function _iterableToArray(r) {
|
|
529
|
+
if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
|
|
446
530
|
}
|
|
447
|
-
|
|
448
531
|
function _nonIterableSpread() {
|
|
449
532
|
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
450
533
|
}
|
|
534
|
+
function _toConsumableArray(r) {
|
|
535
|
+
return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();
|
|
536
|
+
}
|
|
537
|
+
function _unsupportedIterableToArray(r, a) {
|
|
538
|
+
if (r) {
|
|
539
|
+
if ("string" == typeof r) return _arrayLikeToArray(r, a);
|
|
540
|
+
var t = {}.toString.call(r).slice(8, -1);
|
|
541
|
+
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;
|
|
542
|
+
}
|
|
543
|
+
}
|
|
451
544
|
|
|
452
545
|
/** @typedef {typeof import("@jwc/jscad-utils/src/group").JsCadUtilsGroup} JsCadUtilsGroup */
|
|
453
546
|
|
|
@@ -485,10 +578,8 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
485
578
|
* @function CameraModuleV2
|
|
486
579
|
* @return {JsCadUtilsGroup} {description}
|
|
487
580
|
*/
|
|
488
|
-
|
|
489
581
|
function HQCameraModule() {
|
|
490
582
|
var _camera$holes;
|
|
491
|
-
|
|
492
583
|
var t = 1.1;
|
|
493
584
|
var camera = jscadUtils.Group();
|
|
494
585
|
camera.add(jscadUtils.parts.RoundedCube(38, 38, t, 1.4).Center().color('green', 0.75), 'board');
|
|
@@ -497,9 +588,7 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
497
588
|
camera.add(hole.rotateZ(90), 'hole2', true);
|
|
498
589
|
camera.add(hole.rotateZ(180), 'hole3', true);
|
|
499
590
|
camera.add(hole.rotateZ(-90), 'hole4', true);
|
|
500
|
-
|
|
501
591
|
(_camera$holes = camera.holes).push.apply(_camera$holes, _toConsumableArray(camera.array('hole1,hole2,hole3,hole4')));
|
|
502
|
-
|
|
503
592
|
var sensor = jscadUtils.parts.Cube([8.5, 8.5, 1]).snap(camera.parts.board, 'z', 'outside-').align(camera.parts.board, 'xy').color('white');
|
|
504
593
|
camera.add(sensor, 'sensor');
|
|
505
594
|
var mount = jscadUtils.parts.Cylinder(36, 10.2).snap(camera.parts.board, 'z', 'outside-').align(camera.parts.board, 'xy').color('black');
|
|
@@ -519,16 +608,18 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
519
608
|
g.add(jscadUtils.parts.Cylinder(3, 1).color('black').align(g.parts.base, 'xy').snap(g.parts.base, 'z', 'outside-'), 'push');
|
|
520
609
|
return g;
|
|
521
610
|
}
|
|
522
|
-
|
|
523
611
|
function buttonCap(name, button) {
|
|
524
612
|
var g = jscadUtils.Group(name);
|
|
525
|
-
g.add(jscadUtils.parts.Cylinder(4, 3).fillet(1, 'z+')
|
|
613
|
+
g.add(jscadUtils.parts.Cylinder(4, 3).fillet(1, 'z+')
|
|
614
|
+
// .translate([0, 0, 1])
|
|
526
615
|
.union(jscadUtils.parts.Cylinder(6, 0.5).bisect('x', -0.5).parts.negative //.translate([0, 0, 1])
|
|
527
616
|
).color('blue').align(button, 'xy').snap(button, 'z', 'outside-'), 'cap');
|
|
528
|
-
g.add(jscadUtils.parts.Cylinder(7, 0.75).bisect('x', -0.5).parts.negative.color('green').union(jscadUtils.parts.Cylinder(4.5, 2).color('yellow').translate([0, 0, 0])).align(g.parts.cap, 'xy').snap(g.parts.cap, 'z', 'inside-'),
|
|
617
|
+
g.add(jscadUtils.parts.Cylinder(7, 0.75).bisect('x', -0.5).parts.negative.color('green').union(jscadUtils.parts.Cylinder(4.5, 2).color('yellow').translate([0, 0, 0])).align(g.parts.cap, 'xy').snap(g.parts.cap, 'z', 'inside-'),
|
|
618
|
+
// .color('red'),
|
|
529
619
|
'clearance', true);
|
|
530
620
|
return g;
|
|
531
621
|
}
|
|
622
|
+
|
|
532
623
|
/**
|
|
533
624
|
* Returns an Adafruit miniPiTFT Hat with buttons.
|
|
534
625
|
*
|
|
@@ -539,8 +630,6 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
539
630
|
* 
|
|
540
631
|
* @function miniPiTFT
|
|
541
632
|
*/
|
|
542
|
-
|
|
543
|
-
|
|
544
633
|
function miniPiTFT() {
|
|
545
634
|
var g = jscadUtils.Group('miniPiTFT');
|
|
546
635
|
var board = jscadUtils.parts.RoundedCube(jscadUtils.util.inch(2), jscadUtils.util.inch(1), 2, 2).bisect('x', jscadUtils.util.inch(1.5)).parts.negative.bisect('y', -jscadUtils.util.inch(0.96)).parts.negative.color('darkgreen');
|
|
@@ -564,7 +653,6 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
564
653
|
* @function PiTFT22
|
|
565
654
|
* @return {Group} A group of objects to build a PiTFT22.
|
|
566
655
|
*/
|
|
567
|
-
|
|
568
656
|
function PiTFT22() {
|
|
569
657
|
var hat = Hat();
|
|
570
658
|
var mb = hat.parts.mb;
|
|
@@ -585,8 +673,9 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
585
673
|
return group;
|
|
586
674
|
}
|
|
587
675
|
|
|
588
|
-
var union
|
|
589
|
-
var debug
|
|
676
|
+
var union = scadApi.booleanOps.union;
|
|
677
|
+
var debug = jscadUtils.Debug('jscadRPi:PiTFT24');
|
|
678
|
+
|
|
590
679
|
/** @typedef {typeof import("@jwc/jscad-utils/src/group").JsCadUtilsGroup} JsCadUtilsGroup */
|
|
591
680
|
|
|
592
681
|
/**
|
|
@@ -628,7 +717,6 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
628
717
|
// include:js
|
|
629
718
|
// endinject
|
|
630
719
|
*/
|
|
631
|
-
|
|
632
720
|
function PiTFT24() {
|
|
633
721
|
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
634
722
|
var pi = arguments.length > 1 ? arguments[1] : undefined;
|
|
@@ -639,23 +727,25 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
639
727
|
buttonWireYOffset: 5,
|
|
640
728
|
clearance: 0.9
|
|
641
729
|
});
|
|
642
|
-
debug
|
|
730
|
+
debug('PiTFT24', options);
|
|
643
731
|
var hat = Hat(pi);
|
|
644
732
|
var mb = hat.parts.mb;
|
|
645
733
|
var group = jscadUtils.Group();
|
|
646
734
|
group.add(hat.parts.mb, 'mb');
|
|
647
735
|
group.add(hat.parts.gpio, 'gpio');
|
|
648
|
-
group.holes = hat.holes;
|
|
736
|
+
group.holes = hat.holes;
|
|
649
737
|
|
|
738
|
+
// var gpio = hat.parts.gpio;
|
|
650
739
|
var sink = 0; // lower the lcd bevel above actual position, and raise LCD up so cases will mould around the lcd better
|
|
651
740
|
|
|
652
741
|
var lcd = jscadUtils.parts.Cube([50, 40, 3.72]).color('black');
|
|
653
|
-
group.add(lcd.translate(lcd.calcSnap(mb, 'xy', 'inside-')).translate(lcd.calcSnap(mb, 'z', 'outside-')).translate([7, 0, 0]).translate(lcd.calcmidlineTo('y', 28.32)), 'lcd');
|
|
742
|
+
group.add(lcd.translate(lcd.calcSnap(mb, 'xy', 'inside-')).translate(lcd.calcSnap(mb, 'z', 'outside-')).translate([7, 0, 0]).translate(lcd.calcmidlineTo('y', 28.32)), 'lcd');
|
|
743
|
+
|
|
744
|
+
// var lcdbevel = LeftSide(Parts.Cube([60, 42, (5.3 - 1.62) - sink]), mb)
|
|
654
745
|
// .snap(mb, 'z', 'outside-')
|
|
655
746
|
// .translate([4.5, 7, 0])
|
|
656
747
|
// .color('white');
|
|
657
748
|
//
|
|
658
|
-
|
|
659
749
|
var lcdbevel = jscadUtils.parts.Cube([60, 42, 5.3 - 1.62 - sink]).color('white');
|
|
660
750
|
group.add(lcdbevel.translate(lcdbevel.calcSnap(mb, 'xy', 'inside-')).translate(lcdbevel.calcSnap(mb, 'z', 'outside-')).translate([4.5, 7, 0]), 'lcdbevel');
|
|
661
751
|
var buttonBase = jscadUtils.parts.Cube([6.1, 3.5, 3.55]).color('beige').snap(mb, 'z', 'outside-').snap(mb, 'xy', 'inside-').midlineTo('y', 2.5);
|
|
@@ -668,21 +758,21 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
668
758
|
var buttonCapBase = jscadUtils.parts.Cube([6.6, 4, capBaseHeight]).color('blue');
|
|
669
759
|
var buttonCapTop = jscadUtils.parts.Cube([6.1, 3.5, options.buttonCapHeight - capBaseHeight]).snap(buttonCapBase, 'z', 'outside-').align(buttonCapBase, 'xy').fillet(1, 'z+').color('deepskyblue');
|
|
670
760
|
var buttonCaps = buttons.map(function (button) {
|
|
671
|
-
return union
|
|
761
|
+
return union([buttonCapBase, buttonCapTop]).snap(button, 'z', 'outside-').align(button, 'xy');
|
|
672
762
|
});
|
|
673
|
-
group.add(union
|
|
674
|
-
group.add(union
|
|
675
|
-
return union
|
|
763
|
+
group.add(union(buttonCaps), 'buttonCaps', hiddenPart);
|
|
764
|
+
group.add(union(buttonCaps.map(function (button) {
|
|
765
|
+
return union([buttonCapBase.align(button, 'xy').snap(button, 'z', 'inside-').enlarge([options.clearance, options.clearance, 1]), jscadUtils.parts.Cube([6.1, 3.5, options.buttonCapHeight - capBaseHeight]).align(button, 'xy').snap(button, 'z', 'inside-').enlarge([options.clearance, options.clearance, 1])]);
|
|
676
766
|
})), 'buttonCapClearance', hiddenPart);
|
|
677
767
|
var bwthickness = options.capBaseHeight;
|
|
678
768
|
var connector = LeftSide(jscadUtils.parts.Cube([bwthickness, options.buttonWireYOffset, bwthickness]), mb).snap(buttonCaps[0], 'z', 'inside-').snap(buttonCaps[0], 'y', 'outside+').color('blue');
|
|
679
769
|
var buttonWire = jscadUtils.parts.Cube([40, bwthickness, bwthickness]).snap(buttonCaps[0], 'x', 'center-').snap(buttonCaps[0], 'z', 'inside-').snap(connector, 'y', 'inside-').color('blue');
|
|
680
|
-
group.add(union
|
|
770
|
+
group.add(union(buttonWire), 'buttonWire', hiddenPart);
|
|
681
771
|
var buttonWireConnector = buttonCaps.map(function (buttonCap) {
|
|
682
772
|
return connector.align(buttonCap, 'x');
|
|
683
773
|
});
|
|
684
|
-
group.add(union
|
|
685
|
-
var buttonWireClearance = union
|
|
774
|
+
group.add(union(buttonWireConnector), 'buttonWireConnector', hiddenPart);
|
|
775
|
+
var buttonWireClearance = union(buttonWireConnector.map(function (connector) {
|
|
686
776
|
return connector.enlarge([options.clearance, options.clearance, options.buttonCapHeight]);
|
|
687
777
|
})).union(buttonWire.enlarge([options.clearance, options.clearance, options.buttonCapHeight])).snap(buttonWire, 'z', 'inside+').color('red');
|
|
688
778
|
group.add(buttonWireClearance, 'buttonWireClearance', hiddenPart);
|
|
@@ -690,7 +780,8 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
690
780
|
return group;
|
|
691
781
|
}
|
|
692
782
|
|
|
693
|
-
|
|
783
|
+
jscadUtils.Debug('jscadRPi:Spacer');
|
|
784
|
+
|
|
694
785
|
/** @typedef {typeof import("@jwc/jscad-utils/src/triangle")} triangle */
|
|
695
786
|
|
|
696
787
|
/**
|
|
@@ -735,7 +826,6 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
735
826
|
// include:js
|
|
736
827
|
// endinject
|
|
737
828
|
*/
|
|
738
|
-
|
|
739
829
|
function Spacer() {
|
|
740
830
|
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
741
831
|
var mb = arguments.length > 1 ? arguments[1] : undefined;
|
|
@@ -756,7 +846,6 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
756
846
|
});
|
|
757
847
|
var spacers = spacer.combine();
|
|
758
848
|
if (options.postOnly) return spacers.color('yellow');
|
|
759
|
-
|
|
760
849
|
if (!options.hollow) {
|
|
761
850
|
var p1 = spacer.parts.pad1.centroid();
|
|
762
851
|
var p2 = spacer.parts.pad4.centroid();
|
|
@@ -766,7 +855,6 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
766
855
|
var x = jscadUtils.parts.Board(tri.C + 5.5, 6.2, 3.1, options.thickness).rotateZ(tri.b).translate([dx, dy, 0]).snap(spacer.parts.pad1, 'z', 'inside+');
|
|
767
856
|
var cross = x.union(x.mirroredY().translate([0, 56, 0])).snap(spacer.parts.pad1, 'xy', 'inside-').color('red');
|
|
768
857
|
}
|
|
769
|
-
|
|
770
858
|
var gussetInterior = jscadUtils.parts.Board(options.gussetInside[0], options.gussetInside[1], 3, options.thickness).align(spacers, 'xy');
|
|
771
859
|
var gusset = jscadUtils.parts.Board(options.gussetOutside[0], options.gussetOutside[1], 3, options.thickness).align(spacers, 'xy').subtract(gussetInterior).snap(spacer.parts.pad1, 'z', 'inside+');
|
|
772
860
|
var gpio = Gpio(mb);
|
|
@@ -774,9 +862,10 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
774
862
|
return assembly.color('yellow');
|
|
775
863
|
}
|
|
776
864
|
|
|
865
|
+
exports.ActiveCoolingFan = activeCoolingFan;
|
|
777
866
|
exports.BPlus = BPlus;
|
|
778
|
-
exports.CameraModuleV1 = CameraModuleV1;
|
|
779
|
-
exports.CameraModuleV2 = CameraModuleV1
|
|
867
|
+
exports.CameraModuleV1 = CameraModuleV1$1;
|
|
868
|
+
exports.CameraModuleV2 = CameraModuleV1;
|
|
780
869
|
exports.HQCameraModule = HQCameraModule;
|
|
781
870
|
exports.Hat = Hat;
|
|
782
871
|
exports.HatStandoff = HatStandoff;
|
|
@@ -787,5 +876,5 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
787
876
|
|
|
788
877
|
return exports;
|
|
789
878
|
|
|
790
|
-
}({}, jscadUtils, jsCadCSG, scadApi)
|
|
879
|
+
})({}, jscadUtils, jsCadCSG, scadApi);
|
|
791
880
|
/* @jwc/jscad-raspberrypi follow me on Twitter! @johnwebbcole */
|