checkpoint trace work
This commit is contained in:
parent
d17677e2ff
commit
4065de5139
5 changed files with 77 additions and 11 deletions
|
|
@ -116,6 +116,12 @@
|
|||
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
|
||||
*
|
||||
|
|
|
|||
|
|
@ -2015,7 +2015,7 @@
|
|||
API.event.emit('mouse.hover.down', {int, point: int.point});
|
||||
return;
|
||||
}
|
||||
return// API.widgets.meshes().slice().append(SPACE.internals().platform);
|
||||
return;
|
||||
}
|
||||
// lay flat with meta or ctrl clicking a selected face
|
||||
if (int && (event.ctrlKey || event.metaKey || API.feature.on_face_select)) {
|
||||
|
|
|
|||
|
|
@ -73,6 +73,7 @@
|
|||
drop_layout: true, // layout on new drop
|
||||
preview: true, // allow bypassing preview generation
|
||||
hover: false, // when true fires mouse hover events
|
||||
hoverAdds: false, // when true only searches widget additions
|
||||
};
|
||||
|
||||
const selection = {
|
||||
|
|
@ -580,7 +581,9 @@
|
|||
function meshArray() {
|
||||
let out = [];
|
||||
forAllWidgets(function(widget) {
|
||||
out.push(widget.mesh);
|
||||
if (!feature.hoverAdds) {
|
||||
out.push(widget.mesh);
|
||||
}
|
||||
out.appendAll(widget.adds);
|
||||
});
|
||||
return out;
|
||||
|
|
|
|||
|
|
@ -6,8 +6,10 @@
|
|||
|
||||
class Stack {
|
||||
constructor(view) {
|
||||
this._view = view;
|
||||
this.view = view.newGroup();
|
||||
this.slices = [];
|
||||
this.meshes = [];
|
||||
this.freeMem = true;
|
||||
}
|
||||
|
||||
|
|
@ -15,7 +17,21 @@
|
|||
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) {
|
||||
this.show();
|
||||
for (let i=0, s=this.slices, len=s.length; i<len; i++) {
|
||||
s[i].visible = i >= newMin && i <= newMax;
|
||||
}
|
||||
|
|
@ -58,6 +74,7 @@
|
|||
}
|
||||
|
||||
const { polys, lines, faces, cface, paths, cpath, color, off } = layer;
|
||||
const meshes = this.meshes;
|
||||
const defstate = !off;
|
||||
const mats = [];
|
||||
mats.state = defstate;
|
||||
|
|
@ -105,6 +122,7 @@
|
|||
}
|
||||
geo.setFromPoints(vert);
|
||||
const segs = new THREE.LineSegments(geo, mat);
|
||||
meshes.push(segs);
|
||||
group.add(segs);
|
||||
mats.appendAll(mat);
|
||||
}
|
||||
|
|
@ -132,6 +150,7 @@
|
|||
const mesh = new THREE.Mesh(geo, mat);
|
||||
mesh.castShadow = true;
|
||||
mesh.receiveShadow = true;
|
||||
meshes.push(mesh);
|
||||
group.add(mesh);
|
||||
mats.appendAll(mat);
|
||||
}
|
||||
|
|
@ -160,6 +179,7 @@
|
|||
mesh.position.z = z;
|
||||
mesh.castShadow = true;
|
||||
mesh.receiveShadow = true;
|
||||
meshes.push(mesh);
|
||||
group.add(mesh);
|
||||
});
|
||||
mats.appendAll(mat);
|
||||
|
|
|
|||
|
|
@ -105,6 +105,7 @@
|
|||
}
|
||||
});
|
||||
|
||||
// TAB/TRACE BUTTON HANDLERS
|
||||
api.event.on("button.click", target => {
|
||||
switch (target) {
|
||||
case api.ui.tabAdd:
|
||||
|
|
@ -128,6 +129,7 @@
|
|||
}
|
||||
});
|
||||
|
||||
// TAB FUNCS
|
||||
let showTab, lastTab, tab, iw, ic;
|
||||
api.event.on("cam.tabs.add", func.tabAdd = () => {
|
||||
func.traceDone();
|
||||
|
|
@ -210,27 +212,44 @@
|
|||
API.conf.save();
|
||||
};
|
||||
|
||||
// TRACE FUNCS
|
||||
let traceOn = false, lastTrace;
|
||||
api.event.on("cam.trace.add", func.traceAdd = () => {
|
||||
if (traceOn) {
|
||||
return;
|
||||
}
|
||||
func.tabDone();
|
||||
alert = api.show.alert("<esc> key cancels editing traces");
|
||||
KIRI.client.traces(done => {
|
||||
console.log({got_traces: done});
|
||||
traceOn = true;
|
||||
KIRI.client.traces(() => {
|
||||
KIRI.api.widgets.opacity(0.5);
|
||||
KIRI.api.widgets.all().forEach(widget => {
|
||||
let stack = STACKS.create(`trace-${widget.id}`, widget.mesh);
|
||||
KIRI.api.widgets.for(widget => {
|
||||
let stack = new KIRI.Stack(widget.mesh);
|
||||
widget.trace_stack = stack;
|
||||
widget.traces.forEach(slice => {
|
||||
stack.add(slice.layers);
|
||||
stack.addLayers(slice.layers);
|
||||
});
|
||||
widget.adds.appendAll(stack.meshes);
|
||||
});
|
||||
});
|
||||
api.feature.hover = true;
|
||||
api.feature.hoverAdds = true;
|
||||
func.hover = func.traceHover;
|
||||
func.hoverUp = func.traceHoverUp;
|
||||
});
|
||||
api.event.on("cam.trace.done", func.traceDone = () => {
|
||||
if (!traceOn) {
|
||||
return;
|
||||
}
|
||||
traceOn = false;
|
||||
KIRI.api.widgets.opacity(1);
|
||||
api.hide.alert(alert);
|
||||
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 = () => {
|
||||
func.traceDone();
|
||||
|
|
@ -239,13 +258,31 @@
|
|||
});
|
||||
API.conf.save();
|
||||
});
|
||||
func.traceHover = function(int) {
|
||||
// console.log({traceHover: int});
|
||||
func.traceHover = function(data) {
|
||||
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) {
|
||||
// console.log({traceHoverUp: data});
|
||||
func.traceHoverUp = function(int) {
|
||||
if (int) console.log({traceHoverUp: int});
|
||||
};
|
||||
|
||||
// COMMON TAB/TRACE EVENT HANDLERS
|
||||
api.event.on("slice.begin", () => {
|
||||
if (isCamMode) {
|
||||
func.tabDone();
|
||||
|
|
|
|||
Loading…
Reference in a new issue