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();
CATALOG.addFileListener(updateCatalog);
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
UI.showOrigin.checked = control.showOrigin;

View file

@ -41,11 +41,11 @@ function init() {
platform.set({
volume: false,
round: false,
zOffset: 0.1,
zOffset: 0,
opacity: 0,
color: 0xdddddd,
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,
colorMajor: 0xcccccc, colorMinor: 0xeeeeee,
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});
// restore wireframe state
this.wireframe(was);
// fixup normals
this.normals({refresh: true});
}
get group() {
@ -290,6 +292,9 @@ mesh.model = class MeshModel extends mesh.object {
if (bool.toggle) {
bool = !was;
}
if (bool.refresh && !was) {
return;
}
// no change
if (was === bool) {
return was;

View file

@ -124,22 +124,31 @@ let model = {
o1.appendAll([...v1, ...v2, ...v3]);
}
if (split) {
let g1, g2, oa, ua;
if (overl === 2) {
// two over, one under
let vo = under[0] || on[0]; // under or on
let m1 = lerp(over[0], vo);
let m2 = lerp(over[1], vo);
o2.appendAll([ ...over[0], ...over[1], ...m1 ]);
o2.appendAll([ ...over[1], ...m1, ...m2 ]);
o1.appendAll([ ...m1, ...m2, ...under[0] ]);
g1 = o2;
g2 = o1;
oa = over;
ua = under;
} else {
// one over, two under
let vo = over[0] || on[0]; // over or on
let m1 = lerp(under[0], vo);
let m2 = lerp(under[1], vo);
o1.appendAll([ ...under[0], ...under[1], ...m1 ]);
o1.appendAll([ ...under[1], ...m1, ...m2 ]);
o2.appendAll([ ...m1, ...m2, ...over[0] ]);
g1 = o1;
g2 = o2;
oa = under;
ua = over;
}
let [ p1, p2 ] = oa;
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;

View file

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