correct stock rendering when indexed

This commit is contained in:
Stewart Allen 2022-11-01 13:48:55 -04:00
commit fd75da4aac
4 changed files with 14 additions and 4 deletions

View file

@ -20,6 +20,7 @@ let isAnimate,
camStock, camStock,
camZBottom, camZBottom,
current, current,
currentIndex,
flipping, flipping,
poppedRec, poppedRec,
hoveredOp, hoveredOp,
@ -78,7 +79,6 @@ CAM.init = function(kiri, api) {
settings.process.camZAnchor = "middle"; settings.process.camZAnchor = "middle";
} }
animVer = isIndexed ? 1 : 0; animVer = isIndexed ? 1 : 0;
updateStock();
SPACE.platform.setVisible(!isIndexed); SPACE.platform.setVisible(!isIndexed);
for (let widget of api.widgets.all()) { for (let widget of api.widgets.all()) {
widget.setIndexed(camStock && isIndexed ? camStock.scale.z : 0); widget.setIndexed(camStock && isIndexed ? camStock.scale.z : 0);
@ -95,7 +95,10 @@ CAM.init = function(kiri, api) {
func.opAdd(popOp['|'].new()); func.opAdd(popOp['|'].new());
} else if (!isIndexed && clockOp) { } else if (!isIndexed && clockOp) {
func.opDel(clockOp); func.opDel(clockOp);
} else {
func.opRender();
} }
updateStock();
} }
api.event.on("widget.add", widget => { api.event.on("widget.add", widget => {
@ -586,6 +589,7 @@ CAM.init = function(kiri, api) {
for (let widget of API.widgets.all()) { for (let widget of API.widgets.all()) {
widget.setAxisIndex(-index); widget.setAxisIndex(-index);
} }
currentIndex = isIndexed ? index * (Math.PI / 180) : 0;
}); });
func.opGCode = (label, field = 'gcode') => { func.opGCode = (label, field = 'gcode') => {
@ -1714,6 +1718,7 @@ function updateStock(args, event) {
camStock.position.x = csox; camStock.position.x = csox;
camStock.position.y = csoy; camStock.position.y = csoy;
camStock.position.z = csz / 2; camStock.position.z = csz / 2;
camStock.rotation.x = currentIndex || 0;
if (isIndexed) { if (isIndexed) {
camStock.position.z = 0; camStock.position.z = 0;
} }
@ -1752,7 +1757,7 @@ function updateStock(args, event) {
const {x, y, z} = stock; const {x, y, z} = stock;
if (x && y && z && !STACKS.getStack('bounds')) { if (x && y && z && !STACKS.getStack('bounds')) {
const render = new kiri.Layers().setLayer('bounds', { face: 0xaaaaaa, line: 0xaaaaaa }); const render = new kiri.Layers().setLayer('bounds', { face: 0xaaaaaa, line: 0xaaaaaa, index: currentIndex });
const stack = STACKS.setFreeMem(false).create('bounds', SPACE.world); const stack = STACKS.setFreeMem(false).create('bounds', SPACE.world);
const hx = x/2, hy = y/2; const hx = x/2, hy = y/2;
const sz = stock.z || 0; const sz = stock.z || 0;

View file

@ -1917,8 +1917,8 @@ gapp.register("kiri.init", [], (root, exports) => {
camSep: uc.newBlank({class:"pop-sep"}), camSep: uc.newBlank({class:"pop-sep"}),
camStockOffset: uc.newBoolean(LANG.cs_offs_s, onBooleanClick, {title:LANG.cs_offs_l, modes:CAM}), camStockOffset: uc.newBoolean(LANG.cs_offs_s, onBooleanClick, {title:LANG.cs_offs_l, modes:CAM}),
camStockClipTo: uc.newBoolean(LANG.cs_clip_s, onBooleanClick, {title:LANG.cs_clip_l, modes:CAM}), camStockClipTo: uc.newBoolean(LANG.cs_clip_s, onBooleanClick, {title:LANG.cs_clip_l, modes:CAM}),
camStockIndexed: uc.newBoolean(LANG.cs_indx_s, onBooleanClick, {title:LANG.cs_indx_l, modes:CAM}),
camSep: uc.newBlank({class:"pop-sep"}), camSep: uc.newBlank({class:"pop-sep"}),
camStockIndexed: uc.newBoolean(LANG.cs_indx_s, onBooleanClick, {title:LANG.cs_indx_l, modes:CAM, show: () => ui.camStockOn.checked}),
camStockOn: uc.newBoolean(LANG.cs_offe_s, onBooleanClick, {title:LANG.cs_offe_l, modes:CAM}), camStockOn: uc.newBoolean(LANG.cs_offe_s, onBooleanClick, {title:LANG.cs_offe_l, modes:CAM}),
camCommon: uc.newGroup(LANG.cc_menu, null, {modes:CAM}), camCommon: uc.newGroup(LANG.cc_menu, null, {modes:CAM}),

View file

@ -59,6 +59,7 @@ class Layers {
paths: undefined, // 3d extrusion / tube paths (used to be an array, now merged - FIX) paths: undefined, // 3d extrusion / tube paths (used to be an array, now merged - FIX)
cpath: undefined, // path colors indices cpath: undefined, // path colors indices
color: colors || { color: colors || {
index: 0,
check: 0, check: 0,
line: 0, line: 0,
face: 0, face: 0,

View file

@ -107,6 +107,7 @@ class Stack {
} }
const { polys, lines, faces, cface, paths, cpath, color, off, norms } = layer; const { polys, lines, faces, cface, paths, cpath, color, off, norms } = layer;
const { index, opacity } = color;
const meshes = []; const meshes = [];
const defstate = !off; const defstate = !off;
const mats = []; const mats = [];
@ -125,7 +126,7 @@ class Stack {
const vl = vert.length; const vl = vert.length;
const poly = polys[i]; const poly = polys[i];
addPoly(vert, poly); addPoly(vert, poly);
const pc = poly.color !== undefined ? { line: poly.color, opacity: color.opacity } : color; const pc = poly.color !== undefined ? { line: poly.color, opacity } : color;
const pk = pc.line; const pk = pc.line;
const cc = cmap[pk] = cmap[pk] || { idx: cidx++, mat: createLineMaterial(pc, mat) }; const cc = cmap[pk] = cmap[pk] || { idx: cidx++, mat: createLineMaterial(pc, mat) };
if (last !== pk) { if (last !== pk) {
@ -154,6 +155,7 @@ class Stack {
} }
geo.setFromPoints(vert); geo.setFromPoints(vert);
const segs = new THREE.LineSegments(geo, mat); const segs = new THREE.LineSegments(geo, mat);
if (index) segs.rotation.x = index;
meshes.push(segs); meshes.push(segs);
group.add(segs); group.add(segs);
mats.appendAll(mat); mats.appendAll(mat);
@ -184,6 +186,7 @@ class Stack {
geo.addGroup(0, Infinity, 0); geo.addGroup(0, Infinity, 0);
} }
const mesh = new THREE.Mesh(geo, mat); const mesh = new THREE.Mesh(geo, mat);
if (index) mesh.rotation.x = index;
// mesh.castShadow = true; // mesh.castShadow = true;
// mesh.receiveShadow = true; // mesh.receiveShadow = true;
meshes.push(mesh); meshes.push(mesh);
@ -218,6 +221,7 @@ class Stack {
} }
const mesh = new THREE.Mesh(geo, mat); const mesh = new THREE.Mesh(geo, mat);
mesh.position.z = z; mesh.position.z = z;
if (index) mesh.rotation.x = index;
// mesh.castShadow = true; // mesh.castShadow = true;
// mesh.receiveShadow = true; // mesh.receiveShadow = true;
meshes.push(mesh); meshes.push(mesh);