JSFiddle - React, Tailwind, and code Playground
HTML
<body>
<pre>
<input type="button" id="downloadButton" value="Download this G-code" >
<div id="spring"></div>
</pre>
</body>
JavaScript
"use strict"
// Helper functions to shim java library calls into javascript.
var outg = {
outstring: "",
println: function (str) {
this.outstring += str + "\r\n";
}
};
// Simple replacement for String.Format that only replaces float entities with js text representations of variables (truncated)
var String = {
format: function (instr, ...vals) {
for (var curr = 0; curr < vals.length; curr++) {
var curstr = curr == 0 ? '' : curr + 1;
var replaceStr = "%" + curstr + "f";
var value = "" + vals[curr];
var dotPos = value.indexOf('.');
if (dotPos != -1) {
instr = instr.replace(replaceStr, value.substring(0, dotPos + 7));
} else {
instr = instr.replace(replaceStr, value);
}
}
return instr;
},
printf: function (fstring, ...vals) {
outg.println(String.format(fstring, ...vals));
}
};
var jsMath = {
toRadians: function (val) {
return val * Math.PI / 180;
}
};
var MagicSpring = {};
MagicSpring.fn = { ancestor: MagicSpring };
MagicSpring.fn.download = function(){
var a = document.body.appendChild(
document.createElement("a")
);
a.download = "spring.gcode";
a.href = "data:text/plain," + document.getElementById("spring").innerHTML; // Grab the HTML
a.click(); // Trigger a click on the element
}
MagicSpring.fn.iteration2 = function (i, xf, p, sel) {
p.angle = p.delta * i;
p.x2 = Math.cos(jsMath.toRadians(p.angle)) * sel;
p.y2 = Math.sin(jsMath.toRadians(p.angle)) * sel;
p.x2 += p.xo;
p.y2 += p.yo;
p.z2 = p.z1 + (p.lh / (360 / p.delta));
p.dx = p.x2 - p.x1;
p.dy = p.y2 - p.y1;
p.dz = p.z2 - p.z1;
p.de = p.extr * xf(i, p) * (Math.sqrt(p.dx * p.dx + p.dy * p.dy + p.dz * p.dz));
p.e += p.de;
String.printf("G1 X%f Y%2f Z%3f E%4f", p.x2, p.y2, p.z2, p.e);
p.x1 = p.x2; p.y1 = p.y2; p.z1 = p.z2;
}
MagicSpring.fn.iteration = function (i, xf, p) {
MagicSpring.fn.iteration2(i, xf, p, p.or);
i++;
MagicSpring.fn.iteration2(i,...