@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/dist/index.js CHANGED
@@ -1,17 +1,111 @@
1
1
  /*
2
- * @jwc/jscad-raspberrypi version 3.0.3
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
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
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
+ * ![miniPiTFT example](../images/miniPiTFT.png)
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
- var jsCadCSG__default = /*#__PURE__*/_interopDefaultLegacy(jsCadCSG);
11
- var scadApi__default = /*#__PURE__*/_interopDefaultLegacy(scadApi);
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
- var CSG$1 = jsCadCSG__default['default'].CSG;
14
- var union = scadApi__default['default'].booleanOps.union;
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); // var hole = LeftSide(MountingHole(options && options.diameter || undefined, options && options.height || 8), mb);
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)]; // var b = mb.getBounds();
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
- return jscadUtils.Group('pad1,pad2,pad3,pad4', pads); // });
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() // .translate(usbTranslation)
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() // .translate(usbTranslation)
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
- * Model 5
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() // .translate(usbTranslation)
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() // .translate(usbTranslation)
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
  * ![bplus example](../images/bplus.png)
@@ -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
- clearance: 5
221
- }, options),
222
- clearance = _Object$assign.clearance;
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'); // var lenseribbon = Parts.Cube([7.56, 10, 2])
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'); // if (pi) {
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'); // var gpio = Gpio(mb).snap(mb, 'z', 'outside+');
387
- // var hat = Group('mb,gpio', [mb, gpio]);
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 _toConsumableArray(arr) {
420
- return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
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
- function _arrayWithoutHoles(arr) {
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
- function _arrayLikeToArray(arr, len) {
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+') // .translate([0, 0, 1])
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-'), // .color('red'),
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
  * ![miniPiTFT example](../images/miniPiTFT.png)
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$2 = scadApi.booleanOps.union;
589
- var debug$2 = jscadUtils.Debug('jscadRPi:PiTFT24');
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$2('PiTFT24', options);
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; // var gpio = hat.parts.gpio;
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'); // var lcdbevel = LeftSide(Parts.Cube([60, 42, (5.3 - 1.62) - sink]), mb)
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$2([buttonCapBase, buttonCapTop]).snap(button, 'z', 'outside-').align(button, 'xy');
761
+ return union([buttonCapBase, buttonCapTop]).snap(button, 'z', 'outside-').align(button, 'xy');
672
762
  });
673
- group.add(union$2(buttonCaps), 'buttonCaps', hiddenPart);
674
- group.add(union$2(buttonCaps.map(function (button) {
675
- return union$2([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])]);
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$2(buttonWire), 'buttonWire', hiddenPart);
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$2(buttonWireConnector), 'buttonWireConnector', hiddenPart);
685
- var buttonWireClearance = union$2(buttonWireConnector.map(function (connector) {
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
- var debug$3 = jscadUtils.Debug('jscadRPi:Spacer');
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$1;
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 */