From c4fd0cef74de0937a656bf31b8592b167f577f9e Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 15 Jan 2022 22:24:54 -0500 Subject: [PATCH] fix split normals. model on bed no gap --- src/kiri/init.js | 3 ++- src/main/mesh.js | 4 ++-- src/mesh/model.js | 5 +++++ src/mesh/work.js | 37 +++++++++++++++++++++++-------------- src/moto/space.js | 10 ++++++++-- 5 files changed, 40 insertions(+), 19 deletions(-) diff --git a/src/kiri/init.js b/src/kiri/init.js index 980435da..049f3446 100644 --- a/src/kiri/init.js +++ b/src/kiri/init.js @@ -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; diff --git a/src/main/mesh.js b/src/main/mesh.js index dec6cff5..21b3c859 100644 --- a/src/main/mesh.js +++ b/src/main/mesh.js @@ -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 }, diff --git a/src/mesh/model.js b/src/mesh/model.js index b770932c..4904cb51 100644 --- a/src/mesh/model.js +++ b/src/mesh/model.js @@ -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; diff --git a/src/mesh/work.js b/src/mesh/work.js index fefa7c13..c6a56d5d 100644 --- a/src/mesh/work.js +++ b/src/mesh/work.js @@ -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; diff --git a/src/moto/space.js b/src/moto/space.js index f57338d8..6a359fa4 100644 --- a/src/moto/space.js +++ b/src/moto/space.js @@ -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;