diff --git a/notes.md b/notes.md index c8075b81..287705ee 100644 --- a/notes.md +++ b/notes.md @@ -9,6 +9,7 @@ * `P` allow selection to be decimated on demand (context menu?) * `P` improve decimation speed: omit point conversion or use wasm * `P` explore widget vertex reloading / replacing (Onshape) (issue #48) +* `P` move all persisted / workspace settings/data to IndexedDB (LS limitations) * `F` SVG import to 3D part like images * `F` show slider range values in workspace units (on hover?) @@ -20,18 +21,15 @@ # FDM -* `B` re-calibrate slicing progress weighting -* `B` infill densities are inaccurate * `B` fix support projection/end with grouped parts * `B` multi-extruder rendering of raft fails to offset the rest of the print * `B` multi-extruder purge blocks fail to generate properly for rafts -* `F` support pillar should conform to part +* `F` support pillar top/bottom should conform to part * `F` support pillar should have solid top/bottom * `F` more explicit line width control with ranges and min/max adaptive * `F` test outlining solid projected areas (internally) * `F` control for size of purge block (with 0=disabled) -* `F` polishing and other non-planar work * `F` gradient infill https://www.youtube.com/watch?v=hq53gsYREHU&feature=emb_logo * `F` feather sharp tips by reducing extrusion in area of overlap * `F` first layer segment large flat areas for better fill reliability @@ -56,11 +54,10 @@ # FDM - BELT * `B` auto bed resizing leaves the origin in the wrong place at first -* `B` multiple parts with one angled against origin "floats" in preview * `B` re-add progress calls for all work units +* `F` refactor brims to be generated at slice time * `F` anchors should be generated anywhere needed in the print, not just head -* `F` brims should extend between branches and have a slight offset from part * `F` slightly angle supports to lean into the Z of the part * `F` arrange should align down Z, not side to side. @@ -68,11 +65,11 @@ * `B` tabs are not cut to exact height * `B` first rough step too far down in certain circumstances? -* `B` trace open polys are not wound consistently -* `B` path routing with tabs sometimes makes no sense +* `B` trace open polys are not wound consistently? +* `B` path routing with tabs sometimes makes no sense (still?) * `B` need to force cut line at synthetic z bottom (midlines, etc) -* `F` limit cut depth to flute length of selected tool +* `F` limit cut depth to flute length of selected tool (or warn) * `F` add ease-down support to trace op * `F` add linear clearing strategy * `F` add adaptive clearing strategy @@ -80,7 +77,7 @@ * `F` intelligently turn circle hole pocket clear into spiral down * `F` trace follow hole that matches endmill should turn into a drill op * `F` add climb/conventional into each operation -* `F` update analyzer to detect overhangs +* `F` update analyzer to detect overhangs from faces, not slices * `F` extend acute roughing on inside polys to clear small voids * `F` option to use part / STL coordinate space to determine X,Y origin * `F` validate muti-part layout and spacing exceeds largest outside tool diameter @@ -88,7 +85,7 @@ * `F` parameterize dropping close points in prep.js. ensure long segments remain straight * `F` flat and volumetric rendering of paths * `F` z planar settings visualizations -* `F` convert acute angles to arcs +* `F` convert acute angles to arcs to avoid jerk * `F` lead-in milling * `F` trapezoidal tabs in Z * `F` ease-in and ease-out especially on tab cut-out start/stop diff --git a/package.json b/package.json index 9b164524..e8ece712 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "grid-apps", - "version": "2.9.8D", + "version": "2.9.9D", "description": "grid.space 3d slice & modeling tools", "author": "Stewart Allen ", "license": "MIT", diff --git a/src/kiri.js b/src/kiri.js index 77a84090..cfafa0eb 100644 --- a/src/kiri.js +++ b/src/kiri.js @@ -6,7 +6,7 @@ if (!self.kiri) { self.kiri = { - beta: 2908, + beta: 2909, driver: {}, // driver modules loader: [] // module loading: array of functions }; diff --git a/src/kiri/client.js b/src/kiri/client.js index 6b475fbd..28eea92c 100644 --- a/src/kiri/client.js +++ b/src/kiri/client.js @@ -32,15 +32,16 @@ function send(fn, data, onreply, zerocopy) { // track it only when we expect and can handle a reply running[seq] = { fn:onreply }; } - // console.log('send', {fn, data, onreply}); - + let msg = { + seq: seq, + task: fn, + time: time(), + data: data + }; + // console.log('client send', msg); + // if (!fn) { console.trace({empty_fn: data}) }; try { - worker.postMessage({ - seq: seq, - task: fn, - time: time(), - data: data - }, zerocopy); + worker.postMessage(msg, zerocopy); } catch (error) { console.trace('work send error', {data, error}); } @@ -92,13 +93,13 @@ KIRI.work = { running = {}; worker = KIRI.work.newWorker(); - worker.onmessage = function(e) { + CLIENT.onmessage = worker.onmessage = function(e) { let now = time(), reply = e.data, record = running[reply.seq], onreply = record ? record.fn : undefined; - // console.log('recv', reply.data) + // console.log('client recv', e) if (reply.done) { delete running[reply.seq]; } diff --git a/src/kiri/widget.js b/src/kiri/widget.js index b1edc150..8615d063 100644 --- a/src/kiri/widget.js +++ b/src/kiri/widget.js @@ -633,6 +633,12 @@ return 0; }; + // allow worker code to run in same memspace as client + PRO.setInWorker = function() { + this.inWorker = true; + return this; + }; + /** * processes points into facets, then into slices * @@ -654,7 +660,7 @@ widget.clearSlices(); onupdate(0.0001, "slicing"); - if (KIRI.client) { + if (KIRI.client && !widget.inWorker) { // in case result of slice is nothing, do not preserve previous widget.slices = [] diff --git a/src/kiri/worker.js b/src/kiri/worker.js index 9e150342..f5703c91 100644 --- a/src/kiri/worker.js +++ b/src/kiri/worker.js @@ -74,7 +74,7 @@ KIRI.worker = { wgroup[data.group] = group; } let vertices = new Float32Array(data.vertices), - widget = KIRI.newWidget(data.id, group).loadVertices(vertices); + widget = KIRI.newWidget(data.id, group).loadVertices(vertices).setInWorker(); // do it here so cancel can work wcache[data.id] = widget; @@ -560,9 +560,15 @@ KIRI.worker = { } }; -self.onmessage = function(e) { +dispatch.send = (msg) => { + // console.log('worker send', msg); + self.postMessage(msg); +}; + +dispatch.onmessage = self.onmessage = function(e) { + // console.log('worker recv', e); let time_recv = time(), - msg = e.data, + msg = e.data || {}, run = dispatch[msg.task], send = { data : function(data,direct) { @@ -572,7 +578,7 @@ self.onmessage = function(e) { // sz:direct.map(z => z.byteLength).reduce((a,v) => a+v) // }); // } - self.postMessage({ + dispatch.send({ seq: msg.seq, task: msg.task, done: false, @@ -586,7 +592,7 @@ self.onmessage = function(e) { // sz:direct.map(z => z.byteLength).reduce((a,v) => a+v) // }); // } - self.postMessage({ + dispatch.send({ seq: msg.seq, task: msg.task, done: true, @@ -602,7 +608,7 @@ self.onmessage = function(e) { time_send = time(), time_proc = time_send - time_recv; - if (output) self.postMessage({ + if (output) dispatch.send({ seq: msg.seq, task: msg.task, time_send: time_xfer, @@ -617,7 +623,7 @@ self.onmessage = function(e) { send.done({error: wrkerr.toString()}); } } else { - console.log({kiri_msg:e}); + console.log({worker_unhandled: e, msg, fn: dispatch[msg.task]}); } }; diff --git a/src/license.js b/src/license.js index adde0822..82a40198 100644 --- a/src/license.js +++ b/src/license.js @@ -3,7 +3,7 @@ let terms = { COPYRIGHT: "Copyright (C) Stewart Allen - All Rights Reserved", LICENSE: "See the license.md file included with the source distribution", - VERSION: "2.9.D8" + VERSION: "2.9.D9" }; if (typeof(module) === 'object') {