grid-apps-cmms/src/kiri/mode/cam/op-drill.js

74 lines
2.2 KiB
JavaScript
Raw Normal View History

2025-07-05 10:49:09 -04:00
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
import { CamOp } from './op.js';
import { Tool } from './tool.js';
import { newPolygon } from '../../../geo/polygon.js';
import { newSlice } from '../../core/slice.js';
import { newPoint } from '../../../geo/point.js';
2025-07-05 10:49:09 -04:00
class OpDrill extends CamOp {
constructor(state, op) {
super(state, op);
}
async slice(progress) {
let { op, state } = this;
let { settings, addSlices, widget, updateToolDiams } = state;
let { color } = state;
let { drills } = op
2025-07-05 10:49:09 -04:00
let drillTool = new Tool(settings, op.tool),
drillToolDiam = drillTool.fluteDiameter(),
sliceOut = this.sliceOut = [];
const allDrills = drills[widget.id] ?? []
if (allDrills.length === 0) return;
2025-07-05 10:49:09 -04:00
updateToolDiams(drillToolDiam);
// drill points to use center (average of all points) of the polygon
2025-07-15 18:36:35 -04:00
allDrills.forEach((drill) => {
if (!drill.selected) {
2025-07-05 10:49:09 -04:00
return
}
2025-07-05 10:49:09 -04:00
let slice = newSlice(0);
if (op.mark) {
// replace depth with single down peck
drill.depth = op.down
}
2025-07-05 10:49:09 -04:00
drill.zBottom = drill.z - drill.depth;
// for thru holes, follow z thru when set
2025-07-15 18:36:35 -04:00
if ((op.thru > 0)) {
2025-07-05 10:49:09 -04:00
drill.zBottom -= op.thru;
}
2025-07-15 18:36:35 -04:00
const poly = newPolygon()
2025-07-05 10:49:09 -04:00
poly.points.push(newPoint(drill.x, drill.y, drill.z))
poly.points.push(newPoint(drill.x, drill.y, drill.zBottom))
2025-07-05 10:49:09 -04:00
slice.camTrace = { tool: op.tool, rate: op.feed, plunge: op.rate };
slice.camLines = [poly];
slice.output()
.setLayer(state.layername, { face: color, line: color })
2025-07-05 10:49:09 -04:00
.addPolys(slice.camLines);
2025-07-05 10:49:09 -04:00
addSlices(slice);
sliceOut.push(slice);
});
}
prepare(ops, progress) {
let { op, sliceOut } = this;
2025-07-05 10:49:09 -04:00
let { setTool, setSpindle, setDrill, emitDrills } = ops;
if (sliceOut.length === 0) return;
2025-07-05 10:49:09 -04:00
setTool(op.tool, undefined, op.rate);
setDrill(op.down, op.lift, op.dwell);
emitDrills(sliceOut.map(slice => slice.camLines).flat());
2025-07-05 10:49:09 -04:00
}
}
export { OpDrill };