From dd1563b716cd4d979649d7bdef1b12074a7e8ce2 Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Mon, 17 Aug 2020 18:38:14 +0200 Subject: [PATCH] Persist all form parameters This does: - Persist all form parameters - Synchronizes all forms having the same elements with the same names - Ensures that distinct types are unique across forms --- calibration.html | 112 ++++++++++++++++++++----------------- js/gcodeprocessing.js | 104 +++++++++++++++++----------------- js/persist.js | 127 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 239 insertions(+), 104 deletions(-) create mode 100644 js/persist.js diff --git a/calibration.html b/calibration.html index 958b34a..2f013bd 100644 --- a/calibration.html +++ b/calibration.html @@ -17,8 +17,9 @@ + - + @@ -166,6 +167,7 @@

+

Interpreting Results:

The cube should look similar to those at the top of this page. If there are no major issues, please continue to the next step. If there is a significant defect, the culprit will likely be found by working through the frame page.

@@ -205,6 +207,7 @@

+

There was mm of filament remaining, which means you extruded mm of filament. Your new E-steps should be
Enter the following in the terminal:

@@ -303,10 +306,11 @@
-

+

+

Your new flow rate should be

@@ -314,10 +318,11 @@ -

+

+

Your new flow rate should be

@@ -545,43 +550,44 @@ F - - - + + + E - - - + + + D - - - + + + C - - - + + + B - - - + + + A - - - + + +

+

Interpreting Results:

Inspect your finished print. Hopefully, there will be a clear difference between the segments that reflect the settings you entered. In the example below (Ender 3 direct drive, PLA, linear advance enabled), the retraction distance varied from 0.4 up to 1.4mm in 0.2mm increments. Segments A and B have the least stringing. Based on this, I would assume that a retraction distance of 0.4 - 0.6 is best for this printer. this is consistent with linear advance being enabled.

@@ -658,27 +664,28 @@ E - + D - + C - + B - + A - +

+

Interpreting Results:

Inspect your finished print. Hopefully, there will be a clear difference between the segments that reflect the temperatures you entered. In the example below (Ender 3 direct drive, PLA, linear advance enabled), the hot end temperature varied from 185 to 225 in 10 degree increments"

@@ -809,8 +816,8 @@

Acceleration and jerk/junction deviation

After entering M503, I have determined my 3D printer firmware uses:

- - + +

Based on the values you saw from M503, enter variables around this below.

Junction deviation requires a single value, whereas jerk has separate values for X and Y. You can leave them the same or enter independent values.

You should only change either acceleration or jerk/junction deviation for each test print, otherwise it will be impossible to know which parameter is responsible for any changes.

@@ -829,49 +836,50 @@ F - - - - + + + + E - - - - + + + + D - - - - + + + + C - - - - + + + + B - - - - > + + + + > A - - - - + + + +

+

Interpreting Results:

Inspect your finished print. Hopefully, there will be a clear difference between the segments that reflect the acceleration values you entered. In the example below (Ender 3 direct drive, PLA, linear advance enabled), acceleration varied from 300 to 800 in 100 mm/sec/sec increments. Junction deviation was left at the default 0.08. The difference between each segment is subtle, but there is increased ghosting around the letter Y on the higher segments. The previous value was 500, but a small increase in quality may be achieved from lowering the value to 400.

diff --git a/js/gcodeprocessing.js b/js/gcodeprocessing.js index e863cd8..aafaea4 100644 --- a/js/gcodeprocessing.js +++ b/js/gcodeprocessing.js @@ -34,7 +34,7 @@ function esteps(){ } function flowCalc1(){ - var oldflow = document.flow1.oldFlow.value; + var oldflow = document.flow1.oldFlow1.value; var targetwall = document.flow1.targetWall.value; var measuredwall = document.flow1.measuredWall.value; var newsteps = (oldflow/measuredwall*targetwall).toFixed(2); @@ -43,7 +43,7 @@ function flowCalc1(){ } function flowCalc2(){ - var oldflow = document.flow2.oldFlow.value; + var oldflow = document.flow2.oldFlow2.value; var targetwall = document.flow2.targetWall.value; var measuredwall = document.flow2.measuredWall.value; var newsteps = (oldflow/measuredwall*targetwall).toFixed(2); @@ -70,7 +70,7 @@ function maxFee(){ } function toggleJ() { - var value = document.accelerationForm.selector.value; + var value = document.accelerationForm.jerk_or_jd.value; if(value == "jerk"){ $(".jdtd").hide(); $(".jerktd").show(); @@ -179,24 +179,24 @@ function processRetraction(){ var bedY = Math.round((document.retractionForm.bedy.value-100)/2); var abl = document.retractionForm.abl.value; var pc = document.retractionForm.pc.value; - var a1 = document.retractionForm.a1.value; - var a2 = document.retractionForm.a2.value*60; - var a3 = document.retractionForm.a3.value; - var b1 = document.retractionForm.b1.value; - var b2 = document.retractionForm.b2.value*60; - var b3 = document.retractionForm.b3.value; - var c1 = document.retractionForm.c1.value; - var c2 = document.retractionForm.c2.value*60; - var c3 = document.retractionForm.c3.value; - var d1 = document.retractionForm.d1.value; - var d2 = document.retractionForm.d2.value*60; - var d3 = document.retractionForm.d3.value; - var e1 = document.retractionForm.e1.value; - var e2 = document.retractionForm.e2.value*60; - var e3 = document.retractionForm.e3.value; - var f1 = document.retractionForm.f1.value; - var f2 = document.retractionForm.f2.value*60; - var f3 = document.retractionForm.f3.value; + var a1 = document.retractionForm.ret_a1.value; + var a2 = document.retractionForm.ret_a2.value*60; + var a3 = document.retractionForm.ret_a3.value; + var b1 = document.retractionForm.ret_b1.value; + var b2 = document.retractionForm.ret_b2.value*60; + var b3 = document.retractionForm.ret_b3.value; + var c1 = document.retractionForm.ret_c1.value; + var c2 = document.retractionForm.ret_c2.value*60; + var c3 = document.retractionForm.ret_c3.value; + var d1 = document.retractionForm.ret_d1.value; + var d2 = document.retractionForm.ret_d2.value*60; + var d3 = document.retractionForm.ret_d3.value; + var e1 = document.retractionForm.ret_e1.value; + var e2 = document.retractionForm.ret_e2.value*60; + var e3 = document.retractionForm.ret_e3.value; + var f1 = document.retractionForm.ret_f1.value; + var f2 = document.retractionForm.ret_f2.value*60; + var f3 = document.retractionForm.ret_f3.value; var retraction = originalRetraction; if(pc == 1){ retraction = retraction.replace(/M106 S255/, "M106 S130"); @@ -303,11 +303,11 @@ function processTemperature(){ var retSpeed = document.temperatureForm.retspeed.value*60; var abl = document.temperatureForm.abl.value; var pc = document.temperatureForm.pc.value; - var a1 = document.temperatureForm.a1.value; - var b1 = document.temperatureForm.b1.value; - var c1 = document.temperatureForm.c1.value; - var d1 = document.temperatureForm.d1.value; - var e1 = document.temperatureForm.e1.value; + var a1 = document.temperatureForm.temp_a1.value; + var b1 = document.temperatureForm.temp_b1.value; + var c1 = document.temperatureForm.temp_c1.value; + var d1 = document.temperatureForm.temp_d1.value; + var e1 = document.temperatureForm.temp_e1.value; var temperature = originalTemperature; if(pc == 1){ temperature = temperature.replace(/M106 S255/, "M106 S130"); @@ -405,31 +405,31 @@ function processAcceleration(){ var abl = document.accelerationForm.abl.value; var pc = document.accelerationForm.pc.value; var feed = document.accelerationForm.feedrate.value*60; - var selector = document.accelerationForm.selector.value; - var a1 = document.accelerationForm.a1.value; - var a2 = document.accelerationForm.a2.value; - var a3 = document.accelerationForm.a3.value; - var a4 = document.accelerationForm.a4.value; - var b1 = document.accelerationForm.b1.value; - var b2 = document.accelerationForm.b2.value; - var b3 = document.accelerationForm.b3.value; - var b4 = document.accelerationForm.b4.value; - var c1 = document.accelerationForm.c1.value; - var c2 = document.accelerationForm.c2.value; - var c3 = document.accelerationForm.c3.value; - var c4 = document.accelerationForm.c4.value; - var d1 = document.accelerationForm.d1.value; - var d2 = document.accelerationForm.d2.value; - var d3 = document.accelerationForm.d3.value; - var d4 = document.accelerationForm.d4.value; - var e1 = document.accelerationForm.e1.value; - var e2 = document.accelerationForm.e2.value; - var e3 = document.accelerationForm.e3.value; - var e4 = document.accelerationForm.e4.value; - var f1 = document.accelerationForm.f1.value; - var f2 = document.accelerationForm.f2.value; - var f3 = document.accelerationForm.f3.value; - var f4 = document.accelerationForm.f4.value; + var jerk_or_jd = document.accelerationForm.jerk_or_jd.value; + var a1 = document.accelerationForm.accel_a1.value; + var a2 = document.accelerationForm.accel_a2.value; + var a3 = document.accelerationForm.accel_a3.value; + var a4 = document.accelerationForm.accel_a4.value; + var b1 = document.accelerationForm.accel_b1.value; + var b2 = document.accelerationForm.accel_b2.value; + var b3 = document.accelerationForm.accel_b3.value; + var b4 = document.accelerationForm.accel_b4.value; + var c1 = document.accelerationForm.accel_c1.value; + var c2 = document.accelerationForm.accel_c2.value; + var c3 = document.accelerationForm.accel_c3.value; + var c4 = document.accelerationForm.accel_c4.value; + var d1 = document.accelerationForm.accel_d1.value; + var d2 = document.accelerationForm.accel_d2.value; + var d3 = document.accelerationForm.accel_d3.value; + var d4 = document.accelerationForm.accel_d4.value; + var e1 = document.accelerationForm.accel_e1.value; + var e2 = document.accelerationForm.accel_e2.value; + var e3 = document.accelerationForm.accel_e3.value; + var e4 = document.accelerationForm.accel_e4.value; + var f1 = document.accelerationForm.accel_f1.value; + var f2 = document.accelerationForm.accel_f2.value; + var f3 = document.accelerationForm.accel_f3.value; + var f4 = document.accelerationForm.accel_f4.value; var acceleration = originalAcceleration; if(pc == 1){ acceleration = acceleration.replace(/M106 S255/, "M106 S130"); @@ -521,7 +521,7 @@ function processAcceleration(){ acceleration = acceleration.replace(/accel5/g, "M204 P"+e1); acceleration = acceleration.replace(/accel6/g, "M204 P"+f1); - if(selector == "jerk"){ + if(jerk_or_jd == "jerk"){ acceleration = acceleration.replace(/j1/g, "M205 X"+a2+" Y"+a3); acceleration = acceleration.replace(/j2/g, "M205 X"+b2+" Y"+b3); acceleration = acceleration.replace(/j3/g, "M205 X"+c2+" Y"+c3); diff --git a/js/persist.js b/js/persist.js new file mode 100644 index 0000000..1e4fccf --- /dev/null +++ b/js/persist.js @@ -0,0 +1,127 @@ +var persistChangeEvent = new Event('change'); + +function loadFormData(form) { + if (!form.name) + return; + + if (!localStorage) + return; + + for (var i = 0; i < form.length; ++i) { + var element = form[i]; + if (!element.name) + continue; + + if ( + element.tagName == "INPUT" && element.type == "number" || + element.tagName == "INPUT" && element.type == "checkbox" || + element.tagName == "INPUT" && element.type == "radio" || + element.tagName == "SELECT" + ) { + var newValue = getPeristedValue(element); + if (newValue !== null) { + setFormItemValue(element, newValue); + } + + element.addEventListener("change", persistFormValue); + } + } +} + +function resetFormToDefaults(form) { + for (var i = 0; i < form.length; ++i) { + var element = form[i]; + if (!element.name) { + continue; + } + + setPersistedValue(element, null); + if (element.defaultValue) { + setFormItemValue(element, element.defaultValue); + } + } +} + +function getPersistKey(element) { + return "persist_" + element.name; +} + +function getPeristedValue(element) { + return localStorage.getItem(getPersistKey(element)); +} + +function setPersistedValue(element, value) { + var key = getPersistKey(element); + + if (value != null) { + localStorage.setItem(key, value); + } else { + localStorage.removeItem(key); + } +} + +function getFormItemValue(element) { + if (element.type == "radio") { + return element.checked ? element.value : null; + } else if (element.type == "checkbox") { + return element.checked ? "true" : "false"; + } else { + return element.value; + } +} + +function setFormItemValue(element, value) { + if (element.type == "radio") { + var realValue = (value == element.value); + + if (element.checked == realValue) { + return; + } + + element.checked = realValue; + } else if (element.type == "checkbox") { + var realValue = (value == "true"); + + if (element.checked == realValue) { + return; + } + + element.checked = realValue; + } else { + if (element.value == value) { + return; + } + + element.value = value; + } + + element.dispatchEvent(persistChangeEvent); +} + +function persistFormValue(event) { + // ignore cascade updates + if (persistChangeEvent == event) { + return; + } + + var element = event.target; + var value = getFormItemValue(element); + var others = document.getElementsByName(element.name); + + setPersistedValue(element, value); + + // update all other inputs + for (var i = 0; i < others.length; ++i) { + var other = others[i]; + + if (other.tagName == element.tagName && other.type == element.type) { + setFormItemValue(other, value); + } + } +} + +function loadAllFormData() { + for (var i = 0; i < document.forms.length; ++i) { + loadFormData(document.forms[i]); + } +}