Commit 10aa5d73 authored by Neil Gershenfeld's avatar Neil Gershenfeld
Browse files

3D vectorization working?

parent d124f0e7
......@@ -27,7 +27,7 @@ var init = function() {
mod.dia_in.value = 0.0156
mod.dia_mm.value = 25.4*parseFloat(mod.dia_in.value)
mod.stepover.value = 0.5
mod.error.value = 1
mod.error.value = 0.001
}
//
// inputs
......@@ -38,12 +38,14 @@ var inputs = {
mod.map = evt.detail.map
mod.width = evt.detail.width
mod.height = evt.detail.height
mod.depth = Math.floor((mod.zmax-mod.zmin)*mod.width/(mod.xmax-mod.xmin))
mod.xmin = evt.detail.xmin
mod.xmax = evt.detail.xmax
mod.ymin = evt.detail.ymin
mod.ymax = evt.detail.ymax
mod.zmin = evt.detail.zmin
mod.zmax = evt.detail.zmax
mod.dpi = mod.width/(mod.xmax-mod.xmin)
var ctx = mod.img.getContext("2d")
ctx.canvas.width = mod.width
ctx.canvas.height = mod.height
......@@ -54,14 +56,15 @@ var inputs = {
var outputs = {
toolpath:{type:'',
event:function(){
cmd = {}
cmd.path = mod.path
cmd.name = mod.name
cmd.dpi = mod.dpi
cmd.width = mod.width
cmd.height = mod.height
cmd.depth = mod.depth
mods.output(mod,'toolpath',cmd)
obj = {}
obj.path = mod.path
obj.name = "mill raster 3D"
obj.dpi = mod.dpi
obj.width = mod.width
obj.height = mod.height
obj.depth = mod.depth
mods.output(mod,'toolpath',obj)
console.log(mod.path[0].length)
}}}
//
// interface
......@@ -216,7 +219,9 @@ function calculate_path() {
var url = window.URL.createObjectURL(blob)
var webworker = new Worker(url)
webworker.addEventListener('message',function(evt) {
mod.triangles = evt.data.triangles
//
// webworker handler
//
mod.path = evt.data.path
mod.label.nodeValue = 'calculate'
mod.labelspan.style.fontWeight = 'normal'
......@@ -240,7 +245,8 @@ function calculate_path() {
var ix = mod.path[0][i][0]
var iy = mod.path[0][i][1]
var iz = 0.1*mod.path[0][i][2]
var line = document.createElementNS('http://www.w3.org/2000/svg','line')
var line = document.createElementNS(
'http://www.w3.org/2000/svg','line')
line.setAttribute('stroke','black')
line.setAttribute('stroke-width',1)
line.setAttribute('stroke-linecap','round')
......@@ -250,7 +256,14 @@ function calculate_path() {
line.setAttribute('y2',iy-iz)
g.appendChild(line)
}
//
// output path
//
outputs.toolpath.event()
})
//
// call webworker
//
webworker.postMessage({
h:mod.height,w:mod.width,error:mod.error.value,
xmin:mod.xmin,xmax:mod.xmax,
......@@ -275,7 +288,7 @@ function calculate_path_worker() {
var map = evt.data.map
var path = [[]]
//
// line loop
// loop over lines
//
xstart = 0
ystart = h-1
......@@ -287,6 +300,9 @@ function calculate_path_worker() {
dx = 1
dy = 0
while (1) {
//
// vectorize
//
xnext = xcur+dx
ynext = ycur+dy
znext = Math.floor((map[ynext*w+xnext]-zmax)*w/(xmax-xmin))
......@@ -301,13 +317,13 @@ function calculate_path_worker() {
nzcur = dzcur/dcur
dxnext = xnext-xcur
dynext = ynext-ycur
dznext = znext-xcur
dznext = znext-zcur
dnext = Math.sqrt(dxnext*dxnext+dynext*dynext+dznext*dznext)
nxnext = dxnext/dnext
nynext = dynext/dnext
nznext = dznext/dnext
dot = nxcur*nxnext+nycur*nynext+nzcur*nznext
if (Math.abs(dot) >= error) {
if (dot <= (1-error)) {
path[0].push([xcur,ycur,zcur])
xstart = xcur
ystart = ycur
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment