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;
|
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
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -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)) {
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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("<esc> key cancels editing traces");
|
alert = api.show.alert("<esc> 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();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue