CAM routing refactor, area operation, and taper ball tool implementation
Major routing improvements: - Refactor depth-first routing algorithm for better path optimization - Reimplemented outline, roughing, pocket, and trace as area operation wrappers - Add pocket shadow travel routing with optimized descent using travel bounds - Improve contour routing with arc detection and polyEmit arc strategy - Add area smoothing and ease-down options - Fix outline handling with thru holes and surface reversal on tip2tip - Move widget shadow methods into widget class for faster hole detection - Better camInnerFirst support and proper feed/plunge defaults Tool system improvements: - Implement taper ball tool type with full support - Add renderTool2() for profile-based visualization - Convert tool menu to init code with bound vars - Fix auto tool and auto spindle for prep operations - Update tool profile generation for taperball geometry - Add calcTaperBallExtent() for proper ball tangency calculations Code cleanup: - Remove duplicated slicer code from specialized slicers - Asyncify shadowAt operations - Deprecate pocket engrave operation - Simplify upNover implementation - Fix animation with new tool+settings requirements
This commit is contained in:
parent
761568b533
commit
e0b1c4e31f
44 changed files with 1607 additions and 2894 deletions
|
|
@ -14,22 +14,23 @@ class OpLevel extends CamOp {
|
|||
|
||||
async slice(progress) {
|
||||
let { op, state } = this;
|
||||
let { addSlices, color, settings, tshadow, updateToolDiams, zMax, ztOff } = state;
|
||||
let { addSlices, color, settings, shadow, updateToolDiams, zMax, ztOff } = state;
|
||||
let { down, tool, step, stepz, inset } = op;
|
||||
let { stock } = settings;
|
||||
|
||||
let toolDiam = new Tool(settings, op.tool).fluteDiameter();
|
||||
let stepOver = this.stepOver = toolDiam * op.step;
|
||||
let toolDiam = new Tool(settings, tool).fluteDiameter();
|
||||
let stepOver = this.stepOver = toolDiam * step;
|
||||
let wpos = state.widget.track.pos;
|
||||
let zTop = zMax + ztOff;
|
||||
let zBot = zTop - op.down;
|
||||
let zList = op.stepz ? util.lerp(zTop, zBot, op.stepz) : [ zBot ];
|
||||
let zBot = zTop - down;
|
||||
let zList = stepz && down ? util.lerp(zTop, zBot, stepz) : [ zBot ];
|
||||
|
||||
updateToolDiams(toolDiam);
|
||||
|
||||
let points = [];
|
||||
let clear = op.stock ?
|
||||
[ newPolygon().centerRectangle({x:-wpos.x,y:-wpos.y,z:wpos.z}, stock.x + toolDiam/2, stock.y) ] :
|
||||
POLY.outer(POLY.offset(tshadow, toolDiam * (op.inset || 0)));
|
||||
POLY.outer(POLY.offset(shadow.base, toolDiam * (inset || 0)));
|
||||
|
||||
POLY.fillArea(clear, 1090, stepOver, points);
|
||||
|
||||
|
|
@ -49,12 +50,10 @@ class OpLevel extends CamOp {
|
|||
}
|
||||
|
||||
prepare(ops, progress) {
|
||||
let { op, layers, stepOver } = this;
|
||||
let { setTool, setSpindle, printPoint } = ops;
|
||||
let { layers, stepOver } = this;
|
||||
let { printPoint } = ops;
|
||||
let { newLayer, tip2tipEmit, camOut } = ops;
|
||||
|
||||
setTool(op.tool, op.rate);
|
||||
setSpindle(op.spindle);
|
||||
for (let lines of layers) {
|
||||
lines = lines.map(p => { return { first: p.first(), last: p.last(), poly: p } });
|
||||
printPoint = tip2tipEmit(lines, printPoint, (el, point, count) => {
|
||||
|
|
|
|||
Loading…
Reference in a new issue