update preview point rotation. fix state sensitive visuals

This commit is contained in:
Stewart Allen 2022-11-03 14:35:02 -04:00
commit f53b9825cb
7 changed files with 44 additions and 10 deletions

View file

@ -75,6 +75,7 @@
* `B` need to force cut line at synthetic z bottom (midlines, etc)
* `B` contour does not honor clip to stock
* `F` import and follow 2D paths (conformed like pocket contours)
* `F` add user-defined origin (issue #28)
* `F` add custom gcode operation for things like injecting pauses
* `F` all ops should allow limit and milling direction / ease down overrides

View file

@ -104,8 +104,8 @@ kiri.load(() => {
geo.setIndex(new THREE.BufferAttribute(ia, 1));
const mat = new THREE.MeshMatcapMaterial({
flatShading: true,
transparent: true,
opacity: 0.1,
transparent: false,
opacity: 1,
color: 0x888888,
side: THREE.DoubleSide
});
@ -366,6 +366,7 @@ kiri.load(() => {
const { process } = settings;
const print = worker.print;
const density = parseInt(settings.controller.animesh) * 1000;
const isIndexed = process.camStockOn && process.camStockIndexed;
pathIndex = 0;
path = print.output.flat();
@ -381,11 +382,11 @@ kiri.load(() => {
indexCount = 0;
startTime = 0;
updates = 0;
stockZ = stock.z;
stockZ = isIndexed ? 0 : stock.z;
stockSlices = [];
const { x, y, z } = stock;
const sliceCount = 1;
const sliceCount = 10;
const sliceWidth = stock.x / sliceCount;
for (let i=0; i<sliceCount; i++) {
let xmin = -(x/2) + (i * sliceWidth) + sliceWidth / 2;
@ -452,6 +453,7 @@ kiri.load(() => {
return;
}
pathIndex++;
// console.log(next.point.z);
if (next.tool >= 0 && (!tool || tool.getNumber() !== next.tool)) {
// on real tool change, go to safe Z first

View file

@ -14,6 +14,7 @@ const { CAM } = driver;
let isAnimate,
isArrange,
isPreview,
isCamMode,
isIndexed,
isParsed,
@ -153,10 +154,17 @@ CAM.init = function(kiri, api) {
api.event.on("view.set", (mode) => {
isArrange = (mode === VIEWS.ARRANGE);
isPreview = (mode === VIEWS.PREVIEW);
isAnimate = false;
animFn().animate_clear(api);
func.clearPops();
$('camops').style.display = isCamMode && isArrange ? 'flex' : '';
if (isCamMode && isPreview) {
for (let widget of API.widgets.all()) {
widget.setAxisIndex(0);
}
updateStock();
}
});
api.event.on("settings.saved", (settings) => {
@ -596,11 +604,10 @@ CAM.init = function(kiri, api) {
}
}
// update widget rotations from timeline marker
if (isIndexed)
for (let widget of API.widgets.all()) {
widget.setAxisIndex(-index);
widget.setAxisIndex(isPreview || !isIndexed ? 0 : -index);
}
currentIndex = isIndexed ? index * (Math.PI / 180) : 0;
currentIndex = isIndexed && !isPreview ? index * (Math.PI / 180) : 0;
updateStock();
});

View file

@ -481,7 +481,6 @@ class OpOutline extends CamOp {
max: op.top ? zMax + ztOff : undefined
};
let indices = slicer.interval(op.down, intopt);
console.log({slicer, indices, zBottom});
let trueShadow = process.camTrueShadow === true;
// shift out first (top-most) slice
indices.shift();

View file

@ -69,6 +69,7 @@ function prepEach(widget, settings, print, firstPoint, update) {
outerz = outer.max.z,
slices = widget.slices,
hasStock = stock.x && stock.y && stock.z && process.camStockOn,
isIndexed = hasStock && process.camStockIndexed,
startCenter = process.outputOriginCenter,
alignTop = settings.controller.alignTop,
zclear = (process.camZClearance || 1),
@ -78,7 +79,7 @@ function prepEach(widget, settings, print, firstPoint, update) {
ztOff = hasStock ? stock.z - wztop : 0,
bounds = widget.getBoundingBox(),
boundsz = bounds.max.z + ztOff,
zadd = hasStock ? stock.z - boundsz : alignTop ? outerz - boundsz : 0,
zadd = hasStock && !isIndexed ? stock.z - boundsz : alignTop ? outerz - boundsz : 0,
zmax = outerz + zclear,
wmpos = widget.track.pos,
wmx = wmpos.x,
@ -296,6 +297,7 @@ function prepEach(widget, settings, print, firstPoint, update) {
point.y += wmy;
point.z += zadd;
// console.log(point.z);
if (nextIsMove) {
cut = 0;
nextIsMove = false;

View file

@ -157,7 +157,7 @@ CAM.slice = function(settings, widget, onupdate, ondone) {
slices = [ slices ];
}
sliceAll.appendAll(slices);
if (axisIndex !== undefined) {
if (isIndexed && axisIndex !== undefined) {
// update slice cam lines to add axis indexing
for (let slice of slices.filter(s => s.camLines)) {
for (let poly of slice.camLines) {

View file

@ -15,6 +15,8 @@ gapp.register("kiri.render", [], (root, exports) => {
const { base, kiri } = root;
const { config, util, newPolygon } = base;
const hsV = 0.9;
const XAXIS = new THREE.Vector3(1,0,0);
const DEG2RAD = Math.PI / 180;
exports({
path,
@ -126,6 +128,7 @@ async function path(levels, update, opts = {}) {
const retracts = [];
const engages = [];
const lasers = [];
const sparks = [];
const output = new kiri.Layers();
layers.push(output);
@ -165,6 +168,19 @@ async function path(levels, update, opts = {}) {
return;
}
// rotate 4th axis indexed points
// todo -- add spark lines
if (out.point.a) {
let { point } = out;
let p2 = new THREE.Vector3(point.x, point.y, point.z)
.applyAxisAngle(XAXIS, point.a * DEG2RAD);
out.point.x = p2.x;
out.point.y = p2.y;
out.point.z = p2.z;
// let sp = base.newPoint(out.point.x * 1.1, out.point.y * 1.1, out.point.z * 1.1);
// sparks.push(out.point, sp);
}
if (lastOut) {
if (arrowAll || lastOut.emit !== out.emit) {
heads.push({p1: lastOut.point, p2: out.point});
@ -261,6 +277,13 @@ async function path(levels, update, opts = {}) {
}), { outline: true });
}
if (thin && sparks.length) {
let line = dark ? 0xffffff : 0x112233;
output
.setLayer('sparks', { face: headColor, line, opacity: 0.75 }, true)
.addLines(sparks, { thin: true });
}
if (thin && heads.length) {
let line = dark ? 0xffffff : 0x112233;
output