diff --git a/js/main.js b/js/main.js index a7c8f35..6a17498 100644 --- a/js/main.js +++ b/js/main.js @@ -490,10 +490,10 @@ function paintAt(e) { function refreshExclusionOverlay() { if (!currentGeometry) return; if (selectionMode) { - // Include Only mode: grey out the complement (non-selected faces) so only the - // selected faces show the texture preview beneath. + // Include Only mode: tint the complement (non-selected faces) with a pastel blue + // so the model stays visible against the dark background before any faces are painted. const maskGeo = buildExclusionOverlayGeo(currentGeometry, excludedFaces, true); - setExclusionOverlay(maskGeo, 0x222222, 0.88); + setExclusionOverlay(maskGeo, 0x8ab4d4, 0.96); } else { setExclusionOverlay(buildExclusionOverlayGeo(currentGeometry, excludedFaces), 0xff6600); } diff --git a/js/viewer.js b/js/viewer.js index 442d400..b32be74 100644 --- a/js/viewer.js +++ b/js/viewer.js @@ -339,19 +339,24 @@ function _buildWireframe(geometry) { wireframeLines = null; } - // EdgesGeometry gives one segment per unique triangle edge - const edgesGeo = new THREE.EdgesGeometry(geometry, 1); - - // Convert to LineSegmentsGeometry (required by LineMaterial / LineSegments2) - const lsGeo = new LineSegmentsGeometry().fromEdgesGeometry(edgesGeo); - edgesGeo.dispose(); + // WireframeGeometry gives every triangle edge; EdgesGeometry skips edges + // between near-coplanar faces so large flat STL regions lose their grid lines. + const wireGeo = new THREE.WireframeGeometry(geometry); + const lsGeo = new LineSegmentsGeometry(); + lsGeo.setPositions(wireGeo.attributes.position.array); + wireGeo.dispose(); const lsMat = new LineMaterial({ color: 0xffffff, - opacity: 0.75, + opacity: 0.65, transparent: true, - linewidth: 1.5, // pixels — works on all desktop GPUs + linewidth: 1.2, depthTest: true, + // Pull lines slightly in front so they beat the base mesh AND the + // exclusion overlay (polygonOffsetFactor -1,-1) in the depth test. + polygonOffset: true, + polygonOffsetFactor: -2, + polygonOffsetUnits: -2, resolution: new THREE.Vector2( renderer.domElement.width * renderer.getPixelRatio(), renderer.domElement.height * renderer.getPixelRatio(), @@ -359,7 +364,7 @@ function _buildWireframe(geometry) { }); wireframeLines = new LineSegments2(lsGeo, lsMat); - wireframeLines.renderOrder = 1; + wireframeLines.renderOrder = 3; // draw after base mesh (0), overlays (1-2) // Add to meshGroup so it's automatically removed when a new model is loaded meshGroup.add(wireframeLines); }