checkpoint tracing work

This commit is contained in:
Stewart Allen 2020-11-30 18:46:56 -05:00
commit 33574454b6
3 changed files with 103 additions and 62 deletions

View file

@ -315,6 +315,13 @@
unit_scale: unitScale unit_scale: unitScale
}, },
widgets: { widgets: {
map: function() {
let map = {};
WIDGETS.forEach(widget => {
map[widget.id] = widget;
});
return map;
},
new: newWidget, new: newWidget,
all: function() { return WIDGETS.slice() }, all: function() { return WIDGETS.slice() },
for: forAllWidgets, for: forAllWidgets,

View file

@ -128,9 +128,13 @@
} }
}); });
let showTab, lastTab, tab, iw, ic;
api.event.on("cam.tabs.add", func.tabAdd = () => { api.event.on("cam.tabs.add", func.tabAdd = () => {
func.traceDone();
alert = api.show.alert("<esc> key cancels editing tabs"); alert = api.show.alert("<esc> key cancels editing tabs");
api.feature.hover = true; api.feature.hover = true;
func.hover = func.tabHover;
func.hoverUp = func.tabHoverUp;
}); });
api.event.on("cam.tabs.done", func.tabDone = () => { api.event.on("cam.tabs.done", func.tabDone = () => {
delbox('tabb'); delbox('tabb');
@ -144,15 +148,87 @@
}); });
API.conf.save(); API.conf.save();
}); });
func.tabHover = function(data) {
delbox('tabb');
const { int, type, point } = data;
const object = int ? int.object : null;
const tab = int ? object.tab : null;
if (lastTab) {
lastTab.box.material.color.r = 0;
lastTab = null;
}
if (tab) {
tab.box.material.color.r = 0.5;
lastTab = tab;
return;
}
if (type !== 'widget') {
iw = null;
return;
}
let n = int.face.normal;
iw = int.object.widget;
ic = int.point;
// only near vertical faces
if (Math.abs(n.z) > 0.1) {
return;
}
showTab = createTabBox(iw, ic, n);
};
func.tabHoverUp = function(int) {
delbox('tabb');
if (lastTab) {
const {widget, box, id} = lastTab;
widget.adds.remove(box);
widget.mesh.remove(box);
delete widget.tabs[id];
let ta = API.widgets.annotate(widget.id).tab;
let ix = 0;
ta.forEach((rec,i) => {
if (rec.id === id) {
ix = i;
}
});
ta.splice(ix,1);
API.conf.save();
return;
}
if (!iw) return;
let ip = iw.track.pos;
let wa = api.widgets.annotate(iw.id);
let wt = (wa.tab = wa.tab || []);
let pos = {
x: showTab.pos.x - ip.x,
y: -showTab.pos.z - ip.y,
z: showTab.pos.y + ip.z,
}
let id = Date.now();
let { dim, rot } = showTab;
let rec = { pos, dim, rot, id };
wt.push(Object.clone(rec));
addWidgetTab(iw, rec);
API.conf.save();
};
api.event.on("cam.trace.add", func.traceAdd = () => { api.event.on("cam.trace.add", func.traceAdd = () => {
func.tabDone();
alert = api.show.alert("<esc> key cancels editing traces"); alert = api.show.alert("<esc> key cancels editing traces");
KIRI.client.traces(done => { KIRI.client.traces(done => {
console.log({got_traces: done}); console.log({got_traces: done});
KIRI.api.widgets.opacity(0.5);
KIRI.api.widgets.all().forEach(widget => {
let stack = STACKS.create(`trace-${widget.id}`, widget.mesh);
widget.traces.forEach(slice => {
stack.add(slice.render);
});
});
}); });
api.feature.hover = true; api.feature.hover = true;
func.hover = func.traceHover;
func.hoverUp = func.traceHoverUp;
}); });
api.event.on("cam.trace.done", func.traceDone = () => { api.event.on("cam.trace.done", func.traceDone = () => {
KIRI.api.widgets.opacity(1);
api.hide.alert(alert); api.hide.alert(alert);
api.feature.hover = false; api.feature.hover = false;
}); });
@ -163,6 +239,12 @@
}); });
API.conf.save(); API.conf.save();
}); });
func.traceHover = function(int) {
// console.log({traceHover: int});
};
func.traceHoverUp = function(data) {
// console.log({traceHoverUp: data});
};
api.event.on("slice.begin", () => { api.event.on("slice.begin", () => {
if (isCamMode) { if (isCamMode) {
@ -214,69 +296,13 @@
if (!isCamMode) { if (!isCamMode) {
return; return;
} }
delbox('tabb'); func.hoverUp(int);
if (lastTab) {
const {widget, box, id} = lastTab;
widget.adds.remove(box);
widget.mesh.remove(box);
delete widget.tabs[id];
let ta = API.widgets.annotate(widget.id).tab;
let ix = 0;
ta.forEach((rec,i) => {
if (rec.id === id) {
ix = i;
}
}); });
ta.splice(ix,1);
API.conf.save();
return;
}
if (!iw) return;
let ip = iw.track.pos;
let wa = api.widgets.annotate(iw.id);
let wt = (wa.tab = wa.tab || []);
let pos = {
x: showTab.pos.x - ip.x,
y: -showTab.pos.z - ip.y,
z: showTab.pos.y + ip.z,
}
let id = Date.now();
let { dim, rot } = showTab;
let rec = { pos, dim, rot, id };
wt.push(Object.clone(rec));
addWidgetTab(iw, rec);
API.conf.save();
});
let showTab, lastTab, tab, iw, ic;
api.event.on("mouse.hover", data => { api.event.on("mouse.hover", data => {
if (!isCamMode) { if (!isCamMode) {
return; return;
} }
delbox('tabb'); func.hover(data);
const { int, type, point } = data;
const object = int ? int.object : null;
const tab = int ? object.tab : null;
if (lastTab) {
lastTab.box.material.color.r = 0;
lastTab = null;
}
if (tab) {
tab.box.material.color.r = 0.5;
lastTab = tab;
return;
}
if (type !== 'widget') {
iw = null;
return;
}
let n = int.face.normal;
iw = int.object.widget;
ic = int.point;
// only near vertical faces
if (Math.abs(n.z) > 0.1) {
return;
}
showTab = createTabBox(iw, ic, n);
}); });
}; };

View file

@ -27,9 +27,14 @@
if (KIRI.client) if (KIRI.client)
KIRI.client.traces = function(ondone) { KIRI.client.traces = function(ondone) {
KIRI.client.sync(); KIRI.client.sync();
send("traces", { let settings = API.conf.get();
settings: API.conf.get() let widgets = API.widgets.map();
}, ondone); send("traces", { settings }, output => {
KIRI.codec.decode(output).forEach(rec => {
widgets[rec.id].traces = rec.traces;
});
ondone(true);
});
}; };
if (KIRI.worker) if (KIRI.worker)
@ -37,7 +42,10 @@
const { settings } = data; const { settings } = data;
const widgets = Object.values(cache); const widgets = Object.values(cache);
widgets.forEach(widget => CAM.traces(settings, widget)); widgets.forEach(widget => CAM.traces(settings, widget));
send.done(123); send.done(KIRI.codec.encode(widgets.map(widget => {return {
id: widget.id,
traces: widget.traces
}})));
}; };
}); });