checkpoint trace work

This commit is contained in:
Stewart Allen 2020-12-01 00:02:34 -05:00
commit 4065de5139
5 changed files with 77 additions and 11 deletions

View file

@ -116,6 +116,12 @@
return null; return null;
}; };
AP.removeAll = function(array) {
for (let i=0, il=array.length; i<il; i++) {
this.remove(array[i]);
}
};
/** /**
* return last array element if array length > 0 * return last array element if array length > 0
* *

View file

@ -2015,7 +2015,7 @@
API.event.emit('mouse.hover.down', {int, point: int.point}); API.event.emit('mouse.hover.down', {int, point: int.point});
return; return;
} }
return// API.widgets.meshes().slice().append(SPACE.internals().platform); return;
} }
// lay flat with meta or ctrl clicking a selected face // lay flat with meta or ctrl clicking a selected face
if (int && (event.ctrlKey || event.metaKey || API.feature.on_face_select)) { if (int && (event.ctrlKey || event.metaKey || API.feature.on_face_select)) {

View file

@ -73,6 +73,7 @@
drop_layout: true, // layout on new drop drop_layout: true, // layout on new drop
preview: true, // allow bypassing preview generation preview: true, // allow bypassing preview generation
hover: false, // when true fires mouse hover events hover: false, // when true fires mouse hover events
hoverAdds: false, // when true only searches widget additions
}; };
const selection = { const selection = {
@ -580,7 +581,9 @@
function meshArray() { function meshArray() {
let out = []; let out = [];
forAllWidgets(function(widget) { forAllWidgets(function(widget) {
if (!feature.hoverAdds) {
out.push(widget.mesh); out.push(widget.mesh);
}
out.appendAll(widget.adds); out.appendAll(widget.adds);
}); });
return out; return out;

View file

@ -6,8 +6,10 @@
class Stack { class Stack {
constructor(view) { constructor(view) {
this._view = view;
this.view = view.newGroup(); this.view = view.newGroup();
this.slices = []; this.slices = [];
this.meshes = [];
this.freeMem = true; this.freeMem = true;
} }
@ -15,7 +17,21 @@
return this.slices.length; return this.slices.length;
} }
hide() {
this.view.visible = false;
}
show() {
this.view.visible = true;
}
destroy() {
this._view.remove(this.view);
this.view = this.slices = this.meshes = null;
}
setVisible(newMin, newMax) { setVisible(newMin, newMax) {
this.show();
for (let i=0, s=this.slices, len=s.length; i<len; i++) { for (let i=0, s=this.slices, len=s.length; i<len; i++) {
s[i].visible = i >= newMin && i <= newMax; s[i].visible = i >= newMin && i <= newMax;
} }
@ -58,6 +74,7 @@
} }
const { polys, lines, faces, cface, paths, cpath, color, off } = layer; const { polys, lines, faces, cface, paths, cpath, color, off } = layer;
const meshes = this.meshes;
const defstate = !off; const defstate = !off;
const mats = []; const mats = [];
mats.state = defstate; mats.state = defstate;
@ -105,6 +122,7 @@
} }
geo.setFromPoints(vert); geo.setFromPoints(vert);
const segs = new THREE.LineSegments(geo, mat); const segs = new THREE.LineSegments(geo, mat);
meshes.push(segs);
group.add(segs); group.add(segs);
mats.appendAll(mat); mats.appendAll(mat);
} }
@ -132,6 +150,7 @@
const mesh = new THREE.Mesh(geo, mat); const mesh = new THREE.Mesh(geo, mat);
mesh.castShadow = true; mesh.castShadow = true;
mesh.receiveShadow = true; mesh.receiveShadow = true;
meshes.push(mesh);
group.add(mesh); group.add(mesh);
mats.appendAll(mat); mats.appendAll(mat);
} }
@ -160,6 +179,7 @@
mesh.position.z = z; mesh.position.z = z;
mesh.castShadow = true; mesh.castShadow = true;
mesh.receiveShadow = true; mesh.receiveShadow = true;
meshes.push(mesh);
group.add(mesh); group.add(mesh);
}); });
mats.appendAll(mat); mats.appendAll(mat);

View file

@ -105,6 +105,7 @@
} }
}); });
// TAB/TRACE BUTTON HANDLERS
api.event.on("button.click", target => { api.event.on("button.click", target => {
switch (target) { switch (target) {
case api.ui.tabAdd: case api.ui.tabAdd:
@ -128,6 +129,7 @@
} }
}); });
// TAB FUNCS
let showTab, lastTab, tab, iw, ic; let showTab, lastTab, tab, iw, ic;
api.event.on("cam.tabs.add", func.tabAdd = () => { api.event.on("cam.tabs.add", func.tabAdd = () => {
func.traceDone(); func.traceDone();
@ -210,27 +212,44 @@
API.conf.save(); API.conf.save();
}; };
// TRACE FUNCS
let traceOn = false, lastTrace;
api.event.on("cam.trace.add", func.traceAdd = () => { api.event.on("cam.trace.add", func.traceAdd = () => {
if (traceOn) {
return;
}
func.tabDone(); func.tabDone();
alert = api.show.alert("&lt;esc&gt; key cancels editing traces"); alert = api.show.alert("&lt;esc&gt; key cancels editing traces");
KIRI.client.traces(done => { traceOn = true;
console.log({got_traces: done}); KIRI.client.traces(() => {
KIRI.api.widgets.opacity(0.5); KIRI.api.widgets.opacity(0.5);
KIRI.api.widgets.all().forEach(widget => { KIRI.api.widgets.for(widget => {
let stack = STACKS.create(`trace-${widget.id}`, widget.mesh); let stack = new KIRI.Stack(widget.mesh);
widget.trace_stack = stack;
widget.traces.forEach(slice => { widget.traces.forEach(slice => {
stack.add(slice.layers); stack.addLayers(slice.layers);
}); });
widget.adds.appendAll(stack.meshes);
}); });
}); });
api.feature.hover = true; api.feature.hover = true;
api.feature.hoverAdds = true;
func.hover = func.traceHover; func.hover = func.traceHover;
func.hoverUp = func.traceHoverUp; func.hoverUp = func.traceHoverUp;
}); });
api.event.on("cam.trace.done", func.traceDone = () => { api.event.on("cam.trace.done", func.traceDone = () => {
if (!traceOn) {
return;
}
traceOn = false;
KIRI.api.widgets.opacity(1); KIRI.api.widgets.opacity(1);
api.hide.alert(alert); api.hide.alert(alert);
api.feature.hover = false; api.feature.hover = false;
api.feature.hoverAdds = false;
KIRI.api.widgets.for(widget => {
widget.adds.removeAll(widget.trace_stack.meshes);
widget.trace_stack.destroy();
});
}); });
api.event.on("cam.trace.clear", func.traceClear = () => { api.event.on("cam.trace.clear", func.traceClear = () => {
func.traceDone(); func.traceDone();
@ -239,13 +258,31 @@
}); });
API.conf.save(); API.conf.save();
}); });
func.traceHover = function(int) { func.traceHover = function(data) {
// console.log({traceHover: int}); if (lastTrace) {
let { color, colorSave } = lastTrace.material[0];
color.r = colorSave.r;
color.g = colorSave.g;
color.b = colorSave.b;
}
if (data.type === 'platform') {
lastTrace = null;
return;
}
lastTrace = data.int.object;
let material = lastTrace.material[0];
let color = material.color;
let {r, g, b} = color;
material.colorSave = {r, g, b};
color.r = 255;
color.g = 0;
color.b = 0;
}; };
func.traceHoverUp = function(data) { func.traceHoverUp = function(int) {
// console.log({traceHoverUp: data}); if (int) console.log({traceHoverUp: int});
}; };
// COMMON TAB/TRACE EVENT HANDLERS
api.event.on("slice.begin", () => { api.event.on("slice.begin", () => {
if (isCamMode) { if (isCamMode) {
func.tabDone(); func.tabDone();