Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
function WindowArch(width, columns, extra, split, spacing, fillet) {
var radius = width / 2;
var column = (width + spacing) / columns;
var dome = new makerjs.models.Dome(width, radius);
var wireframe = new Wireframe(columns, column, extra, radius, split);
var frame = makerjs.model.expandPaths(wireframe, spacing / 2);
this.models = {
dome: dome,
frame: frame
};
makerjs.model.combineSubtraction(dome, frame);
//need to simplify to get the maximum fillets
makerjs.model.simplify(this);
var chains = makerjs.model.findChains(this);
chains.forEach(function (chain, i) {
var fillets = makerjs.chain.fillet(chain, fillet);
if (!fillets) return;
frame.models["fillets" + i] = fillets;
});
}
.addTo(this, 'dome3')
.moveRelative([0, height])
.$reset()
.clone()
.rotate(180)
.addTo(this, 'dome4')
.moveRelative([width, height])
;
var outer = new makerjs.models.Rectangle(width, height);
makerjs.model.combineUnion(this, outer);
this.models.outer = outer;
var c = makerjs.model.findSingleChain(this);
var fillets = makerjs.chain.fillet(c, fillet);
this.models.fillets = fillets;
this.models.bolts = new makerjs.models.BoltRectangle(width, height, holeRadius);
}
makerjs.model.center(textModel);
makerjs.model.center(bolts);
//make a rectangle around the bolts
var Rect = rounded ? makerjs.models.RoundRectangle : makerjs.models.Rectangle;
var rect = new Rect(bolts, boltMargin);
//save all of these in the model
this.models = {
text: textModel,
rect: rect,
bolts: bolts
};
//move everything to [0, 0]
makerjs.model.zero(this);
this.units = makerjs.unitType.Millimeter;
}
arc.endAngle = makerjs.angle.mirror(arc.endAngle, true, true);
arc.origin = origin;
}
findAndFlip('BottomLeft', [0, 0]);
findAndFlip('BottomRight', [innerW, 0]);
findAndFlip('TopLeft', [0, innerH]);
findAndFlip('TopRight', [innerW, innerH]);
}
var outer = new makerjs.models.RoundRectangle(w, h, outerRadius);
var bolts = new makerjs.models.BoltRectangle(w - 2 * rim, h - 2 * rim, boltRadius);
bolts.origin = [rim, rim];
var logo = makerjs.model.scale(new makerjs_logo(1.06, .3, .35, logoOutline, 8.3, .65, logoAngle, 1, 2.7, 1.32, 2.31), logoScale);
hCenter(logo, logoY);
var text = makerjs.model.scale(new makerjs_monotext('MAKERJS.ORG'), textScale);
var textW = hCenter(text, textY);
var tabW = textW + tabMargin;
var tab = new makerjs.models.RoundRectangle(tabW, tabHeight, tabR);
hCenter(tab, rim - tabR);
var innerW = w - 2 * rim;
var innerH = h - 2 * rim;
var inner = new makerjs.models.RoundRectangle(innerW, innerH, rim);
inner.origin = [rim, rim];
flipArcs(inner);
} else {
wedge.paths.innerFillet1 = makerjs.path.fillet(wedge.paths.ShapeLine2, wedge.paths.Ring_inner, innerFillet);
wedge.paths.innerFillet2 = makerjs.path.fillet(wedge.paths.ShapeLine4, wedge.paths.Ring_inner, innerFillet);
}
}
if (outerFillet) {
wedge.paths.outerFillet1 = makerjs.path.fillet(wedge.paths.ShapeLine2, wedge.paths.Ring_outer, outerFillet);
wedge.paths.outerFillet2 = makerjs.path.fillet(wedge.paths.ShapeLine4, wedge.paths.Ring_outer, outerFillet);
}
this.models = {};
for (var i = 0; i < count; i++) {
var iwedge = makerjs.cloneObject(wedge);
this.models['wedge' + i] = makerjs.model.rotate(iwedge, i * a, [0, 0]);
}
if (addRing) {
this.models.ring2 = new makerjs.models.Ring(outerRadius + spokeWidth, innerRadius - spokeWidth);
}
}
.moveRelative([width, 0])
.$reset()
.clone()
.rotate(270)
.addTo(this, 'dome3')
.moveRelative([0, height])
.$reset()
.clone()
.rotate(180)
.addTo(this, 'dome4')
.moveRelative([width, height])
;
var outer = new makerjs.models.Rectangle(width, height);
makerjs.model.combineUnion(this, outer);
this.models.outer = outer;
var c = makerjs.model.findSingleChain(this);
var fillets = makerjs.chain.fillet(c, fillet);
this.models.fillets = fillets;
this.models.bolts = new makerjs.models.BoltRectangle(width, height, holeRadius);
}
if (fillet) {
half.paths[fName] = fillet;
}
}
function filletAll(half) {
if (gap) {
tryFillet(half, 'innerFillet', 'bandInner', 'tabInner', roundFillet);
}
tryFillet(half, 'outerFillet', 'bandOuter', 'tabOuter', roundFillet);
tryFillet(half, 'tabInnerFillet', 'tabInner', 'tabCap', capFillet);
tryFillet(half, 'tabOuterFillet', 'tabOuter', 'tabCap', capFillet);
}
var right = makerjs.model.zero(new HalfBandClamp(radius1, band, tabWidth, tabHeight, gap));
filletAll(right);
var left = makerjs.model.mirror(makerjs.model.zero(new HalfBandClamp(radius2, band, tabWidth, tabHeight, gap)), true, false);
filletAll(left);
this.models = {
right: right,
left: left
};
makerjs.model.originate(this);
var filletBetween = makerjs.path.fillet(right.paths['bandOuter'], left.paths['bandOuter'], betweenFillet);
this.paths = {
filletBetween: filletBetween
circleB: new makerjs.paths.Circle(arcRadius - h2)
};
}
//move each character to a percentage of the total arc
var span = makerjs.angle.ofArcSpan(arc);
for (var i = 0; i < text.length; i++) {
var char = textModel.models[i];
//get the x distance of each character as a percentage
var distFromFirst = char.origin[0] - left;
var center = distFromFirst / textWidth;
//set a new origin at the center of the text
var o = makerjs.point.add(char.origin, [0, h2]);
makerjs.model.originate(char, o);
//project the character x position into an angle
var angle = center * span;
var angleFromEnd = onTop ? endAngle - angle : startAngle + angle;
var p = makerjs.point.fromAngleOnCircle(angleFromEnd, arc);
char.origin = p;
//rotate the char to 90 from tangent
makerjs.model.rotate(char, onTop ? angleFromEnd - 90 : angleFromEnd + 90, p);
}
}
function WindowArchGrid(width, height, rows, columns, extra, split, spacing, fillet, outerFrame, outerFrameWidth) {
var column = (width - (columns - 1) * spacing) / columns;
var row = (height - (rows) * spacing + spacing / 2) / rows;
var cell = new makerjs.models.RoundRectangle(column, row, fillet);
var grid = makerjs.layout.cloneToGrid(cell, columns, rows, spacing);
makerjs.model.center(grid, true, false);
grid.origin[1] = -height;
this.models = {
arch: new WindowArch(width, columns, extra, split, spacing, fillet),
grid: grid
};
if (outerFrame) {
var frame = new makerjs.models.Dome(width + 2 * outerFrameWidth, height + width / 2 + 2 * outerFrameWidth);
frame.origin = [0, -height - outerFrameWidth];
this.models.frame = frame;
}
}
function starboxInner(width, height, holeRadius, rimThickness) {
var mm = makerjs.model;
var corner = new starboxCorner(holeRadius, rimThickness);
this.models = {
bottomLeft: corner,
bottomRight: mm.move(mm.mirror(corner, true, false), [width, 0]),
topLeft: mm.move(mm.mirror(corner, false, true), [0, height]),
topRight: mm.move(mm.mirror(corner, true, true), [width, height])
};
var line = makerjs.paths.Line;
var rim = Math.min(rimThickness, holeRadius);
var d = 2 * holeRadius + rim;
this.paths = {
bottom: new line([d, -holeRadius], [width - d, -holeRadius]),
top: new line([d, height + holeRadius], [width - d, height + holeRadius]),
left: new line([-holeRadius, d], [-holeRadius, height - d]),
right: new line([width + holeRadius, d], [width + holeRadius, height - d])
};