Merge gcode processing into one function

Instead of functions for each gcode generator, one function that processes common changes plus specific for each test. Much less code and easier to add future tests.
This commit is contained in:
lawgicau
2021-07-15 00:25:56 +10:00
parent 629778e62f
commit 37752fd6df
9 changed files with 725 additions and 319 deletions

View File

@ -50,7 +50,7 @@
<li>1.75mm filament (However <b>M221 S38</b> for 2.85 mm filament and <b>M221 S34</b> for 3.0 mm filament can be applied in the custom start gcode field as compensation)</b></li>
<li>0.4mm nozzle and 0.2mm layer height, although now additional configurations are now possible</li>
<li>0.4mm nozzle</li>
<li>Defaut feedrate of 60mm/sec, 50% for perimeters, 80% for solid infill, 50% first layer.</li>
<li>Defaut feedrate of 60mm/sec, 60% for perimeters, 80% for solid infill, 50% first layer.</li>
<li>Travel moves of 100 mm/sec for X/Y and 20 mm/sec for Z</li>
<li>Flow rate of 0.9. Please see the note on the bottom of the <a href="calibration.html#flow" target="_blank">flow</a> tab for instructions on adapting this to your printer.</li>
<li>Nozzle priming has been turned off to avoid bed clips or problems with deltas. Use the custom start gcode feature to insert the priming dequence from your slicer profile.</li>
@ -119,7 +119,7 @@
</ul>
<p>Acceleration test:</p>
<ul>
<li>Skirt off and instead a 5 perimeter wide brim</li>
<li>5 perimeter wide brim instead of a skirt</li>
<li>0% infill</li>
<li>0 top and bottom layers</li>
<li>2 perimeters</li>
@ -253,7 +253,7 @@
<script>
createForm("firstlayer");
</script>
<p><input type="button" onclick="processFirstlayer()" value="Download Gcode"></p>
<p><input type="button" onclick="processGcode(form)" value="Download Gcode"></p>
<p><input type="button" onclick="resetFormToDefaults(form)" value="Reset parameters"> <input type="button" onclick="outputSettings(form)" value="Output Settings Summary"></p>
</form>
<h2>Interpreting Results:</h2>
@ -279,7 +279,7 @@
<script>
createForm("baseline");
</script>
<p><input type="button" onclick="processBaseline()" value="Download Gcode"></p>
<p><input type="button" onclick="processGcode(form)" value="Download Gcode"></p>
<p><input type="button" onclick="resetFormToDefaults(form)" value="Reset parameters"> <input type="button" onclick="outputSettings(form)" value="Output Settings Summary"></p>
</form>
<h2>Interpreting Results:</h2>
@ -689,7 +689,7 @@
<script>
createForm("retraction");
</script>
<p><input type="button" onclick="processRetraction()" value="Download Gcode"></p>
<p><input type="button" onclick="processGcode(form)" value="Download Gcode"></p>
<p><input type="button" onclick="resetFormToDefaults(form)" value="Reset parameters"> <input type="button" onclick="outputSettings(form)" value="Output Settings Summary"></p>
</form>
<h2>Interpreting Results:</h2>
@ -726,7 +726,7 @@
<script>
createForm("temperature");
</script>
<p><input type="button" onclick="processTemperature()" value="Download Gcode"></p>
<p><input type="button" onclick="processGcode(form)" value="Download Gcode"></p>
<p><input type="button" onclick="resetFormToDefaults(form)" value="Reset parameters"> <input type="button" onclick="outputSettings(form)" value="Output Settings Summary"></p>
</form>
<h2>Interpreting Results:</h2>
@ -828,7 +828,7 @@
<script>
createForm("acceleration");
</script>
<p><input type="button" onclick="processAcceleration()" value="Download Gcode"></p>
<p><input type="button" onclick="processGcode(form)" value="Download Gcode"></p>
<p><input type="button" onclick="resetFormToDefaults(form)" value="Reset parameters"> <input type="button" onclick="outputSettings(form)" value="Output Settings Summary"></p>
</form>
<h2>Interpreting Results:</h2>

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,6 @@
var baseline_40_20 = `
var baseline = [];
baseline["40_20"] = `
;process Process-1
;layer 1, Z = 0.200
T0

View File

@ -6,14 +6,13 @@ M82
M106 S0
M140 S60
M190 S60
M104 S210 T0
M109 S210 T0
;temp0a
;temp0b
G28 ; home all axes
;G29 ; probe ABL
;M420 S1 ; restore ABL mesh
;customstart
G0 Z3; fix for delta printers that home at max
`;
G0 Z3; fix for delta printers that home at max`;
var commonEnd = `G28 X0 ; home X axis
M106 S0 ; turn off cooling fan

View File

@ -293,6 +293,7 @@ var endGcode = `<h4>Additional end gcode</h4>
</div>`;
function createForm(n){
document.write('<input type="hidden" name="description" value="'+n+'">')
document.write(nozzleLayer);
document.write(startGcode);
document.write(abl);

View File

@ -1,4 +1,7 @@
var originalSquare = `;process Process-1
var firstlayer = [];
firstlayer["40_20"] = `
;process Process-1
;layer 1, Z = 0.200
T0
G92 E0.0000

View File

@ -101,6 +101,403 @@ function toggleJ() {
$(".jdtd").show();
$(".jerktd").hide();
}
}
function processGcode(formName) {
var name = formName.name;
var description = formName.description.value;
var nozzleLayer = formName.nozzleLayer.value;
var bedTemp = formName.bedtemp.value;
var centre = formName.centre.checked;
if(name == "firstlayerForm"){
var bedX = formName.bedx.value - 50;
var bedY = formName.bedy.value - 50;
var bedRad = Math.round((formName.beddia.value)/2);
} else {
var bedX = Math.round((formName.bedx.value-100)/2);
var bedY = Math.round((formName.bedy.value-100)/2);
}
var abl = formName.abl.value;
var customStart = formName.startgcode.value;
var customEnd = formName.endgcode.value;
if(name != "firstlayerForm"){
var fanLayer = formName.fanLayer.value;
var fanPercentage = formName.fanSpeed.value;
var fanSpeed = Math.round(fanPercentage*2.55);
}
if(name == "temperatureForm"){
var hotendTemp = formName.temp_a0.value;
var a1 = formName.temp_a1.value;
var b1 = formName.temp_b1.value;
var c1 = formName.temp_c1.value;
var d1 = formName.temp_d1.value;
var e1 = formName.temp_e1.value;
} else {
var hotendTemp = formName.hotendtemp.value;
}
// first layer test specifics
if(name == "firstlayerForm"){
var margin = parseInt(formName.margin.value);
var offsets = [0,0,0,0,0,0,0,0,0,0];
var delt = 30;
var xy = 30;
var squares;
if(centre == true) {
// left
offsets[0] = (bedRad*-1) - 50 + delt + margin;
offsets[1] = -50;
// bottom
offsets[2] = -50;
offsets[3] = (bedRad*-1) - 50 + delt + margin;
// centre
offsets[4] = -50;
offsets[5] = -50;
// top
offsets[6] = -50;
offsets[7] = (bedRad - 50 - delt) - margin;
//right
offsets[8] = (bedRad - 50 - delt) - margin;
offsets[9] = -50;
} else {
// bottom left
offsets[0] = 0 + xy - 50 + margin;
offsets[1] = 0 + xy - 50 + margin;
// top left
offsets[2] = 0 + xy - 50 + margin;
offsets[3] = bedY - xy - margin;
// centre
offsets[4] = bedX/2 - 25;
offsets[5] = bedY/2 - 25;
// bottom right
offsets[6] = bedX - xy - margin;
offsets[7] = 0 + xy - 50 + margin;
// top right
offsets[8] = bedX - xy - margin;
offsets[9] = bedY - xy - margin;
}
}
// collect retraction inputs
if(name == "retractionForm") {
var a1 = formName.ret_a1.value;
var a2 = formName.ret_a2.value*60;
var a3 = formName.ret_a3.value;
var a4 = formName.ret_a4.value*60;
var a5 = formName.ret_a5.value;
var b1 = formName.ret_b1.value;
var b2 = formName.ret_b2.value*60;
var b3 = formName.ret_b3.value;
var b4 = formName.ret_b4.value*60;
var b5 = formName.ret_b5.value;
var c1 = formName.ret_c1.value;
var c2 = formName.ret_c2.value*60;
var c3 = formName.ret_c3.value;
var c4 = formName.ret_c4.value*60;
var c5 = formName.ret_c5.value;
var d1 = formName.ret_d1.value;
var d2 = formName.ret_d2.value*60;
var d3 = formName.ret_d3.value;
var d4 = formName.ret_d4.value*60;
var d5 = formName.ret_d5.value;
var e1 = formName.ret_e1.value;
var e2 = formName.ret_e2.value*60;
var e3 = formName.ret_e3.value;
var e4 = formName.ret_e4.value*60;
var e5 = formName.ret_e5.value;
var f1 = formName.ret_f1.value;
var f2 = formName.ret_f2.value*60;
var f3 = formName.ret_f3.value;
var f4 = formName.ret_f4.value*60;
var f5 = formName.ret_f5.value;
} else {
var retDist = formName.retdist.value;
var retDistExtra = formName.retdistextra.value;
var retSpeed = formName.retspeed.value*60;
var zhop = formName.zhop.value;
}
// collect acceleration inputs
if(name == "accelerationForm"){
var feed = formName.feedrate.value*60;
var jerk_or_jd = formName.jerk_or_jd.value;
var a1 = formName.accel_a1.value;
var a2 = formName.accel_a2.value;
var a3 = formName.accel_a3.value;
var a4 = formName.accel_a4.value;
var a5 = formName.accel_a5.value;
var b1 = formName.accel_b1.value;
var b2 = formName.accel_b2.value;
var b3 = formName.accel_b3.value;
var b4 = formName.accel_b4.value;
var b5 = formName.accel_b5.value;
var c1 = formName.accel_c1.value;
var c2 = formName.accel_c2.value;
var c3 = formName.accel_c3.value;
var c4 = formName.accel_c4.value;
var c5 = formName.accel_c5.value;
var d1 = formName.accel_d1.value;
var d2 = formName.accel_d2.value;
var d3 = formName.accel_d3.value;
var d4 = formName.accel_d4.value;
var d5 = formName.accel_d5.value;
var e1 = formName.accel_e1.value;
var e2 = formName.accel_e2.value;
var e3 = formName.accel_e3.value;
var e4 = formName.accel_e4.value;
var e5 = formName.accel_e5.value;
var f1 = formName.accel_f1.value;
var f2 = formName.accel_f2.value;
var f3 = formName.accel_f3.value;
var f4 = formName.accel_f4.value;
var f5 = formName.accel_f5.value;
}
// process start gcode
// bed temp
var gcode = commonStart;
if(bedTemp == 0){
gcode = gcode.replace(/M140 S60/g, "; no heated bed");
gcode = gcode.replace(/M190 S60/g, "; no heated bed");
} else {
gcode = gcode.replace(/M140 S60/g, "M140 S"+bedTemp+" ; custom bed temp");
gcode = gcode.replace(/M190 S60/g, "M190 S"+bedTemp+" ; custom bed temp");
}
// start hot end emp
if(abl != 4){
gcode = gcode.replace(/;temp0a/g, "M104 S"+hotendTemp+" T0 ; custom hot end temp");
gcode = gcode.replace(/;temp0b/g, "M109 S"+hotendTemp+" T0 ; custom hot end temp");
} else {
gcode = gcode.replace(/;temp0a/g, "; Prusa Mini");
gcode = gcode.replace(/;temp0b\n/g, "");
}
// abl
if(abl == 1){
gcode = gcode.replace(/;G29 ; probe ABL/, "G29 ; probe ABL");
}
if(abl == 2){
gcode = gcode.replace(/;M420 S1 ; restore ABL mesh/, "M420 S1 ; restore ABL mesh");
}
if(abl == 3){
gcode = gcode.replace(/G28 ; home all axes/, "G28 W ; home all without mesh bed level");
gcode = gcode.replace(/;G29 ; probe ABL/, "G80 ; mesh bed leveling");
}
if(abl == 4){
gcode = gcode.replace(/G28 ; home all axes/, "M109 S170 T0 ; probing temperature\nG28 ; home all");
gcode = gcode.replace(/;G29 ; probe ABL/, "G29 ; probe ABL");
gcode = gcode.replace(/;M420 S1 ; restore ABL mesh/, "M109 S"+hotendTemp+" T0 ; custom hot end temp");
}
if(abl == 5){
gcode = gcode.replace(/;G29 ; probe ABL/, "G29 L1 ; Load the mesh stored in slot 1\nG29 J ; Probe 3 points to tilt mesh");
}
// firstlayer test square array
if(name == "firstlayerForm"){
var originalSquare = firstlayer[nozzleLayer];
for(var i = 0; i <= 4; i++){
var square = "; squarez "+(i+1)+"\n"+originalSquare;
var firstlayerArray = square.split(/\n/g);
var regexp = /X[0-9\.]+/;
firstlayerArray.forEach(function(index, item){
if(firstlayerArray[item].search(/X/) > -1){
var value = parseFloat(firstlayerArray[item].match(regexp)[0].substring(1)) + offsets[i*2];
firstlayerArray[item] = firstlayerArray[item].replace(regexp, "X"+String(value));
}
});
var regexp = /Y[0-9\.]+/;
firstlayerArray.forEach(function(index, item){
if(firstlayerArray[item].search(/Y/) > -1){
var value = parseFloat(firstlayerArray[item].match(regexp)[0].substring(1)) + offsets[i*2+1];
firstlayerArray[item] = firstlayerArray[item].replace(regexp, "Y"+String(value))
}
});
square = firstlayerArray.join("\n");
squares += square;
}
gcode = gcode+squares;
}
// assign correct gcode source
if(name == "baselineForm"){
gcode += baseline[nozzleLayer];
}
if(name == "retractionForm"){
gcode += retraction[nozzleLayer];
}
if(name == "temperatureForm"){
gcode += temperature[nozzleLayer];
}
if(name == "accelerationForm"){
gcode += acceleration[nozzleLayer];
}
// add end common gcode
gcode += commonEnd;
if(name != "firstlayerForm"){
// strip original fan command
gcode = gcode.replace(/M106 S3/, ";");
// insert user fan starting layer and speed
switch(fanLayer){
case '2':
gcode = gcode.replace(/;fan2;/, "M106 S"+fanSpeed+"; custom fan "+fanPercentage+"% from layer 2");
break;
case '3':
gcode = gcode.replace(/;fan3;/, "M106 S"+fanSpeed+"; custom fan "+fanPercentage+"% from layer 3");
break;
case '5':
gcode = gcode.replace(/;fan5;/, "M106 S"+fanSpeed+"; custom fan "+fanPercentage+"% from layer 5");
break;
}
// insert user fan speed for resumption after 100% bridging
gcode = gcode.replace(/M106 S3/g, "M106 S"+fanSpeed+"; custom fan "+fanSpeed+"%");
// process gcode to suit bed size and type
if(centre == true){
var gcodeArray = gcode.split(/\n/g);
var regexp = /X[0-9\.]+/;
gcodeArray.forEach(function(index, item){
if(gcodeArray[item].search(/X/) > -1){
var value = parseFloat(gcodeArray[item].match(regexp)[0].substring(1)) - 50;
gcodeArray[item] = gcodeArray[item].replace(regexp, "X"+String(value));
}
});
var regexp = /Y[0-9\.]+/;
gcodeArray.forEach(function(index, item){
if(gcodeArray[item].search(/Y/) > -1){
var value = parseFloat(gcodeArray[item].match(regexp)[0].substring(1)) - 50;
gcodeArray[item] = gcodeArray[item].replace(regexp, "Y"+String(value))
}
});
gcode = gcodeArray.join("\n");
} else {
if(bedX > 0){
var gcodeArray = gcode.split(/\n/g);
var regexp = /X[0-9\.]+/;
gcodeArray.forEach(function(index, item){
if(gcodeArray[item].search(/X/) > -1){
var value = parseFloat(gcodeArray[item].match(regexp)[0].substring(1)) + bedX;
gcodeArray[item] = gcodeArray[item].replace(regexp, "X"+String(value));
}
});
gcode = gcodeArray.join("\n");
}
if(bedY > 0){
var gcodeArray = gcode.split(/\n/g);
var regexp = /Y[0-9\.]+/;
gcodeArray.forEach(function(index, item){
if(gcodeArray[item].search(/Y/) > -1){
var value = parseFloat(gcodeArray[item].match(regexp)[0].substring(1)) + bedY;
gcodeArray[item] = gcodeArray[item].replace(regexp, "Y"+String(value))
}
});
gcode = gcodeArray.join("\n");
}
}
// changes for acceleration test
if(name == "accelerationForm"){
// edit feedrates
gcode = gcode.replace(/F3600/g, "F"+feed+" ; custom feedrate - full");
gcode = gcode.replace(/F2880/g, "F"+feed+" ; custom feedrate - full");
gcode = gcode.replace(/F2160/g, "F"+feed/2+" ; custom feedrate - half");
// add acceleration segments
gcode = gcode.replace(/;process Process-1/, "M201 X50000 Y50000 Z50000; custom raise acceleration limits\nM204 P"+a1+" ; custom acceleration - A\n;j1");
gcode = gcode.replace(/;process Process-2/, "M204 P"+b1+" ; custom acceleration - B\n;j2");
gcode = gcode.replace(/;process Process-3/, "M204 P"+c1+" ; custom acceleration - C\n;j3");
gcode = gcode.replace(/;process Process-4/, "M204 P"+d1+" ; custom acceleration - D\n;j4");
gcode = gcode.replace(/;process Process-5/, "M204 P"+e1+" ; custom acceleration - E\n;j5");
gcode = gcode.replace(/;process Process-6/, "M204 P"+f1+" ; custom acceleration - F\n;j6");
// add jerk/junction deviation segments
if(jerk_or_jd == "jerk"){
gcode = gcode.replace(/;j1/, "M205 X"+a2+" Y"+a3+" Z"+a5+" ; custom jerk - A");
gcode = gcode.replace(/;j2/, "M205 X"+b2+" Y"+b3+" Z"+b5+" ; custom jerk - B");
gcode = gcode.replace(/;j3/, "M205 X"+c2+" Y"+c3+" Z"+c5+" ; custom jerk - C");
gcode = gcode.replace(/;j4/, "M205 X"+d2+" Y"+d3+" Z"+d5+" ; custom jerk - D");
gcode = gcode.replace(/;j5/, "M205 X"+e2+" Y"+e3+" Z"+e5+" ; custom jerk - E");
gcode = gcode.replace(/;j6/, "M205 X"+f2+" Y"+f3+" Z"+f5+" ; custom jerk - F");
} else {
gcode = gcode.replace(/;j1/, "M205 J"+a4+" ; custom junction deviation - A");
gcode = gcode.replace(/;j2/, "M205 J"+b4+" ; custom junction deviation - B");
gcode = gcode.replace(/;j3/, "M205 J"+c4+" ; custom junction deviation - C");
gcode = gcode.replace(/;j4/, "M205 J"+d4+" ; custom junction deviation - D");
gcode = gcode.replace(/;j5/, "M205 J"+e4+" ; custom junction deviation - E");
gcode = gcode.replace(/;j6/, "M205 J"+f4+" ; custom junction deviation - F");
}
}
// process user retraction
if(name == "retractionForm"){
// A section
gcode = gcode.replace(/;retract1\nG1 Z[0-9\.]+ F1200/g, ";retract1\n;zhop1");
if(a5 > 0){
gcode = gcode.replace(/;zhop1/g, "G91\nG1 Z"+a5+" F1200 ; custom z hop - A\nG90");
}
gcode = gcode.replace(/;retract1/g, "G1 E-"+a1+" F"+a2+" ; custom retraction - A");
gcode = gcode.replace(/;unretract1/g, "G1 E"+a3+" F"+a4+" ; custom un-retraction/prime - A");
// B section
gcode = gcode.replace(/;retract2\nG1 Z[0-9\.]+ F1200/g, ";retract2\n;zhop2");
if(b5 > 0){
gcode = gcode.replace(/;zhop2/g, "G91\nG1 Z"+b5+" F1200 ; custom z hop - B\nG90");
}
gcode = gcode.replace(/;retract2/g, "G1 E-"+b1+" F"+b2+" ; custom retraction - B");
gcode = gcode.replace(/;unretract2/g, "G1 E"+b3+" F"+b4+" ; custom un-retraction/prime - B");
// C section
gcode = gcode.replace(/;retract3\nG1 Z[0-9\.]+ F1200/g, ";retract3\n;zhop3");
if(c5 > 0){
gcode = gcode.replace(/;zhop3/g, "G91\nG1 Z"+c5+" F1200 ; custom z hop - C\nG90");
}
gcode = gcode.replace(/;retract3/g, "G1 E-"+c1+" F"+c2+" ; custom retraction - C");
gcode = gcode.replace(/;unretract3/g, "G1 E"+c3+" F"+c4+" ; custom un-retraction/prime - C");
// D section
gcode = gcode.replace(/;retract4\nG1 Z[0-9\.]+ F1200/g, ";retract4\n;zhop4");
if(d5 > 0){
gcode = gcode.replace(/;zhop4/g, "G91\nG1 Z"+d5+" F1200 ; custom z hop - D\nG90");
}
gcode = gcode.replace(/;retract4/g, "G1 E-"+d1+" F"+d2+" ; custom retraction - D");
gcode = gcode.replace(/;unretract4/g, "G1 E"+d3+" F"+d4+" ; custom un-retraction/prime - D");
// E section
gcode = gcode.replace(/;retract5\nG1 Z[0-9\.]+ F1200/g, ";retract5\n;zhop5");
if(e5 > 0){
gcode = gcode.replace(/;zhop5/g, "G91\nG1 Z"+e5+" F1200 ; custom z hop - E\nG90");
}
gcode = gcode.replace(/;retract5/g, "G1 E-"+e1+" F"+e2+" ; custom retraction - E");
gcode = gcode.replace(/;unretract5/g, "G1 E"+e3+" F"+e4+" ; custom un-retraction/prime - E");
// F section
gcode = gcode.replace(/;retract6\nG1 Z[0-9\.]+ F1200/g, ";retract6\n;zhop6");
if(f5 > 0){
gcode = gcode.replace(/;zhop6/g, "G91\nG1 Z"+f5+" F1200 ; custom z hop - F\nG90");
}
gcode = gcode.replace(/;retract6/g, "G1 E-"+f1+" F"+f2+" ; custom retraction - F");
gcode = gcode.replace(/;unretract6/g, "G1 E"+f3+" F"+f4+" ; custom un-retraction/prime - F");
} else {
gcode = gcode.replace(/;retract1\nG1 Z[0-9\.]+ F1200/g, ";retract1\n;zhop1");
if(zhop > 0){
gcode = gcode.replace(/;zhop1/g, "G91;\nG1 Z"+zhop+" F1200; custom z hop\nG90;");
}
gcode = gcode.replace(/;retract1/g, "G1 E-"+retDist+" F"+retSpeed+" ; custom retraction");
gcode = gcode.replace(/;unretract1/g, "G1 E"+retDistExtra+" F"+retSpeed+" ; custom un-retraction/prime");
}
// temperature test user inputs
if(name == "temperatureForm"){
gcode = gcode.replace(/;layer 2(.*?)\n/, "M104 S"+a1+" T0 ; custom hot end temp - A\n");
gcode = gcode.replace(/;process Process-2/, "M104 S"+b1+" T0 ; custom hot end temp - B");
gcode = gcode.replace(/;process Process-3/, "M104 S"+c1+" T0 ; custom hot end temp - C");
gcode = gcode.replace(/;process Process-4/, "M104 S"+d1+" T0 ; custom hot end temp - D");
gcode = gcode.replace(/;process Process-5/, "M104 S"+e1+" T0 ; custom hot end temp - E");
}
}
// final tweaks for start and end gcode
if(formName.psuon.checked == true) {
gcode = gcode.replace(/;M80/, "M80");
}
if(formName.removet0.checked == true) {
gcode = gcode.replace(/T0\n/, ";T0\n");
}
if(formName.start.checked == true) {
gcode = gcode.replace(/;customstart/, "; custom start gcode\n"+customStart);
}
if(formName.end.checked == true) {
gcode = gcode.replace(/;customend/, "; custom end gcode\n"+customEnd);
}
// process finished gcode file
downloadFile(description+'.gcode', gcode);
}
function processFirstlayer(){
@ -119,8 +516,6 @@ function processFirstlayer(){
var customStart = document.firstlayerForm.startgcode.value;
var customEnd = document.firstlayerForm.endgcode.value;
var firstlayerStart = commonStart;
var skirts = "";
var squares = "";
var offsets = [0,0,0,0,0,0,0,0,0,0];
var delt = 30;
var xy = 30;

View File

@ -1,4 +1,6 @@
var retraction_40_20 = `
var retraction = [];
retraction["40_20"] = `
;process Process-1
;layer 1, Z = 0.200
T0

View File

@ -1,4 +1,6 @@
var temperature_40_20 = `
var temperature = [];
temperature["40_20"] = `
;process Process-1
;layer 1, Z = 0.200
T0