From 9e8c1f4ca856a1a246bcb6714f6795616e9b1f6a Mon Sep 17 00:00:00 2001 From: Neil Gershenfeld <gersh@cba.mit.edu> Date: Thu, 11 Nov 2021 16:54:14 -0500 Subject: [PATCH] start Excellon --- modules/path/formats/gerber | 66 +++++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/modules/path/formats/gerber b/modules/path/formats/gerber index cdea4b1..13dd048 100644 --- a/modules/path/formats/gerber +++ b/modules/path/formats/gerber @@ -1,8 +1,7 @@ // // path to Gerber // -// Neil Gershenfeld -// (c) Massachusetts Institute of Technology 2021 +// Neil Gershenfeld 11/11/21 // // This work may be reproduced, modified, distributed, performed, and // displayed for any purpose, but must acknowledge the mods @@ -157,6 +156,69 @@ function plot() { obj.contents = str outputs.Gerber.event(obj) } + else if (mod.drill.checked == true) { + var ds = [] + var xs = [] + var ys = [] + var sx,sy,sd,x0,y0,d0 + for (var seg = 0; seg < mod.path.length; ++seg) { + // + // find center + // + sx = sy = 0 + for (var pt = 0; pt < mod.path[seg].length; ++pt) { + sx += imgwidth*mod.path[seg][pt][0]V/(mod.imageInfo.width-1) + sy += imgheight*mod.path[seg][pt][1]/(mod.imageInfo.height-1) + } + x0 = sx/mod.path[seg].length + y0 = sy/mod.path[seg].length + sd = 0 + // + // find diameter + // + for (var pt = 0; pt < mod.path[seg].length; ++pt) { + x = imgwidth*mod.path[seg][pt][0]V/(mod.imageInfo.width-1) + y = imgheight*mod.path[seg][pt][1]/(mod.imageInfo.height-1) + sd += 2*Math.sqrt((x-x0)*(x-x0)+(y-y0)*(y-y0)) + } + d0 = sd/mod.path[seg].length + xs.push(x0) + ys.push(y0) + ds.push(d0) + } + // + // sort diameters + // + var drills = {} + for (var hole = 0; hole < ds.length; ++hole) { + key = str(ds[hole].toFixed(2) + if (key in drills) + drills[key].push(hole) + else + drills[key] = [hole] + } + // + // write file + // + str += "M48\n" + str += "INCH,LZ\n" + str += "T01C0.02\n" + str += "M95\n" + str += "G05\n" + str += "T01\n" + str += "X6500Y4500\n" + for (var key in drills) { + for (var hole in drills[key].length) { + str += key+' '+hole+'\n' + } + } + str += "M30\n" + var obj = {} + obj.type = 'file' + obj.name = mod.imageInfo.name+'-drill.gbr' + obj.contents = str + outputs.Gerber.event(obj) + } } // // return values -- GitLab