visual indicator of trace editing. make multiple trace ops friendly with each other

This commit is contained in:
Stewart Allen 2020-12-25 12:03:47 -05:00
commit ea21aa34ee
2 changed files with 34 additions and 13 deletions

View file

@ -17,6 +17,7 @@
camStock, camStock,
current, current,
poppedRec, poppedRec,
hoveredOp,
API, FDM, SPACE, STACKS, MODES, VIEWS, UI, UC, LANG; API, FDM, SPACE, STACKS, MODES, VIEWS, UI, UC, LANG;
let zaxis = { x: 0, y: 0, z: 1 }, let zaxis = { x: 0, y: 0, z: 1 },
@ -278,6 +279,7 @@
poprec.use(rec); poprec.use(rec);
// pointer to current rec for trace editing // pointer to current rec for trace editing
poppedRec = rec; poppedRec = rec;
hoveredOp = el;
el.appendChild(poprec.div); el.appendChild(poprec.div);
// option click event appears latent // option click event appears latent
// and overides the sticky settings // and overides the sticky settings
@ -296,6 +298,7 @@
}; };
el.rec = rec; el.rec = rec;
el.onmousedown = (ev) => { el.onmousedown = (ev) => {
func.traceDone();
let target = ev.target, clist = target.classList; let target = ev.target, clist = target.classList;
if (!clist.contains("draggable")) { if (!clist.contains("draggable")) {
return; return;
@ -430,20 +433,19 @@
// TRACE FUNCS // TRACE FUNCS
let traceOn = false, lastTrace; let traceOn = false, lastTrace;
func.traceAdd = () => { func.traceAdd = (ev) => {
if (traceOn) {
return;
}
func.tabDone(); func.tabDone();
func.traceDone();
alert = api.show.alert("analyzing parts...", 1000); alert = api.show.alert("analyzing parts...", 1000);
traceOn = true; traceOn = hoveredOp;
traceOn.classList.add("editing");
CAM.traces((ids) => { CAM.traces((ids) => {
api.hide.alert(alert); api.hide.alert(alert);
alert = api.show.alert("[esc] key cancels trace editing"); alert = api.show.alert("[esc] key cancels trace editing");
KIRI.api.widgets.opacity(0.5); KIRI.api.widgets.opacity(0.5);
KIRI.api.widgets.for(widget => { KIRI.api.widgets.for(widget => {
if (ids.indexOf(widget.id) >= 0) { if (ids.indexOf(widget.id) >= 0) {
clearTraces(widget); unselectTraces(widget);
widget.trace_stack = null; widget.trace_stack = null;
} }
if (widget.trace_stack) { if (widget.trace_stack) {
@ -461,9 +463,9 @@
stack.addLayers(layers); stack.addLayers(layers);
stack.new_meshes.forEach(mesh => { stack.new_meshes.forEach(mesh => {
mesh.trace = {widget, poly}; mesh.trace = {widget, poly};
// ensure trace poly singleton from matches
if (match.length > 0) { if (match.length > 0) {
poly._trace = match[0]; poly._trace = match[0];
func.traceToggle(mesh, true);
} else { } else {
poly._trace = poly.toArray(); poly._trace = poly.toArray();
} }
@ -471,6 +473,22 @@
widget.adds.appendAll(stack.new_meshes); widget.adds.appendAll(stack.new_meshes);
}); });
}); });
// ensure appropriate traces are toggled matching current record
KIRI.api.widgets.for(widget => {
let areas = (poppedRec.areas[widget.id] || []);
let stack = widget.trace_stack;
stack.meshes.forEach(mesh => {
let { poly } = mesh.trace;
let match = areas.filter(arr => poly.matches(arr));
if (match.length > 0) {
if (!mesh.selected) {
func.traceToggle(mesh, true);
}
} else if (mesh.selected) {
func.traceToggle(mesh, true);
}
});
});
}); });
api.feature.hover = true; api.feature.hover = true;
api.feature.hoverAdds = true; api.feature.hoverAdds = true;
@ -481,6 +499,7 @@
if (!traceOn) { if (!traceOn) {
return; return;
} }
traceOn.classList.remove("editing");
traceOn = false; traceOn = false;
KIRI.api.widgets.opacity(1); KIRI.api.widgets.opacity(1);
api.hide.alert(alert); api.hide.alert(alert);
@ -496,7 +515,7 @@
api.event.on("cam.trace.clear", func.traceClear = () => { api.event.on("cam.trace.clear", func.traceClear = () => {
func.traceDone(); func.traceDone();
API.widgets.all().forEach(widget => { API.widgets.all().forEach(widget => {
clearTraces(widget); unselectTraces(widget);
}); });
API.conf.save(); API.conf.save();
}); });
@ -589,7 +608,7 @@
if (traceOn) { if (traceOn) {
func.traceDone(); func.traceDone();
} }
clearTraces(widget); unselectTraces(widget);
if (x || y) { if (x || y) {
clearTabs(widget); clearTabs(widget);
} else { } else {
@ -876,10 +895,9 @@
delete API.widgets.annotate(widget.id).tab; delete API.widgets.annotate(widget.id).tab;
} }
function clearTraces(widget) { function unselectTraces(widget) {
let stack = widget.trace_stack; if (widget.trace_stack) {
if (stack) { widget.trace_stack.meshes.forEach(mesh => {
stack.meshes.forEach(mesh => {
if (mesh.selected) { if (mesh.selected) {
func.traceToggle(mesh); func.traceToggle(mesh);
} }

View file

@ -585,6 +585,9 @@ th, tr, td, label {
font-size: 12px; font-size: 12px;
color: rgba(0,0,0,0); color: rgba(0,0,0,0);
} }
#oplist > div.editing {
background-color: rgba(220,230,220,0.8);
}
#oplist div:hover .del { #oplist div:hover .del {
color: #aaa; color: #aaa;
z-index: 10000; z-index: 10000;