expand set of range override parameters

This commit is contained in:
Stewart Allen 2021-02-11 20:57:18 -05:00
commit 76dc5be0a5
6 changed files with 76 additions and 40 deletions

View file

@ -316,10 +316,10 @@
firstLayerBrim: 0,
firstLayerBrimTrig: 0,
firstLayerBeltLead: 3,
firstLayerFanSpeed: 0,
outputRaft: false,
outputRaftSpacing: 0.2,
outputTemp: 200,
outputFanMax: 255,
outputBedTemp: 60,
outputFeedrate: 50,
outputFinishrate: 50,
@ -327,7 +327,7 @@
outputShellMult: 1.25,
outputFillMult: 1.25,
outputSparseMult: 1.25,
outputFanLayer: 1,
outputFanSpeed: 255,
outputRetractDist: 1.5,
outputRetractSpeed: 40,
outputRetractWipe: 0,

View file

@ -1673,6 +1673,7 @@
fdmSep: UC.newBlank({class:"pop-sep", modes:FDM, show:isNotBelt}),
firstLayerNozzleTemp:UC.newInput(LANG.fl_nozl_s, {title:LANG.fl_nozl_l, convert:UC.toInt, modes:FDM, show:isNotBelt}),
firstLayerBedTemp: UC.newInput(LANG.fl_bedd_s, {title:LANG.fl_bedd_l, convert:UC.toInt, modes:FDM, show:isNotBelt}),
firstLayerFanSpeed: UC.newInput(LANG.ou_fans_s, {title:LANG.ou_fans_l, convert:UC.toInt, bound:UC.bound(0,255), modes:FDM}),
fdmSep: UC.newBlank({class:"pop-sep", modes:FDM, show:isNotBelt}),
firstLayerYOffset: UC.newInput(LANG.fl_zoff_s, {title:LANG.fl_zoff_l, convert:UC.toFloat, modes:FDM, show:isBelt}),
firstLayerRate: UC.newInput(LANG.fl_rate_s, {title:LANG.fl_rate_l, convert:UC.toFloat, modes:FDM}),
@ -1696,9 +1697,10 @@
sliceFillType: UC.newSelect(LANG.fi_type, {modes:FDM}, "infill"),
fdmSep: UC.newBlank({class:"pop-sep", modes:FDM}),
sliceFillSparse: UC.newInput(LANG.fi_pcnt_s, {title:LANG.fi_pcnt_l, convert:UC.toFloat, bound:UC.bound(0.0,1.0), modes:FDM}),
sliceFillAngle: UC.newInput(LANG.fi_angl_s, {title:LANG.fi_angl_l, convert:UC.toFloat, modes:FDM}),
sliceFillOverlap: UC.newInput(LANG.fi_over_s, {title:LANG.fi_over_l, convert:UC.toFloat, bound:UC.bound(0.0,2.0), modes:FDM}),
fdmSep: UC.newBlank({class:"pop-sep", modes:FDM}),
sliceFillOverlap: UC.newInput(LANG.fi_over_s, {title:LANG.fi_over_l, convert:UC.toFloat, bound:UC.bound(0.0,2.0), modes:FDM}),
sliceFillAngle: UC.newInput(LANG.fi_angl_s, {title:LANG.fi_angl_l, convert:UC.toFloat, modes:FDM}),
// fdmSep: UC.newBlank({class:"pop-sep", modes:FDM}),
sliceFillRate: UC.newInput(LANG.ou_feed_s, {title:LANG.fi_rate_l, convert:UC.toInt, bound:UC.bound(0,300), modes:FDM}),
fdmSupport: UC.newGroup(LANG.sp_menu, null, {modes:FDM, marker:false}),
@ -1777,6 +1779,7 @@
outputTemp: UC.newInput(LANG.ou_nozl_s, {title:LANG.ou_nozl_l, convert:UC.toInt, modes:FDM}),
outputBedTemp: UC.newInput(LANG.ou_bedd_s, {title:LANG.ou_bedd_l, convert:UC.toInt, modes:FDM}),
outputFanSpeed: UC.newInput(LANG.ou_fans_s, {title:LANG.ou_fans_l, convert:UC.toInt, bound:UC.bound(0,255), modes:FDM}),
fdmSep: UC.newBlank({class:"pop-sep", modes:FDM}),
outputFeedrate: UC.newInput(LANG.ou_feed_s, {title:LANG.ou_feed_l, convert:UC.toInt, modes:FDM}),
outputFinishrate: UC.newInput(LANG.ou_fini_s, {title:LANG.ou_fini_l, convert:UC.toInt, modes:FDM}),
@ -1786,7 +1789,6 @@
outputFillMult: UC.newInput(LANG.ou_flml_s, {title:LANG.ou_exml_l, convert:UC.toFloat, bound:UC.bound(0.0,2.0), modes:FDM}),
outputSparseMult: UC.newInput(LANG.ou_spml_s, {title:LANG.ou_exml_l, convert:UC.toFloat, bound:UC.bound(0.0,2.0), modes:FDM}),
fdmSep: UC.newBlank({class:"pop-sep", modes:FDM}),
outputFanLayer: UC.newInput(LANG.ou_fanl_s, {title:LANG.ou_fanl_l, convert:UC.toInt, bound:UC.bound(0,100), modes:FDM}),
sliceShellOrder: UC.newSelect(LANG.sl_ordr_s, {title:LANG.sl_ordr_l, modes:FDM}, "shell"),
sliceLayerStart: UC.newSelect(LANG.sl_strt_s, {title:LANG.sl_strt_l, modes:FDM}, "start"),
camConventional: UC.newBoolean(LANG.ou_conv_s, onBooleanClick, {title:LANG.ou_conv_l, modes:CAM}),

View file

@ -46,10 +46,11 @@
"sliceSupportDensity": LANG.sp_dens_s,
"sliceSupportOffset": LANG.sp_offs_s,
"sliceLayerStart": LANG.sl_strt_s,
"zHopDistance": LANG.ad_zhop_s,
// export
"zHopDistance": LANG.ad_zhop_s,
"outputTemp": LANG.ou_nozl_s,
"outputBedTemp": LANG.ou_bedd_s,
"outputFanSpeed": LANG.ou_fans_s,
"outputRetractDist": LANG.ad_rdst_s,
"outputRetractSpeed": LANG.outputRetractSpeed,
"outputRetractDwell": LANG.ad_rdwl_s,

View file

@ -50,7 +50,7 @@
loops = process.outputLoopLayers,
zhop = process.zHopDistance || 0, // range
seekMMM = process.outputSeekrate * 60,
retDist = process.outputRetractDist, // range
retDist = process.outputRetractDist || 0, // range
retSpeed = process.outputRetractSpeed * 60, // range
retDwell = process.outputRetractDwell || 0, // range
timeDwell = retDwell / 1000,
@ -60,15 +60,21 @@
x: device.bedWidth/2,
y: isBelt ? 0 : device.bedDepth/2
},
nozzleTemp = process.firstLayerNozzleTemp || process.outputTemp,
bedTemp = process.firstLayerBedTemp || process.outputBedTemp,
fanSpeed = process.firstLayerFanSpeed,
lastNozzleTemp = nozzleTemp,
lastBedTemp = bedTemp,
lastFanSpeed = fanSpeed,
subst = {
travel_speed: seekMMM,
retract_speed: retSpeed,
retract_distance: retDist,
temp: process.firstLayerNozzleTemp || process.outputTemp, // range
temp_bed: process.firstLayerBedTemp || process.outputBedTemp, // range
bed_temp: process.firstLayerBedTemp || process.outputBedTemp, // range
fan_speed: process.outputFanMax,
speed: process.outputFanMax, // legacy
temp: nozzleTemp,
temp_bed: bedTemp,
bed_temp: bedTemp,
fan_speed: fanSpeed,
speed: fanSpeed, // legacy
top: offset ? device.bedDepth : device.bedDepth/2,
left: offset ? 0 : -device.bedWidth/2,
right: offset ? device.bedWidth : device.bedWidth/2,
@ -85,9 +91,32 @@
bcos = Math.cos(Math.PI/4),
icos = 1 / bcos,
inLoop,
params,
arcQ = [];
// smallish band-aid. refactor above to remove redundancy
function updateParams(layer) {
let process = getRangeParameters(settings, layer);
zhop = process.zHopDistance || 0; // range
retDist = process.outputRetractDist || 0; // range
retSpeed = process.outputRetractSpeed * 60; // range
retDwell = process.outputRetractDwell || 0; // range
timeDwell = retDwell / 1000;
nozzleTemp = process.outputTemp;
bedTemp = process.outputBedTemp;
fanSpeed = process.outputFanSpeed;
Object.assign(subst, {
temp_bed: bedTemp,
bed_temp: bedTemp,
fan_speed: fanSpeed,
speed: fanSpeed, // legacy
retract_speed: retSpeed,
retract_distance: retDist,
temp: process.outputTemp, // range
temp_bed: process.outputBedTemp, // range
bed_temp: process.outputBedTemp, // range
});
}
if (isBelt && loops) {
loops = loops.split(',').map(range => {
return range.split('-').map(v => parseInt(v));
@ -261,6 +290,10 @@
if (comment) {
o.append(` ; ${comment}`);
}
if (o.length === 1) {
// console.trace({no_move: o, out, newpos, pos, lastp, emit});
return;
}
let line = o.join('');
if (last == line) {
// console.log({dup:line});
@ -284,9 +317,11 @@
while (layer < layers.length) {
path = layers[layer];
params = getRangeParameters(settings, path.layer);
// TODO update process settings from params override
// console.log(path.layer, params)
// allow range overrides past base
if (path.layer > 0) {
updateParams(path.layer);
}
emitPerMM = print.extrudePerMM(
extruder.extNozzle,
@ -336,24 +371,20 @@
append(`;; --- layer ${layer} (${subst.height} @ ${subst.z.round(3)}) ---`);
}
// enable fan at fan layer
if (gcodeFan && layer === process.outputFanLayer) {
// layer temp and fan overrides at layer changes
if (fanSpeed !== lastFanSpeed) {
appendAllSub(gcodeFan);
lastFanSpeed = fanSpeed;
}
// second layer transitions
if (layer === 1) {
// update temps when first layer overrides are present
if (process.firstLayerNozzleTemp) {
subst.temp = process.outputTemp; // range
if (t0) appendSub("M104 S{temp} T0");
if (t1) appendSub("M104 S{temp} T1");
if (!(t0 || t1)) appendSub("M104 S{temp} T{tool}");
}
if (process.firstLayerBedTemp) {
subst.bed_temp = subst.temp_bed = process.outputBedTemp; // range
appendSub("M140 S{temp_bed} T0");
}
if (bedTemp !== lastBedTemp) {
append(`M140 S${bedTemp} T0`);
lastBedTemp = bedTemp;
}
if (nozzleTemp !== lastNozzleTemp) {
if (t0) append(`M104 S${nozzleTemp} T0`);
if (t1) append(`M104 S${nozzleTemp} T1`);
if (!(t0 || t1)) append(`M104 S{nozzleTemp} T${tool}`);
lastNozzleTemp = nozzleTemp;
}
// move Z to layer height

View file

@ -68,7 +68,6 @@
solidLayers = spro.sliceSolidLayers,
vaseMode = spro.sliceFillType === 'vase' && !isSynth,
doSolidLayers = solidLayers && !vaseMode && !isSynth,
doSparseFill = !vaseMode && spro.sliceFillSparse > 0.0,
metadata = settings.widget[widget.id] || {},
extruder = metadata.extruder || 0,
sliceHeight = spro.sliceHeight,
@ -376,10 +375,13 @@
}
// sparse layers only present when non-vase mose and sparse % > 0
if (doSparseFill && !isSynth) {
if (!isSynth) {
let lastType;
forSlices(0.5, 0.7, slice => {
let params = getRangeParameters(settings, slice.index);
if (vaseMode || !params.sliceFillSparse) {
return;
}
let newType = params.sliceFillType;
doSparseLayerFill(slice, {
settings: settings,

View file

@ -200,12 +200,12 @@ kiri.lang['en-us'] = {
// FDM FILL
fi_menu: "infill",
fi_type: "type",
fi_pcnt_s: "fraction",
fi_pcnt_s: "fill fraction",
fi_pcnt_l: "fill density values\n0.0 - 1.0",
fi_angl_s: "start angle",
fi_angl_l: "base angle in degrees",
fi_angl_s: "solid start",
fi_angl_l: "starting angle in degrees\n90 degrees added to \neach following layer\napplies only to solid layers",
fi_over_s: "overlap",
fi_over_l: "overlap with shell and fill\nas % of nozzle width\nhigher bonds better\n0.0 - 1.0",
fi_over_l: "overlap with shell and other fill\nas fraction of nozzle diameter\n0.0 - 1.0",
// fi_rate_s: "print speed",
fi_rate_l: "extrusion speed for infill\nset to 0 to use default\noutput print speeds",
@ -429,8 +429,8 @@ kiri.lang['en-us'] = {
ou_flml_s: "solid factor",
ou_spml_s: "infill factor",
ou_exml_l: "extrusion multiplier\n0.0 - 2.0",
ou_fanl_s: "fan layer",
ou_fanl_l: "layer to enable fan",
ou_fans_s: "fan speed",
ou_fans_l: "0 - 255",
// OUTPUT CAM
ou_toll_s: "tolerance",