From 21168e79f8f612ce72f267cbd5f9e8a6bab7238f Mon Sep 17 00:00:00 2001 From: Danny Bierek Date: Sat, 20 Apr 2024 20:04:34 -0700 Subject: [PATCH] Add checkbox to toggle green or ordered edge colors --- Tools/NavViewer/index.html | 3 ++- Tools/NavViewer/viewer.js | 55 +++++++++++++++++++++++++------------- 2 files changed, 39 insertions(+), 19 deletions(-) diff --git a/Tools/NavViewer/index.html b/Tools/NavViewer/index.html index a835759..749e8af 100644 --- a/Tools/NavViewer/index.html +++ b/Tools/NavViewer/index.html @@ -40,6 +40,7 @@


+
- + \ No newline at end of file diff --git a/Tools/NavViewer/viewer.js b/Tools/NavViewer/viewer.js index 004d762..4201522 100644 --- a/Tools/NavViewer/viewer.js +++ b/Tools/NavViewer/viewer.js @@ -17,6 +17,7 @@ const checkPortalVertices = document.getElementById('check-portal-vertices'); const checkBBox = document.getElementById('check-bbox'); const checkNumbers = document.getElementById('check-numbers'); const checkKDTree = document.getElementById('check-kdtree'); +const useOrderedEdgeColors = document.getElementById('check-use-ordered-edge-colors'); const controls = new THREE.OrbitControls(camera, renderer.domElement); @@ -81,27 +82,44 @@ function setEdgeColor(edgeIndex, colors) { colors[edgeIndex * 3 + 2] = edgeColor[2]; } -function renderEdges(edges) { - const points = []; - const colors = new Float32Array((edges.length + 1) * 3); - let edgeIndex = 0; +function renderEdges(edges, useOrderedEdgeColors) { + if (!useOrderedEdgeColors.checked) { + const points = []; - for (const edge of edges) { - points.push(new THREE.Vector3(edge[1], edge[2], edge[0])); - setEdgeColor(edgeIndex, colors); - edgeIndex++; - } + for (const edge of edges) { + points.push(new THREE.Vector3(edge[1], edge[2], edge[0])); + } - points.push(new THREE.Vector3(edges[0][1], edges[0][2], edges[0][0])); - setEdgeColor(edgeIndex, colors); + points.push(new THREE.Vector3(edges[0][1], edges[0][2], edges[0][0])); - const geometry = new THREE.BufferGeometry().setFromPoints(points); - geometry.setAttribute("color", new THREE.BufferAttribute(colors, 3)); - - const lineMaterial = new THREE.LineBasicMaterial({ vertexColors: THREE.VertexColors }); - const line = new THREE.Line(geometry, lineMaterial); + const geometry = new THREE.BufferGeometry().setFromPoints(points); + + const lineMaterial = new THREE.LineBasicMaterial({ color: 0x00ff00 }); + const line = new THREE.Line(geometry, lineMaterial); + + scene.add(line); + } else { + const points = []; + const colors = new Float32Array((edges.length + 1) * 3); + let edgeIndex = 0; + + for (const edge of edges) { + points.push(new THREE.Vector3(edge[1], edge[2], edge[0])); + setEdgeColor(edgeIndex, colors, useOrderedEdgeColors); + edgeIndex++; + } + + points.push(new THREE.Vector3(edges[0][1], edges[0][2], edges[0][0])); + setEdgeColor(edgeIndex, colors, useOrderedEdgeColors); - scene.add(line); + const geometry = new THREE.BufferGeometry().setFromPoints(points); + geometry.setAttribute("color", new THREE.BufferAttribute(colors, 3)); + + const lineMaterial = new THREE.LineBasicMaterial({ vertexColors: THREE.VertexColors }); + const line = new THREE.Line(geometry, lineMaterial); + + scene.add(line); + } } function renderSurfaceRadius(centerX, centerY, centerZ, maxRadius) { @@ -188,7 +206,7 @@ function renderSurface(i, surface) { } if (checkEdges.checked) { - renderEdges(vertices); + renderEdges(vertices, useOrderedEdgeColors); } if (checkBasisVertices.checked) { @@ -279,6 +297,7 @@ reRender(); mapSelector.addEventListener('change', () => reRender()); checkRadii.addEventListener('change', () => reRender()); +useOrderedEdgeColors.addEventListener('change', () => reRender()); checkCenters.addEventListener('change', () => reRender()); checkFaces.addEventListener('change', () => reRender()); checkEdges.addEventListener('change', () => reRender());