add anti-backlash option for solid fill
This commit is contained in:
parent
06ab7cceb5
commit
7ed281972d
4 changed files with 19 additions and 4 deletions
|
|
@ -619,6 +619,9 @@ var gs_base_polygons = exports;
|
||||||
maxlen = BASE.config.clipper * (maxLen || 0),
|
maxlen = BASE.config.clipper * (maxLen || 0),
|
||||||
lines = [];
|
lines = [];
|
||||||
|
|
||||||
|
// store origin as start/affinity point for fill
|
||||||
|
rayint.origin = newPoint(start.x, start.y, start.z);
|
||||||
|
|
||||||
for (i = 0; i < steps; i++) {
|
for (i = 0; i < steps; i++) {
|
||||||
var p1 = newPoint(start.x - raySlope.dx * 1000, start.y - raySlope.dy * 1000, zpos, NOKEY),
|
var p1 = newPoint(start.x - raySlope.dx * 1000, start.y - raySlope.dy * 1000, zpos, NOKEY),
|
||||||
p2 = newPoint(start.x + raySlope.dx * 1000, start.y + raySlope.dy * 1000, zpos, NOKEY);
|
p2 = newPoint(start.x + raySlope.dx * 1000, start.y + raySlope.dy * 1000, zpos, NOKEY);
|
||||||
|
|
|
||||||
|
|
@ -496,6 +496,7 @@ var gs_kiri_print = exports;
|
||||||
fillSpeed = opt.speed || opt.fillSpeed || (firstLayer ? firstFillSpeed || firstShellSpeed : process.outputFeedrate),
|
fillSpeed = opt.speed || opt.fillSpeed || (firstLayer ? firstFillSpeed || firstShellSpeed : process.outputFeedrate),
|
||||||
moveSpeed = process.outputSeekrate,
|
moveSpeed = process.outputSeekrate,
|
||||||
origin = startPoint.add(offset),
|
origin = startPoint.add(offset),
|
||||||
|
antiBacklash = process.antiBacklash,
|
||||||
z = slice.z;
|
z = slice.z;
|
||||||
|
|
||||||
// apply first layer extrusion multipliers
|
// apply first layer extrusion multipliers
|
||||||
|
|
@ -566,15 +567,17 @@ var gs_kiri_print = exports;
|
||||||
}
|
}
|
||||||
|
|
||||||
function outputFills(lines, bounds) {
|
function outputFills(lines, bounds) {
|
||||||
var mindist, p1, p2, dist, point, find, list, len, lastout, pass = 0;
|
var mindist, p1, p2, dist, point, find, list, len, lastout, pass = 0, origin;
|
||||||
|
|
||||||
while (lines) {
|
while (lines) {
|
||||||
list = [];
|
list = [];
|
||||||
mindist = Infinity;
|
mindist = Infinity;
|
||||||
|
origin = antiBacklash && pass === 0 ? lines.origin : startPoint;
|
||||||
// order all points by distance to last point
|
// order all points by distance to last point
|
||||||
for (i=0; i<lines.length; i++) {
|
for (i=0; i<lines.length; i++) {
|
||||||
point = lines[i];
|
point = lines[i];
|
||||||
if (point.del) continue;
|
if (point.del) continue;
|
||||||
dist = startPoint.distTo2D(point);
|
dist = origin.distTo2D(point);
|
||||||
list.push({i:i, p:point, d:dist});
|
list.push({i:i, p:point, d:dist});
|
||||||
}
|
}
|
||||||
if (list.length > 0) {
|
if (list.length > 0) {
|
||||||
|
|
@ -590,10 +593,11 @@ var gs_kiri_print = exports;
|
||||||
p2 = lines[find.i - 1];
|
p2 = lines[find.i - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dist = startPoint.distTo2D(p1);
|
||||||
|
|
||||||
// mark as used (temporary)
|
// mark as used (temporary)
|
||||||
p1.del = true;
|
p1.del = true;
|
||||||
p2.del = true;
|
p2.del = true;
|
||||||
dist = startPoint.distTo2D(p1);
|
|
||||||
len = p1.distTo2D(p2);
|
len = p1.distTo2D(p2);
|
||||||
|
|
||||||
// if dist to new segment is less than thinWall
|
// if dist to new segment is less than thinWall
|
||||||
|
|
@ -610,6 +614,11 @@ var gs_kiri_print = exports;
|
||||||
retract();
|
retract();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// anti-backlash take out slack by moving toward origin
|
||||||
|
if (antiBacklash && dist > retractDist) {
|
||||||
|
addOutput(preout, p1.add({x:1,y:-1,z:0}), 0, moveSpeed);
|
||||||
|
}
|
||||||
|
|
||||||
// bridge ends of fill when they're close together
|
// bridge ends of fill when they're close together
|
||||||
if (dist < thinWall) {
|
if (dist < thinWall) {
|
||||||
addOutput(preout, p1, fillMult, fillSpeed);
|
addOutput(preout, p1, fillMult, fillSpeed);
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,7 @@ self.kiri.license = exports.LICENSE;
|
||||||
outputFinishFactor: 1,
|
outputFinishFactor: 1,
|
||||||
outputCooling: 1,
|
outputCooling: 1,
|
||||||
detectThinWalls: 1,
|
detectThinWalls: 1,
|
||||||
|
antiBacklash: 1,
|
||||||
outputClockwise: 1,
|
outputClockwise: 1,
|
||||||
outputOriginCenter: 1,
|
outputOriginCenter: 1,
|
||||||
outputInvertX: 1,
|
outputInvertX: 1,
|
||||||
|
|
@ -307,6 +308,7 @@ self.kiri.license = exports.LICENSE;
|
||||||
outputShortFactor: 0.2,
|
outputShortFactor: 0.2,
|
||||||
outputFinishFactor: 0,
|
outputFinishFactor: 0,
|
||||||
detectThinWalls: false,
|
detectThinWalls: false,
|
||||||
|
antiBacklash: false,
|
||||||
outputCooling: true,
|
outputCooling: true,
|
||||||
|
|
||||||
// --- LASER ---
|
// --- LASER ---
|
||||||
|
|
@ -2494,6 +2496,7 @@ self.kiri.license = exports.LICENSE;
|
||||||
outputShortDistance: UC.newInput("short segment", {title:"segment length cutoff\nfor short segments\nin millimeters", bound:UC.bound(0,200), convert:UC.toFloat, modes:FDM}),
|
outputShortDistance: UC.newInput("short segment", {title:"segment length cutoff\nfor short segments\nin millimeters", bound:UC.bound(0,200), convert:UC.toFloat, modes:FDM}),
|
||||||
outputShortFactor: UC.newInput("short factor", {title:"max speed reduction factor\nfor short segments\nas % of print speed", bound:UC.bound(0.05,1), convert:UC.toFloat, modes:FDM}),
|
outputShortFactor: UC.newInput("short factor", {title:"max speed reduction factor\nfor short segments\nas % of print speed", bound:UC.bound(0.05,1), convert:UC.toFloat, modes:FDM}),
|
||||||
outputFinishFactor: UC.newInput("finish factor", {title:"% of nozzle diameter to\nshorten finish path by\nvalues of 0-1", bound:UC.bound(0.0,1), convert:UC.toFloat, modes:FDM}),
|
outputFinishFactor: UC.newInput("finish factor", {title:"% of nozzle diameter to\nshorten finish path by\nvalues of 0-1", bound:UC.bound(0.0,1), convert:UC.toFloat, modes:FDM}),
|
||||||
|
antiBacklash: UC.newBoolean("anti-backlash", onBooleanClick, {title: "use micro-movements to cancel\nbacklash during fills", modes:FDM}),
|
||||||
detectThinWalls: UC.newBoolean("thin wall fill", onBooleanClick, {title: "detect and fill thin openings\nbetween shells walls", modes:FDM})
|
detectThinWalls: UC.newBoolean("thin wall fill", onBooleanClick, {title: "detect and fill thin openings\nbetween shells walls", modes:FDM})
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
var exports = {
|
var exports = {
|
||||||
COPYRIGHT:"Copyright (C) 2014-2017 Stewart Allen <stewart@neuron.com> - All Rights Reserved",
|
COPYRIGHT:"Copyright (C) 2014-2017 Stewart Allen <stewart@neuron.com> - All Rights Reserved",
|
||||||
LICENSE:"Unauthorized copying, modification and re-distribution are strictly prohibited without prior written consent.",
|
LICENSE:"Unauthorized copying, modification and re-distribution are strictly prohibited without prior written consent.",
|
||||||
VERSION:"1.0.94"
|
VERSION:"1.0.95"
|
||||||
};
|
};
|
||||||
if (!module) var module = {};
|
if (!module) var module = {};
|
||||||
module.exports = exports;
|
module.exports = exports;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue