@jwc/jscad-raspberrypi 3.0.3 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/bplus.js CHANGED
@@ -4,6 +4,390 @@ import * as BPlusMounting from './bplus-mounting';
4
4
  import * as RPiParts from './rpi-parts';
5
5
  const debug = Debug('jscadRPi:BPlus');
6
6
 
7
+
8
+ function pi4(group, clearance, mb) {
9
+ /**
10
+ * Model 4
11
+ */
12
+ group.add(
13
+ RightSide(Parts.Cube([21.5, 16.5, 13.5]).color('lightgray'), mb)
14
+ .translate([2, 0, 0])
15
+ .midlineTo('y', 45.75),
16
+ 'ethernet'
17
+ );
18
+
19
+ group.add(
20
+ Parts.Cube([clearance, 16.5, 13.5])
21
+ .align(group.parts.ethernet, 'yz')
22
+ .snap(group.parts.ethernet, 'x', 'outside-')
23
+ .color('red'),
24
+ 'clearance-ethernet',
25
+ true,
26
+ 'clearance'
27
+ );
28
+
29
+ var usb = Group();
30
+ usb.add(
31
+ Parts.Cube([17, 13.1, 15])
32
+ .snap(group.parts.ethernet, 'x', 'inside+', -1)
33
+ .snap(mb, 'z', 'outside-', 1.5)
34
+ .color('lightgray'),
35
+ 'body'
36
+ );
37
+
38
+ usb.add(
39
+ Parts.Cube([1, 15, 16])
40
+ .snap(usb.parts.body, 'x', 'outside-')
41
+ .align(usb.parts.body, 'yz')
42
+ .color('lightgray'),
43
+ 'flange'
44
+ );
45
+
46
+ group.add(
47
+ usb
48
+ .clone()
49
+ // .translate(usbTranslation)
50
+
51
+ .translate(util.calcmidlineTo(usb.parts.body, 'y', 27)),
52
+ 'usb1',
53
+ false,
54
+ 'usb1'
55
+ );
56
+
57
+ group.add(
58
+ Parts.Cube([clearance, 15, 16])
59
+ .align(group.parts.usb1, 'yz')
60
+ .snap(group.parts.usb1, 'x', 'outside-')
61
+ .color('red'),
62
+ 'clearance-usb1',
63
+ true
64
+ );
65
+
66
+ group.add(
67
+ usb
68
+ .clone()
69
+ // .translate(usbTranslation)
70
+ .translate(util.calcmidlineTo(usb.parts.body, 'y', 9)),
71
+ 'usb2',
72
+ false,
73
+ 'usb2'
74
+ );
75
+
76
+ group.add(
77
+ Parts.Cube([clearance, 15, 16])
78
+ .align(group.parts.usb2, 'yz')
79
+ .snap(group.parts.usb2, 'x', 'outside-')
80
+ .color('red'),
81
+ 'clearance-usb2',
82
+ true
83
+ );
84
+
85
+ group.add(
86
+ Parts.Cube([10, 7.5, 3.2])
87
+ .snap(usb.parts.body, 'y', 'inside-', -1)
88
+ .snap(mb, 'z', 'outside-')
89
+ .midlineTo('x', 3.5 + 7.7)
90
+ .color('lightgray'),
91
+ 'usbc'
92
+ );
93
+
94
+ group.add(
95
+ Parts.Cube([10, clearance, 3.2])
96
+ .align(group.parts.usbc, 'xz')
97
+ .snap(group.parts.usbc, 'y', 'outside+')
98
+ .color('red'),
99
+ 'clearance-usbc',
100
+ true
101
+ );
102
+
103
+ group.add(
104
+ Parts.Cube([7, 7.5, 3])
105
+ .snap(usb.parts.body, 'y', 'inside-', -1)
106
+ .snap(mb, 'z', 'outside-')
107
+ .midlineTo('x', 3.5 + 7.7 + 14.8)
108
+ .color('lightgray'),
109
+ 'hdmi1'
110
+ );
111
+
112
+ group.add(
113
+ Parts.Cube([7, clearance, 3])
114
+ .align(group.parts.hdmi1, 'xz')
115
+ .snap(group.parts.hdmi1, 'y', 'outside+')
116
+ .color('red'),
117
+ 'clearance-hdmi1',
118
+ true
119
+ );
120
+
121
+ group.add(
122
+ Parts.Cube([7, 7.5, 3])
123
+ .snap(usb.parts.body, 'y', 'inside-', -1)
124
+ .snap(mb, 'z', 'outside-')
125
+ .midlineTo('x', 3.5 + 7.7 + 14.8 + 13.5)
126
+ .color('lightgray'),
127
+ 'hdmi2'
128
+ );
129
+
130
+ group.add(
131
+ Parts.Cube([7, clearance, 3])
132
+ .align(group.parts.hdmi2, 'xz')
133
+ .snap(group.parts.hdmi2, 'y', 'outside+')
134
+ .color('red'),
135
+ 'clearance-hdmi2',
136
+ true
137
+ );
138
+
139
+ group.add(
140
+ RPiParts.AvJack()
141
+ .snap('block', mb, 'z', 'outside-')
142
+ .midlineTo('block', 'x', 3.5 + 7.7 + 14.8 + 13.5 + 7 + 7.5),
143
+ 'avjack',
144
+ false,
145
+ 'avjack'
146
+ );
147
+
148
+ group.add(
149
+ Parts.Cylinder(6, clearance)
150
+ .rotateX(90)
151
+ .align(group.parts.avjack, 'xz')
152
+ .snap(group.parts.avjack, 'y', 'outside+')
153
+ .color('red'),
154
+ 'clearance-avjack',
155
+ true
156
+ );
157
+
158
+ group.add(
159
+ RPiParts.Ribbon()
160
+ .snap(mb, 'z', 'outside-')
161
+ .midlineTo('x', 3.5 + 7.7 + 14.8 + 13.5 + 7),
162
+ 'camera'
163
+ );
164
+
165
+ group.add(
166
+ RPiParts.Ribbon()
167
+ .snap(mb, 'z', 'outside-')
168
+ .midlineTo('x', 4)
169
+ .midlineTo('y', 24.5 + 3.5),
170
+ 'display'
171
+ );
172
+
173
+ group.add(
174
+ RPiParts.Gpio()
175
+ .snap(mb, 'z', 'outside-')
176
+ .midlineTo('x', 29 + 3.5)
177
+ .midlineTo('y', 56 - 3.5),
178
+ 'gpio'
179
+ );
180
+
181
+ group.add(
182
+ RPiParts.BoardLed()
183
+ .snap(mb, 'z', 'outside-')
184
+ .midlineTo('x', 1.1)
185
+ .midlineTo('y', 8)
186
+ .color('lightgreen'),
187
+ 'activityled'
188
+ );
189
+ group.add(
190
+ RPiParts.BoardLed()
191
+ .snap(mb, 'z', 'outside-')
192
+ .midlineTo('x', 1.1)
193
+ .midlineTo('y', 12)
194
+ .color('red'),
195
+ 'powerled'
196
+ );
197
+ }
198
+
199
+
200
+ function pi5(group, clearance, mb) {
201
+ /**
202
+ * Model 5
203
+ */
204
+ group.add(
205
+ RightSide(Parts.Cube([21.5, 16.5, 13.5]).color('lightgray'), mb)
206
+ .translate([2, 0, 0])
207
+ .midlineTo('y', 10.2),
208
+ 'ethernet'
209
+ );
210
+
211
+ group.add(
212
+ Parts.Cube([clearance, 16.5, 13.5])
213
+ .align(group.parts.ethernet, 'yz')
214
+ .snap(group.parts.ethernet, 'x', 'outside-')
215
+ .color('red'),
216
+ 'clearance-ethernet',
217
+ true,
218
+ 'clearance'
219
+ );
220
+
221
+ var usb = Group();
222
+ usb.add(
223
+ Parts.Cube([17, 13.1, 15])
224
+ .snap(group.parts.ethernet, 'x', 'inside+', -1)
225
+ .snap(mb, 'z', 'outside-', 1.5)
226
+ .color('lightgray'),
227
+ 'body'
228
+ );
229
+
230
+ usb.add(
231
+ Parts.Cube([1, 15, 16])
232
+ .snap(usb.parts.body, 'x', 'outside-')
233
+ .align(usb.parts.body, 'yz')
234
+ .color('lightgray'),
235
+ 'flange'
236
+ );
237
+
238
+ group.add(
239
+ usb
240
+ .clone()
241
+ // .translate(usbTranslation)
242
+
243
+ .translate(util.calcmidlineTo(usb.parts.body, 'y', 29.7)),
244
+ 'usb1',
245
+ false,
246
+ 'usb1'
247
+ );
248
+
249
+ group.add(
250
+ Parts.Cube([clearance, 15, 16])
251
+ .align(group.parts.usb1, 'yz')
252
+ .snap(group.parts.usb1, 'x', 'outside-')
253
+ .color('red'),
254
+ 'clearance-usb1',
255
+ true
256
+ );
257
+
258
+ group.add(
259
+ usb
260
+ .clone()
261
+ // .translate(usbTranslation)
262
+ .translate(util.calcmidlineTo(usb.parts.body, 'y', 47)),
263
+ 'usb2',
264
+ false,
265
+ 'usb2'
266
+ );
267
+
268
+ group.add(
269
+ Parts.Cube([clearance, 15, 16])
270
+ .align(group.parts.usb2, 'yz')
271
+ .snap(group.parts.usb2, 'x', 'outside-')
272
+ .color('red'),
273
+ 'clearance-usb2',
274
+ true
275
+ );
276
+
277
+ group.add(
278
+ Parts.Cube([10, 7.5, 3.2])
279
+ .snap(usb.parts.body, 'y', 'inside-', -1)
280
+ .snap(mb, 'z', 'outside-')
281
+ .midlineTo('x', 3.5 + 7.7)
282
+ .color('lightgray'),
283
+ 'usbc'
284
+ );
285
+
286
+ group.add(
287
+ Parts.Cube([10, clearance, 3.2])
288
+ .align(group.parts.usbc, 'xz')
289
+ .snap(group.parts.usbc, 'y', 'outside+')
290
+ .color('red'),
291
+ 'clearance-usbc',
292
+ true
293
+ );
294
+
295
+ group.add(
296
+ Parts.Cube([7, 7.5, 3])
297
+ .snap(usb.parts.body, 'y', 'inside-', -1)
298
+ .snap(mb, 'z', 'outside-')
299
+ .midlineTo('x', 3.5 + 7.7 + 14.8)
300
+ .color('lightgray'),
301
+ 'hdmi1'
302
+ );
303
+
304
+ group.add(
305
+ Parts.Cube([7, clearance, 3])
306
+ .align(group.parts.hdmi1, 'xz')
307
+ .snap(group.parts.hdmi1, 'y', 'outside+')
308
+ .color('red'),
309
+ 'clearance-hdmi1',
310
+ true
311
+ );
312
+
313
+ group.add(
314
+ Parts.Cube([7, 7.5, 3])
315
+ .snap(usb.parts.body, 'y', 'inside-', -1)
316
+ .snap(mb, 'z', 'outside-')
317
+ .midlineTo('x', 3.5 + 7.7 + 14.8 + 13.5)
318
+ .color('lightgray'),
319
+ 'hdmi2'
320
+ );
321
+
322
+ group.add(
323
+ Parts.Cube([7, clearance, 3])
324
+ .align(group.parts.hdmi2, 'xz')
325
+ .snap(group.parts.hdmi2, 'y', 'outside+')
326
+ .color('red'),
327
+ 'clearance-hdmi2',
328
+ true
329
+ );
330
+
331
+ group.add(
332
+ RPiParts.AvJack()
333
+ .snap('block', mb, 'z', 'outside-')
334
+ .midlineTo('block', 'x', 3.5 + 7.7 + 14.8 + 13.5 + 7 + 7.5),
335
+ 'avjack',
336
+ false,
337
+ 'avjack'
338
+ );
339
+
340
+ group.add(
341
+ Parts.Cylinder(6, clearance)
342
+ .rotateX(90)
343
+ .align(group.parts.avjack, 'xz')
344
+ .snap(group.parts.avjack, 'y', 'outside+')
345
+ .color('red'),
346
+ 'clearance-avjack',
347
+ true
348
+ );
349
+
350
+ group.add(
351
+ RPiParts.Ribbon()
352
+ .snap(mb, 'z', 'outside-')
353
+ .midlineTo('x', 3.5 + 7.7 + 14.8 + 13.5 + 7),
354
+ 'camera'
355
+ );
356
+
357
+ group.add(
358
+ RPiParts.Ribbon()
359
+ .snap(mb, 'z', 'outside-')
360
+ .midlineTo('x', 4)
361
+ .midlineTo('y', 24.5 + 3.5),
362
+ 'display'
363
+ );
364
+
365
+ group.add(
366
+ RPiParts.Gpio()
367
+ .snap(mb, 'z', 'outside-')
368
+ .midlineTo('x', 29 + 3.5)
369
+ .midlineTo('y', 56 - 3.5),
370
+ 'gpio'
371
+ );
372
+
373
+ group.add(
374
+ RPiParts.BoardLed()
375
+ .snap(mb, 'z', 'outside-')
376
+ .midlineTo('x', 1.1)
377
+ .midlineTo('y', 8)
378
+ .color('lightgreen'),
379
+ 'activityled'
380
+ );
381
+ group.add(
382
+ RPiParts.BoardLed()
383
+ .snap(mb, 'z', 'outside-')
384
+ .midlineTo('x', 1.1)
385
+ .midlineTo('y', 12)
386
+ .color('red'),
387
+ 'powerled'
388
+ );
389
+ }
390
+
7
391
  /**
8
392
  * Returns a complete RaspberryPi B Plus model.
9
393
  * ![bplus example](../images/bplus.png)
@@ -167,195 +551,11 @@ export default function BPlus(model = 2, options) {
167
551
  'powerled'
168
552
  );
169
553
  }
170
- } else {
171
- /**
172
- * Model 4
173
- */
174
- group.add(
175
- RightSide(Parts.Cube([21.5, 16.5, 13.5]).color('lightgray'), mb)
176
- .translate([1, 0, 0])
177
- .midlineTo('y', 45.75),
178
- 'ethernet'
179
- );
180
-
181
- group.add(
182
- Parts.Cube([clearance, 16.5, 13.5])
183
- .align(group.parts.ethernet, 'yz')
184
- .snap(group.parts.ethernet, 'x', 'outside-')
185
- .color('red'),
186
- 'clearance-ethernet',
187
- true,
188
- 'clearance'
189
- );
190
-
191
- var usb = Group();
192
- usb.add(
193
- Parts.Cube([17, 13.1, 15])
194
- .snap(group.parts.ethernet, 'x', 'inside+', -1)
195
- .snap(mb, 'z', 'outside-')
196
- .color('lightgray'),
197
- 'body'
198
- );
199
-
200
- usb.add(
201
- Parts.Cube([1, 15, 16])
202
- .snap(usb.parts.body, 'x', 'outside-')
203
- .align(usb.parts.body, 'yz')
204
- .color('lightgray'),
205
- 'flange'
206
- );
207
-
208
- group.add(
209
- usb
210
- .clone()
211
- // .translate(usbTranslation)
212
-
213
- .translate(util.calcmidlineTo(usb.parts.body, 'y', 27)),
214
- 'usb1',
215
- false,
216
- 'usb1'
217
- );
218
-
219
- group.add(
220
- Parts.Cube([clearance, 15, 16])
221
- .align(group.parts.usb1, 'yz')
222
- .snap(group.parts.usb1, 'x', 'outside-')
223
- .color('red'),
224
- 'clearance-usb1',
225
- true
226
- );
227
-
228
- group.add(
229
- usb
230
- .clone()
231
- // .translate(usbTranslation)
232
- .translate(util.calcmidlineTo(usb.parts.body, 'y', 9)),
233
- 'usb2',
234
- false,
235
- 'usb2'
236
- );
554
+ } else if (model == 4) {
555
+ pi4(group, clearance, mb);
237
556
 
238
- group.add(
239
- Parts.Cube([clearance, 15, 16])
240
- .align(group.parts.usb2, 'yz')
241
- .snap(group.parts.usb2, 'x', 'outside-')
242
- .color('red'),
243
- 'clearance-usb2',
244
- true
245
- );
246
-
247
- group.add(
248
- Parts.Cube([10, 7.5, 3.2])
249
- .snap(usb.parts.body, 'y', 'inside-', -1)
250
- .snap(mb, 'z', 'outside-')
251
- .midlineTo('x', 3.5 + 7.7)
252
- .color('lightgray'),
253
- 'usbc'
254
- );
255
-
256
- group.add(
257
- Parts.Cube([10, clearance, 3.2])
258
- .align(group.parts.usbc, 'xz')
259
- .snap(group.parts.usbc, 'y', 'outside+')
260
- .color('red'),
261
- 'clearance-usbc',
262
- true
263
- );
264
-
265
- group.add(
266
- Parts.Cube([7, 7.5, 3])
267
- .snap(usb.parts.body, 'y', 'inside-', -1)
268
- .snap(mb, 'z', 'outside-')
269
- .midlineTo('x', 3.5 + 7.7 + 14.8)
270
- .color('lightgray'),
271
- 'hdmi1'
272
- );
273
-
274
- group.add(
275
- Parts.Cube([7, clearance, 3])
276
- .align(group.parts.hdmi1, 'xz')
277
- .snap(group.parts.hdmi1, 'y', 'outside+')
278
- .color('red'),
279
- 'clearance-hdmi1',
280
- true
281
- );
282
-
283
- group.add(
284
- Parts.Cube([7, 7.5, 3])
285
- .snap(usb.parts.body, 'y', 'inside-', -1)
286
- .snap(mb, 'z', 'outside-')
287
- .midlineTo('x', 3.5 + 7.7 + 14.8 + 13.5)
288
- .color('lightgray'),
289
- 'hdmi2'
290
- );
291
-
292
- group.add(
293
- Parts.Cube([7, clearance, 3])
294
- .align(group.parts.hdmi2, 'xz')
295
- .snap(group.parts.hdmi2, 'y', 'outside+')
296
- .color('red'),
297
- 'clearance-hdmi2',
298
- true
299
- );
300
-
301
- group.add(
302
- RPiParts.AvJack()
303
- .snap('block', mb, 'z', 'outside-')
304
- .midlineTo('block', 'x', 3.5 + 7.7 + 14.8 + 13.5 + 7 + 7.5),
305
- 'avjack',
306
- false,
307
- 'avjack'
308
- );
309
-
310
- group.add(
311
- Parts.Cylinder(6, clearance)
312
- .rotateX(90)
313
- .align(group.parts.avjack, 'xz')
314
- .snap(group.parts.avjack, 'y', 'outside+')
315
- .color('red'),
316
- 'clearance-avjack',
317
- true
318
- );
319
-
320
- group.add(
321
- RPiParts.Ribbon()
322
- .snap(mb, 'z', 'outside-')
323
- .midlineTo('x', 3.5 + 7.7 + 14.8 + 13.5 + 7),
324
- 'camera'
325
- );
326
-
327
- group.add(
328
- RPiParts.Ribbon()
329
- .snap(mb, 'z', 'outside-')
330
- .midlineTo('x', 4)
331
- .midlineTo('y', 24.5 + 3.5),
332
- 'display'
333
- );
334
-
335
- group.add(
336
- RPiParts.Gpio()
337
- .snap(mb, 'z', 'outside-')
338
- .midlineTo('x', 29 + 3.5)
339
- .midlineTo('y', 56 - 3.5),
340
- 'gpio'
341
- );
342
-
343
- group.add(
344
- RPiParts.BoardLed()
345
- .snap(mb, 'z', 'outside-')
346
- .midlineTo('x', 1.1)
347
- .midlineTo('y', 8)
348
- .color('lightgreen'),
349
- 'activityled'
350
- );
351
- group.add(
352
- RPiParts.BoardLed()
353
- .snap(mb, 'z', 'outside-')
354
- .midlineTo('x', 1.1)
355
- .midlineTo('y', 12)
356
- .color('red'),
357
- 'powerled'
358
- );
557
+ } else {
558
+ pi5(group, clearance, mb);
359
559
  }
360
560
 
361
561
  group.add(