checkpoint range work

This commit is contained in:
Stewart Allen 2021-02-10 11:45:42 -05:00
commit 2bb838cea9
4 changed files with 110 additions and 17 deletions

View file

@ -1840,6 +1840,9 @@
slaFirstOffset: UC.newInput(LANG.sa_opzo_s, {title:LANG.sa_opzo_l, convert:UC.toFloat, bound:UC.bound(0,1), modes:SLA}),
slaAntiAlias: UC.newSelect(LANG.sa_opaa_s, {title:LANG.sa_opaa_l, modes:SLA}, "antialias"),
rangeGroup: UC.newGroup("ranges", null, {modes:FDM, group:"ranges"}),
rangeList: UC.newRow([], {}),
settingsGroup: UC.newGroup(LANG.se_menu, $('settings')),
settingsTable: UC.newRow([ UI.settingsLoad = UC.newButton(LANG.se_load, settingsLoad) ]),
settingsTable: UC.newRow([ UI.settingsSave = UC.newButton(LANG.se_save, settingsSave) ]),
@ -1851,9 +1854,6 @@
return settings().device.spindleMax > 0;
}
// FDM region override setup
UI.sliceFillSparse.region = true;
// slider setup
const slbar = 30;
const slbar2 = slbar * 2;

View file

@ -681,8 +681,10 @@
return ranges;
}
function updateRange(lo, hi, values) {
// set process override values for a range
function updateRange(lo, hi, values, noadd) {
let exact;
let empty = [];
// remove matching values from overlapping ranges
for (let range of getOverlappingRanges(lo, hi)) {
if (range.lo === lo && range.hi === hi) {
@ -691,22 +693,46 @@
for (let key of Object.keys(values)) {
delete range.fields[key];
}
if (Object.keys(range.fields).length === 0) {
empty.push(range);
}
}
let ranges = settings.process.ranges;
// clear out empty ranges
if (empty.length) {
for (let range of empty) {
let pos = ranges.indexOf(range);
if (pos >= 0) {
ranges.splice(pos,1);
}
}
}
// noadd flag present when range is 0-max
if (noadd) {
API.event.emit("range.updates", ranges);
return;
}
// add values to matched range or new range
if (!exact) {
exact = { lo, hi, fields: {} };
settings.process.ranges.push(exact);
ranges.push(exact);
}
for (let key of Object.keys(values)) {
exact.fields[key] = values[key];
}
API.event.emit("range.updates", ranges);
}
let overrides = {};
// updates that are region (slice range) dependent
// updates editable fields that are range dependent
function updateFieldsFromRange() {
if (settings.mode !== 'FDM' || viewMode !== VIEWS.SLICE || !settings.process.ranges) {
let okeys = Object.keys(overrides);
if (okeys.length) {
updateFieldsFromSettings(overrides);
overrides = {};
}
return;
}
let match = 0;
@ -731,6 +757,7 @@
delete overrides[key];
}
}
UC.refresh();
}
function updateSlider() {
@ -2074,18 +2101,20 @@
return;
}
updateSettingsFromFields(device);
// range-specific values
if (settings.mode === 'FDM' && viewMode === VIEWS.SLICE) {
let changes = {};
let values = process;
let { layer_lo, layer_hi, layer_max } = API.var;
let range;
let range = { lo: layer_lo, hi: layer_hi };
let add = false;
if (layer_lo > 0 || layer_hi < layer_max) {
values = Object.clone(process);
range = { lo: layer_lo, hi: layer_hi };
add = true;
}
updateSettingsFromFields(values, undefined, changes);
if (range) {
updateRange(range.lo, range.hi, changes);
updateRange(range.lo, range.hi, changes, !add);
}
} else {
updateSettingsFromFields(process);