add base brim, shell speed, and flow rate

This commit is contained in:
Stewart Allen 2021-01-09 23:06:03 -05:00
commit 6a61f7e34c
5 changed files with 47 additions and 5 deletions

View file

@ -306,6 +306,7 @@
firstLayerPrintMult: 1.0,
firstLayerNozzleTemp: 0,
firstLayerBedTemp: 0,
firstLayerBrim: 0,
outputRaft: false,
outputRaftSpacing: 0.2,
outputTemp: 200,

View file

@ -1597,6 +1597,7 @@
firstLayerRate: UC.newInput(LANG.fl_rate_s, {title:LANG.fl_rate_l, convert:UC.toFloat, modes:FDM}),
firstLayerFillRate: UC.newInput(LANG.fl_frat_s, {title:LANG.fl_frat_l, convert:UC.toFloat, modes:FDM, show:() => !UI.deviceBelt.checked}),
firstLayerPrintMult: UC.newInput(LANG.fl_mult_s, {title:LANG.fl_mult_l, convert:UC.toFloat, modes:FDM}),
firstLayerBrim: UC.newInput(LANG.fl_brim_s, {title:LANG.fl_brim_l, convert:UC.toFloat, modes:FDM, show:() => UI.deviceBelt.checked}),
fdmSep: UC.newBlank({class:"pop-sep", modes:FDM, show:() => !UI.deviceBelt.checked}),
outputBrimCount: UC.newInput(LANG.fl_skrt_s, {title:LANG.fl_skrt_l, convert:UC.toInt, modes:FDM, show:() => !UI.deviceBelt.checked}),
outputBrimOffset: UC.newInput(LANG.fl_skro_s, {title:LANG.fl_skro_l, convert:UC.toFloat, modes:FDM, show:() => !UI.deviceBelt.checked}),

View file

@ -30,6 +30,10 @@
output = [],
printPoint = newPoint(0,0,0),
firstLayerHeight = process.firstSliceHeight || process.sliceHeight,
firstLayerSeek = process.outputSeekrate,
firstLayerRate = process.firstLayerRate,
firstLayerMult = process.firstLayerPrintMult,
firstLayerBrim = process.firstLayerBrim,
maxLayers = 0,
layer = 0,
zoff = 0,
@ -47,7 +51,9 @@
isFlat = settings.controller.lineType === "flat",
isBelt = device.bedBelt,
beltYoff = device.bedDepth / 2,
beltfact = Math.cos(Math.PI/4);
beltfact = Math.cos(Math.PI/4),
invbfact = 1 / beltfact,
bfactor = invbfact * beltfact;
// compute bounds if missing
if (!bounds) {
@ -135,8 +141,8 @@
zoff += height;
};
raft(nozzle/1, process.sliceFillAngle + 0 , nozzle * 6.0, process.firstLayerRate / 3, 4);
raft(nozzle/1, process.sliceFillAngle + 0 , nozzle * 6.0, process.firstLayerRate / 2, 4);
raft(nozzle/1, process.sliceFillAngle + 0 , nozzle * 6.0, firstLayerRate / 3, 4);
raft(nozzle/1, process.sliceFillAngle + 0 , nozzle * 6.0, firstLayerRate / 2, 4);
raft(nozzle/2, process.sliceFillAngle + 90, nozzle * 3.0, process.outputFeedrate, 2.5);
raft(nozzle/2, process.sliceFillAngle + 0 , nozzle * 1.0, process.outputFeedrate, 1.5);
raft(nozzle/2, process.sliceFillAngle + 0 , nozzle * 1.0, process.outputFeedrate, 1.0);
@ -167,7 +173,7 @@
// output brim points
printPoint = print.poly2polyEmit(polys, printPoint, function(poly, index, count, startPoint) {
return print.polyPrintPath(poly, startPoint, preout, {
rate: process.firstLayerRate,
rate: firstLayerRate,
onfirst: function(point) {
if (preout.length && point.distTo2D(startPoint) > 2) {
// retract between brims
@ -364,17 +370,46 @@
if (!lastOut || lastOut.extruder !== slice.extruder) {
printPoint = purge(slice.extruder, track, layerout, printPoint, slice.z);
}
let tmpout = [];
// output seek to start point between mesh slices if previous data
printPoint = print.slicePrintPath(
slice,
printPoint.sub(offset),
offset,
layerout,
tmpout, //layerout,
{
first: slice.index === 0,
support: slice.widget.support
}
);
// alter settings for base extrusions (touching the bed)
if (isBelt) {
let widget = slice.widget;
let lastout, minx = Infinity, maxx = -Infinity, first = false;
for (let out of tmpout) {
let point = out.point;
let belty = out.belty = -point.y + point.z * bfactor;
if (out.emit && belty < firstLayerHeight && lastout && lastout.belty < firstLayerHeight) {
out.speed = firstLayerRate;
out.emit *= firstLayerMult;
minx = Math.min(minx, point.x, lastout.point.x);
maxx = Math.max(maxx, point.x, lastout.point.x);
first = out;
}
lastout = out;
}
// add brim, if specified
if (first && firstLayerBrim) {
let {emit, tool, point} = first;
let {x, y, z} = point;
let b = Math.max(firstLayerBrim, 1);
print.addOutput(tmpout, newPoint(minx - b, y, z), 0, firstLayerSeek, tool);
print.addOutput(tmpout, newPoint(minx - 0, y, z), emit, firstLayerRate, tool);
print.addOutput(tmpout, newPoint(maxx + 0, y, z), 0, firstLayerSeek, tool);
print.addOutput(tmpout, newPoint(maxx + b, y, z), emit, firstLayerRate, tool);
}
}
layerout.appendAll(tmpout);
lastOut = slice;
lastExt = lastOut.ext
lastIndex = minidx;

View file

@ -191,6 +191,7 @@
// reset for solids, support projections
// and other annotations
slices.forEach(function(slice) {
slice.widget = widget;
slice.extruder = extruder;
slice.solids = [];
});
@ -490,6 +491,8 @@
let bounds = up.poly.bounds,
midy = (bounds.miny + bounds.maxy) / 2;
if (top.poly.isInside(up.poly, 1)) {
slice.widget.belt.ymid = midy;
slice.widget.belt.zmid = slice.z;
top.shells.push(BASE.newPolygon()
.setOpen()
.add(bounds.minx,midy,slice.z)

View file

@ -211,6 +211,8 @@ kiri.lang['en-us'] = {
fl_frat_l: "fill printing max speed\nin millimeters / minute",
fl_mult_s: "print factor",
fl_mult_l: "extrusion multiplier\n0.0 - 2.0",
fl_brim_s: "brim size",
fl_brim_l: "add brim to part bottom\nsize is width in millimeters\n0 to disable",
fl_skrt_s: "skirt count",
fl_skrt_l: "number of first-layer offset\nbrims to generate",
fl_skro_s: "skirt offset",