diff --git a/modules/processes/mill/raster/3D b/modules/processes/mill/raster/3D index 4b6786e049e0b7ad7495116a1d39db5fb967a97a..8ca79093be9c3aaf8d30b70a1fab52f8d5249824 100644 --- a/modules/processes/mill/raster/3D +++ b/modules/processes/mill/raster/3D @@ -131,14 +131,11 @@ var interface = function(div){ // // fit error // - div.appendChild(document.createTextNode('vector fit (%): ')) + div.appendChild(document.createTextNode('vector fit: ')) //div.appendChild(document.createElement('br')) var input = document.createElement('input') input.type = 'text' input.size = 6 - input.addEventListener('change',function(){ - vectorize() - }) div.appendChild(input) mod.error = input div.appendChild(document.createElement('br')) @@ -255,7 +252,7 @@ function calculate_path() { } }) webworker.postMessage({ - h:mod.height,w:mod.width, + h:mod.height,w:mod.width,error:mod.error.value, xmin:mod.xmin,xmax:mod.xmax, ymin:mod.ymin,ymax:mod.ymax, zmin:mod.zmin,zmax:mod.zmax, @@ -268,6 +265,7 @@ function calculate_path_worker() { self.addEventListener('message',function(evt) { var h = evt.data.h var w = evt.data.w + var error = evt.data.error var xmin = evt.data.xmin var xmax = evt.data.xmax var ymin = evt.data.ymin @@ -279,21 +277,46 @@ function calculate_path_worker() { // // line loop // - var ix = 0 - var iy = h-1 - var dx = 1 - var dy = 0 - var iz = Math.floor((map[iy*w+ix]-zmax)*w/(xmax-xmin)) + xstart = 0 + ystart = h-1 + zstart = Math.floor((map[ystart*w+xstart]-zmax)*w/(xmax-xmin)) + path[0].push([xstart,ystart,zstart]) + xcur = 1 + ycur = h-1 + zcur = Math.floor((map[ycur*w+xcur]-zmax)*w/(xmax-xmin)) + dx = 1 + dy = 0 while (1) { - var ixp = ix - var iyp = iy - ix += dx - iy += dy - if (iy <= 0) + xnext = xcur+dx + ynext = ycur+dy + znext = Math.floor((map[ynext*w+xnext]-zmax)*w/(xmax-xmin)) + if (ynext <= 0) break; - var iz = Math.floor((map[iy*w+ix]-zmax)*w/(xmax-xmin)) - path[0].push([ix,iy,iz]) - if (ix == (w-1)) { + dxcur = xcur-xstart + dycur = ycur-ystart + dzcur = zcur-zstart + dcur = Math.sqrt(dxcur*dxcur+dycur*dycur+dzcur*dzcur) + nxcur = dxcur/dcur + nycur = dycur/dcur + nzcur = dzcur/dcur + dxnext = xnext-xcur + dynext = ynext-ycur + dznext = znext-xcur + 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) { + path[0].push([xcur,ycur,zcur]) + xstart = xcur + ystart = ycur + zstart = zcur + } + xcur = xnext + ycur = ynext + zcur = znext + if (xcur == (w-1)) { if (dx == 1) { dx = 0 dy = -10 @@ -303,7 +326,7 @@ function calculate_path_worker() { dy = 0 } } - else if (ix == 0) { + else if (xcur == 0) { if (dx == -1) { dx = 0 dy = -10