@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/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- * @jwc/jscad-raspberrypi version 3.0.0
2
+ * @jwc/jscad-raspberrypi version 3.0.3
3
3
  * https://johnwebbcole.gitlab.io/jscad-raspberrypi
4
4
  */
5
5
  var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
@@ -117,6 +117,66 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
117
117
  };
118
118
 
119
119
  var debug$1 = jscadUtils.Debug('jscadRPi:BPlus');
120
+
121
+ function pi4(group, clearance, mb) {
122
+ /**
123
+ * Model 4
124
+ */
125
+ group.add(RightSide(jscadUtils.parts.Cube([21.5, 16.5, 13.5]).color('lightgray'), mb).translate([2, 0, 0]).midlineTo('y', 45.75), 'ethernet');
126
+ 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');
127
+ var usb = jscadUtils.Group();
128
+ 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
+ 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)
131
+ .translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 27)), 'usb1', false, 'usb1');
132
+ 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)
134
+ .translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 9)), 'usb2', false, 'usb2');
135
+ 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
+ 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');
137
+ group.add(jscadUtils.parts.Cube([10, clearance, 3.2]).align(group.parts.usbc, 'xz').snap(group.parts.usbc, 'y', 'outside+').color('red'), 'clearance-usbc', true);
138
+ group.add(jscadUtils.parts.Cube([7, 7.5, 3]).snap(usb.parts.body, 'y', 'inside-', -1).snap(mb, 'z', 'outside-').midlineTo('x', 3.5 + 7.7 + 14.8).color('lightgray'), 'hdmi1');
139
+ group.add(jscadUtils.parts.Cube([7, clearance, 3]).align(group.parts.hdmi1, 'xz').snap(group.parts.hdmi1, 'y', 'outside+').color('red'), 'clearance-hdmi1', true);
140
+ group.add(jscadUtils.parts.Cube([7, 7.5, 3]).snap(usb.parts.body, 'y', 'inside-', -1).snap(mb, 'z', 'outside-').midlineTo('x', 3.5 + 7.7 + 14.8 + 13.5).color('lightgray'), 'hdmi2');
141
+ group.add(jscadUtils.parts.Cube([7, clearance, 3]).align(group.parts.hdmi2, 'xz').snap(group.parts.hdmi2, 'y', 'outside+').color('red'), 'clearance-hdmi2', true);
142
+ group.add(AvJack().snap('block', mb, 'z', 'outside-').midlineTo('block', 'x', 3.5 + 7.7 + 14.8 + 13.5 + 7 + 7.5), 'avjack', false, 'avjack');
143
+ group.add(jscadUtils.parts.Cylinder(6, clearance).rotateX(90).align(group.parts.avjack, 'xz').snap(group.parts.avjack, 'y', 'outside+').color('red'), 'clearance-avjack', true);
144
+ group.add(Ribbon().snap(mb, 'z', 'outside-').midlineTo('x', 3.5 + 7.7 + 14.8 + 13.5 + 7), 'camera');
145
+ group.add(Ribbon().snap(mb, 'z', 'outside-').midlineTo('x', 4).midlineTo('y', 24.5 + 3.5), 'display');
146
+ group.add(Gpio().snap(mb, 'z', 'outside-').midlineTo('x', 29 + 3.5).midlineTo('y', 56 - 3.5), 'gpio');
147
+ group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 8).color('lightgreen'), 'activityled');
148
+ group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 12).color('red'), 'powerled');
149
+ }
150
+
151
+ function pi5(group, clearance, mb) {
152
+ /**
153
+ * Model 5
154
+ */
155
+ 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
+ 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
+ var usb = jscadUtils.Group();
158
+ 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
+ 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)
161
+ .translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 29.7)), 'usb1', false, 'usb1');
162
+ 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)
164
+ .translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 47)), 'usb2', false, 'usb2');
165
+ 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
+ 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');
167
+ group.add(jscadUtils.parts.Cube([10, clearance, 3.2]).align(group.parts.usbc, 'xz').snap(group.parts.usbc, 'y', 'outside+').color('red'), 'clearance-usbc', true);
168
+ group.add(jscadUtils.parts.Cube([7, 7.5, 3]).snap(usb.parts.body, 'y', 'inside-', -1).snap(mb, 'z', 'outside-').midlineTo('x', 3.5 + 7.7 + 14.8).color('lightgray'), 'hdmi1');
169
+ group.add(jscadUtils.parts.Cube([7, clearance, 3]).align(group.parts.hdmi1, 'xz').snap(group.parts.hdmi1, 'y', 'outside+').color('red'), 'clearance-hdmi1', true);
170
+ group.add(jscadUtils.parts.Cube([7, 7.5, 3]).snap(usb.parts.body, 'y', 'inside-', -1).snap(mb, 'z', 'outside-').midlineTo('x', 3.5 + 7.7 + 14.8 + 13.5).color('lightgray'), 'hdmi2');
171
+ group.add(jscadUtils.parts.Cube([7, clearance, 3]).align(group.parts.hdmi2, 'xz').snap(group.parts.hdmi2, 'y', 'outside+').color('red'), 'clearance-hdmi2', true);
172
+ group.add(AvJack().snap('block', mb, 'z', 'outside-').midlineTo('block', 'x', 3.5 + 7.7 + 14.8 + 13.5 + 7 + 7.5), 'avjack', false, 'avjack');
173
+ group.add(jscadUtils.parts.Cylinder(6, clearance).rotateX(90).align(group.parts.avjack, 'xz').snap(group.parts.avjack, 'y', 'outside+').color('red'), 'clearance-avjack', true);
174
+ group.add(Ribbon().snap(mb, 'z', 'outside-').midlineTo('x', 3.5 + 7.7 + 14.8 + 13.5 + 7), 'camera');
175
+ group.add(Ribbon().snap(mb, 'z', 'outside-').midlineTo('x', 4).midlineTo('y', 24.5 + 3.5), 'display');
176
+ group.add(Gpio().snap(mb, 'z', 'outside-').midlineTo('x', 29 + 3.5).midlineTo('y', 56 - 3.5), 'gpio');
177
+ group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 8).color('lightgreen'), 'activityled');
178
+ group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 12).color('red'), 'powerled');
179
+ }
120
180
  /**
121
181
  * Returns a complete RaspberryPi B Plus model.
122
182
  * ![bplus example](../images/bplus.png)
@@ -151,6 +211,7 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
151
211
  // endinject
152
212
  */
153
213
 
214
+
154
215
  function BPlus() {
155
216
  var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2;
156
217
  var options = arguments.length > 1 ? arguments[1] : undefined;
@@ -191,34 +252,10 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
191
252
  group.add(BoardLed().snap(mb, 'z', 'outside-').translate([1, 43.5, 0]).color('lightgreen'), 'activityled');
192
253
  group.add(BoardLed().snap(mb, 'z', 'outside-').translate([1, 46, 0]).color('red'), 'powerled');
193
254
  }
255
+ } else if (model == 4) {
256
+ pi4(group, clearance, mb);
194
257
  } else {
195
- /**
196
- * Model 4
197
- */
198
- group.add(RightSide(jscadUtils.parts.Cube([21.5, 16.5, 13.5]).color('lightgray'), mb).translate([1, 0, 0]).midlineTo('y', 45.75), 'ethernet');
199
- 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');
200
- var usb = jscadUtils.Group();
201
- usb.add(jscadUtils.parts.Cube([17, 13.1, 15]).snap(group.parts.ethernet, 'x', 'inside+', -1).snap(mb, 'z', 'outside-').color('lightgray'), 'body');
202
- usb.add(jscadUtils.parts.Cube([1, 15, 16]).snap(usb.parts.body, 'x', 'outside-').align(usb.parts.body, 'yz').color('lightgray'), 'flange');
203
- group.add(usb.clone() // .translate(usbTranslation)
204
- .translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 27)), 'usb1', false, 'usb1');
205
- group.add(jscadUtils.parts.Cube([clearance, 15, 16]).align(group.parts.usb1, 'yz').snap(group.parts.usb1, 'x', 'outside-').color('red'), 'clearance-usb1', true);
206
- group.add(usb.clone() // .translate(usbTranslation)
207
- .translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 9)), 'usb2', false, 'usb2');
208
- group.add(jscadUtils.parts.Cube([clearance, 15, 16]).align(group.parts.usb2, 'yz').snap(group.parts.usb2, 'x', 'outside-').color('red'), 'clearance-usb2', true);
209
- 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');
210
- group.add(jscadUtils.parts.Cube([10, clearance, 3.2]).align(group.parts.usbc, 'xz').snap(group.parts.usbc, 'y', 'outside+').color('red'), 'clearance-usbc', true);
211
- group.add(jscadUtils.parts.Cube([7, 7.5, 3]).snap(usb.parts.body, 'y', 'inside-', -1).snap(mb, 'z', 'outside-').midlineTo('x', 3.5 + 7.7 + 14.8).color('lightgray'), 'hdmi1');
212
- group.add(jscadUtils.parts.Cube([7, clearance, 3]).align(group.parts.hdmi1, 'xz').snap(group.parts.hdmi1, 'y', 'outside+').color('red'), 'clearance-hdmi1', true);
213
- group.add(jscadUtils.parts.Cube([7, 7.5, 3]).snap(usb.parts.body, 'y', 'inside-', -1).snap(mb, 'z', 'outside-').midlineTo('x', 3.5 + 7.7 + 14.8 + 13.5).color('lightgray'), 'hdmi2');
214
- group.add(jscadUtils.parts.Cube([7, clearance, 3]).align(group.parts.hdmi2, 'xz').snap(group.parts.hdmi2, 'y', 'outside+').color('red'), 'clearance-hdmi2', true);
215
- group.add(AvJack().snap('block', mb, 'z', 'outside-').midlineTo('block', 'x', 3.5 + 7.7 + 14.8 + 13.5 + 7 + 7.5), 'avjack', false, 'avjack');
216
- group.add(jscadUtils.parts.Cylinder(6, clearance).rotateX(90).align(group.parts.avjack, 'xz').snap(group.parts.avjack, 'y', 'outside+').color('red'), 'clearance-avjack', true);
217
- group.add(Ribbon().snap(mb, 'z', 'outside-').midlineTo('x', 3.5 + 7.7 + 14.8 + 13.5 + 7), 'camera');
218
- group.add(Ribbon().snap(mb, 'z', 'outside-').midlineTo('x', 4).midlineTo('y', 24.5 + 3.5), 'display');
219
- group.add(Gpio().snap(mb, 'z', 'outside-').midlineTo('x', 29 + 3.5).midlineTo('y', 56 - 3.5), 'gpio');
220
- group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 8).color('lightgreen'), 'activityled');
221
- group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 12).color('red'), 'powerled');
258
+ pi5(group, clearance, mb);
222
259
  }
223
260
 
224
261
  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');
package/dist/v1compat.js CHANGED
@@ -35,7 +35,7 @@ function initJscadRPi() {
35
35
  // include:compat
36
36
  // ../dist/index.js
37
37
  /*
38
- * @jwc/jscad-raspberrypi version 3.0.0
38
+ * @jwc/jscad-raspberrypi version 3.0.3
39
39
  * https://johnwebbcole.gitlab.io/jscad-raspberrypi
40
40
  */
41
41
  var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
@@ -153,6 +153,66 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
153
153
  };
154
154
 
155
155
  var debug$1 = jscadUtils.Debug('jscadRPi:BPlus');
156
+
157
+ function pi4(group, clearance, mb) {
158
+ /**
159
+ * Model 4
160
+ */
161
+ group.add(RightSide(jscadUtils.parts.Cube([21.5, 16.5, 13.5]).color('lightgray'), mb).translate([2, 0, 0]).midlineTo('y', 45.75), 'ethernet');
162
+ 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');
163
+ var usb = jscadUtils.Group();
164
+ 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
+ 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() // .translate(usbTranslation)
167
+ .translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 27)), 'usb1', false, 'usb1');
168
+ 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() // .translate(usbTranslation)
170
+ .translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 9)), 'usb2', false, 'usb2');
171
+ 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
+ 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');
173
+ group.add(jscadUtils.parts.Cube([10, clearance, 3.2]).align(group.parts.usbc, 'xz').snap(group.parts.usbc, 'y', 'outside+').color('red'), 'clearance-usbc', true);
174
+ group.add(jscadUtils.parts.Cube([7, 7.5, 3]).snap(usb.parts.body, 'y', 'inside-', -1).snap(mb, 'z', 'outside-').midlineTo('x', 3.5 + 7.7 + 14.8).color('lightgray'), 'hdmi1');
175
+ group.add(jscadUtils.parts.Cube([7, clearance, 3]).align(group.parts.hdmi1, 'xz').snap(group.parts.hdmi1, 'y', 'outside+').color('red'), 'clearance-hdmi1', true);
176
+ group.add(jscadUtils.parts.Cube([7, 7.5, 3]).snap(usb.parts.body, 'y', 'inside-', -1).snap(mb, 'z', 'outside-').midlineTo('x', 3.5 + 7.7 + 14.8 + 13.5).color('lightgray'), 'hdmi2');
177
+ group.add(jscadUtils.parts.Cube([7, clearance, 3]).align(group.parts.hdmi2, 'xz').snap(group.parts.hdmi2, 'y', 'outside+').color('red'), 'clearance-hdmi2', true);
178
+ group.add(AvJack().snap('block', mb, 'z', 'outside-').midlineTo('block', 'x', 3.5 + 7.7 + 14.8 + 13.5 + 7 + 7.5), 'avjack', false, 'avjack');
179
+ group.add(jscadUtils.parts.Cylinder(6, clearance).rotateX(90).align(group.parts.avjack, 'xz').snap(group.parts.avjack, 'y', 'outside+').color('red'), 'clearance-avjack', true);
180
+ group.add(Ribbon().snap(mb, 'z', 'outside-').midlineTo('x', 3.5 + 7.7 + 14.8 + 13.5 + 7), 'camera');
181
+ group.add(Ribbon().snap(mb, 'z', 'outside-').midlineTo('x', 4).midlineTo('y', 24.5 + 3.5), 'display');
182
+ group.add(Gpio().snap(mb, 'z', 'outside-').midlineTo('x', 29 + 3.5).midlineTo('y', 56 - 3.5), 'gpio');
183
+ group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 8).color('lightgreen'), 'activityled');
184
+ group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 12).color('red'), 'powerled');
185
+ }
186
+
187
+ function pi5(group, clearance, mb) {
188
+ /**
189
+ * Model 5
190
+ */
191
+ 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
+ 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
+ var usb = jscadUtils.Group();
194
+ 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
+ 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() // .translate(usbTranslation)
197
+ .translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 29.7)), 'usb1', false, 'usb1');
198
+ 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() // .translate(usbTranslation)
200
+ .translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 47)), 'usb2', false, 'usb2');
201
+ 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
+ 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');
203
+ group.add(jscadUtils.parts.Cube([10, clearance, 3.2]).align(group.parts.usbc, 'xz').snap(group.parts.usbc, 'y', 'outside+').color('red'), 'clearance-usbc', true);
204
+ group.add(jscadUtils.parts.Cube([7, 7.5, 3]).snap(usb.parts.body, 'y', 'inside-', -1).snap(mb, 'z', 'outside-').midlineTo('x', 3.5 + 7.7 + 14.8).color('lightgray'), 'hdmi1');
205
+ group.add(jscadUtils.parts.Cube([7, clearance, 3]).align(group.parts.hdmi1, 'xz').snap(group.parts.hdmi1, 'y', 'outside+').color('red'), 'clearance-hdmi1', true);
206
+ group.add(jscadUtils.parts.Cube([7, 7.5, 3]).snap(usb.parts.body, 'y', 'inside-', -1).snap(mb, 'z', 'outside-').midlineTo('x', 3.5 + 7.7 + 14.8 + 13.5).color('lightgray'), 'hdmi2');
207
+ group.add(jscadUtils.parts.Cube([7, clearance, 3]).align(group.parts.hdmi2, 'xz').snap(group.parts.hdmi2, 'y', 'outside+').color('red'), 'clearance-hdmi2', true);
208
+ group.add(AvJack().snap('block', mb, 'z', 'outside-').midlineTo('block', 'x', 3.5 + 7.7 + 14.8 + 13.5 + 7 + 7.5), 'avjack', false, 'avjack');
209
+ group.add(jscadUtils.parts.Cylinder(6, clearance).rotateX(90).align(group.parts.avjack, 'xz').snap(group.parts.avjack, 'y', 'outside+').color('red'), 'clearance-avjack', true);
210
+ group.add(Ribbon().snap(mb, 'z', 'outside-').midlineTo('x', 3.5 + 7.7 + 14.8 + 13.5 + 7), 'camera');
211
+ group.add(Ribbon().snap(mb, 'z', 'outside-').midlineTo('x', 4).midlineTo('y', 24.5 + 3.5), 'display');
212
+ group.add(Gpio().snap(mb, 'z', 'outside-').midlineTo('x', 29 + 3.5).midlineTo('y', 56 - 3.5), 'gpio');
213
+ group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 8).color('lightgreen'), 'activityled');
214
+ group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 12).color('red'), 'powerled');
215
+ }
156
216
  /**
157
217
  * Returns a complete RaspberryPi B Plus model.
158
218
  * ![bplus example](../images/bplus.png)
@@ -187,6 +247,7 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
187
247
  // endinject
188
248
  */
189
249
 
250
+
190
251
  function BPlus() {
191
252
  var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2;
192
253
  var options = arguments.length > 1 ? arguments[1] : undefined;
@@ -227,34 +288,10 @@ var jscadRPi = (function (exports, jscadUtils, jsCadCSG, scadApi) {
227
288
  group.add(BoardLed().snap(mb, 'z', 'outside-').translate([1, 43.5, 0]).color('lightgreen'), 'activityled');
228
289
  group.add(BoardLed().snap(mb, 'z', 'outside-').translate([1, 46, 0]).color('red'), 'powerled');
229
290
  }
291
+ } else if (model == 4) {
292
+ pi4(group, clearance, mb);
230
293
  } else {
231
- /**
232
- * Model 4
233
- */
234
- group.add(RightSide(jscadUtils.parts.Cube([21.5, 16.5, 13.5]).color('lightgray'), mb).translate([1, 0, 0]).midlineTo('y', 45.75), 'ethernet');
235
- 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');
236
- var usb = jscadUtils.Group();
237
- usb.add(jscadUtils.parts.Cube([17, 13.1, 15]).snap(group.parts.ethernet, 'x', 'inside+', -1).snap(mb, 'z', 'outside-').color('lightgray'), 'body');
238
- usb.add(jscadUtils.parts.Cube([1, 15, 16]).snap(usb.parts.body, 'x', 'outside-').align(usb.parts.body, 'yz').color('lightgray'), 'flange');
239
- group.add(usb.clone() // .translate(usbTranslation)
240
- .translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 27)), 'usb1', false, 'usb1');
241
- group.add(jscadUtils.parts.Cube([clearance, 15, 16]).align(group.parts.usb1, 'yz').snap(group.parts.usb1, 'x', 'outside-').color('red'), 'clearance-usb1', true);
242
- group.add(usb.clone() // .translate(usbTranslation)
243
- .translate(jscadUtils.util.calcmidlineTo(usb.parts.body, 'y', 9)), 'usb2', false, 'usb2');
244
- group.add(jscadUtils.parts.Cube([clearance, 15, 16]).align(group.parts.usb2, 'yz').snap(group.parts.usb2, 'x', 'outside-').color('red'), 'clearance-usb2', true);
245
- 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');
246
- group.add(jscadUtils.parts.Cube([10, clearance, 3.2]).align(group.parts.usbc, 'xz').snap(group.parts.usbc, 'y', 'outside+').color('red'), 'clearance-usbc', true);
247
- group.add(jscadUtils.parts.Cube([7, 7.5, 3]).snap(usb.parts.body, 'y', 'inside-', -1).snap(mb, 'z', 'outside-').midlineTo('x', 3.5 + 7.7 + 14.8).color('lightgray'), 'hdmi1');
248
- group.add(jscadUtils.parts.Cube([7, clearance, 3]).align(group.parts.hdmi1, 'xz').snap(group.parts.hdmi1, 'y', 'outside+').color('red'), 'clearance-hdmi1', true);
249
- group.add(jscadUtils.parts.Cube([7, 7.5, 3]).snap(usb.parts.body, 'y', 'inside-', -1).snap(mb, 'z', 'outside-').midlineTo('x', 3.5 + 7.7 + 14.8 + 13.5).color('lightgray'), 'hdmi2');
250
- group.add(jscadUtils.parts.Cube([7, clearance, 3]).align(group.parts.hdmi2, 'xz').snap(group.parts.hdmi2, 'y', 'outside+').color('red'), 'clearance-hdmi2', true);
251
- group.add(AvJack().snap('block', mb, 'z', 'outside-').midlineTo('block', 'x', 3.5 + 7.7 + 14.8 + 13.5 + 7 + 7.5), 'avjack', false, 'avjack');
252
- group.add(jscadUtils.parts.Cylinder(6, clearance).rotateX(90).align(group.parts.avjack, 'xz').snap(group.parts.avjack, 'y', 'outside+').color('red'), 'clearance-avjack', true);
253
- group.add(Ribbon().snap(mb, 'z', 'outside-').midlineTo('x', 3.5 + 7.7 + 14.8 + 13.5 + 7), 'camera');
254
- group.add(Ribbon().snap(mb, 'z', 'outside-').midlineTo('x', 4).midlineTo('y', 24.5 + 3.5), 'display');
255
- group.add(Gpio().snap(mb, 'z', 'outside-').midlineTo('x', 29 + 3.5).midlineTo('y', 56 - 3.5), 'gpio');
256
- group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 8).color('lightgreen'), 'activityled');
257
- group.add(BoardLed().snap(mb, 'z', 'outside-').midlineTo('x', 1.1).midlineTo('y', 12).color('red'), 'powerled');
294
+ pi5(group, clearance, mb);
258
295
  }
259
296
 
260
297
  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');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jwc/jscad-raspberrypi",
3
- "version": "3.0.3",
3
+ "version": "3.1.0",
4
4
  "description": "jscad parts library for RaspberryPi",
5
5
  "main": "src/index.js",
6
6
  "scripts": {