checkpoint settings work

This commit is contained in:
Stewart Allen 2020-04-09 14:52:43 -04:00
commit 499f4ff2c2
9 changed files with 392 additions and 348 deletions

View file

@ -2,23 +2,187 @@
"use strict";
var gs_kiri_conf = exports;
let gs_kiri_conf = exports;
(function() {
if (!self.kiri) self.kiri = { };
if (self.kiri.conf) return;
let KIRI = self.kiri;
let KIRI = self.kiri,
CVER = 2;
function genID() {
while (true) {
var k = Math.round(Math.random() * 9999999999).toString(36);
let k = Math.round(Math.random() * 9999999999).toString(36);
if (k.length >= 4 && k.length <= 8) return k;
}
}
KIRI.conf = {
// add fields to o(bject) from t(arget) that are missing
// remove fields from o(bject) that don't exist in f(ilter)
function fill_cull(o, t, f) {
// add missing
for (let k in t) {
if (!t.hasOwnProperty(k)) {
continue;
}
let okv = o[k];
if (f[k] !== undefined && (okv === undefined || okv === null)) {
// console.log({fill: k});
o[k] = t[k];
}
}
// remove invalid
for (let k in o) {
if (!o.hasOwnProperty(k)) {
continue;
}
if (!f.hasOwnProperty(k)) {
// console.log({cull: k});
delete o[k];
}
}
}
function valueOf(val, dv) {
return typeof(val) !== 'undefined' ? val : dv;
}
function device_v1_to_v2(device) {
if (device && device.filamentSize) {
device.extruders = [{
extFilament: device.filamentSize,
extNozzle: device.nozzleSize,
extSelect: ["T0"],
extDeselect: [],
extOffsetX: 0,
extOffsetY: 0
}];
delete device.filamentSize;
delete device.nozzleSize;
}
}
// convert default filter (from server) into device structure
function device_from_code(code,mode) {
// presence of internal field indicates already converted
if (code.internal >= 0) return code;
let API = KIRI.api,
cmd = code.cmd || {},
set = code.settings || {},
ext = code.extruders;
let device = {
mode: mode || '',
internal: 0,
bedHeight: 2.5,
bedWidth: valueOf(set.bed_width, 300),
bedDepth: valueOf(set.bed_depth, 175),
bedRound: valueOf(set.bed_circle, false),
maxHeight: valueOf(set.build_height, 150),
originCenter: valueOf(set.origin_center, false),
extrudeAbs: valueOf(set.extrude_abs, false),
spindleMax: valueOf(set.spindle_max, 0),
gcodeFan: valueOf(cmd.fan_power, ''),
gcodeTrack: valueOf(cmd.progress, ''),
gcodeLayer: valueOf(cmd.layer, []),
gcodePre: valueOf(code.pre, []),
gcodePost: valueOf(code.post, []),
gcodeProc: valueOf(code.proc, ''),
gcodePause: valueOf(code.pause, []),
gcodeDwell: valueOf(code.dwell, []),
gcodeSpindle: valueOf(cmd.spindle, []),
gcodeChange: valueOf(code['tool-change'], []),
gcodeFExt: valueOf(code['file-ext'], 'gcode'),
gcodeSpace: valueOf(code['token-space'], ''),
gcodeStrip: valueOf(code['strip-comments'], false),
gcodeLaserOn: valueOf(code['laser-on'], []),
gcodeLaserOff: valueOf(code['laser-off'], []),
extruders: []
};
if (ext) {
// synthesize extruders from new style settings
ext.forEach(rec => {
let e = API.clone(CONF.template.device.extruders[0]);
if (rec.nozzle) e.extNozzle = rec.nozzle;
if (rec.filament) e.extFilament = rec.filament;
if (rec.offset_x) e.extOffsetX = rec.offset_x;
if (rec.offset_y) e.extOffsetY = rec.offset_y;
if (rec.select) e.extSelect = rec.select;
if (rec.deselect) e.extDeselect= rec.deselect;
device.extruders.push(e);
});
} else {
// synthesize extruders from old style settings
device.extruders = [API.clone(CONF.template.device.extruders[0])];
device.extruders[0].extNozzle = valueOf(set.nozzle_size, 0.4);
device.extruders[0].extFilament = valueOf(set.filament_diameter, 1.75);
}
return device;
}
function forValues(o, fn) {
Object.values(o).forEach(v => fn(v));
}
// ensure settings structure is up-to-date
function normalize(settings) {
let API = KIRI.api,
filter = CONF.filter,
defaults = CONF.template,
filter_dev = filter.fdm.d,
filter_pro = filter.fdm.p;
switch (settings.mode) {
case 'FDM':
break;
case 'CAM':
filter_dev = filter.cam.d;
filter_pro = filter.cam.p;
break;
case 'LASER':
filter_dev = filter.laser.d;
filter_pro = filter.laser.p;
break;
}
// v1 to v2 changed FDM extruder / nozzle / filament structure
if (settings.ver === 1) {
// backup settings before upgrade
API.sdb.setItem(`ws-settings-${Date.now()}`, JSON.stringify(settings));
device_v1_to_v2(settings.device);
device_v1_to_v2(settings.cdev.FDM);
settings.ver = 2;
}
fill_cull(settings, defaults, defaults);
fill_cull(settings.device, defaults.device, filter_dev);
fill_cull(settings.process, defaults.process, filter_pro);
fill_cull(settings.cdev.FDM, defaults.device, filter.fdm.d);
forValues(settings.sproc.FDM, proc => {
fill_cull(proc, defaults.process, filter.fdm.p);
});
fill_cull(settings.cdev.CAM, defaults.device, filter.cam.d);
forValues(settings.sproc.CAM, proc => {
fill_cull(proc, defaults.process, filter.cam.p);
});
fill_cull(settings.cdev.LASER, defaults.device, filter.laser.d);
forValues(settings.sproc.LASER, proc => {
fill_cull(proc, defaults.process, filter.laser.p);
});
fill_cull(settings.controller, defaults.controller, defaults.controller);
return settings;
}
let CONF = KIRI.conf = {
// --------------- helper functions
normalize: normalize,
device_from_code: device_from_code,
// ---------------
MODES: {
FDM: 1, // fused deposition modeling (also FFF)
@ -30,11 +194,13 @@ var gs_kiri_conf = exports;
SLICE: 2,
PREVIEW: 3
},
// --------------- settings filters (for loading/saving)
// --------------- settings field filters
filter: {
fdm:{
// fields permitted in FDM:Device
d:{
mode: 1,
internal: 1,
bedWidth: 1,
bedDepth: 1,
bedHeight: 1,
@ -42,8 +208,6 @@ var gs_kiri_conf = exports;
maxHeight: 1,
extrudeAbs: 1,
originCenter: 1,
filamentSize: 1,
nozzleSize: 1,
gcodePre: 1,
gcodePost: 1,
gcodeProc: 1,
@ -120,6 +284,8 @@ var gs_kiri_conf = exports;
cam:{
// fields permitted in CAM:Device
d:{
mode: 1,
internal: 1,
bedWidth: 1,
bedDepth: 1,
bedHeight: 1,
@ -192,8 +358,11 @@ var gs_kiri_conf = exports;
laser: {
// fields permitted in Laser:Device
d:{
mode: 1,
internal: 1,
bedWidth: 1,
bedDepth: 1,
bedHeight: 1,
gcodePre: 1,
gcodePost: 1,
gcodeFExt: 1,
@ -220,8 +389,9 @@ var gs_kiri_conf = exports;
}
}
},
// --------------- (default)
// --------------- default settings
template: {
// use by UI for populating selectors
infill:[
{ name: "vase" },
{ name: "hex" },
@ -278,24 +448,24 @@ var gs_kiri_conf = exports;
taper_tip: 0,
}
],
// FDM/CAM/Laser
// FDM/CAM/Laser merged
device:{
mode: "", // device local
internal: 0, // device edit state
bedWidth: 300, // FDM/CAM/Laser
bedDepth: 175, // FDM/CAM/Laser
bedHeight: 2.5, // display only (deprecate)
bedRound: false, // FDM
originCenter: false,// FDM/CAM
maxHeight: 150, // FDM
filamentSize: 1.75, // FDM
nozzleSize: 0.4, // FDM
spindleMax: 0, // CAM
gcodePre: [], // FDM/CAM header script
gcodePost: [], // FDM/CAM footer script
gcodeProc: "", // FDM post processor script (encoding, etc)
gcodePause: [], // FDM pause script
gcodeProc: "", // FDM post processor script (encoding, etc)
gcodeFan: "", // FDM fan command
gcodeTrack: "", // FDM progress command
gcodeLayer: "", // FDM layer output
gcodeLayer: [], // FDM layer output
gcodeFExt: "", // CAM file extension
gcodeSpace: "", // CAM token spacing
gcodeStrip: true, // CAM strip comments
@ -305,27 +475,30 @@ var gs_kiri_conf = exports;
gcodeLaserOn: ["M106 S{power}"],// LASER turn on
gcodeLaserOff: ["M107"], // LASER turn off
extruders:[{ // FDM extruders structure
filament: 1.75,
nozzle: 0.4,
select: [],
deselect: [],
offsetX: 0,
offsetY: 0
extFilament: 1.75,
extNozzle: 0.4,
extSelect: ["T0"],
extDeselect: [],
extOffsetX: 0,
extOffsetY: 0
}]
},
// FDM/CAM/Laser
// FDM/CAM/Laser merged
process:{
// --- shared ---
processName: "default",
outputOriginBounds: true,
outputOriginCenter: true,
outputInvertX: false,
outputInvertY: false,
// --- FDM ---
sliceHeight: 0.25,
sliceShells: 3,
sliceFillAngle: 45,
sliceFillOverlap: 0.3,
sliceFillSparse: 0.5,
sliceFillType: "hex",
sliceSupportEnable: false,
sliceSupportDensity: 0.25,
sliceSupportOffset: 1.0,
@ -334,21 +507,18 @@ var gs_kiri_conf = exports;
sliceSupportArea: 1,
sliceSupportExtra: 0,
sliceSupportSpan: 6,
sliceSolidMinArea: 1,
sliceSolidLayers: 3,
sliceBottomLayers: 3,
sliceTopLayers: 3,
firstSliceHeight: 0.25,
firstLayerRate: 30,
firstLayerFillRate: 40,
firstLayerPrintMult: 1.0,
outputRaft: false,
outputRaftSpacing: 0.2,
firstLayerNozzleTemp: 0,
firstLayerBedTemp: 0,
outputRaft: false,
outputRaftSpacing: 0.2,
outputTemp: 200,
outputFanMax: 255,
outputBedTemp: 0,
@ -379,11 +549,9 @@ var gs_kiri_conf = exports;
gcodePauseLayers: "",
// --- LASER ---
laserOffset: 0.25,
laserSliceHeight: 1,
laserSliceSingle: false,
outputTileSpacing: 1,
outputTileScaling: 1,
outputLaserPower: 100,
@ -392,9 +560,7 @@ var gs_kiri_conf = exports;
outputLaserMerged: false,
// --- CAM ---
camFastFeed: 6000,
roughingTool: 1000,
roughingSpindle: 1000,
roughingDown: 2,
@ -404,7 +570,6 @@ var gs_kiri_conf = exports;
roughingStock: 0,
camPocketOnlyRough: false,
roughingOn: true,
finishingTool: 1000,
finishingSpindle: 1000,
finishingDown: 3,
@ -417,7 +582,6 @@ var gs_kiri_conf = exports;
finishingYOn: true,
finishCurvesOnly: false,
camPocketOnlyFinish: false,
drillTool: 1000,
drillSpindle: 1000,
drillDownSpeed: 250,
@ -425,13 +589,11 @@ var gs_kiri_conf = exports;
drillDwell: 250,
drillLift: 2,
drillingOn: false,
camTabsAngle: 0,
camTabsCount: 4,
camTabsWidth: 5,
camTabsHeight: 5,
camTabsOn: false,
camPocketOnly: false,
camDepthFirst: false,
camEaseDown: false,
@ -440,20 +602,11 @@ var gs_kiri_conf = exports;
camZTopOffset: 0,
camZBottom: 0,
camZClearance: 1,
camStockX: 0,
camStockY: 0,
camStockZ: 0,
camStockOffset: true,
outputClockwise: false,
// --- shared FDM/Laser/CAM ---
outputOriginBounds: true,
outputOriginCenter: true,
outputInvertX: false,
outputInvertY: false
},
// current process name
cproc:{
@ -470,12 +623,14 @@ var gs_kiri_conf = exports;
// cached device settings by mode
cdev: {
FDM: null,
CAM: null
CAM: null,
LASER: null
},
// now they're called devices instead of gcode filters
filter:{
FDM: "Any.Generic.Marlin",
CAM: "Any.Generic.Grbl"
CAM: "Any.Generic.Grbl",
LASER: "Any.Generic.Laser"
},
// custom devices by name
devices:{
@ -522,7 +677,7 @@ var gs_kiri_conf = exports;
},
mode: 'FDM',
id: genID(),
ver: 1
ver: CVER
}
};