From aeaaf0bf0ee3020565f05817b70421ce000c7862 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 14 Jan 2022 16:45:40 -0500 Subject: [PATCH] add normal inversion --- src/main/mesh.js | 2 +- src/mesh/api.js | 2 +- src/mesh/model.js | 24 +++++++++++++++++++++++- web/mesh/index.css | 1 + 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/mesh.js b/src/main/mesh.js index b2763461..9f75d1c2 100644 --- a/src/main/mesh.js +++ b/src/main/mesh.js @@ -117,7 +117,7 @@ function restore_space() { let { space, mode } = map; api.grid(space.grid); // restore selected state - let selist = space.select; + let selist = space.select || []; let smodel = api.model.list().filter(m => selist.contains(m.id)); let sgroup = api.group.list().filter(m => selist.contains(m.id)); api.selection.set([...smodel, ...sgroup]); diff --git a/src/mesh/api.js b/src/mesh/api.js index ef571edf..2b98e36f 100644 --- a/src/mesh/api.js +++ b/src/mesh/api.js @@ -314,7 +314,7 @@ let tool = { }, invert() { - for (let m of selection.models(true)) { + for (let m of selection.models()) { m.invert(api.mode.get()); } }, diff --git a/src/mesh/model.js b/src/mesh/model.js index 51561e79..4c6d75e0 100644 --- a/src/mesh/model.js +++ b/src/mesh/model.js @@ -49,7 +49,7 @@ let materials = mesh.material = { transparent: true, shininess: 100, specular: 0x202020, - color: 0xee0000, + color: 0x0088ee, opacity: 1 }), wireframe: new MeshBasicMaterial({ @@ -306,12 +306,34 @@ mesh.model = class MeshModel extends mesh.object { // invert normals for entire mesh or selected faces depending on mod invert(mode) { let { modes } = mesh.api; + let geo = this.mesh.geometry; + let pos = geo.attributes.position; + let arr = pos.array; + function swap(i) { + let v1x = arr[i ]; + let v1y = arr[i+1]; + let v1z = arr[i+2]; + arr[i ] = arr[i+3]; + arr[i+1] = arr[i+4]; + arr[i+2] = arr[i+5]; + arr[i+3] = v1x; + arr[i+4] = v1y; + arr[i+5] = v1z; + } switch (mode) { case modes.object: + for (let i=0, l=arr.length; i