From 4ca0a26af54401eb10fb965c35f6ba4b597ae1cd Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 6 Nov 2020 21:43:28 -0500 Subject: [PATCH] start new slice / layer / render system --- app.js | 2 ++ src/kiri/codec.js | 31 +++++++++++++++++++++++++- src/kiri/render.js | 50 ++++++++++++++++++++++++++++++++++++++++++ src/kiri/slice.js | 9 ++++++++ src/mode/cam/client.js | 39 ++++++++++++++++++++++++++++++++ src/mode/cam/slice.js | 11 ++++------ 6 files changed, 134 insertions(+), 8 deletions(-) create mode 100644 src/kiri/render.js diff --git a/app.js b/app.js index b83c1e4d..f65154b4 100644 --- a/app.js +++ b/app.js @@ -262,6 +262,7 @@ const script = { "kiri/fill", "kiri/db", "kiri/slice", + "kiri/render", // "kiri/slicer", "mode/fdm/driver", "mode/fdm/client", @@ -306,6 +307,7 @@ const script = { "moto/pack", "kiri/fill", "kiri/slice", + "kiri/render", "kiri/slicer", "kiri/slicer2", "mode/fdm/driver", diff --git a/src/kiri/codec.js b/src/kiri/codec.js index 1b2bcbc1..e69214d6 100644 --- a/src/kiri/codec.js +++ b/src/kiri/codec.js @@ -94,7 +94,8 @@ bridges: encode(this.bridges, state), flats: encode(this.flats, state), solids: encode(this.solids, state), - supports: encode(this.supports, state) + supports: encode(this.supports, state), + render: encode(this.render, state) }; }; @@ -108,10 +109,38 @@ slice.flats = decode(v.flats, state); slice.solids = decode(v.solids, state); slice.supports = decode(v.supports, state); + slice.render = decode(v.render, state) return slice; }); + KIRI.Render.prototype.encode = function(state) { + let enc = { + type: 'render', + layers: Object.keys(this.layers), + data: Object.values(this.layers).map(layer => { return { + polys: encode(layer.polys, state), + lines: encodePointArray(layer.lines, state), + faces: encodePointArray(layer.faces, state), + color: layer.color + } }) + }; + return enc; + }; + + registerDecoder('render', function(v, state) { + let render = new KIRI.Render(); + for (let i=0; i -- All Rights Reserved */ + +"use strict"; + +(function() { + class Render { + constructor() { + this.layers = {}; + } + + setLayer(layer, color) { + let layers = this.layers; + this.current = layers[layer] = layers[layer] || { + lines: [], + polys: [], + faces: [], + color: color || 0 + }; + return this; + } + + addLine(p1, p2) { + this.current.lines.push(p1, p2); + return this; + } + + addPoly(poly) { + this.current.polys.push(poly); + // const lines = this.current.lines; + // const points = poly.points; + // const len = points.length; + // for (let i=1; i { tshadow = POLY.union(tshadow.appendAll(data.tops), 0.01, true); tslices.push(data.slice); - // let slice = data.slice; - // slice.z = data.z; - // slice.index = sliceIndex++; - // slice.camMode = PRO.LEVEL; - // slice.tops[0].inner = POLY.setZ(tshadow.clone(true), data.z); - // sliceAll.push(slice); - // onupdate(opSum + (index/total) * opOn[1], opOn[0]); + // sliceAll.push(data.slice); + // data.slice.output() + // .setLayer("debug", 0xff0000) + // .addPolys(POLY.setZ(tshadow.clone(true), data.z)); updateOp(index, total); }, genso: true }); let shadowTop = terrain[terrain.length - 1];