add diameter detection
This commit is contained in:
parent
756e0dccb5
commit
f77eb0e989
2 changed files with 33 additions and 30 deletions
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue