@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/v1compat.js
CHANGED
|
@@ -35,19 +35,113 @@ function initJscadRPi() {
|
|
|
35
35
|
// include:compat
|
|
36
36
|
// ../dist/index.js
|
|
37
37
|
/*
|
|
38
|
-
* @jwc/jscad-raspberrypi version 3.0
|
|
38
|
+
* @jwc/jscad-raspberrypi version 3.2.0
|
|
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
|
-
|
|
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
|
+
function activeCoolingFan() {
|
|
55
|
+
var g = jscadUtils.Group('ActiveCoolingFan');
|
|
56
|
+
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
|
+
g.add(board, 'board');
|
|
45
58
|
|
|
46
|
-
|
|
47
|
-
|
|
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
|
+
// );
|
|
48
139
|
|
|
49
|
-
|
|
50
|
-
|
|
140
|
+
return g;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
jsCadCSG.CSG;
|
|
144
|
+
scadApi.booleanOps.union;
|
|
51
145
|
function RightSide(o, mb) {
|
|
52
146
|
return o.translate(jscadUtils.array.add(o.calcSnap(mb, 'z', 'outside-'), o.calcSnap(mb, 'x', 'inside+'), o.calcSnap(mb, 'y', 'inside-'), [2, 0, 0]));
|
|
53
147
|
}
|
|
@@ -114,18 +208,20 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
114
208
|
return jscadUtils.parts.Cube([1, 2, 0.7]);
|
|
115
209
|
}
|
|
116
210
|
|
|
117
|
-
var debug = jscadUtils.Debug('jscadRPi:BPlusMounting');
|
|
211
|
+
var debug$2 = jscadUtils.Debug('jscadRPi:BPlusMounting');
|
|
118
212
|
function holes(mb) {
|
|
119
213
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
120
214
|
options = Object.assign(options, {
|
|
121
215
|
height: 8
|
|
122
216
|
});
|
|
123
|
-
debug('holes', mb, options);
|
|
217
|
+
debug$2('holes', mb, options);
|
|
124
218
|
|
|
219
|
+
// var hole = LeftSide(MountingHole(options && options.diameter || undefined, options && options.height || 8), mb);
|
|
125
220
|
var hole = MountingHole(options.diameter || 3.25, options.height).snap(mb, 'xy', 'inside-').align(mb, 'z');
|
|
126
221
|
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)];
|
|
127
222
|
return jscadUtils.Group('hole1,hole2,hole3,hole4', holes);
|
|
128
223
|
}
|
|
224
|
+
|
|
129
225
|
/**
|
|
130
226
|
* Create mounting pads for a Raspberry PI model B.
|
|
131
227
|
* @function pads
|
|
@@ -135,7 +231,6 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
135
231
|
* @param {number} [options.height=4] An options object.
|
|
136
232
|
* @return {JsCadUtilsGroup} {description}
|
|
137
233
|
*/
|
|
138
|
-
|
|
139
234
|
function pads(mb) {
|
|
140
235
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
141
236
|
options = Object.assign({
|
|
@@ -143,9 +238,11 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
143
238
|
height: 4
|
|
144
239
|
}, options);
|
|
145
240
|
var pad = Mountingpad(undefined, options.height).snap(mb, 'z', options.snap).snap(mb, 'xy', 'inside-');
|
|
146
|
-
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)];
|
|
241
|
+
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)];
|
|
147
242
|
|
|
148
|
-
|
|
243
|
+
// var b = mb.getBounds();
|
|
244
|
+
return jscadUtils.Group('pad1,pad2,pad3,pad4', pads);
|
|
245
|
+
// });
|
|
149
246
|
}
|
|
150
247
|
var BPlusMounting = {
|
|
151
248
|
holes: holes,
|
|
@@ -153,7 +250,6 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
153
250
|
};
|
|
154
251
|
|
|
155
252
|
var debug$1 = jscadUtils.Debug('jscadRPi:BPlus');
|
|
156
|
-
|
|
157
253
|
function pi4(group, clearance, mb) {
|
|
158
254
|
/**
|
|
159
255
|
* Model 4
|
|
@@ -163,10 +259,12 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
163
259
|
var usb = jscadUtils.Group();
|
|
164
260
|
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');
|
|
165
261
|
usb.add(jscadUtils.parts.Cube([1, 15, 16]).snap(usb.parts.body, 'x', 'outside-').align(usb.parts.body, 'yz').color('lightgray'), 'flange');
|
|
166
|
-
group.add(usb.clone()
|
|
262
|
+
group.add(usb.clone()
|
|
263
|
+
// .translate(usbTranslation)
|
|
167
264
|
.translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 27)), 'usb1', false, 'usb1');
|
|
168
265
|
group.add(jscadUtils.parts.Cube([clearance, 15, 16]).align(group.parts.usb1, 'yz').snap(group.parts.usb1, 'x', 'outside-').color('red'), 'clearance-usb1', true);
|
|
169
|
-
group.add(usb.clone()
|
|
266
|
+
group.add(usb.clone()
|
|
267
|
+
// .translate(usbTranslation)
|
|
170
268
|
.translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 9)), 'usb2', false, 'usb2');
|
|
171
269
|
group.add(jscadUtils.parts.Cube([clearance, 15, 16]).align(group.parts.usb2, 'yz').snap(group.parts.usb2, 'x', 'outside-').color('red'), 'clearance-usb2', true);
|
|
172
270
|
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');
|
|
@@ -183,20 +281,24 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
183
281
|
group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 8).color('lightgreen'), 'activityled');
|
|
184
282
|
group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 12).color('red'), 'powerled');
|
|
185
283
|
}
|
|
186
|
-
|
|
187
284
|
function pi5(group, clearance, mb) {
|
|
188
285
|
/**
|
|
189
|
-
|
|
190
|
-
|
|
286
|
+
* Model 5
|
|
287
|
+
*/
|
|
288
|
+
|
|
289
|
+
group.add(jscadUtils.parts.Cube([12, 12, 3]).color('lightgray').translate([24, 15, 2]), 'cpu');
|
|
290
|
+
group.add(jscadUtils.parts.Cube([12, 12, clearance]).color('red').translate([24, 15, 2]), 'clearance-cpu', true, 'clearance');
|
|
191
291
|
group.add(RightSide(jscadUtils.parts.Cube([21.5, 16.5, 13.5]).color('lightgray'), mb).translate([2, 0, 0]).midlineTo('y', 10.2), 'ethernet');
|
|
192
292
|
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');
|
|
193
293
|
var usb = jscadUtils.Group();
|
|
194
294
|
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');
|
|
195
295
|
usb.add(jscadUtils.parts.Cube([1, 15, 16]).snap(usb.parts.body, 'x', 'outside-').align(usb.parts.body, 'yz').color('lightgray'), 'flange');
|
|
196
|
-
group.add(usb.clone()
|
|
296
|
+
group.add(usb.clone()
|
|
297
|
+
// .translate(usbTranslation)
|
|
197
298
|
.translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 29.7)), 'usb1', false, 'usb1');
|
|
198
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);
|
|
199
|
-
group.add(usb.clone()
|
|
300
|
+
group.add(usb.clone()
|
|
301
|
+
// .translate(usbTranslation)
|
|
200
302
|
.translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 47)), 'usb2', false, 'usb2');
|
|
201
303
|
group.add(jscadUtils.parts.Cube([clearance, 15, 16]).align(group.parts.usb2, 'yz').snap(group.parts.usb2, 'x', 'outside-').color('red'), 'clearance-usb2', true);
|
|
202
304
|
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');
|
|
@@ -213,6 +315,7 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
213
315
|
group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 8).color('lightgreen'), 'activityled');
|
|
214
316
|
group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 12).color('red'), 'powerled');
|
|
215
317
|
}
|
|
318
|
+
|
|
216
319
|
/**
|
|
217
320
|
* Returns a complete RaspberryPi B Plus model.
|
|
218
321
|
* 
|
|
@@ -246,25 +349,21 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
246
349
|
// include:js
|
|
247
350
|
// endinject
|
|
248
351
|
*/
|
|
249
|
-
|
|
250
|
-
|
|
251
352
|
function BPlus() {
|
|
252
353
|
var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2;
|
|
253
354
|
var options = arguments.length > 1 ? arguments[1] : undefined;
|
|
254
|
-
|
|
255
355
|
var _Object$assign = Object.assign({
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
356
|
+
clearance: 5
|
|
357
|
+
}, options),
|
|
358
|
+
clearance = _Object$assign.clearance;
|
|
260
359
|
model = !model ? 2 : model === true ? 3 : model;
|
|
261
360
|
debug$1('BPlus model:', model);
|
|
262
361
|
var mb = BPlusMotherboard(model == 4 ? 3 : 2);
|
|
263
362
|
var group = jscadUtils.Group('mb', mb);
|
|
363
|
+
|
|
264
364
|
/**
|
|
265
365
|
* Model 1, 2, 3
|
|
266
366
|
*/
|
|
267
|
-
|
|
268
367
|
if (model < 4) {
|
|
269
368
|
// Right side parts
|
|
270
369
|
group.add(RightSide(EthernetJack(), mb).midlineTo('y', 10.25), 'ethernet');
|
|
@@ -280,7 +379,6 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
280
379
|
group.add(Ribbon().snap(mb, 'z', 'outside-').midlineTo('x', 45), 'camera');
|
|
281
380
|
group.add(Ribbon().snap(mb, 'z', 'outside-').midlineTo('x', 3.5).midlineTo('y', 28), 'display');
|
|
282
381
|
group.add(Gpio().snap(mb, 'z', 'outside-').midlineTo('x', 32.5).midlineTo('y', 52.5), 'gpio');
|
|
283
|
-
|
|
284
382
|
if (model == 3) {
|
|
285
383
|
group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 7.9).color('lightgreen'), 'activityled');
|
|
286
384
|
group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 11.5).color('red'), 'powerled');
|
|
@@ -293,13 +391,20 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
293
391
|
} else {
|
|
294
392
|
pi5(group, clearance, mb);
|
|
295
393
|
}
|
|
296
|
-
|
|
297
394
|
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');
|
|
298
395
|
group.holes = holes(mb).array();
|
|
299
396
|
group.add(group.holes[0], 'hole1', true);
|
|
300
397
|
group.add(group.holes[1], 'hole2', true);
|
|
301
398
|
group.add(group.holes[2], 'hole3', true);
|
|
302
399
|
group.add(group.holes[3], 'hole4', true);
|
|
400
|
+
|
|
401
|
+
/** Add fan mounting holes for PI 5 */
|
|
402
|
+
if (model >= 5) {
|
|
403
|
+
group.holes.push(MountingHole(3.25, 8).snap(mb, 'xy', 'inside-').align(mb, 'z').midlineTo('x', 3.5).midlineTo('y', 6 + 3.5));
|
|
404
|
+
group.add(group.holes[4], 'fan1hole', true);
|
|
405
|
+
group.holes.push(MountingHole(3.25, 8).snap(mb, 'xy', 'inside-').align(mb, 'z').midlineTo('x', 3.5 + 58).midlineTo('y', 52.5 - 6));
|
|
406
|
+
group.add(group.holes[5], 'fan2hole', true);
|
|
407
|
+
}
|
|
303
408
|
return group;
|
|
304
409
|
}
|
|
305
410
|
|
|
@@ -313,8 +418,7 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
313
418
|
* @exports CameraModuleV1
|
|
314
419
|
* @memberof RaspberryPi
|
|
315
420
|
*/
|
|
316
|
-
|
|
317
|
-
function CameraModuleV1() {
|
|
421
|
+
function CameraModuleV1$1() {
|
|
318
422
|
var t = 1.1;
|
|
319
423
|
var height = {
|
|
320
424
|
sensor: 5.9 - t,
|
|
@@ -322,11 +426,9 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
322
426
|
};
|
|
323
427
|
var g = jscadUtils.Group();
|
|
324
428
|
g.add(jscadUtils.parts.Cube([24, 25, t]).Center().color('green', 0.75), 'board');
|
|
325
|
-
|
|
326
429
|
function Hole(x, y) {
|
|
327
430
|
return jscadUtils.parts.Cylinder(2.2, t).snap(g.parts.board, 'xy', 'inside-').midlineTo('x', x).midlineTo('y', y);
|
|
328
431
|
}
|
|
329
|
-
|
|
330
432
|
g.holes = [Hole(2, 2).color('yellow'), Hole(2, 23), Hole(12.5 + 2, 2), Hole(12.5 + 2, 23)];
|
|
331
433
|
g.add(jscadUtils.Group('hole0,hole1,hole2,hole3', g.holes), 'hole', false, 'holes');
|
|
332
434
|
var mounts = g.holes.reduce(function (m, h, i) {
|
|
@@ -340,7 +442,9 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
340
442
|
}, {});
|
|
341
443
|
g.add(jscadUtils.Group(pins), 'pins', true, 'pins');
|
|
342
444
|
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');
|
|
343
|
-
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');
|
|
445
|
+
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');
|
|
446
|
+
|
|
447
|
+
// var lenseribbon = Parts.Cube([7.56, 10, 2])
|
|
344
448
|
// .snap(board, 'z', 'outside-')
|
|
345
449
|
// .midlineTo('x', 12.5)
|
|
346
450
|
// .snap(lense, 'y', 'outside-')
|
|
@@ -363,8 +467,7 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
363
467
|
* @function CameraModuleV2
|
|
364
468
|
* @return {JsCadUtilsGroup} {description}
|
|
365
469
|
*/
|
|
366
|
-
|
|
367
|
-
function CameraModuleV1$1() {
|
|
470
|
+
function CameraModuleV1() {
|
|
368
471
|
var t = 1.1;
|
|
369
472
|
var height = {
|
|
370
473
|
sensor: 4 - t,
|
|
@@ -372,11 +475,9 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
372
475
|
};
|
|
373
476
|
var g = jscadUtils.Group();
|
|
374
477
|
g.add(jscadUtils.parts.RoundedCube(23.862, 25, t, 2).Center().color('green', 0.75), 'board');
|
|
375
|
-
|
|
376
478
|
function Hole(x, y) {
|
|
377
479
|
return jscadUtils.parts.Cylinder(2.2, t).snap(g.parts.board, 'xy', 'inside-').midlineTo('x', x).midlineTo('y', y);
|
|
378
480
|
}
|
|
379
|
-
|
|
380
481
|
g.holes = [Hole(2, 2).color('yellow'), Hole(2, 23), Hole(14.5, 2), Hole(14.5, 23)];
|
|
381
482
|
g.add(jscadUtils.Group('hole0,hole1,hole2,hole3', g.holes), 'hole', false, 'holes');
|
|
382
483
|
var mounts = g.holes.reduce(function (m, h, i) {
|
|
@@ -401,6 +502,7 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
401
502
|
}
|
|
402
503
|
|
|
403
504
|
var union$1 = scadApi.booleanOps.union;
|
|
505
|
+
|
|
404
506
|
/** @typedef {typeof import("@jwc/jscad-utils/src/group").JsCadUtilsGroup} JsCadUtilsGroup */
|
|
405
507
|
|
|
406
508
|
/**
|
|
@@ -410,24 +512,24 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
410
512
|
* @param {CSG} [pi] A CSG object, intended to be a RaspberryPi CSG to align the Hat with.
|
|
411
513
|
* @return {JsCadUtilsGroup} A group object with the `mb`, `gpio` and `holes` for a blank RPi hat.
|
|
412
514
|
*/
|
|
413
|
-
|
|
414
515
|
function Hat(pi) {
|
|
415
516
|
var hat = jscadUtils.Group();
|
|
416
|
-
hat.add(jscadUtils.parts.Board(65.02, 56.39, 3.56, 1.62).color('darkgreen', 0.75), 'mb');
|
|
517
|
+
hat.add(jscadUtils.parts.Board(65.02, 56.39, 3.56, 1.62).color('darkgreen', 0.75), 'mb');
|
|
518
|
+
|
|
519
|
+
// if (pi) {
|
|
417
520
|
// mb = mb.translate(mb.calcSnap(pi, 'xy', 'inside-'));
|
|
418
521
|
// }
|
|
419
522
|
|
|
420
523
|
var hole = MountingHole().snap(hat.parts.mb, 'xy', 'inside-');
|
|
421
524
|
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));
|
|
422
|
-
hat.add(Gpio(hat.parts.mb).snap(hat.parts.mb, 'z', 'outside+'), 'gpio');
|
|
423
|
-
// var
|
|
525
|
+
hat.add(Gpio(hat.parts.mb).snap(hat.parts.mb, 'z', 'outside+'), 'gpio');
|
|
526
|
+
// var gpio = Gpio(mb).snap(mb, 'z', 'outside+');
|
|
424
527
|
|
|
528
|
+
// var hat = Group('mb,gpio', [mb, gpio]);
|
|
425
529
|
hat.holes = holes;
|
|
426
|
-
|
|
427
530
|
if (pi) {
|
|
428
531
|
hat.translate(hat.parts.mb.calcSnap(pi, 'xy', 'inside-')).translate(hat.parts.gpio.calcSnap(pi, 'z', 'outside-'));
|
|
429
532
|
}
|
|
430
|
-
|
|
431
533
|
return hat;
|
|
432
534
|
}
|
|
433
535
|
|
|
@@ -441,7 +543,6 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
441
543
|
* @param {number} [options.height] The height of the standoff.
|
|
442
544
|
* @return {JsCadUtilsGroup} A group object with the `mb`, `gpio` and `holes` for a blank RPi hat.
|
|
443
545
|
*/
|
|
444
|
-
|
|
445
546
|
function HatStandoff() {
|
|
446
547
|
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
447
548
|
options = Object.assign({
|
|
@@ -452,38 +553,30 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
452
553
|
return standoff.union(peg);
|
|
453
554
|
}
|
|
454
555
|
|
|
455
|
-
function
|
|
456
|
-
|
|
556
|
+
function _arrayLikeToArray(r, a) {
|
|
557
|
+
(null == a || a > r.length) && (a = r.length);
|
|
558
|
+
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
|
|
559
|
+
return n;
|
|
457
560
|
}
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
function _iterableToArray(iter) {
|
|
464
|
-
if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
function _unsupportedIterableToArray(o, minLen) {
|
|
468
|
-
if (!o) return;
|
|
469
|
-
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
470
|
-
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
471
|
-
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
472
|
-
if (n === "Map" || n === "Set") return Array.from(o);
|
|
473
|
-
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
561
|
+
function _arrayWithoutHoles(r) {
|
|
562
|
+
if (Array.isArray(r)) return _arrayLikeToArray(r);
|
|
474
563
|
}
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
if (len == null || len > arr.length) len = arr.length;
|
|
478
|
-
|
|
479
|
-
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
|
480
|
-
|
|
481
|
-
return arr2;
|
|
564
|
+
function _iterableToArray(r) {
|
|
565
|
+
if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
|
|
482
566
|
}
|
|
483
|
-
|
|
484
567
|
function _nonIterableSpread() {
|
|
485
568
|
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
486
569
|
}
|
|
570
|
+
function _toConsumableArray(r) {
|
|
571
|
+
return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();
|
|
572
|
+
}
|
|
573
|
+
function _unsupportedIterableToArray(r, a) {
|
|
574
|
+
if (r) {
|
|
575
|
+
if ("string" == typeof r) return _arrayLikeToArray(r, a);
|
|
576
|
+
var t = {}.toString.call(r).slice(8, -1);
|
|
577
|
+
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;
|
|
578
|
+
}
|
|
579
|
+
}
|
|
487
580
|
|
|
488
581
|
/** @typedef {typeof import("@jwc/jscad-utils/src/group").JsCadUtilsGroup} JsCadUtilsGroup */
|
|
489
582
|
|
|
@@ -521,10 +614,8 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
521
614
|
* @function CameraModuleV2
|
|
522
615
|
* @return {JsCadUtilsGroup} {description}
|
|
523
616
|
*/
|
|
524
|
-
|
|
525
617
|
function HQCameraModule() {
|
|
526
618
|
var _camera$holes;
|
|
527
|
-
|
|
528
619
|
var t = 1.1;
|
|
529
620
|
var camera = jscadUtils.Group();
|
|
530
621
|
camera.add(jscadUtils.parts.RoundedCube(38, 38, t, 1.4).Center().color('green', 0.75), 'board');
|
|
@@ -533,9 +624,7 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
533
624
|
camera.add(hole.rotateZ(90), 'hole2', true);
|
|
534
625
|
camera.add(hole.rotateZ(180), 'hole3', true);
|
|
535
626
|
camera.add(hole.rotateZ(-90), 'hole4', true);
|
|
536
|
-
|
|
537
627
|
(_camera$holes = camera.holes).push.apply(_camera$holes, _toConsumableArray(camera.array('hole1,hole2,hole3,hole4')));
|
|
538
|
-
|
|
539
628
|
var sensor = jscadUtils.parts.Cube([8.5, 8.5, 1]).snap(camera.parts.board, 'z', 'outside-').align(camera.parts.board, 'xy').color('white');
|
|
540
629
|
camera.add(sensor, 'sensor');
|
|
541
630
|
var mount = jscadUtils.parts.Cylinder(36, 10.2).snap(camera.parts.board, 'z', 'outside-').align(camera.parts.board, 'xy').color('black');
|
|
@@ -555,16 +644,18 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
555
644
|
g.add(jscadUtils.parts.Cylinder(3, 1).color('black').align(g.parts.base, 'xy').snap(g.parts.base, 'z', 'outside-'), 'push');
|
|
556
645
|
return g;
|
|
557
646
|
}
|
|
558
|
-
|
|
559
647
|
function buttonCap(name, button) {
|
|
560
648
|
var g = jscadUtils.Group(name);
|
|
561
|
-
g.add(jscadUtils.parts.Cylinder(4, 3).fillet(1, 'z+')
|
|
649
|
+
g.add(jscadUtils.parts.Cylinder(4, 3).fillet(1, 'z+')
|
|
650
|
+
// .translate([0, 0, 1])
|
|
562
651
|
.union(jscadUtils.parts.Cylinder(6, 0.5).bisect('x', -0.5).parts.negative //.translate([0, 0, 1])
|
|
563
652
|
).color('blue').align(button, 'xy').snap(button, 'z', 'outside-'), 'cap');
|
|
564
|
-
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-'),
|
|
653
|
+
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-'),
|
|
654
|
+
// .color('red'),
|
|
565
655
|
'clearance', true);
|
|
566
656
|
return g;
|
|
567
657
|
}
|
|
658
|
+
|
|
568
659
|
/**
|
|
569
660
|
* Returns an Adafruit miniPiTFT Hat with buttons.
|
|
570
661
|
*
|
|
@@ -575,8 +666,6 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
575
666
|
* 
|
|
576
667
|
* @function miniPiTFT
|
|
577
668
|
*/
|
|
578
|
-
|
|
579
|
-
|
|
580
669
|
function miniPiTFT() {
|
|
581
670
|
var g = jscadUtils.Group('miniPiTFT');
|
|
582
671
|
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');
|
|
@@ -600,7 +689,6 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
600
689
|
* @function PiTFT22
|
|
601
690
|
* @return {Group} A group of objects to build a PiTFT22.
|
|
602
691
|
*/
|
|
603
|
-
|
|
604
692
|
function PiTFT22() {
|
|
605
693
|
var hat = Hat();
|
|
606
694
|
var mb = hat.parts.mb;
|
|
@@ -621,8 +709,9 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
621
709
|
return group;
|
|
622
710
|
}
|
|
623
711
|
|
|
624
|
-
var union
|
|
625
|
-
var debug
|
|
712
|
+
var union = scadApi.booleanOps.union;
|
|
713
|
+
var debug = jscadUtils.Debug('jscadRPi:PiTFT24');
|
|
714
|
+
|
|
626
715
|
/** @typedef {typeof import("@jwc/jscad-utils/src/group").JsCadUtilsGroup} JsCadUtilsGroup */
|
|
627
716
|
|
|
628
717
|
/**
|
|
@@ -664,7 +753,6 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
664
753
|
// include:js
|
|
665
754
|
// endinject
|
|
666
755
|
*/
|
|
667
|
-
|
|
668
756
|
function PiTFT24() {
|
|
669
757
|
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
670
758
|
var pi = arguments.length > 1 ? arguments[1] : undefined;
|
|
@@ -675,23 +763,25 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
675
763
|
buttonWireYOffset: 5,
|
|
676
764
|
clearance: 0.9
|
|
677
765
|
});
|
|
678
|
-
debug
|
|
766
|
+
debug('PiTFT24', options);
|
|
679
767
|
var hat = Hat(pi);
|
|
680
768
|
var mb = hat.parts.mb;
|
|
681
769
|
var group = jscadUtils.Group();
|
|
682
770
|
group.add(hat.parts.mb, 'mb');
|
|
683
771
|
group.add(hat.parts.gpio, 'gpio');
|
|
684
|
-
group.holes = hat.holes;
|
|
772
|
+
group.holes = hat.holes;
|
|
685
773
|
|
|
774
|
+
// var gpio = hat.parts.gpio;
|
|
686
775
|
var sink = 0; // lower the lcd bevel above actual position, and raise LCD up so cases will mould around the lcd better
|
|
687
776
|
|
|
688
777
|
var lcd = jscadUtils.parts.Cube([50, 40, 3.72]).color('black');
|
|
689
|
-
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');
|
|
778
|
+
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');
|
|
779
|
+
|
|
780
|
+
// var lcdbevel = LeftSide(Parts.Cube([60, 42, (5.3 - 1.62) - sink]), mb)
|
|
690
781
|
// .snap(mb, 'z', 'outside-')
|
|
691
782
|
// .translate([4.5, 7, 0])
|
|
692
783
|
// .color('white');
|
|
693
784
|
//
|
|
694
|
-
|
|
695
785
|
var lcdbevel = jscadUtils.parts.Cube([60, 42, 5.3 - 1.62 - sink]).color('white');
|
|
696
786
|
group.add(lcdbevel.translate(lcdbevel.calcSnap(mb, 'xy', 'inside-')).translate(lcdbevel.calcSnap(mb, 'z', 'outside-')).translate([4.5, 7, 0]), 'lcdbevel');
|
|
697
787
|
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);
|
|
@@ -704,21 +794,21 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
704
794
|
var buttonCapBase = jscadUtils.parts.Cube([6.6, 4, capBaseHeight]).color('blue');
|
|
705
795
|
var buttonCapTop = jscadUtils.parts.Cube([6.1, 3.5, options.buttonCapHeight - capBaseHeight]).snap(buttonCapBase, 'z', 'outside-').align(buttonCapBase, 'xy').fillet(1, 'z+').color('deepskyblue');
|
|
706
796
|
var buttonCaps = buttons.map(function (button) {
|
|
707
|
-
return union
|
|
797
|
+
return union([buttonCapBase, buttonCapTop]).snap(button, 'z', 'outside-').align(button, 'xy');
|
|
708
798
|
});
|
|
709
|
-
group.add(union
|
|
710
|
-
group.add(union
|
|
711
|
-
return union
|
|
799
|
+
group.add(union(buttonCaps), 'buttonCaps', hiddenPart);
|
|
800
|
+
group.add(union(buttonCaps.map(function (button) {
|
|
801
|
+
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])]);
|
|
712
802
|
})), 'buttonCapClearance', hiddenPart);
|
|
713
803
|
var bwthickness = options.capBaseHeight;
|
|
714
804
|
var connector = LeftSide(jscadUtils.parts.Cube([bwthickness, options.buttonWireYOffset, bwthickness]), mb).snap(buttonCaps[0], 'z', 'inside-').snap(buttonCaps[0], 'y', 'outside+').color('blue');
|
|
715
805
|
var buttonWire = jscadUtils.parts.Cube([40, bwthickness, bwthickness]).snap(buttonCaps[0], 'x', 'center-').snap(buttonCaps[0], 'z', 'inside-').snap(connector, 'y', 'inside-').color('blue');
|
|
716
|
-
group.add(union
|
|
806
|
+
group.add(union(buttonWire), 'buttonWire', hiddenPart);
|
|
717
807
|
var buttonWireConnector = buttonCaps.map(function (buttonCap) {
|
|
718
808
|
return connector.align(buttonCap, 'x');
|
|
719
809
|
});
|
|
720
|
-
group.add(union
|
|
721
|
-
var buttonWireClearance = union
|
|
810
|
+
group.add(union(buttonWireConnector), 'buttonWireConnector', hiddenPart);
|
|
811
|
+
var buttonWireClearance = union(buttonWireConnector.map(function (connector) {
|
|
722
812
|
return connector.enlarge([options.clearance, options.clearance, options.buttonCapHeight]);
|
|
723
813
|
})).union(buttonWire.enlarge([options.clearance, options.clearance, options.buttonCapHeight])).snap(buttonWire, 'z', 'inside+').color('red');
|
|
724
814
|
group.add(buttonWireClearance, 'buttonWireClearance', hiddenPart);
|
|
@@ -726,7 +816,8 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
726
816
|
return group;
|
|
727
817
|
}
|
|
728
818
|
|
|
729
|
-
|
|
819
|
+
jscadUtils.Debug('jscadRPi:Spacer');
|
|
820
|
+
|
|
730
821
|
/** @typedef {typeof import("@jwc/jscad-utils/src/triangle")} triangle */
|
|
731
822
|
|
|
732
823
|
/**
|
|
@@ -771,7 +862,6 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
771
862
|
// include:js
|
|
772
863
|
// endinject
|
|
773
864
|
*/
|
|
774
|
-
|
|
775
865
|
function Spacer() {
|
|
776
866
|
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
777
867
|
var mb = arguments.length > 1 ? arguments[1] : undefined;
|
|
@@ -792,7 +882,6 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
792
882
|
});
|
|
793
883
|
var spacers = spacer.combine();
|
|
794
884
|
if (options.postOnly) return spacers.color('yellow');
|
|
795
|
-
|
|
796
885
|
if (!options.hollow) {
|
|
797
886
|
var p1 = spacer.parts.pad1.centroid();
|
|
798
887
|
var p2 = spacer.parts.pad4.centroid();
|
|
@@ -802,7 +891,6 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
802
891
|
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+');
|
|
803
892
|
var cross = x.union(x.mirroredY().translate([0, 56, 0])).snap(spacer.parts.pad1, 'xy', 'inside-').color('red');
|
|
804
893
|
}
|
|
805
|
-
|
|
806
894
|
var gussetInterior = jscadUtils.parts.Board(options.gussetInside[0], options.gussetInside[1], 3, options.thickness).align(spacers, 'xy');
|
|
807
895
|
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+');
|
|
808
896
|
var gpio = Gpio(mb);
|
|
@@ -810,9 +898,10 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
810
898
|
return assembly.color('yellow');
|
|
811
899
|
}
|
|
812
900
|
|
|
901
|
+
exports.ActiveCoolingFan = activeCoolingFan;
|
|
813
902
|
exports.BPlus = BPlus;
|
|
814
|
-
exports.CameraModuleV1 = CameraModuleV1;
|
|
815
|
-
exports.CameraModuleV2 = CameraModuleV1
|
|
903
|
+
exports.CameraModuleV1 = CameraModuleV1$1;
|
|
904
|
+
exports.CameraModuleV2 = CameraModuleV1;
|
|
816
905
|
exports.HQCameraModule = HQCameraModule;
|
|
817
906
|
exports.Hat = Hat;
|
|
818
907
|
exports.HatStandoff = HatStandoff;
|
|
@@ -823,7 +912,7 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
|
|
|
823
912
|
|
|
824
913
|
return exports;
|
|
825
914
|
|
|
826
|
-
}({}, jscadUtils, jsCadCSG, scadApi)
|
|
915
|
+
})({}, jscadUtils, jsCadCSG, scadApi);
|
|
827
916
|
/* @jwc/jscad-raspberrypi follow me on Twitter! @johnwebbcole */
|
|
828
917
|
|
|
829
918
|
// end:compat
|