makerjs 0.18.1 → 0.18.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.
- package/dist/browser.maker.js +76 -29
- package/dist/index.d.ts +7 -2
- package/dist/index.js +69 -23
- package/package.json +2 -2
package/dist/browser.maker.js
CHANGED
|
@@ -39,12 +39,12 @@ 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.18.
|
|
42
|
+
* version: 0.18.2
|
|
43
43
|
*
|
|
44
44
|
* browserify:
|
|
45
45
|
* license: MIT (http://opensource.org/licenses/MIT)
|
|
46
46
|
* author: James Halliday <mail@substack.net>
|
|
47
|
-
* version: 17.0.
|
|
47
|
+
* version: 17.0.1
|
|
48
48
|
*
|
|
49
49
|
* clone:
|
|
50
50
|
* license: MIT (http://opensource.org/licenses/MIT)
|
|
@@ -54,9 +54,9 @@ and limitations under the License.
|
|
|
54
54
|
*
|
|
55
55
|
* graham_scan:
|
|
56
56
|
* license: MIT (http://opensource.org/licenses/MIT)
|
|
57
|
-
* author: Brian Barnett <
|
|
57
|
+
* author: Brian Barnett <me@brianbar.net>
|
|
58
58
|
* homepage: http://brian3kb.github.io/graham_scan_js
|
|
59
|
-
* version: 1.0.
|
|
59
|
+
* version: 1.0.5
|
|
60
60
|
*
|
|
61
61
|
* kdbush:
|
|
62
62
|
* license: ISC (http://opensource.org/licenses/ISC)
|
|
@@ -242,9 +242,10 @@ if (typeof module === 'object' && module.exports) {
|
|
|
242
242
|
* Graham's Scan Convex Hull Algorithm
|
|
243
243
|
* @desc An implementation of the Graham's Scan Convex Hull algorithm in JavaScript.
|
|
244
244
|
* @author Brian Barnett, brian@3kb.co.uk, http://brianbar.net/ || http://3kb.co.uk/
|
|
245
|
-
* @version 1.0.
|
|
245
|
+
* @version 1.0.5
|
|
246
246
|
*/
|
|
247
|
-
function ConvexHullGrahamScan(){this.anchorPoint=void 0,this.reverse=!1,this.points=[]}ConvexHullGrahamScan.prototype={constructor:ConvexHullGrahamScan,Point:function(
|
|
247
|
+
function ConvexHullGrahamScan(){this.anchorPoint=void 0,this.reverse=!1,this.points=[]}ConvexHullGrahamScan.prototype={constructor:ConvexHullGrahamScan,Point:function(a,b){this.x=a,this.y=b},_findPolarAngle:function(a,b){var c,d,e=57.295779513082;if(!a||!b)return 0;if(c=b.x-a.x,d=b.y-a.y,0==c&&0==d)return 0;var f=Math.atan2(d,c)*e;return this.reverse?0>=f&&(f+=360):f>=0&&(f+=360),f},addPoint:function(a,b){var c=void 0===this.anchorPoint||this.anchorPoint.y>b||this.anchorPoint.y===b&&this.anchorPoint.x>a;c?(void 0!==this.anchorPoint&&this.points.push(new this.Point(this.anchorPoint.x,this.anchorPoint.y)),this.anchorPoint=new this.Point(a,b)):this.points.push(new this.Point(a,b))},_sortPoints:function(){var a=this;return this.points.sort(function(b,c){var d=a._findPolarAngle(a.anchorPoint,b),e=a._findPolarAngle(a.anchorPoint,c);return e>d?-1:d>e?1:0})},_checkPoints:function(a,b,c){var d,e=this._findPolarAngle(a,b),f=this._findPolarAngle(a,c);return e>f?(d=e-f,!(d>180)):f>e?(d=f-e,d>180):!0},getHull:function(){var a,b,c=[];if(this.reverse=this.points.every(function(a){return a.x<0&&a.y<0}),a=this._sortPoints(),b=a.length,3>b)return a.unshift(this.anchorPoint),a;for(c.push(a.shift(),a.shift());;){var d,e,f;if(c.push(a.shift()),d=c[c.length-3],e=c[c.length-2],f=c[c.length-1],this._checkPoints(d,e,f)&&c.splice(c.length-2,1),0==a.length){if(b==c.length){var g=this.anchorPoint;return c=c.filter(function(a){return!!a}),c.some(function(a){return a.x==g.x&&a.y==g.y})||c.unshift(this.anchorPoint),c}a=c,b=a.length,c=[],c.push(a.shift(),a.shift())}}}},"function"==typeof define&&define.amd&&define(function(){return ConvexHullGrahamScan}),"undefined"!=typeof module&&(module.exports=ConvexHullGrahamScan);
|
|
248
|
+
|
|
248
249
|
},{}],4:[function(require,module,exports){
|
|
249
250
|
(function (global, factory) {
|
|
250
251
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
|
@@ -2674,7 +2675,7 @@ var MakerJs;
|
|
|
2674
2675
|
}
|
|
2675
2676
|
if (modelToDistort.type === MakerJs.models.BezierCurve.typeName) {
|
|
2676
2677
|
var b = modelToDistort;
|
|
2677
|
-
var bezierPartsByLayer = MakerJs.models.BezierCurve.getBezierSeeds(b, { byLayers: true });
|
|
2678
|
+
var bezierPartsByLayer = MakerJs.models.BezierCurve.getBezierSeeds(b, { byLayers: true, pointMatchingDistance: bezierAccuracy });
|
|
2678
2679
|
var _loop_1 = function (layer_1) {
|
|
2679
2680
|
var pathArray = bezierPartsByLayer[layer_1];
|
|
2680
2681
|
pathArray.forEach(function (p, i) {
|
|
@@ -4594,7 +4595,7 @@ var MakerJs;
|
|
|
4594
4595
|
if (m) {
|
|
4595
4596
|
return augment(m);
|
|
4596
4597
|
}
|
|
4597
|
-
return
|
|
4598
|
+
return null;
|
|
4598
4599
|
}
|
|
4599
4600
|
measure.modelExtents = modelExtents;
|
|
4600
4601
|
/**
|
|
@@ -5029,6 +5030,12 @@ var MakerJs;
|
|
|
5029
5030
|
};
|
|
5030
5031
|
}
|
|
5031
5032
|
}
|
|
5033
|
+
function lineTypeLayerOptions(layer) {
|
|
5034
|
+
if (opts.layerOptions && opts.layerOptions[layer] && opts.layerOptions[layer].lineType) {
|
|
5035
|
+
return opts.layerOptions[layer].lineType;
|
|
5036
|
+
}
|
|
5037
|
+
return "CONTINUOUS";
|
|
5038
|
+
}
|
|
5032
5039
|
function defaultLayer(pathContext, parentLayer) {
|
|
5033
5040
|
var layerId = (pathContext && pathContext.layer) || parentLayer || '0';
|
|
5034
5041
|
if (layerIds.indexOf(layerId) < 0) {
|
|
@@ -5038,9 +5045,10 @@ var MakerJs;
|
|
|
5038
5045
|
}
|
|
5039
5046
|
var map = {};
|
|
5040
5047
|
map[MakerJs.pathType.Line] = function (line, offset, layer) {
|
|
5048
|
+
var layerId = defaultLayer(line, layer);
|
|
5041
5049
|
var lineEntity = {
|
|
5042
5050
|
type: "LINE",
|
|
5043
|
-
layer:
|
|
5051
|
+
layer: layerId,
|
|
5044
5052
|
vertices: [
|
|
5045
5053
|
{
|
|
5046
5054
|
x: MakerJs.round(line.origin[0] + offset[0], opts.accuracy),
|
|
@@ -5052,24 +5060,28 @@ var MakerJs;
|
|
|
5052
5060
|
}
|
|
5053
5061
|
]
|
|
5054
5062
|
};
|
|
5063
|
+
lineEntity.lineType = lineTypeLayerOptions(layerId);
|
|
5055
5064
|
return lineEntity;
|
|
5056
5065
|
};
|
|
5057
5066
|
map[MakerJs.pathType.Circle] = function (circle, offset, layer) {
|
|
5067
|
+
var layerId = defaultLayer(circle, layer);
|
|
5058
5068
|
var circleEntity = {
|
|
5059
5069
|
type: "CIRCLE",
|
|
5060
|
-
layer:
|
|
5070
|
+
layer: layerId,
|
|
5061
5071
|
center: {
|
|
5062
5072
|
x: MakerJs.round(circle.origin[0] + offset[0], opts.accuracy),
|
|
5063
5073
|
y: MakerJs.round(circle.origin[1] + offset[1], opts.accuracy)
|
|
5064
5074
|
},
|
|
5065
5075
|
radius: MakerJs.round(circle.radius, opts.accuracy)
|
|
5066
5076
|
};
|
|
5077
|
+
circleEntity.lineType = lineTypeLayerOptions(layerId);
|
|
5067
5078
|
return circleEntity;
|
|
5068
5079
|
};
|
|
5069
5080
|
map[MakerJs.pathType.Arc] = function (arc, offset, layer) {
|
|
5081
|
+
var layerId = defaultLayer(arc, layer);
|
|
5070
5082
|
var arcEntity = {
|
|
5071
5083
|
type: "ARC",
|
|
5072
|
-
layer:
|
|
5084
|
+
layer: layerId,
|
|
5073
5085
|
center: {
|
|
5074
5086
|
x: MakerJs.round(arc.origin[0] + offset[0], opts.accuracy),
|
|
5075
5087
|
y: MakerJs.round(arc.origin[1] + offset[1], opts.accuracy)
|
|
@@ -5078,6 +5090,7 @@ var MakerJs;
|
|
|
5078
5090
|
startAngle: MakerJs.round(arc.startAngle, opts.accuracy),
|
|
5079
5091
|
endAngle: MakerJs.round(arc.endAngle, opts.accuracy)
|
|
5080
5092
|
};
|
|
5093
|
+
arcEntity.lineType = lineTypeLayerOptions(layerId);
|
|
5081
5094
|
return arcEntity;
|
|
5082
5095
|
};
|
|
5083
5096
|
//TODO - handle scenario if any bezier seeds get passed
|
|
@@ -5099,6 +5112,7 @@ var MakerJs;
|
|
|
5099
5112
|
shape: c.chain.endless,
|
|
5100
5113
|
vertices: []
|
|
5101
5114
|
};
|
|
5115
|
+
polylineEntity.lineType = lineTypeLayerOptions(polylineEntity.layer);
|
|
5102
5116
|
c.chain.links.forEach(function (link, i) {
|
|
5103
5117
|
var bulge;
|
|
5104
5118
|
if (link.walkedPath.pathContext.type === MakerJs.pathType.Arc) {
|
|
@@ -5140,15 +5154,31 @@ var MakerJs;
|
|
|
5140
5154
|
name: layerId,
|
|
5141
5155
|
color: layerColor
|
|
5142
5156
|
};
|
|
5157
|
+
layerEntity.lineType = lineTypeLayerOptions(layerId);
|
|
5143
5158
|
return layerEntity;
|
|
5144
5159
|
}
|
|
5145
5160
|
function lineTypesOut() {
|
|
5161
|
+
// Dash pattern convention: positive = drawn segment, negative = gap, 0 can be dot.
|
|
5162
|
+
// patternLength is sum of absolute values.
|
|
5146
5163
|
var lineStyleTable = {
|
|
5147
5164
|
lineTypes: {
|
|
5148
5165
|
"CONTINUOUS": {
|
|
5149
5166
|
name: "CONTINUOUS",
|
|
5150
5167
|
description: "______",
|
|
5151
|
-
patternLength: 0
|
|
5168
|
+
patternLength: 0,
|
|
5169
|
+
elements: []
|
|
5170
|
+
},
|
|
5171
|
+
"DASHED": {
|
|
5172
|
+
name: "DASHED",
|
|
5173
|
+
description: "_ _ _ ",
|
|
5174
|
+
elements: [5, -2.5],
|
|
5175
|
+
patternLength: 7.5
|
|
5176
|
+
},
|
|
5177
|
+
"DOTTED": {
|
|
5178
|
+
name: "DOTTED",
|
|
5179
|
+
description: ". . . ",
|
|
5180
|
+
elements: [0.5, -1.0],
|
|
5181
|
+
patternLength: 1.5
|
|
5152
5182
|
}
|
|
5153
5183
|
}
|
|
5154
5184
|
};
|
|
@@ -5240,15 +5270,27 @@ var MakerJs;
|
|
|
5240
5270
|
}
|
|
5241
5271
|
dxf.push.apply(dxf, values);
|
|
5242
5272
|
}
|
|
5273
|
+
function appendLineType(entity) {
|
|
5274
|
+
var lt = entity.lineType;
|
|
5275
|
+
if (lt) {
|
|
5276
|
+
append("6", lt);
|
|
5277
|
+
}
|
|
5278
|
+
}
|
|
5243
5279
|
var map = {};
|
|
5244
5280
|
map["LINE"] = function (line) {
|
|
5245
|
-
append("0", "LINE", "8", line.layer
|
|
5281
|
+
append("0", "LINE", "8", line.layer);
|
|
5282
|
+
appendLineType(line);
|
|
5283
|
+
append("10", line.vertices[0].x, "20", line.vertices[0].y, "11", line.vertices[1].x, "21", line.vertices[1].y);
|
|
5246
5284
|
};
|
|
5247
5285
|
map["CIRCLE"] = function (circle) {
|
|
5248
|
-
append("0", "CIRCLE", "8", circle.layer
|
|
5286
|
+
append("0", "CIRCLE", "8", circle.layer);
|
|
5287
|
+
appendLineType(circle);
|
|
5288
|
+
append("10", circle.center.x, "20", circle.center.y, "40", circle.radius);
|
|
5249
5289
|
};
|
|
5250
5290
|
map["ARC"] = function (arc) {
|
|
5251
|
-
append("0", "ARC", "8", arc.layer
|
|
5291
|
+
append("0", "ARC", "8", arc.layer);
|
|
5292
|
+
appendLineType(arc);
|
|
5293
|
+
append("10", arc.center.x, "20", arc.center.y, "40", arc.radius, "50", arc.startAngle, "51", arc.endAngle);
|
|
5252
5294
|
};
|
|
5253
5295
|
//TODO - handle scenario if any bezier seeds get passed
|
|
5254
5296
|
//map[pathType.BezierSeed]
|
|
@@ -5259,7 +5301,9 @@ var MakerJs;
|
|
|
5259
5301
|
}
|
|
5260
5302
|
};
|
|
5261
5303
|
map["POLYLINE"] = function (polyline) {
|
|
5262
|
-
append("0", "POLYLINE", "8", polyline.layer
|
|
5304
|
+
append("0", "POLYLINE", "8", polyline.layer);
|
|
5305
|
+
appendLineType(polyline);
|
|
5306
|
+
append("66", 1, "70", polyline.shape ? 1 : 0);
|
|
5263
5307
|
polyline.vertices.forEach(function (vertex) { return map["VERTEX"](vertex); });
|
|
5264
5308
|
append("0", "SEQEND");
|
|
5265
5309
|
};
|
|
@@ -5282,11 +5326,14 @@ var MakerJs;
|
|
|
5282
5326
|
table(layersOut);
|
|
5283
5327
|
}
|
|
5284
5328
|
function layerOut(layer) {
|
|
5285
|
-
|
|
5329
|
+
var lt = (layer.lineType || "CONTINUOUS");
|
|
5330
|
+
append("0", "LAYER", "2", layer.name, "70", "0", "62", layer.color, "6", lt);
|
|
5286
5331
|
}
|
|
5287
5332
|
function lineTypeOut(lineType) {
|
|
5333
|
+
var elements = ((lineType.elements) || []);
|
|
5288
5334
|
append("0", "LTYPE", "72", //72 Alignment code; value is always 65, the ASCII code for A
|
|
5289
|
-
"65", "70", "
|
|
5335
|
+
"65", "70", "0", "2", lineType.name, "3", lineType.description, "73", elements.length, "40", lineType.patternLength);
|
|
5336
|
+
elements.forEach(function (e) { return append("49", e); });
|
|
5290
5337
|
}
|
|
5291
5338
|
function lineTypesOut() {
|
|
5292
5339
|
var lineTypeTableName = 'lineType';
|
|
@@ -6437,7 +6484,7 @@ var MakerJs;
|
|
|
6437
6484
|
var beziers;
|
|
6438
6485
|
if (opts.unifyBeziers) {
|
|
6439
6486
|
beziers = getBezierModels(modelContext);
|
|
6440
|
-
swapBezierPathsWithSeeds(beziers, true);
|
|
6487
|
+
swapBezierPathsWithSeeds(beziers, true, opts.pointMatchingDistance);
|
|
6441
6488
|
}
|
|
6442
6489
|
model.walk(modelContext, walkOptions);
|
|
6443
6490
|
var _loop_3 = function (layer_2) {
|
|
@@ -6474,7 +6521,7 @@ var MakerJs;
|
|
|
6474
6521
|
_loop_3(layer_2);
|
|
6475
6522
|
}
|
|
6476
6523
|
if (beziers) {
|
|
6477
|
-
swapBezierPathsWithSeeds(beziers, false);
|
|
6524
|
+
swapBezierPathsWithSeeds(beziers, false, opts.pointMatchingDistance);
|
|
6478
6525
|
}
|
|
6479
6526
|
if (opts.byLayers) {
|
|
6480
6527
|
return chainsByLayer;
|
|
@@ -6571,7 +6618,7 @@ var MakerJs;
|
|
|
6571
6618
|
/**
|
|
6572
6619
|
* @private
|
|
6573
6620
|
*/
|
|
6574
|
-
function swapBezierPathsWithSeeds(beziers, swap) {
|
|
6621
|
+
function swapBezierPathsWithSeeds(beziers, swap, pointMatchingDistance) {
|
|
6575
6622
|
var tempKey = 'tempPaths';
|
|
6576
6623
|
var tempLayerKey = 'tempLayer';
|
|
6577
6624
|
beziers.forEach(function (wm) {
|
|
@@ -6583,7 +6630,7 @@ var MakerJs;
|
|
|
6583
6630
|
b.layer = wm.layer;
|
|
6584
6631
|
}
|
|
6585
6632
|
//use seeds as path, hide the arc paths from findChains()
|
|
6586
|
-
var bezierPartsByLayer = MakerJs.models.BezierCurve.getBezierSeeds(b, { byLayers: true });
|
|
6633
|
+
var bezierPartsByLayer = MakerJs.models.BezierCurve.getBezierSeeds(b, { byLayers: true, pointMatchingDistance: pointMatchingDistance });
|
|
6587
6634
|
for (var layer in bezierPartsByLayer) {
|
|
6588
6635
|
var bezierSeeds = bezierPartsByLayer[layer];
|
|
6589
6636
|
if (bezierSeeds.length > 0) {
|
|
@@ -9002,7 +9049,7 @@ var MakerJs;
|
|
|
9002
9049
|
/**
|
|
9003
9050
|
* @private
|
|
9004
9051
|
*/
|
|
9005
|
-
function getActualBezierRange(curve, arc, endpoints, offset) {
|
|
9052
|
+
function getActualBezierRange(curve, arc, endpoints, offset, pointMatchingDistance) {
|
|
9006
9053
|
var b = getScratch(curve.seed);
|
|
9007
9054
|
var tPoints = [arc.bezierData.startT, arc.bezierData.endT].map(function (t) { return new TPoint(b, t, offset); });
|
|
9008
9055
|
var ends = endpoints.slice();
|
|
@@ -9011,7 +9058,7 @@ var MakerJs;
|
|
|
9011
9058
|
if (endpointDistancetoStart[0] > endpointDistancetoStart[1])
|
|
9012
9059
|
ends.reverse();
|
|
9013
9060
|
for (var i = 2; i--;) {
|
|
9014
|
-
if (!MakerJs.measure.isPointEqual(ends[i], tPoints[i].point)) {
|
|
9061
|
+
if (!MakerJs.measure.isPointEqual(ends[i], tPoints[i].point, pointMatchingDistance)) {
|
|
9015
9062
|
return null;
|
|
9016
9063
|
}
|
|
9017
9064
|
}
|
|
@@ -9020,13 +9067,13 @@ var MakerJs;
|
|
|
9020
9067
|
/**
|
|
9021
9068
|
* @private
|
|
9022
9069
|
*/
|
|
9023
|
-
function getChainBezierRange(curve, c, layer, addToLayer) {
|
|
9070
|
+
function getChainBezierRange(curve, c, layer, addToLayer, pointMatchingDistance) {
|
|
9024
9071
|
var endLinks = [c.links[0], c.links[c.links.length - 1]];
|
|
9025
9072
|
if (endLinks[0].walkedPath.pathContext.bezierData.startT > endLinks[1].walkedPath.pathContext.bezierData.startT) {
|
|
9026
9073
|
MakerJs.chain.reverse(c);
|
|
9027
9074
|
endLinks.reverse();
|
|
9028
9075
|
}
|
|
9029
|
-
var actualBezierRanges = endLinks.map(function (endLink) { return getActualBezierRange(curve, endLink.walkedPath.pathContext, endLink.endPoints, endLink.walkedPath.offset); });
|
|
9076
|
+
var actualBezierRanges = endLinks.map(function (endLink) { return getActualBezierRange(curve, endLink.walkedPath.pathContext, endLink.endPoints, endLink.walkedPath.offset, pointMatchingDistance); });
|
|
9030
9077
|
var result = {
|
|
9031
9078
|
startT: actualBezierRanges[0] ? actualBezierRanges[0].startT : null,
|
|
9032
9079
|
endT: actualBezierRanges[1] ? actualBezierRanges[1].endT : null
|
|
@@ -9188,7 +9235,7 @@ var MakerJs;
|
|
|
9188
9235
|
};
|
|
9189
9236
|
MakerJs.model.findChains(curve, function (chains, loose, layer) {
|
|
9190
9237
|
chains.forEach(function (c) {
|
|
9191
|
-
var range = getChainBezierRange(curve, c, layer, addToLayer);
|
|
9238
|
+
var range = getChainBezierRange(curve, c, layer, addToLayer, options.pointMatchingDistance);
|
|
9192
9239
|
if (range) {
|
|
9193
9240
|
var b = getScratch(curve.seed);
|
|
9194
9241
|
var piece = b.split(range.startT, range.endT);
|
|
@@ -9203,7 +9250,7 @@ var MakerJs;
|
|
|
9203
9250
|
//bezier is linear
|
|
9204
9251
|
return addToLayer(wp.pathContext, layer, true);
|
|
9205
9252
|
}
|
|
9206
|
-
var range = getActualBezierRange(curve, wp.pathContext, MakerJs.point.fromPathEnds(wp.pathContext), wp.offset);
|
|
9253
|
+
var range = getActualBezierRange(curve, wp.pathContext, MakerJs.point.fromPathEnds(wp.pathContext), wp.offset, options.pointMatchingDistance);
|
|
9207
9254
|
if (range) {
|
|
9208
9255
|
var b = getScratch(curve.seed);
|
|
9209
9256
|
var piece = b.split(range.startT, range.endT);
|
|
@@ -10303,6 +10350,6 @@ var MakerJs;
|
|
|
10303
10350
|
];
|
|
10304
10351
|
})(models = MakerJs.models || (MakerJs.models = {}));
|
|
10305
10352
|
})(MakerJs || (MakerJs = {}));
|
|
10306
|
-
MakerJs.version = "0.18.
|
|
10353
|
+
MakerJs.version = "0.18.2";
|
|
10307
10354
|
|
|
10308
10355
|
},{"clone":2,"graham_scan":3,"kdbush":4}]},{},[]);
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Type definitions for Maker.js 0.18.
|
|
1
|
+
// Type definitions for Maker.js 0.18.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
|
|
@@ -2584,7 +2584,7 @@ declare namespace MakerJs.measure {
|
|
|
2584
2584
|
* @param atlas Optional atlas to save measurements.
|
|
2585
2585
|
* @returns object with low and high points.
|
|
2586
2586
|
*/
|
|
2587
|
-
function modelExtents(modelToMeasure: IModel, atlas?: Atlas): IMeasureWithCenter;
|
|
2587
|
+
function modelExtents(modelToMeasure: IModel, atlas?: Atlas): IMeasureWithCenter | null;
|
|
2588
2588
|
/**
|
|
2589
2589
|
* Augment a measurement - add more properties such as center point, height and width.
|
|
2590
2590
|
*
|
|
@@ -2734,6 +2734,11 @@ declare namespace MakerJs.exporter {
|
|
|
2734
2734
|
* Text size for TEXT entities.
|
|
2735
2735
|
*/
|
|
2736
2736
|
fontSize?: number;
|
|
2737
|
+
/**
|
|
2738
|
+
* DXF linetype name for this layer.
|
|
2739
|
+
* Example: "CONTINUOUS", "DASHED", "DOTTED"
|
|
2740
|
+
*/
|
|
2741
|
+
lineType?: 'CONTINUOUS' | 'DASHED' | 'DOTTED';
|
|
2737
2742
|
}
|
|
2738
2743
|
/**
|
|
2739
2744
|
* DXF rendering options.
|
package/dist/index.js
CHANGED
|
@@ -2257,7 +2257,7 @@ var MakerJs;
|
|
|
2257
2257
|
}
|
|
2258
2258
|
if (modelToDistort.type === MakerJs.models.BezierCurve.typeName) {
|
|
2259
2259
|
var b = modelToDistort;
|
|
2260
|
-
var bezierPartsByLayer = MakerJs.models.BezierCurve.getBezierSeeds(b, { byLayers: true });
|
|
2260
|
+
var bezierPartsByLayer = MakerJs.models.BezierCurve.getBezierSeeds(b, { byLayers: true, pointMatchingDistance: bezierAccuracy });
|
|
2261
2261
|
var _loop_1 = function (layer_1) {
|
|
2262
2262
|
var pathArray = bezierPartsByLayer[layer_1];
|
|
2263
2263
|
pathArray.forEach(function (p, i) {
|
|
@@ -4177,7 +4177,7 @@ var MakerJs;
|
|
|
4177
4177
|
if (m) {
|
|
4178
4178
|
return augment(m);
|
|
4179
4179
|
}
|
|
4180
|
-
return
|
|
4180
|
+
return null;
|
|
4181
4181
|
}
|
|
4182
4182
|
measure.modelExtents = modelExtents;
|
|
4183
4183
|
/**
|
|
@@ -4612,6 +4612,12 @@ var MakerJs;
|
|
|
4612
4612
|
};
|
|
4613
4613
|
}
|
|
4614
4614
|
}
|
|
4615
|
+
function lineTypeLayerOptions(layer) {
|
|
4616
|
+
if (opts.layerOptions && opts.layerOptions[layer] && opts.layerOptions[layer].lineType) {
|
|
4617
|
+
return opts.layerOptions[layer].lineType;
|
|
4618
|
+
}
|
|
4619
|
+
return "CONTINUOUS";
|
|
4620
|
+
}
|
|
4615
4621
|
function defaultLayer(pathContext, parentLayer) {
|
|
4616
4622
|
var layerId = (pathContext && pathContext.layer) || parentLayer || '0';
|
|
4617
4623
|
if (layerIds.indexOf(layerId) < 0) {
|
|
@@ -4621,9 +4627,10 @@ var MakerJs;
|
|
|
4621
4627
|
}
|
|
4622
4628
|
var map = {};
|
|
4623
4629
|
map[MakerJs.pathType.Line] = function (line, offset, layer) {
|
|
4630
|
+
var layerId = defaultLayer(line, layer);
|
|
4624
4631
|
var lineEntity = {
|
|
4625
4632
|
type: "LINE",
|
|
4626
|
-
layer:
|
|
4633
|
+
layer: layerId,
|
|
4627
4634
|
vertices: [
|
|
4628
4635
|
{
|
|
4629
4636
|
x: MakerJs.round(line.origin[0] + offset[0], opts.accuracy),
|
|
@@ -4635,24 +4642,28 @@ var MakerJs;
|
|
|
4635
4642
|
}
|
|
4636
4643
|
]
|
|
4637
4644
|
};
|
|
4645
|
+
lineEntity.lineType = lineTypeLayerOptions(layerId);
|
|
4638
4646
|
return lineEntity;
|
|
4639
4647
|
};
|
|
4640
4648
|
map[MakerJs.pathType.Circle] = function (circle, offset, layer) {
|
|
4649
|
+
var layerId = defaultLayer(circle, layer);
|
|
4641
4650
|
var circleEntity = {
|
|
4642
4651
|
type: "CIRCLE",
|
|
4643
|
-
layer:
|
|
4652
|
+
layer: layerId,
|
|
4644
4653
|
center: {
|
|
4645
4654
|
x: MakerJs.round(circle.origin[0] + offset[0], opts.accuracy),
|
|
4646
4655
|
y: MakerJs.round(circle.origin[1] + offset[1], opts.accuracy)
|
|
4647
4656
|
},
|
|
4648
4657
|
radius: MakerJs.round(circle.radius, opts.accuracy)
|
|
4649
4658
|
};
|
|
4659
|
+
circleEntity.lineType = lineTypeLayerOptions(layerId);
|
|
4650
4660
|
return circleEntity;
|
|
4651
4661
|
};
|
|
4652
4662
|
map[MakerJs.pathType.Arc] = function (arc, offset, layer) {
|
|
4663
|
+
var layerId = defaultLayer(arc, layer);
|
|
4653
4664
|
var arcEntity = {
|
|
4654
4665
|
type: "ARC",
|
|
4655
|
-
layer:
|
|
4666
|
+
layer: layerId,
|
|
4656
4667
|
center: {
|
|
4657
4668
|
x: MakerJs.round(arc.origin[0] + offset[0], opts.accuracy),
|
|
4658
4669
|
y: MakerJs.round(arc.origin[1] + offset[1], opts.accuracy)
|
|
@@ -4661,6 +4672,7 @@ var MakerJs;
|
|
|
4661
4672
|
startAngle: MakerJs.round(arc.startAngle, opts.accuracy),
|
|
4662
4673
|
endAngle: MakerJs.round(arc.endAngle, opts.accuracy)
|
|
4663
4674
|
};
|
|
4675
|
+
arcEntity.lineType = lineTypeLayerOptions(layerId);
|
|
4664
4676
|
return arcEntity;
|
|
4665
4677
|
};
|
|
4666
4678
|
//TODO - handle scenario if any bezier seeds get passed
|
|
@@ -4682,6 +4694,7 @@ var MakerJs;
|
|
|
4682
4694
|
shape: c.chain.endless,
|
|
4683
4695
|
vertices: []
|
|
4684
4696
|
};
|
|
4697
|
+
polylineEntity.lineType = lineTypeLayerOptions(polylineEntity.layer);
|
|
4685
4698
|
c.chain.links.forEach(function (link, i) {
|
|
4686
4699
|
var bulge;
|
|
4687
4700
|
if (link.walkedPath.pathContext.type === MakerJs.pathType.Arc) {
|
|
@@ -4723,15 +4736,31 @@ var MakerJs;
|
|
|
4723
4736
|
name: layerId,
|
|
4724
4737
|
color: layerColor
|
|
4725
4738
|
};
|
|
4739
|
+
layerEntity.lineType = lineTypeLayerOptions(layerId);
|
|
4726
4740
|
return layerEntity;
|
|
4727
4741
|
}
|
|
4728
4742
|
function lineTypesOut() {
|
|
4743
|
+
// Dash pattern convention: positive = drawn segment, negative = gap, 0 can be dot.
|
|
4744
|
+
// patternLength is sum of absolute values.
|
|
4729
4745
|
var lineStyleTable = {
|
|
4730
4746
|
lineTypes: {
|
|
4731
4747
|
"CONTINUOUS": {
|
|
4732
4748
|
name: "CONTINUOUS",
|
|
4733
4749
|
description: "______",
|
|
4734
|
-
patternLength: 0
|
|
4750
|
+
patternLength: 0,
|
|
4751
|
+
elements: []
|
|
4752
|
+
},
|
|
4753
|
+
"DASHED": {
|
|
4754
|
+
name: "DASHED",
|
|
4755
|
+
description: "_ _ _ ",
|
|
4756
|
+
elements: [5, -2.5],
|
|
4757
|
+
patternLength: 7.5
|
|
4758
|
+
},
|
|
4759
|
+
"DOTTED": {
|
|
4760
|
+
name: "DOTTED",
|
|
4761
|
+
description: ". . . ",
|
|
4762
|
+
elements: [0.5, -1.0],
|
|
4763
|
+
patternLength: 1.5
|
|
4735
4764
|
}
|
|
4736
4765
|
}
|
|
4737
4766
|
};
|
|
@@ -4823,15 +4852,27 @@ var MakerJs;
|
|
|
4823
4852
|
}
|
|
4824
4853
|
dxf.push.apply(dxf, values);
|
|
4825
4854
|
}
|
|
4855
|
+
function appendLineType(entity) {
|
|
4856
|
+
var lt = entity.lineType;
|
|
4857
|
+
if (lt) {
|
|
4858
|
+
append("6", lt);
|
|
4859
|
+
}
|
|
4860
|
+
}
|
|
4826
4861
|
var map = {};
|
|
4827
4862
|
map["LINE"] = function (line) {
|
|
4828
|
-
append("0", "LINE", "8", line.layer
|
|
4863
|
+
append("0", "LINE", "8", line.layer);
|
|
4864
|
+
appendLineType(line);
|
|
4865
|
+
append("10", line.vertices[0].x, "20", line.vertices[0].y, "11", line.vertices[1].x, "21", line.vertices[1].y);
|
|
4829
4866
|
};
|
|
4830
4867
|
map["CIRCLE"] = function (circle) {
|
|
4831
|
-
append("0", "CIRCLE", "8", circle.layer
|
|
4868
|
+
append("0", "CIRCLE", "8", circle.layer);
|
|
4869
|
+
appendLineType(circle);
|
|
4870
|
+
append("10", circle.center.x, "20", circle.center.y, "40", circle.radius);
|
|
4832
4871
|
};
|
|
4833
4872
|
map["ARC"] = function (arc) {
|
|
4834
|
-
append("0", "ARC", "8", arc.layer
|
|
4873
|
+
append("0", "ARC", "8", arc.layer);
|
|
4874
|
+
appendLineType(arc);
|
|
4875
|
+
append("10", arc.center.x, "20", arc.center.y, "40", arc.radius, "50", arc.startAngle, "51", arc.endAngle);
|
|
4835
4876
|
};
|
|
4836
4877
|
//TODO - handle scenario if any bezier seeds get passed
|
|
4837
4878
|
//map[pathType.BezierSeed]
|
|
@@ -4842,7 +4883,9 @@ var MakerJs;
|
|
|
4842
4883
|
}
|
|
4843
4884
|
};
|
|
4844
4885
|
map["POLYLINE"] = function (polyline) {
|
|
4845
|
-
append("0", "POLYLINE", "8", polyline.layer
|
|
4886
|
+
append("0", "POLYLINE", "8", polyline.layer);
|
|
4887
|
+
appendLineType(polyline);
|
|
4888
|
+
append("66", 1, "70", polyline.shape ? 1 : 0);
|
|
4846
4889
|
polyline.vertices.forEach(function (vertex) { return map["VERTEX"](vertex); });
|
|
4847
4890
|
append("0", "SEQEND");
|
|
4848
4891
|
};
|
|
@@ -4865,11 +4908,14 @@ var MakerJs;
|
|
|
4865
4908
|
table(layersOut);
|
|
4866
4909
|
}
|
|
4867
4910
|
function layerOut(layer) {
|
|
4868
|
-
|
|
4911
|
+
var lt = (layer.lineType || "CONTINUOUS");
|
|
4912
|
+
append("0", "LAYER", "2", layer.name, "70", "0", "62", layer.color, "6", lt);
|
|
4869
4913
|
}
|
|
4870
4914
|
function lineTypeOut(lineType) {
|
|
4915
|
+
var elements = ((lineType.elements) || []);
|
|
4871
4916
|
append("0", "LTYPE", "72", //72 Alignment code; value is always 65, the ASCII code for A
|
|
4872
|
-
"65", "70", "
|
|
4917
|
+
"65", "70", "0", "2", lineType.name, "3", lineType.description, "73", elements.length, "40", lineType.patternLength);
|
|
4918
|
+
elements.forEach(function (e) { return append("49", e); });
|
|
4873
4919
|
}
|
|
4874
4920
|
function lineTypesOut() {
|
|
4875
4921
|
var lineTypeTableName = 'lineType';
|
|
@@ -6020,7 +6066,7 @@ var MakerJs;
|
|
|
6020
6066
|
var beziers;
|
|
6021
6067
|
if (opts.unifyBeziers) {
|
|
6022
6068
|
beziers = getBezierModels(modelContext);
|
|
6023
|
-
swapBezierPathsWithSeeds(beziers, true);
|
|
6069
|
+
swapBezierPathsWithSeeds(beziers, true, opts.pointMatchingDistance);
|
|
6024
6070
|
}
|
|
6025
6071
|
model.walk(modelContext, walkOptions);
|
|
6026
6072
|
var _loop_3 = function (layer_2) {
|
|
@@ -6057,7 +6103,7 @@ var MakerJs;
|
|
|
6057
6103
|
_loop_3(layer_2);
|
|
6058
6104
|
}
|
|
6059
6105
|
if (beziers) {
|
|
6060
|
-
swapBezierPathsWithSeeds(beziers, false);
|
|
6106
|
+
swapBezierPathsWithSeeds(beziers, false, opts.pointMatchingDistance);
|
|
6061
6107
|
}
|
|
6062
6108
|
if (opts.byLayers) {
|
|
6063
6109
|
return chainsByLayer;
|
|
@@ -6154,7 +6200,7 @@ var MakerJs;
|
|
|
6154
6200
|
/**
|
|
6155
6201
|
* @private
|
|
6156
6202
|
*/
|
|
6157
|
-
function swapBezierPathsWithSeeds(beziers, swap) {
|
|
6203
|
+
function swapBezierPathsWithSeeds(beziers, swap, pointMatchingDistance) {
|
|
6158
6204
|
var tempKey = 'tempPaths';
|
|
6159
6205
|
var tempLayerKey = 'tempLayer';
|
|
6160
6206
|
beziers.forEach(function (wm) {
|
|
@@ -6166,7 +6212,7 @@ var MakerJs;
|
|
|
6166
6212
|
b.layer = wm.layer;
|
|
6167
6213
|
}
|
|
6168
6214
|
//use seeds as path, hide the arc paths from findChains()
|
|
6169
|
-
var bezierPartsByLayer = MakerJs.models.BezierCurve.getBezierSeeds(b, { byLayers: true });
|
|
6215
|
+
var bezierPartsByLayer = MakerJs.models.BezierCurve.getBezierSeeds(b, { byLayers: true, pointMatchingDistance: pointMatchingDistance });
|
|
6170
6216
|
for (var layer in bezierPartsByLayer) {
|
|
6171
6217
|
var bezierSeeds = bezierPartsByLayer[layer];
|
|
6172
6218
|
if (bezierSeeds.length > 0) {
|
|
@@ -8585,7 +8631,7 @@ var MakerJs;
|
|
|
8585
8631
|
/**
|
|
8586
8632
|
* @private
|
|
8587
8633
|
*/
|
|
8588
|
-
function getActualBezierRange(curve, arc, endpoints, offset) {
|
|
8634
|
+
function getActualBezierRange(curve, arc, endpoints, offset, pointMatchingDistance) {
|
|
8589
8635
|
var b = getScratch(curve.seed);
|
|
8590
8636
|
var tPoints = [arc.bezierData.startT, arc.bezierData.endT].map(function (t) { return new TPoint(b, t, offset); });
|
|
8591
8637
|
var ends = endpoints.slice();
|
|
@@ -8594,7 +8640,7 @@ var MakerJs;
|
|
|
8594
8640
|
if (endpointDistancetoStart[0] > endpointDistancetoStart[1])
|
|
8595
8641
|
ends.reverse();
|
|
8596
8642
|
for (var i = 2; i--;) {
|
|
8597
|
-
if (!MakerJs.measure.isPointEqual(ends[i], tPoints[i].point)) {
|
|
8643
|
+
if (!MakerJs.measure.isPointEqual(ends[i], tPoints[i].point, pointMatchingDistance)) {
|
|
8598
8644
|
return null;
|
|
8599
8645
|
}
|
|
8600
8646
|
}
|
|
@@ -8603,13 +8649,13 @@ var MakerJs;
|
|
|
8603
8649
|
/**
|
|
8604
8650
|
* @private
|
|
8605
8651
|
*/
|
|
8606
|
-
function getChainBezierRange(curve, c, layer, addToLayer) {
|
|
8652
|
+
function getChainBezierRange(curve, c, layer, addToLayer, pointMatchingDistance) {
|
|
8607
8653
|
var endLinks = [c.links[0], c.links[c.links.length - 1]];
|
|
8608
8654
|
if (endLinks[0].walkedPath.pathContext.bezierData.startT > endLinks[1].walkedPath.pathContext.bezierData.startT) {
|
|
8609
8655
|
MakerJs.chain.reverse(c);
|
|
8610
8656
|
endLinks.reverse();
|
|
8611
8657
|
}
|
|
8612
|
-
var actualBezierRanges = endLinks.map(function (endLink) { return getActualBezierRange(curve, endLink.walkedPath.pathContext, endLink.endPoints, endLink.walkedPath.offset); });
|
|
8658
|
+
var actualBezierRanges = endLinks.map(function (endLink) { return getActualBezierRange(curve, endLink.walkedPath.pathContext, endLink.endPoints, endLink.walkedPath.offset, pointMatchingDistance); });
|
|
8613
8659
|
var result = {
|
|
8614
8660
|
startT: actualBezierRanges[0] ? actualBezierRanges[0].startT : null,
|
|
8615
8661
|
endT: actualBezierRanges[1] ? actualBezierRanges[1].endT : null
|
|
@@ -8771,7 +8817,7 @@ var MakerJs;
|
|
|
8771
8817
|
};
|
|
8772
8818
|
MakerJs.model.findChains(curve, function (chains, loose, layer) {
|
|
8773
8819
|
chains.forEach(function (c) {
|
|
8774
|
-
var range = getChainBezierRange(curve, c, layer, addToLayer);
|
|
8820
|
+
var range = getChainBezierRange(curve, c, layer, addToLayer, options.pointMatchingDistance);
|
|
8775
8821
|
if (range) {
|
|
8776
8822
|
var b = getScratch(curve.seed);
|
|
8777
8823
|
var piece = b.split(range.startT, range.endT);
|
|
@@ -8786,7 +8832,7 @@ var MakerJs;
|
|
|
8786
8832
|
//bezier is linear
|
|
8787
8833
|
return addToLayer(wp.pathContext, layer, true);
|
|
8788
8834
|
}
|
|
8789
|
-
var range = getActualBezierRange(curve, wp.pathContext, MakerJs.point.fromPathEnds(wp.pathContext), wp.offset);
|
|
8835
|
+
var range = getActualBezierRange(curve, wp.pathContext, MakerJs.point.fromPathEnds(wp.pathContext), wp.offset, options.pointMatchingDistance);
|
|
8790
8836
|
if (range) {
|
|
8791
8837
|
var b = getScratch(curve.seed);
|
|
8792
8838
|
var piece = b.split(range.startT, range.endT);
|
|
@@ -9886,5 +9932,5 @@ var MakerJs;
|
|
|
9886
9932
|
];
|
|
9887
9933
|
})(models = MakerJs.models || (MakerJs.models = {}));
|
|
9888
9934
|
})(MakerJs || (MakerJs = {}));
|
|
9889
|
-
MakerJs.version = "0.18.
|
|
9935
|
+
MakerJs.version = "0.18.2";
|
|
9890
9936
|
var Bezier = require('bezier-js');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "makerjs",
|
|
3
|
-
"version": "0.18.
|
|
3
|
+
"version": "0.18.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",
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
"@jscad/csg": "^0.3.7",
|
|
98
98
|
"@jscad/stl-serializer": "^0.1.0",
|
|
99
99
|
"@types/graham_scan": "^1.0.28",
|
|
100
|
-
"dxf-parser-typings": "^1.3.
|
|
100
|
+
"dxf-parser-typings": "^1.3.1"
|
|
101
101
|
},
|
|
102
102
|
"dependencies": {
|
|
103
103
|
"@danmarshall/jscad-typings": "^1.0.0",
|