From 5650f25f3d0d24f78e6d2be97de5108b3e6c23e1 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 15 Jun 2025 12:47:57 -0400 Subject: [PATCH] change default wire view to edges and persist preference --- src2/main/mesh.js | 9 ++++++++- src2/mesh/api.js | 20 ++++++++++++++------ src2/mesh/model.js | 7 ++++--- src2/mesh/util.js | 4 +--- 4 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src2/main/mesh.js b/src2/main/mesh.js index a17ee727..8291a7ca 100644 --- a/src2/main/mesh.js +++ b/src2/main/mesh.js @@ -8,6 +8,7 @@ import '../add/three.js'; import '../mesh/build.js'; import { api } from '../mesh/api.js'; +import { base } from '../geo/base.js'; import { space } from '../moto/space.js'; import { broker } from '../moto/broker.js'; import { $, $d, h, estop } from '../moto/webui.js'; @@ -269,7 +270,13 @@ function space_init(data) { case 'KeyV': return shiftKey ? selection.show() : selection.focus(); case 'KeyW': - return api.wireframe(); + return shiftKey ? + api.wireframe() : + api.wireframe({ + toggle: true + }, { + edges: base.util.toDegrees(api.prefs.map.surface.radians) + }); case 'KeyX': return api.file.export(); } diff --git a/src2/mesh/api.js b/src2/mesh/api.js index 43b68f96..2162d41f 100644 --- a/src2/mesh/api.js +++ b/src2/mesh/api.js @@ -183,8 +183,9 @@ const selection = { group.select(false); group.normals(prefs.map.space.norm || false); group.wireframe(prefs.map.space.wire || false, { - opacity: prefs.map.wireframe.opacity} - ); + opacity: prefs.map.wireframe.opacity, + edges: prefs.map.space.wire_edge + }); } for (let sketch of sketches) { sketch.select(false); @@ -1533,7 +1534,7 @@ const api = { if (isNaN(center.x * center.y * center.z)) { center = { x: 0, y: 0, z: 0 }; } - let { normal } = object.object; + let { normal } = Array.isArray(object) ? object[0].object : object.object; let left, up; if (normal) { let { x, y, z } = normal; @@ -1559,9 +1560,12 @@ const api = { save(); }, - wireframe(state = { toggle:true }, opt = { opacity: prefs.map.wireframe.opacity }) { + wireframe(state = { toggle:true }, opt = { + opacity: prefs.map.wireframe.opacity, + edges: prefs.map.space.wire_edge + }) { const mspace = prefs.map.space; - let wire = mspace.wire; + let { wire } = mspace; if (state.toggle) { wire = !wire; } else { @@ -1570,7 +1574,9 @@ const api = { for (let m of model.list()) { m.wireframe(wire, opt); } - prefs.save( mspace.wire = wire ); + mspace.wire = wire; + mspace.wire_edge = wire ? opt.edges : 0; + prefs.save(); api.updateFog(); }, @@ -1645,6 +1651,8 @@ function log() { const call = broker.send; +self.mesh_api = api; + export { sketches, selection, diff --git a/src2/mesh/model.js b/src2/mesh/model.js index 8e93b316..1627e593 100644 --- a/src2/mesh/model.js +++ b/src2/mesh/model.js @@ -449,12 +449,13 @@ class MeshModel extends meshObject { } if (was) { this.mesh.remove(this._wire); + this._wire?.geometry.dispose(); this._wire = undefined; this.opacity({restore: true}); } - if (bool === 'edges') { - let edges = new THREE.EdgesGeometry(this.mesh.geometry, 5); - this._wire = new THREE.LineSegments(edges, materials.wireframe); + if (bool && opt.edges) { + let edges = new THREE.EdgesGeometry(this.mesh.geometry, opt.edges); + this._wire = new THREE.LineSegments(edges, materials.wireline); this.mesh.add(this._wire); this.opacity({temp: opt.opacity || 0.15}); } else if (bool) { diff --git a/src2/mesh/util.js b/src2/mesh/util.js index bf0de0c7..ec1e86af 100644 --- a/src2/mesh/util.js +++ b/src2/mesh/util.js @@ -2,11 +2,9 @@ import { THREE } from '../ext/three.js'; import { api as meshApi } from './api.js'; -import { object as meshObject } from './object.js'; -const { Matrix4, Matrix3, Vector3, Box3, LineSegments, BufferGeometry, Float32BufferAttribute, LineBasicMaterial } = THREE; +const { Matrix3, Vector3, Box3, LineSegments, BufferGeometry, Float32BufferAttribute, LineBasicMaterial } = THREE; const deferFn = []; -const boundsCache = {}; // util functions augmented in build (download) const util = {