From f77eb0e989fd5f4c760793171b8f12e900251cef Mon Sep 17 00:00:00 2001 From: bakedpotatolord Date: Thu, 24 Apr 2025 11:41:27 -0600 Subject: [PATCH] add diameter detection --- src/kiri-mode/cam/client.js | 14 ++++++++--- src/kiri-mode/cam/slice.js | 49 +++++++++++++++++-------------------- 2 files changed, 33 insertions(+), 30 deletions(-) diff --git a/src/kiri-mode/cam/client.js b/src/kiri-mode/cam/client.js index 527730b2..0aacd195 100644 --- a/src/kiri-mode/cam/client.js +++ b/src/kiri-mode/cam/client.js @@ -1158,20 +1158,26 @@ CAM.init = function(kiri, api) { }; - func.selectIndividualHoles = function(){ + func.selectIndividualHoles = function(ev){ console.log("func.selectIndividualHoles not implemented"); + + let holes = CAM.holes((centers)=>{ //cam holes takes <=0 diameter to mean select all holes + + console.log("all centers",centers) + + },0); + } - func.selectAllHoles= function(data, getRec){ + func.selectAllHoles= function(ev, getRec){ let settings = API.conf.get(); const {tool,mark} = getRec(); const diam = new CAM.Tool(settings,tool).fluteDiameter() - console.log("func.selectAllHoles not implemented"); let holes = CAM.holes((centers)=>{ //cam holes takes <=0 diameter to mean select all holes - console.log("client received centers",centers) + console.log("tool specified centers",centers) },diam); } diff --git a/src/kiri-mode/cam/slice.js b/src/kiri-mode/cam/slice.js index fec9d513..9ab2873f 100644 --- a/src/kiri-mode/cam/slice.js +++ b/src/kiri-mode/cam/slice.js @@ -460,13 +460,12 @@ CAM.holes = async function(settings, widget, diam) { .filter(z => z !== null) )] - let centerDiff = diam * 0.1, area = (diam/2) * (diam/2) * Math.PI, areaDelta = area * 0.05, - drills = []; - - let slices = []; + drills = [], + slices = [], + selectall = diam <= 0; function onEach(slice) { slices.push(slice); @@ -474,39 +473,37 @@ CAM.holes = async function(settings, widget, diam) { let opts = { each: onEach, over: false, flatoff: 0, edges: true, openok: false, lines: false }; await slicer.slice(indices, opts); - const tslices = slices.map(s=>s.tops).flat() - for (let slice of tslices) { slice.shadow = CAM.shadowAt(widget,slice.z, 0) - console.log("looking at slice",slice) + // console.log("looking at slice",slice) let inner = slice.inner; for (let poly of inner) { - if (poly.circularity() >= 0.985 && Math.abs(poly.area() - area) <= areaDelta) { - let center = poly.calcCircleCenter(); + let center = poly.calcCircleCenter(); + + center.isSelected = (selectall || (poly.circularity() >= 0.985 && Math.abs(poly.area() - area) <= areaDelta )); + - if (center.isInPolygon(slice.shadow)) { + if (center.isInPolygon(slice.shadow)) { + //TODO: test if this is working + continue; + } + let overlap = false; + for (let [i,drill] of drills.entries()) { + let dist = drill.distTo2D(center) + if (dist <= centerDiff) { // too close + // console.log("overlap",center,drill); + if(center.z > drill.z) { //if current is higher than old + drills[i] = center; + } + // otherwise, don't add and continue + overlap = true; continue; } - let overlap = false; - for (let [i,drill] of drills.entries()) { - let dist = drill.distTo2D(center) - if (dist <= centerDiff) { // too close - - console.log("overlap",center,drill); - if(center.z > drill.z) { //if current is higher than old - - drills[i] = center; - } - // otherwise, don't add and continue - overlap = true; - continue; - } - } - if(!overlap) drills.push(center); } + if(!overlap) drills.push(center); } }