fix split normals. model on bed no gap

This commit is contained in:
Stewart Allen 2022-01-15 22:24:54 -05:00
commit c4fd0cef74
5 changed files with 40 additions and 19 deletions

View file

@ -2498,7 +2498,8 @@
platform.deselect(); platform.deselect();
CATALOG.addFileListener(updateCatalog); CATALOG.addFileListener(updateCatalog);
SPACE.view.setZoom(control.reverseZoom, control.zoomSpeed); SPACE.view.setZoom(control.reverseZoom, control.zoomSpeed);
SPACE.platform.setZOff(0.2); SPACE.platform.setGridZOff(undefined);
SPACE.platform.setZOff(0.01);
// restore UI state from settings // restore UI state from settings
UI.showOrigin.checked = control.showOrigin; UI.showOrigin.checked = control.showOrigin;

View file

@ -41,11 +41,11 @@ function init() {
platform.set({ platform.set({
volume: false, volume: false,
round: false, round: false,
zOffset: 0.1, zOffset: 0,
opacity: 0, opacity: 0,
color: 0xdddddd, color: 0xdddddd,
zoom: { reverse: true, speed: 1 }, zoom: { reverse: true, speed: 1 },
size: { width: 2000, depth: 2000, height: 1, maxz: 300 }, size: { width: 2000, depth: 2000, height: 0.001, maxz: 200 },
grid: { major: 25, minor: 5, grid: { major: 25, minor: 5,
colorMajor: 0xcccccc, colorMinor: 0xeeeeee, colorMajor: 0xcccccc, colorMinor: 0xeeeeee,
colorX: 0xff7777, colorY: 0x7777ff }, colorX: 0xff7777, colorY: 0x7777ff },

View file

@ -158,6 +158,8 @@ mesh.model = class MeshModel extends mesh.object {
worker.model_load({id: this.id, name: this.name, vertices, indices}); worker.model_load({id: this.id, name: this.name, vertices, indices});
// restore wireframe state // restore wireframe state
this.wireframe(was); this.wireframe(was);
// fixup normals
this.normals({refresh: true});
} }
get group() { get group() {
@ -290,6 +292,9 @@ mesh.model = class MeshModel extends mesh.object {
if (bool.toggle) { if (bool.toggle) {
bool = !was; bool = !was;
} }
if (bool.refresh && !was) {
return;
}
// no change // no change
if (was === bool) { if (was === bool) {
return was; return was;

View file

@ -124,22 +124,31 @@ let model = {
o1.appendAll([...v1, ...v2, ...v3]); o1.appendAll([...v1, ...v2, ...v3]);
} }
if (split) { if (split) {
let g1, g2, oa, ua;
if (overl === 2) { if (overl === 2) {
// two over, one under g1 = o2;
let vo = under[0] || on[0]; // under or on g2 = o1;
let m1 = lerp(over[0], vo); oa = over;
let m2 = lerp(over[1], vo); ua = under;
o2.appendAll([ ...over[0], ...over[1], ...m1 ]);
o2.appendAll([ ...over[1], ...m1, ...m2 ]);
o1.appendAll([ ...m1, ...m2, ...under[0] ]);
} else { } else {
// one over, two under g1 = o1;
let vo = over[0] || on[0]; // over or on g2 = o2;
let m1 = lerp(under[0], vo); oa = under;
let m2 = lerp(under[1], vo); ua = over;
o1.appendAll([ ...under[0], ...under[1], ...m1 ]); }
o1.appendAll([ ...under[1], ...m1, ...m2 ]); let [ p1, p2 ] = oa;
o2.appendAll([ ...m1, ...m2, ...over[0] ]); let p3 = ua[0] || on[0]; // under or on
let m1 = lerp(p1, p3);
let m2 = lerp(p2, p3);
if (v2 === ua[0]) {
// reverse when the mid point gap
g1.appendAll([ ...m1, ...p2, ...p1 ]);
g1.appendAll([ ...m1, ...m2, ...p2 ]);
g2.appendAll([ ...p3, ...m2, ...m1 ]);
} else {
g1.appendAll([ ...p1, ...p2, ...m1 ]);
g1.appendAll([ ...p2, ...m2, ...m1 ]);
g2.appendAll([ ...m1, ...m2, ...p3 ]);
} }
} }
on.length = over.length = under.length = 0; on.length = over.length = under.length = 0;

View file

@ -388,7 +388,7 @@
w = x / 2, w = x / 2,
h = y / 2, h = y / 2,
d = z / 2, d = z / 2,
zp = -d - platformZOff + (gridZOff || (z/2-0.1)), zp = -d - platformZOff + numOrDef(gridZOff, (z/2-0.1)),
labelSize = grid.unitMinor * fontScale, labelSize = grid.unitMinor * fontScale,
oldView = ruler.view, oldView = ruler.view,
view = ruler.view = new THREE.Group(); view = ruler.view = new THREE.Group();
@ -465,6 +465,10 @@
updateGrid(); updateGrid();
} }
function numOrDef(v, dv) {
return v !== undefined ? v : dv;
}
function modMatch(val, mod) { function modMatch(val, mod) {
let mv = Math.abs(val) % mod; let mv = Math.abs(val) % mod;
return (mv < 1) || ((mod - mv) < 1); return (mv < 1) || ((mod - mv) < 1);
@ -480,7 +484,7 @@
x = platform.scale.x, x = platform.scale.x,
y = isRound ? platform.scale.z : platform.scale.y, y = isRound ? platform.scale.z : platform.scale.y,
z = isRound ? platform.scale.y : platform.scale.z, z = isRound ? platform.scale.y : platform.scale.z,
zp = -(z / 2) - platformZOff + (gridZOff || (z/2-0.1)), zp = -(z / 2) - platformZOff + numOrDef(gridZOff, (z/2-0.1)),
xh = x / 2, xh = x / 2,
yh = y / 2, yh = y / 2,
x1 = -xh - origin.x, x1 = -xh - origin.x,
@ -936,10 +940,12 @@
platform.setSize(width, depth, height, maxz); platform.setSize(width, depth, height, maxz);
} }
if (grid) { if (grid) {
let { zOffset } = grid;
let { major = 25, minor = 5 } = grid; let { major = 25, minor = 5 } = grid;
let { colorX, colorY, colorMajor, colorMinor } = grid; let { colorX, colorY, colorMajor, colorMinor } = grid;
platform.setGrid(major, minor); platform.setGrid(major, minor);
platform.setGridColor({ colorX, colorY, colorMajor, colorMinor }); platform.setGridColor({ colorX, colorY, colorMajor, colorMinor });
platform.setGridZOff(zOffset);
} }
if (origin) { if (origin) {
let { x, y, z, show } = origin; let { x, y, z, show } = origin;