/** Copyright Stewart Allen -- All Rights Reserved */ import { CamOp } from './op.js'; import { Tool } from './tool.js'; import { newPolygon } from '../../geo/polygon.js'; import { newSlice } from '../../kiri/slice.js'; import { polygons as POLY } from '../../geo/polygons.js'; class OpLevel extends CamOp { constructor(state, op) { super(state, op); } async slice(progress) { let { op, state } = this; let { settings, widget, addSlices } = state; let { updateToolDiams, tabs, cutTabs } = state; let { bounds, zMax, ztOff, color, tshadow } = state; let { stock } = settings; let toolDiam = new Tool(settings, op.tool).fluteDiameter(); let stepOver = this.stepOver = toolDiam * op.step; let z = zMax + ztOff - op.down; updateToolDiams(toolDiam); let points = []; let clear = op.stock ? [ newPolygon().centerRectangle({x:0,y:0,z:0}, stock.x, stock.y) ] : POLY.outer(POLY.offset(tshadow, toolDiam * (op.over || 0))); POLY.fillArea(clear, 90, stepOver, points); let lines = this.lines = []; for (let i=0; i { return { first: p.first(), last: p.last(), poly: p } }); printPoint = tip2tipEmit(lines, printPoint, (el, point, count) => { let poly = el.poly; if (poly.last() === point) { poly.reverse(); } poly.forEachPoint((point, pidx) => { camOut(point.clone(), true, stepOver); }, false); }); setPrintPoint(printPoint); newLayer(); } } export { OpLevel };