makerjs 0.17.0 → 0.17.2

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.
@@ -39,19 +39,17 @@ and limitations under the License.
39
39
  * author: Dan Marshall / Microsoft Corporation
40
40
  * maintainers: Dan Marshall <danmar@microsoft.com>
41
41
  * homepage: https://maker.js.org
42
- * version: 0.17.0
42
+ * version: 0.17.2
43
43
  *
44
44
  * browserify:
45
45
  * license: MIT (http://opensource.org/licenses/MIT)
46
46
  * author: James Halliday <mail@substack.net>
47
- * homepage: https://github.com/browserify/browserify#readme
48
- * version: 16.3.0
47
+ * version: 17.0.0
49
48
  *
50
49
  * clone:
51
50
  * license: MIT (http://opensource.org/licenses/MIT)
52
- * author: Paul Vorbach <paul@vorba.ch>
53
- * contributors: Blake Miner <miner.blake@gmail.com>, Tian You <axqd001@gmail.com>, George Stagas <gstagas@gmail.com>, Tobiasz Cudnik <tobiasz.cudnik@gmail.com>, Pavel Lang <langpavel@phpskelet.org>, Dan MacTough, w1nk, Hugh Kennedy, Dustin Diaz, Ilya Shaisultanov, Nathan MacInnes <nathan@macinn.es>, Benjamin E. Coe <ben@npmjs.com>, Nathan Zadoks, Róbert Oroszi <robert+gh@oroszi.net>, Aurélio A. Heckert, Guy Ellis
54
- * homepage: https://github.com/pvorb/node-clone#readme
51
+ * author: Paul Vorbach <paul@vorba.ch> (http://paul.vorba.ch/)
52
+ * contributors: Blake Miner <miner.blake@gmail.com> (http://www.blakeminer.com/), Tian You <axqd001@gmail.com> (http://blog.axqd.net/), George Stagas <gstagas@gmail.com> (http://stagas.com/), Tobiasz Cudnik <tobiasz.cudnik@gmail.com> (https://github.com/TobiaszCudnik), Pavel Lang <langpavel@phpskelet.org> (https://github.com/langpavel), Dan MacTough (http://yabfog.com/), w1nk (https://github.com/w1nk), Hugh Kennedy (http://twitter.com/hughskennedy), Dustin Diaz (http://dustindiaz.com), Ilya Shaisultanov (https://github.com/diversario), Nathan MacInnes <nathan@macinn.es> (http://macinn.es/), Benjamin E. Coe <ben@npmjs.com> (https://twitter.com/benjamincoe), Nathan Zadoks (https://github.com/nathan7), Róbert Oroszi <robert+gh@oroszi.net> (https://github.com/oroce), Aurélio A. Heckert (http://softwarelivre.org/aurium), Guy Ellis (http://www.guyellisrocks.com/)
55
53
  * version: 1.0.4
56
54
  *
57
55
  * graham_scan:
@@ -63,7 +61,6 @@ and limitations under the License.
63
61
  * kdbush:
64
62
  * license: ISC (http://opensource.org/licenses/ISC)
65
63
  * author: Vladimir Agafonkin
66
- * homepage: https://github.com/mourner/kdbush#readme
67
64
  * version: 2.0.1
68
65
  *
69
66
  * This header is generated by licensify (https://github.com/twada/licensify)
@@ -71,7 +68,7 @@ and limitations under the License.
71
68
  require=(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
72
69
 
73
70
  },{}],2:[function(require,module,exports){
74
- (function (Buffer){
71
+ (function (Buffer){(function (){
75
72
  var clone = (function() {
76
73
  'use strict';
77
74
 
@@ -239,7 +236,7 @@ if (typeof module === 'object' && module.exports) {
239
236
  module.exports = clone;
240
237
  }
241
238
 
242
- }).call(this,require("buffer").Buffer)
239
+ }).call(this)}).call(this,require("buffer").Buffer)
243
240
  },{"buffer":1}],3:[function(require,module,exports){
244
241
  /**
245
242
  * Graham's Scan Convex Hull Algorithm
@@ -4979,13 +4976,14 @@ var MakerJs;
4979
4976
  function parseNumericList(s) {
4980
4977
  var result = [];
4981
4978
  //http://stackoverflow.com/questions/638565/parsing-scientific-notation-sensibly
4982
- var re = /[\.-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
4979
+ var re = /-?(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
4983
4980
  var matches;
4984
4981
  while ((matches = re.exec(s)) !== null) {
4985
4982
  if (matches.index === re.lastIndex) {
4986
4983
  re.lastIndex++;
4987
4984
  }
4988
- result.push(parseFloat(matches[0]));
4985
+ if (matches[0] !== "")
4986
+ result.push(parseFloat(matches[0]));
4989
4987
  }
4990
4988
  return result;
4991
4989
  }
@@ -7367,28 +7365,28 @@ var MakerJs;
7367
7365
  return wrap(chainToJscadScript(c, maxArcFacet, options.accuracy));
7368
7366
  }
7369
7367
  function scriptUnion(augend, addend) {
7370
- return augend + (".union(" + addend + ")");
7368
+ return augend + ".union(".concat(addend, ")");
7371
7369
  }
7372
7370
  function scriptSubtraction(minuend, subtrahend) {
7373
- return minuend + (".subtract(" + subtrahend + ")");
7371
+ return minuend + ".subtract(".concat(subtrahend, ")");
7374
7372
  }
7375
7373
  function to2D(opts) {
7376
7374
  return convertChainsTo2D(_chainToJscadScript, scriptUnion, scriptSubtraction, modelToExport, options);
7377
7375
  }
7378
7376
  function to3D(cag, extrude, z) {
7379
- var csg = cag + (".extrude({ offset: [0, 0, " + extrude + "] })");
7377
+ var csg = cag + ".extrude({ offset: [0, 0, ".concat(extrude, "] })");
7380
7378
  if (z) {
7381
- csg = csg + (".translate([0, 0, " + z + "])");
7379
+ csg = csg + ".translate([0, 0, ".concat(z, "])");
7382
7380
  }
7383
7381
  return csg;
7384
7382
  }
7385
7383
  function wrap(s) {
7386
- return "" + nl + indent + s + nl;
7384
+ return "".concat(nl).concat(indent).concat(s).concat(nl);
7387
7385
  }
7388
7386
  var indent = new Array((options.indent || 0) + 1).join(' ');
7389
7387
  var nl = options.indent ? '\n' : '';
7390
7388
  var result = convert2Dto3D(to2D, to3D, scriptUnion, modelToExport, options).trim();
7391
- return "function " + (options.functionName || 'main') + "(){" + wrap("return " + result + ";") + "}" + nl;
7389
+ return "function ".concat(options.functionName || 'main', "(){").concat(wrap("return ".concat(result, ";")), "}").concat(nl);
7392
7390
  }
7393
7391
  exporter.toJscadScript = toJscadScript;
7394
7392
  /**
@@ -7456,7 +7454,7 @@ var MakerJs;
7456
7454
  var size = MakerJs.measure.modelExtents(scaledModel);
7457
7455
  var left = -size.low[0];
7458
7456
  var offset = [left, size.high[1]];
7459
- offset = MakerJs.point.add(offset, options.origin);
7457
+ offset = MakerJs.point.add(offset, opts.origin);
7460
7458
  MakerJs.model.findChains(scaledModel, function (chains, loose, layer) {
7461
7459
  function single(walkedPath) {
7462
7460
  var pathData = exporter.pathToSVGPathData(walkedPath.pathContext, walkedPath.offset, offset);
@@ -8018,7 +8016,7 @@ var MakerJs;
8018
8016
  var tag = new exporter.XmlTag('text', {
8019
8017
  "alignment-baseline": "middle",
8020
8018
  "text-anchor": "middle",
8021
- "transform": "rotate(" + MakerJs.angle.ofLineInDegrees(anchor) + "," + center[0] + "," + center[1] + ")",
8019
+ "transform": "rotate(".concat(MakerJs.angle.ofLineInDegrees(anchor), ",").concat(center[0], ",").concat(center[1], ")"),
8022
8020
  "x": center[0],
8023
8021
  "y": center[1]
8024
8022
  });
@@ -8120,14 +8118,18 @@ var MakerJs;
8120
8118
  }
8121
8119
  result.models['p_' + ++pathCount] = m;
8122
8120
  }
8123
- function getPoint(cmd, offset) {
8121
+ function getPoint(cmd, offset, from) {
8124
8122
  if (offset === void 0) { offset = 0; }
8123
+ if (from === void 0) { from = cmd.from; }
8124
+ if (offset < 0) { // get point from end of list (negative index)
8125
+ offset = offset + cmd.data.length;
8126
+ }
8125
8127
  var p = MakerJs.point.mirror([cmd.data[0 + offset], cmd.data[1 + offset]], false, true);
8126
8128
  if (cmd.absolute) {
8127
8129
  return p;
8128
8130
  }
8129
8131
  else {
8130
- return MakerJs.point.add(p, cmd.from);
8132
+ return MakerJs.point.add(p, from);
8131
8133
  }
8132
8134
  }
8133
8135
  function lineTo(cmd, end) {
@@ -8139,7 +8141,15 @@ var MakerJs;
8139
8141
  var map = {};
8140
8142
  map['M'] = function (cmd) {
8141
8143
  firstPoint = getPoint(cmd);
8142
- return firstPoint;
8144
+ if (cmd.data.length > 2) { // implicit lineTo
8145
+ cmd.from = firstPoint;
8146
+ for (var a = 2; a < cmd.data.length; a = a + 2) {
8147
+ cmd.from = lineTo(cmd, getPoint(cmd, a));
8148
+ }
8149
+ return cmd.from;
8150
+ }
8151
+ else
8152
+ return firstPoint;
8143
8153
  };
8144
8154
  map['Z'] = function (cmd) {
8145
8155
  return lineTo(cmd, firstPoint);
@@ -8166,97 +8176,139 @@ var MakerJs;
8166
8176
  return lineTo(cmd, end);
8167
8177
  };
8168
8178
  map['L'] = function (cmd) {
8169
- var end = getPoint(cmd);
8170
- return lineTo(cmd, end);
8179
+ var end;
8180
+ for (var a = 0; a < cmd.data.length; a = a + 2) {
8181
+ end = getPoint(cmd, a);
8182
+ cmd.from = lineTo(cmd, end);
8183
+ }
8184
+ return cmd.from;
8171
8185
  };
8172
8186
  map['A'] = function (cmd) {
8173
- var rx = cmd.data[0];
8174
- var ry = cmd.data[1];
8175
- var rotation = cmd.data[2];
8176
- var large = cmd.data[3] === 1;
8177
- var decreasing = cmd.data[4] === 1;
8178
- var end = getPoint(cmd, 5);
8179
- var elliptic = rx !== ry;
8180
- //first, rotate so we are dealing with a zero angle x-axis
8181
- var xAxis = new MakerJs.paths.Line(cmd.from, MakerJs.point.rotate(end, rotation, cmd.from));
8182
- //next, un-distort any ellipse back into a circle in terms of x axis
8183
- if (elliptic) {
8184
- xAxis = MakerJs.path.distort(xAxis, 1, rx / ry);
8185
- }
8186
- //now create an arc, making sure we use the large and decreasing flags
8187
- var arc = new MakerJs.paths.Arc(xAxis.origin, xAxis.end, rx, large, decreasing);
8188
- if (elliptic) {
8189
- //scale up if radius was insufficient.
8190
- if (rx < arc.radius) {
8191
- var scaleUp = arc.radius / rx;
8192
- rx *= scaleUp;
8193
- ry *= scaleUp;
8194
- }
8195
- //create an elliptical arc, this will re-distort
8196
- var e = new MakerJs.models.EllipticArc(arc, 1, ry / rx, options.bezierAccuracy);
8197
- //un-rotate back to where it should be.
8198
- MakerJs.model.rotate(e, -rotation, cmd.from);
8199
- addModel(e);
8200
- }
8201
- else {
8202
- //just use the arc
8203
- //un-rotate back to where it should be.
8204
- MakerJs.path.rotate(arc, -rotation, cmd.from);
8205
- addPath(arc);
8187
+ var rx;
8188
+ var ry;
8189
+ var rotation;
8190
+ var large;
8191
+ var decreasing;
8192
+ var end;
8193
+ var elliptic;
8194
+ var xAxis;
8195
+ var arc;
8196
+ var scaleUp;
8197
+ var e;
8198
+ for (var a = 0; a < cmd.data.length; a = a + 7) {
8199
+ rx = cmd.data[0 + a];
8200
+ ry = cmd.data[1 + a];
8201
+ rotation = cmd.data[2 + a];
8202
+ large = cmd.data[3 + a] === 1;
8203
+ decreasing = cmd.data[4 + a] === 1;
8204
+ end = getPoint(cmd, 5 + a);
8205
+ elliptic = rx !== ry;
8206
+ //first, rotate so we are dealing with a zero angle x-axis
8207
+ xAxis = new MakerJs.paths.Line(cmd.from, MakerJs.point.rotate(end, rotation, cmd.from));
8208
+ //next, un-distort any ellipse back into a circle in terms of x axis
8209
+ if (elliptic) {
8210
+ xAxis = MakerJs.path.distort(xAxis, 1, rx / ry);
8211
+ }
8212
+ //now create an arc, making sure we use the large and decreasing flags
8213
+ arc = new MakerJs.paths.Arc(xAxis.origin, xAxis.end, rx, large, decreasing);
8214
+ if (elliptic) {
8215
+ //scale up if radius was insufficient.
8216
+ if (rx < arc.radius) {
8217
+ scaleUp = arc.radius / rx;
8218
+ rx *= scaleUp;
8219
+ ry *= scaleUp;
8220
+ }
8221
+ //create an elliptical arc, this will re-distort
8222
+ e = new MakerJs.models.EllipticArc(arc, 1, ry / rx, options.bezierAccuracy);
8223
+ //un-rotate back to where it should be.
8224
+ MakerJs.model.rotate(e, -rotation, cmd.from);
8225
+ addModel(e);
8226
+ }
8227
+ else {
8228
+ //just use the arc
8229
+ //un-rotate back to where it should be.
8230
+ MakerJs.path.rotate(arc, -rotation, cmd.from);
8231
+ addPath(arc);
8232
+ }
8233
+ cmd.from = end;
8206
8234
  }
8207
8235
  return end;
8208
8236
  };
8209
8237
  map['C'] = function (cmd) {
8210
- var control1 = getPoint(cmd, 0);
8211
- var control2 = getPoint(cmd, 2);
8212
- var end = getPoint(cmd, 4);
8213
- addModel(new MakerJs.models.BezierCurve(cmd.from, control1, control2, end, options.bezierAccuracy));
8238
+ var control1;
8239
+ var control2;
8240
+ var start = cmd.from;
8241
+ var end;
8242
+ for (var a = 0; a < cmd.data.length; a = a + 6) {
8243
+ cmd.from = start;
8244
+ control1 = getPoint(cmd, 0 + a, start);
8245
+ control2 = getPoint(cmd, 2 + a, start);
8246
+ end = getPoint(cmd, 4 + a, start);
8247
+ addModel(new MakerJs.models.BezierCurve(start, control1, control2, end, options.bezierAccuracy));
8248
+ start = end;
8249
+ }
8214
8250
  return end;
8215
8251
  };
8216
8252
  map['S'] = function (cmd) {
8217
8253
  var control1;
8218
8254
  var prevControl2;
8219
- if (cmd.prev.command === 'C') {
8220
- prevControl2 = getPoint(cmd.prev, 2);
8221
- control1 = MakerJs.point.rotate(prevControl2, 180, cmd.from);
8222
- }
8223
- else if (cmd.prev.command === 'S') {
8224
- prevControl2 = getPoint(cmd.prev, 0);
8225
- control1 = MakerJs.point.rotate(prevControl2, 180, cmd.from);
8255
+ var control2;
8256
+ var start = cmd.from;
8257
+ var end;
8258
+ if (cmd.prev.command === 'C' || cmd.prev.command === 'S') {
8259
+ prevControl2 = getPoint(cmd.prev, -4);
8226
8260
  }
8227
8261
  else {
8228
- control1 = cmd.from;
8262
+ prevControl2 = cmd.from;
8263
+ }
8264
+ for (var a = 0; a < cmd.data.length; a = a + 4) {
8265
+ cmd.from = start;
8266
+ control1 = MakerJs.point.rotate(prevControl2, 180, start);
8267
+ control2 = getPoint(cmd, 0 + a);
8268
+ end = getPoint(cmd, 2 + a);
8269
+ addModel(new MakerJs.models.BezierCurve(start, control1, control2, end, options.bezierAccuracy));
8270
+ start = end;
8271
+ prevControl2 = control2;
8229
8272
  }
8230
- var control2 = getPoint(cmd, 0);
8231
- var end = getPoint(cmd, 2);
8232
- addModel(new MakerJs.models.BezierCurve(cmd.from, control1, control2, end, options.bezierAccuracy));
8233
8273
  return end;
8234
8274
  };
8235
8275
  map['Q'] = function (cmd) {
8236
- var control = getPoint(cmd, 0);
8237
- var end = getPoint(cmd, 2);
8238
- addModel(new MakerJs.models.BezierCurve(cmd.from, control, end, options.bezierAccuracy));
8276
+ var control;
8277
+ var start = cmd.from;
8278
+ var end;
8279
+ for (var a = 0; a < cmd.data.length; a = a + 4) {
8280
+ cmd.from = start;
8281
+ control = getPoint(cmd, 0 + a);
8282
+ end = getPoint(cmd, 2 + a);
8283
+ addModel(new MakerJs.models.BezierCurve(start, control, end, options.bezierAccuracy));
8284
+ start = end;
8285
+ }
8239
8286
  return end;
8240
8287
  };
8241
8288
  map['T'] = function (cmd) {
8242
8289
  var control;
8243
8290
  var prevControl;
8291
+ var end;
8244
8292
  if (cmd.prev.command === 'Q') {
8245
- prevControl = getPoint(cmd.prev, 0);
8293
+ prevControl = getPoint(cmd.prev, -4);
8246
8294
  control = MakerJs.point.rotate(prevControl, 180, cmd.from);
8247
8295
  }
8248
8296
  else if (cmd.prev.command === 'T') {
8249
- prevControl = getPoint(cmd.prev, 2); //see below *
8250
- control = MakerJs.point.rotate(prevControl, 180, cmd.from);
8297
+ cmd.prev.absolute = true;
8298
+ control = getPoint(cmd.prev, -2); //see below *
8251
8299
  }
8252
8300
  else {
8253
8301
  control = cmd.from;
8254
8302
  }
8303
+ for (var a = 0; a < cmd.data.length; a = a + 2) {
8304
+ end = getPoint(cmd, 0 + a);
8305
+ addModel(new MakerJs.models.BezierCurve(cmd.from, control, end, options.bezierAccuracy));
8306
+ cmd.from = end;
8307
+ control = MakerJs.point.rotate(control, 180, cmd.from);
8308
+ }
8255
8309
  //* save the control point in the data list, will be accessible from index 2
8256
8310
  var p = MakerJs.point.mirror(control, false, true);
8257
8311
  cmd.data.push.apply(cmd.data, p);
8258
- var end = getPoint(cmd, 0);
8259
- addModel(new MakerJs.models.BezierCurve(cmd.from, control, end, options.bezierAccuracy));
8260
8312
  return end;
8261
8313
  };
8262
8314
  var firstPoint = [0, 0];
@@ -9903,9 +9955,10 @@ var MakerJs;
9903
9955
  "Ring_inner": innerRadius
9904
9956
  };
9905
9957
  for (var id in radii) {
9906
- if (radii[id] === void 0)
9958
+ var r = radii[id];
9959
+ if (r === undefined || r <= 0)
9907
9960
  continue;
9908
- this.paths[id] = new MakerJs.paths.Circle(MakerJs.point.zero(), radii[id]);
9961
+ this.paths[id] = new MakerJs.paths.Circle(MakerJs.point.zero(), r);
9909
9962
  }
9910
9963
  }
9911
9964
  return Ring;
@@ -10232,6 +10285,6 @@ var MakerJs;
10232
10285
  ];
10233
10286
  })(models = MakerJs.models || (MakerJs.models = {}));
10234
10287
  })(MakerJs || (MakerJs = {}));
10235
- MakerJs.version = "0.17.0";
10288
+ MakerJs.version = "0.17.2";
10236
10289
 
10237
10290
  },{"clone":2,"graham_scan":3,"kdbush":4}]},{},[]);
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- // Type definitions for Maker.js 0.17.0
1
+ // Type definitions for Maker.js 0.17.2
2
2
  // Project: https://github.com/Microsoft/maker.js
3
3
  // Definitions by: Dan Marshall <https://github.com/danmarshall>
4
4
  // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
package/dist/index.js CHANGED
@@ -4559,13 +4559,14 @@ var MakerJs;
4559
4559
  function parseNumericList(s) {
4560
4560
  var result = [];
4561
4561
  //http://stackoverflow.com/questions/638565/parsing-scientific-notation-sensibly
4562
- var re = /[\.-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
4562
+ var re = /-?(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
4563
4563
  var matches;
4564
4564
  while ((matches = re.exec(s)) !== null) {
4565
4565
  if (matches.index === re.lastIndex) {
4566
4566
  re.lastIndex++;
4567
4567
  }
4568
- result.push(parseFloat(matches[0]));
4568
+ if (matches[0] !== "")
4569
+ result.push(parseFloat(matches[0]));
4569
4570
  }
4570
4571
  return result;
4571
4572
  }
@@ -6947,28 +6948,28 @@ var MakerJs;
6947
6948
  return wrap(chainToJscadScript(c, maxArcFacet, options.accuracy));
6948
6949
  }
6949
6950
  function scriptUnion(augend, addend) {
6950
- return augend + (".union(" + addend + ")");
6951
+ return augend + ".union(".concat(addend, ")");
6951
6952
  }
6952
6953
  function scriptSubtraction(minuend, subtrahend) {
6953
- return minuend + (".subtract(" + subtrahend + ")");
6954
+ return minuend + ".subtract(".concat(subtrahend, ")");
6954
6955
  }
6955
6956
  function to2D(opts) {
6956
6957
  return convertChainsTo2D(_chainToJscadScript, scriptUnion, scriptSubtraction, modelToExport, options);
6957
6958
  }
6958
6959
  function to3D(cag, extrude, z) {
6959
- var csg = cag + (".extrude({ offset: [0, 0, " + extrude + "] })");
6960
+ var csg = cag + ".extrude({ offset: [0, 0, ".concat(extrude, "] })");
6960
6961
  if (z) {
6961
- csg = csg + (".translate([0, 0, " + z + "])");
6962
+ csg = csg + ".translate([0, 0, ".concat(z, "])");
6962
6963
  }
6963
6964
  return csg;
6964
6965
  }
6965
6966
  function wrap(s) {
6966
- return "" + nl + indent + s + nl;
6967
+ return "".concat(nl).concat(indent).concat(s).concat(nl);
6967
6968
  }
6968
6969
  var indent = new Array((options.indent || 0) + 1).join(' ');
6969
6970
  var nl = options.indent ? '\n' : '';
6970
6971
  var result = convert2Dto3D(to2D, to3D, scriptUnion, modelToExport, options).trim();
6971
- return "function " + (options.functionName || 'main') + "(){" + wrap("return " + result + ";") + "}" + nl;
6972
+ return "function ".concat(options.functionName || 'main', "(){").concat(wrap("return ".concat(result, ";")), "}").concat(nl);
6972
6973
  }
6973
6974
  exporter.toJscadScript = toJscadScript;
6974
6975
  /**
@@ -7036,7 +7037,7 @@ var MakerJs;
7036
7037
  var size = MakerJs.measure.modelExtents(scaledModel);
7037
7038
  var left = -size.low[0];
7038
7039
  var offset = [left, size.high[1]];
7039
- offset = MakerJs.point.add(offset, options.origin);
7040
+ offset = MakerJs.point.add(offset, opts.origin);
7040
7041
  MakerJs.model.findChains(scaledModel, function (chains, loose, layer) {
7041
7042
  function single(walkedPath) {
7042
7043
  var pathData = exporter.pathToSVGPathData(walkedPath.pathContext, walkedPath.offset, offset);
@@ -7598,7 +7599,7 @@ var MakerJs;
7598
7599
  var tag = new exporter.XmlTag('text', {
7599
7600
  "alignment-baseline": "middle",
7600
7601
  "text-anchor": "middle",
7601
- "transform": "rotate(" + MakerJs.angle.ofLineInDegrees(anchor) + "," + center[0] + "," + center[1] + ")",
7602
+ "transform": "rotate(".concat(MakerJs.angle.ofLineInDegrees(anchor), ",").concat(center[0], ",").concat(center[1], ")"),
7602
7603
  "x": center[0],
7603
7604
  "y": center[1]
7604
7605
  });
@@ -7700,14 +7701,18 @@ var MakerJs;
7700
7701
  }
7701
7702
  result.models['p_' + ++pathCount] = m;
7702
7703
  }
7703
- function getPoint(cmd, offset) {
7704
+ function getPoint(cmd, offset, from) {
7704
7705
  if (offset === void 0) { offset = 0; }
7706
+ if (from === void 0) { from = cmd.from; }
7707
+ if (offset < 0) { // get point from end of list (negative index)
7708
+ offset = offset + cmd.data.length;
7709
+ }
7705
7710
  var p = MakerJs.point.mirror([cmd.data[0 + offset], cmd.data[1 + offset]], false, true);
7706
7711
  if (cmd.absolute) {
7707
7712
  return p;
7708
7713
  }
7709
7714
  else {
7710
- return MakerJs.point.add(p, cmd.from);
7715
+ return MakerJs.point.add(p, from);
7711
7716
  }
7712
7717
  }
7713
7718
  function lineTo(cmd, end) {
@@ -7719,7 +7724,15 @@ var MakerJs;
7719
7724
  var map = {};
7720
7725
  map['M'] = function (cmd) {
7721
7726
  firstPoint = getPoint(cmd);
7722
- return firstPoint;
7727
+ if (cmd.data.length > 2) { // implicit lineTo
7728
+ cmd.from = firstPoint;
7729
+ for (var a = 2; a < cmd.data.length; a = a + 2) {
7730
+ cmd.from = lineTo(cmd, getPoint(cmd, a));
7731
+ }
7732
+ return cmd.from;
7733
+ }
7734
+ else
7735
+ return firstPoint;
7723
7736
  };
7724
7737
  map['Z'] = function (cmd) {
7725
7738
  return lineTo(cmd, firstPoint);
@@ -7746,97 +7759,139 @@ var MakerJs;
7746
7759
  return lineTo(cmd, end);
7747
7760
  };
7748
7761
  map['L'] = function (cmd) {
7749
- var end = getPoint(cmd);
7750
- return lineTo(cmd, end);
7762
+ var end;
7763
+ for (var a = 0; a < cmd.data.length; a = a + 2) {
7764
+ end = getPoint(cmd, a);
7765
+ cmd.from = lineTo(cmd, end);
7766
+ }
7767
+ return cmd.from;
7751
7768
  };
7752
7769
  map['A'] = function (cmd) {
7753
- var rx = cmd.data[0];
7754
- var ry = cmd.data[1];
7755
- var rotation = cmd.data[2];
7756
- var large = cmd.data[3] === 1;
7757
- var decreasing = cmd.data[4] === 1;
7758
- var end = getPoint(cmd, 5);
7759
- var elliptic = rx !== ry;
7760
- //first, rotate so we are dealing with a zero angle x-axis
7761
- var xAxis = new MakerJs.paths.Line(cmd.from, MakerJs.point.rotate(end, rotation, cmd.from));
7762
- //next, un-distort any ellipse back into a circle in terms of x axis
7763
- if (elliptic) {
7764
- xAxis = MakerJs.path.distort(xAxis, 1, rx / ry);
7765
- }
7766
- //now create an arc, making sure we use the large and decreasing flags
7767
- var arc = new MakerJs.paths.Arc(xAxis.origin, xAxis.end, rx, large, decreasing);
7768
- if (elliptic) {
7769
- //scale up if radius was insufficient.
7770
- if (rx < arc.radius) {
7771
- var scaleUp = arc.radius / rx;
7772
- rx *= scaleUp;
7773
- ry *= scaleUp;
7774
- }
7775
- //create an elliptical arc, this will re-distort
7776
- var e = new MakerJs.models.EllipticArc(arc, 1, ry / rx, options.bezierAccuracy);
7777
- //un-rotate back to where it should be.
7778
- MakerJs.model.rotate(e, -rotation, cmd.from);
7779
- addModel(e);
7780
- }
7781
- else {
7782
- //just use the arc
7783
- //un-rotate back to where it should be.
7784
- MakerJs.path.rotate(arc, -rotation, cmd.from);
7785
- addPath(arc);
7770
+ var rx;
7771
+ var ry;
7772
+ var rotation;
7773
+ var large;
7774
+ var decreasing;
7775
+ var end;
7776
+ var elliptic;
7777
+ var xAxis;
7778
+ var arc;
7779
+ var scaleUp;
7780
+ var e;
7781
+ for (var a = 0; a < cmd.data.length; a = a + 7) {
7782
+ rx = cmd.data[0 + a];
7783
+ ry = cmd.data[1 + a];
7784
+ rotation = cmd.data[2 + a];
7785
+ large = cmd.data[3 + a] === 1;
7786
+ decreasing = cmd.data[4 + a] === 1;
7787
+ end = getPoint(cmd, 5 + a);
7788
+ elliptic = rx !== ry;
7789
+ //first, rotate so we are dealing with a zero angle x-axis
7790
+ xAxis = new MakerJs.paths.Line(cmd.from, MakerJs.point.rotate(end, rotation, cmd.from));
7791
+ //next, un-distort any ellipse back into a circle in terms of x axis
7792
+ if (elliptic) {
7793
+ xAxis = MakerJs.path.distort(xAxis, 1, rx / ry);
7794
+ }
7795
+ //now create an arc, making sure we use the large and decreasing flags
7796
+ arc = new MakerJs.paths.Arc(xAxis.origin, xAxis.end, rx, large, decreasing);
7797
+ if (elliptic) {
7798
+ //scale up if radius was insufficient.
7799
+ if (rx < arc.radius) {
7800
+ scaleUp = arc.radius / rx;
7801
+ rx *= scaleUp;
7802
+ ry *= scaleUp;
7803
+ }
7804
+ //create an elliptical arc, this will re-distort
7805
+ e = new MakerJs.models.EllipticArc(arc, 1, ry / rx, options.bezierAccuracy);
7806
+ //un-rotate back to where it should be.
7807
+ MakerJs.model.rotate(e, -rotation, cmd.from);
7808
+ addModel(e);
7809
+ }
7810
+ else {
7811
+ //just use the arc
7812
+ //un-rotate back to where it should be.
7813
+ MakerJs.path.rotate(arc, -rotation, cmd.from);
7814
+ addPath(arc);
7815
+ }
7816
+ cmd.from = end;
7786
7817
  }
7787
7818
  return end;
7788
7819
  };
7789
7820
  map['C'] = function (cmd) {
7790
- var control1 = getPoint(cmd, 0);
7791
- var control2 = getPoint(cmd, 2);
7792
- var end = getPoint(cmd, 4);
7793
- addModel(new MakerJs.models.BezierCurve(cmd.from, control1, control2, end, options.bezierAccuracy));
7821
+ var control1;
7822
+ var control2;
7823
+ var start = cmd.from;
7824
+ var end;
7825
+ for (var a = 0; a < cmd.data.length; a = a + 6) {
7826
+ cmd.from = start;
7827
+ control1 = getPoint(cmd, 0 + a, start);
7828
+ control2 = getPoint(cmd, 2 + a, start);
7829
+ end = getPoint(cmd, 4 + a, start);
7830
+ addModel(new MakerJs.models.BezierCurve(start, control1, control2, end, options.bezierAccuracy));
7831
+ start = end;
7832
+ }
7794
7833
  return end;
7795
7834
  };
7796
7835
  map['S'] = function (cmd) {
7797
7836
  var control1;
7798
7837
  var prevControl2;
7799
- if (cmd.prev.command === 'C') {
7800
- prevControl2 = getPoint(cmd.prev, 2);
7801
- control1 = MakerJs.point.rotate(prevControl2, 180, cmd.from);
7802
- }
7803
- else if (cmd.prev.command === 'S') {
7804
- prevControl2 = getPoint(cmd.prev, 0);
7805
- control1 = MakerJs.point.rotate(prevControl2, 180, cmd.from);
7838
+ var control2;
7839
+ var start = cmd.from;
7840
+ var end;
7841
+ if (cmd.prev.command === 'C' || cmd.prev.command === 'S') {
7842
+ prevControl2 = getPoint(cmd.prev, -4);
7806
7843
  }
7807
7844
  else {
7808
- control1 = cmd.from;
7845
+ prevControl2 = cmd.from;
7846
+ }
7847
+ for (var a = 0; a < cmd.data.length; a = a + 4) {
7848
+ cmd.from = start;
7849
+ control1 = MakerJs.point.rotate(prevControl2, 180, start);
7850
+ control2 = getPoint(cmd, 0 + a);
7851
+ end = getPoint(cmd, 2 + a);
7852
+ addModel(new MakerJs.models.BezierCurve(start, control1, control2, end, options.bezierAccuracy));
7853
+ start = end;
7854
+ prevControl2 = control2;
7809
7855
  }
7810
- var control2 = getPoint(cmd, 0);
7811
- var end = getPoint(cmd, 2);
7812
- addModel(new MakerJs.models.BezierCurve(cmd.from, control1, control2, end, options.bezierAccuracy));
7813
7856
  return end;
7814
7857
  };
7815
7858
  map['Q'] = function (cmd) {
7816
- var control = getPoint(cmd, 0);
7817
- var end = getPoint(cmd, 2);
7818
- addModel(new MakerJs.models.BezierCurve(cmd.from, control, end, options.bezierAccuracy));
7859
+ var control;
7860
+ var start = cmd.from;
7861
+ var end;
7862
+ for (var a = 0; a < cmd.data.length; a = a + 4) {
7863
+ cmd.from = start;
7864
+ control = getPoint(cmd, 0 + a);
7865
+ end = getPoint(cmd, 2 + a);
7866
+ addModel(new MakerJs.models.BezierCurve(start, control, end, options.bezierAccuracy));
7867
+ start = end;
7868
+ }
7819
7869
  return end;
7820
7870
  };
7821
7871
  map['T'] = function (cmd) {
7822
7872
  var control;
7823
7873
  var prevControl;
7874
+ var end;
7824
7875
  if (cmd.prev.command === 'Q') {
7825
- prevControl = getPoint(cmd.prev, 0);
7876
+ prevControl = getPoint(cmd.prev, -4);
7826
7877
  control = MakerJs.point.rotate(prevControl, 180, cmd.from);
7827
7878
  }
7828
7879
  else if (cmd.prev.command === 'T') {
7829
- prevControl = getPoint(cmd.prev, 2); //see below *
7830
- control = MakerJs.point.rotate(prevControl, 180, cmd.from);
7880
+ cmd.prev.absolute = true;
7881
+ control = getPoint(cmd.prev, -2); //see below *
7831
7882
  }
7832
7883
  else {
7833
7884
  control = cmd.from;
7834
7885
  }
7886
+ for (var a = 0; a < cmd.data.length; a = a + 2) {
7887
+ end = getPoint(cmd, 0 + a);
7888
+ addModel(new MakerJs.models.BezierCurve(cmd.from, control, end, options.bezierAccuracy));
7889
+ cmd.from = end;
7890
+ control = MakerJs.point.rotate(control, 180, cmd.from);
7891
+ }
7835
7892
  //* save the control point in the data list, will be accessible from index 2
7836
7893
  var p = MakerJs.point.mirror(control, false, true);
7837
7894
  cmd.data.push.apply(cmd.data, p);
7838
- var end = getPoint(cmd, 0);
7839
- addModel(new MakerJs.models.BezierCurve(cmd.from, control, end, options.bezierAccuracy));
7840
7895
  return end;
7841
7896
  };
7842
7897
  var firstPoint = [0, 0];
@@ -9483,9 +9538,10 @@ var MakerJs;
9483
9538
  "Ring_inner": innerRadius
9484
9539
  };
9485
9540
  for (var id in radii) {
9486
- if (radii[id] === void 0)
9541
+ var r = radii[id];
9542
+ if (r === undefined || r <= 0)
9487
9543
  continue;
9488
- this.paths[id] = new MakerJs.paths.Circle(MakerJs.point.zero(), radii[id]);
9544
+ this.paths[id] = new MakerJs.paths.Circle(MakerJs.point.zero(), r);
9489
9545
  }
9490
9546
  }
9491
9547
  return Ring;
@@ -9812,5 +9868,5 @@ var MakerJs;
9812
9868
  ];
9813
9869
  })(models = MakerJs.models || (MakerJs.models = {}));
9814
9870
  })(MakerJs || (MakerJs = {}));
9815
- MakerJs.version = "0.17.0";
9871
+ MakerJs.version = "0.17.2";
9816
9872
  var Bezier = require('bezier-js');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "makerjs",
3
- "version": "0.17.0",
3
+ "version": "0.17.2",
4
4
  "description": "Maker.js, a Microsoft Garage project, is a JavaScript library for creating and sharing modular line drawings for CNC and laser cutters.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",