move src2 -> src, web2 -> web, remove old module system, fix deps

This commit is contained in:
Stewart Allen 2025-07-06 23:44:33 -04:00
commit ce4f5d6e78
488 changed files with 26179 additions and 26609 deletions

View file

@ -1,34 +1,32 @@
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict";
import { base, util } from '../../geo/base.js';
import { broker } from '../../moto/broker.js';
import { decode, decodePointArray, encode, encodePointArray } from '../../kiri/codec.js';
import { newLine, newOrderedLine } from '../../geo/line.js';
import { newPoint } from '../../geo/point.js';
import { newSlice } from '../../kiri/slice.js';
import { polygons as POLY } from '../../geo/polygons.js';
import { slicer } from '../../geo/slicer.js';
/**
* Slicing engine used by CAM
*/
// dep: kiri.slice
// dep: moto.broker
gapp.register("kiri-mode.cam.slicer", [], (root, exports) => {
const { base, kiri, moto } = root;
const { config, util, polygons, newOrderedLine, newPoint, newLine } = base;
const { sliceConnect, sliceDedup } = base;
const { newSlice } = kiri;
const POLY = polygons;
const { sliceConnect, sliceDedup } = slicer;
const { config } = base;
const timing = false;
const begin = function() {
const begin = function () {
if (timing) console.time(...arguments);
};
const end = function() {
const end = function () {
if (timing) console.timeEnd(...arguments);
};
class Slicer {
export class Slicer {
constructor(widget, options = { zlist: true, zline: true, lines: false }) {
this.minions = self.kiri_worker.minions;
this.options = {};
this.setOptions(options);
if (widget) {
this.setPoints(widget.getGeoVertices({ unroll: true, translate: true }));
this.computeFeatures();
@ -76,15 +74,15 @@ class Slicer {
zList[z] = (zList[z] || 0) + 1;
}
let p1 = newPoint(0,0,0),
p2 = newPoint(0,0,0),
p3 = newPoint(0,0,0);
let p1 = newPoint(0, 0, 0),
p2 = newPoint(0, 0, 0),
p3 = newPoint(0, 0, 0);
// for (let i = 0, il = points.length; i < il; i++) {
// points[i] = points[i].round(5);
// }
for (let i = 0, il = points.length; i < il; ) {
for (let i = 0, il = points.length; i < il;) {
p1.set(points[i++], points[i++], points[i++]);
p2.set(points[i++], points[i++], points[i++]);
p3.set(points[i++], points[i++], points[i++]);
@ -102,7 +100,7 @@ class Slicer {
if (p1.z === p2.z && p2.z === p3.z) {
// detect zFlat faces to avoid slicing directly on them
let zkey = p1.z.toFixed(5),
area = Math.abs(util.area2(p1,p2,p3)) / 2;
area = Math.abs(util.area2(p1, p2, p3)) / 2;
if (!zFlat[zkey]) {
zFlat[zkey] = area;
} else {
@ -157,7 +155,7 @@ class Slicer {
// sort Z and offset when on a flat
const flatoff = util.numOrDefault(opt.flatoff, 0.01);
zs = zs.sort((a,b) => a-b).map(z => {
zs = zs.sort((a, b) => a - b).map(z => {
if (!flatoff) {
return z;
}
@ -185,13 +183,13 @@ class Slicer {
b += step;
}
let p1 = newPoint(0,0,0),
p2 = newPoint(0,0,0),
p3 = newPoint(0,0,0),
let p1 = newPoint(0, 0, 0),
p2 = newPoint(0, 0, 0),
p3 = newPoint(0, 0, 0),
ep = 0.001;
begin("create buckets");
for (let i = 0, il = points.length; i < il; ) {
for (let i = 0, il = points.length; i < il;) {
p1.set(points[i++], points[i++], points[i++]);
p2.set(points[i++], points[i++], points[i++]);
p3.set(points[i++], points[i++], points[i++]);
@ -219,7 +217,7 @@ class Slicer {
// console.log({ zs, zlen, count, step, buckets, flatoff });
begin("slicing");
const { minions } = kiri;
const { minions } = this;
const threaded = minions && minions.running;
const sliceFn = (threaded ? this.sliceBucketMinion : this.sliceBucket).bind(this);
const track = { count: 0, total: zs.length };
@ -238,7 +236,7 @@ class Slicer {
}
const data = (await Promise.all(promises)).flat();
data.sort((a,b) => b.z - a.z).forEach((rec, i) => {
data.sort((a, b) => b.z - a.z).forEach((rec, i) => {
rec.tops = rec.polys;
rec.slice = newSlice(rec.z).addTops(rec.tops);
if (opt.each) {
@ -253,9 +251,8 @@ class Slicer {
}
async sliceBucketMinion(bucket, opt, oneach) {
const { decode, decodePointArray } = kiri.codec;
const slices = (await new Promise(resolve => {
kiri.minions.queue({
this.minions.queue({
cmd: "cam_slice",
opt: Object.clone(opt),
bucket,
@ -300,16 +297,16 @@ class Slicer {
// const { points } = this,
const points = indices,
p1 = newPoint(0,0,0),
p2 = newPoint(0,0,0),
p3 = newPoint(0,0,0);
p1 = newPoint(0, 0, 0),
p2 = newPoint(0, 0, 0),
p3 = newPoint(0, 0, 0);
for (let index = 0; index < points.length; ) {
for (let index = 0; index < points.length;) {
p1.set(points[index++], points[index++], points[index++]);
p2.set(points[index++], points[index++], points[index++]);
p3.set(points[index++], points[index++], points[index++]);
let where = {under: [], over: [], on: []};
let where = { under: [], over: [], on: [] };
checkOverUnderOn(p1, z, where);
checkOverUnderOn(p2, z, where);
checkOverUnderOn(p3, z, where);
@ -337,7 +334,7 @@ class Slicer {
if (line.length === 2) {
lines.push(makeZLine(phash, line[0], line[1]));
} else {
console.log({msg: "invalid ips", line: line, where: where});
console.log({ msg: "invalid ips", line: line, where: where });
}
}
}
@ -347,7 +344,8 @@ class Slicer {
lines = sliceDedup(lines, debug);
}
return lines.length ? { z,
return lines.length ? {
z,
lines: opt.lines !== false ? lines : undefined,
polys: links ? POLY.nest(sliceConnect(lines, opt, debug)) : undefined
} : null;
@ -370,12 +368,12 @@ class Slicer {
step = (zmax - zmin) / count;
}
if (opt.down) {
for (let i=0; i<count; i++) {
for (let i = 0; i < count; i++) {
array.push(zmax);
zmax -= step;
}
} else {
for (let i=0; i<count; i++) {
for (let i = 0; i < count; i++) {
array.push(zmin);
zmin += step;
}
@ -395,13 +393,13 @@ class Slicer {
}
});
// add over and under all flats by 'off'
array.appendAll(add).sort((a,b) => {
return opt.down ? b-a : a-b;
array.appendAll(add).sort((a, b) => {
return opt.down ? b - a : a - b;
});
}
// filter duplicate values
array = array.map(v => v.round(5)).filter((e,i,a) => i < 1 || a[i-1] !== a[i]);
array = array.map(v => v.round(5)).filter((e, i, a) => i < 1 || a[i - 1] !== a[i]);
// return array.map(v => Math.abs(parseFloat(v.toFixed(5))));
return array.map(v => parseFloat(v.toFixed(5)));
@ -474,7 +472,7 @@ function getCachedPoint(phash, p) {
function makeZLine(phash, p1, p2, coplanar, edge) {
p1 = getCachedPoint(phash, p1.clone());
p2 = getCachedPoint(phash, p2.clone());
let line = newOrderedLine(p1,p2);
let line = newOrderedLine(p1, p2);
line.coplanar = coplanar || false;
line.edge = edge || false;
return line;
@ -483,9 +481,7 @@ function makeZLine(phash, p1, p2, coplanar, edge) {
Slicer.checkOverUnderOn = checkOverUnderOn;
Slicer.intersectPoints = intersectPoints;
kiri.cam_slicer = Slicer;
moto.broker.subscribe("minion.started", msg => {
broker.subscribe("minion.started", msg => {
const { funcs, cache, reply, log } = msg;
funcs.cam_slice_init = () => {
@ -498,7 +494,6 @@ moto.broker.subscribe("minion.started", msg => {
funcs.cam_slice = (data, seq) => {
const { bucket, opt } = data;
const { encode, encodePointArray } = kiri.codec;
// log({ slice: bucket, opt });
cache.slicer.sliceBucket(bucket, opt, slice => {
// console.log({ slice });
@ -514,5 +509,3 @@ moto.broker.subscribe("minion.started", msg => {
});
};
});
});