function FlaredSpokes(outerRadius, innerRadius, count, spokeWidth, flareWidth, innerFillet, outerFillet, addRing) { var a = 360 / count; var halfSpokeWidth = spokeWidth / 2; var halfFlareWidth = flareWidth / 2; var flareLine = new makerjs.paths.Line([halfFlareWidth, 0], [halfFlareWidth, outerRadius]); var outerCircle = new makerjs.paths.Circle([0, 0], outerRadius); var int = makerjs.path.intersection(flareLine, outerCircle); var flareY = int.intersectionPoints[0][1]; var points = [ [halfSpokeWidth, 0], [halfFlareWidth, flareY], [halfFlareWidth, outerRadius + 1], [-halfFlareWidth, outerRadius + 1], [-halfFlareWidth, flareY], [-halfSpokeWidth, 0] ]; var spoke = new makerjs.models.ConnectTheDots(true, points); var wedge = new SpokeWedge(spoke, outerRadius, innerRadius, count); if (innerFillet) { var innerFilletArc = makerjs.path.fillet(wedge.paths.ShapeLine1, wedge.paths.ShapeLine5, innerFillet); if (innerFilletArc) { wedge.paths.innerFillet = innerFilletArc; } else { wedge.paths.innerFillet1 = makerjs.path.fillet(wedge.paths.ShapeLine1, wedge.paths.Ring_inner, innerFillet); wedge.paths.innerFillet2 = makerjs.path.fillet(wedge.paths.ShapeLine5, wedge.paths.Ring_inner, innerFillet); } } if (outerFillet) { wedge.paths.outerFillet1 = makerjs.path.fillet(wedge.paths.ShapeLine1, wedge.paths.Ring_outer, outerFillet); wedge.paths.outerFillet2 = makerjs.path.fillet(wedge.paths.ShapeLine5, 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) { var ringWidth = (spokeWidth + flareWidth) / 2; this.models.ring2 = new makerjs.models.Ring(outerRadius + ringWidth, innerRadius - ringWidth); } }
function DoubleBandClamp(radius1, radius2, band, tabWidth, tabHeight, gap, roundFillet, capFillet, betweenFillet) { function tryFillet(half, fName, pName1, pName2, value) { var fillet = makerjs.path.fillet(half.paths[pName1], half.paths[pName2], value); 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 }; }
function tryFillet(half, fName, pName1, pName2, value) { var fillet = makerjs.path.fillet(half.paths[pName1], half.paths[pName2], value); if (fillet) { half.paths[fName] = fillet; } }