three-hilbert-geometry 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Version 1.1.
|
|
1
|
+
// Version 1.1.2 three-hilbert-geometry - https://github.com/vasturiano/three-hilbert-geometry
|
|
2
2
|
(function (global, factory) {
|
|
3
3
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('three')) :
|
|
4
4
|
typeof define === 'function' && define.amd ? define(['three'], factory) :
|
|
@@ -370,10 +370,10 @@
|
|
|
370
370
|
positions[positionOffset++] = point.z;
|
|
371
371
|
if (hasCustomUVs) {
|
|
372
372
|
uvs[uvOffset++] = customUVs[i * 2];
|
|
373
|
-
uvs[uvOffset++] = customUVs[i * 2 + 1];
|
|
373
|
+
uvs[uvOffset++] = 1 - customUVs[i * 2 + 1];
|
|
374
374
|
} else {
|
|
375
375
|
uvs[uvOffset++] = i === 1 || i === 2 ? 1 : 0;
|
|
376
|
-
uvs[uvOffset++] = i >= 2 ?
|
|
376
|
+
uvs[uvOffset++] = i >= 2 ? 0 : 1;
|
|
377
377
|
}
|
|
378
378
|
}
|
|
379
379
|
indices[indexOffset++] = vertexOffset;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"three-hilbert-geometry.js","sources":["../src/hilbert3d.js","../src/SquareTubeGeometry.js","../src/index.js"],"sourcesContent":["import { Vector3 } from 'three';\n\nconst CHILD_PERMUTATIONS = [\n\t[ 0, 3, 4, 7, 6, 5, 2, 1 ],\n\t[ 0, 7, 6, 1, 2, 5, 4, 3 ],\n\t[ 0, 7, 6, 1, 2, 5, 4, 3 ],\n\t[ 2, 3, 0, 1, 6, 7, 4, 5 ],\n\t[ 2, 3, 0, 1, 6, 7, 4, 5 ],\n\t[ 4, 3, 2, 5, 6, 1, 0, 7 ],\n\t[ 4, 3, 2, 5, 6, 1, 0, 7 ],\n\t[ 6, 5, 2, 1, 0, 3, 4, 7 ]\n];\nconst ORIENTATIONS = [ [ 0, 1, 2, 3, 4, 5, 6, 7 ] ];\nconst ORIENTATION_TRANSITIONS = [];\nconst ORIENTATION_IDS = new Map( [ [ ORIENTATIONS[ 0 ].join( '' ), 0 ] ] );\n\nfor ( let i = 0; i < ORIENTATIONS.length; i ++ ) {\n\tconst orientation = ORIENTATIONS[ i ];\n\tconst transitions = [];\n\n\tfor ( const permutation of CHILD_PERMUTATIONS ) {\n\t\tconst childOrientation = permutation.map( index => orientation[ index ] );\n\t\tconst key = childOrientation.join( '' );\n\t\tlet id = ORIENTATION_IDS.get( key );\n\n\t\tif ( id === undefined ) {\n\t\t\tid = ORIENTATIONS.length;\n\t\t\tORIENTATIONS.push( childOrientation );\n\t\t\tORIENTATION_IDS.set( key, id );\n\t\t}\n\n\t\ttransitions.push( id );\n\t}\n\n\tORIENTATION_TRANSITIONS.push( transitions );\n}\n\nconst BIGINT_CHILD_INDEXES = [ 0n, 1n, 2n, 3n, 4n, 5n, 6n, 7n ];\nconst ZERO_CENTER = new Vector3( 0, 0, 0 );\n\n/**\n * Generates a portion of the 3D Hilbert curve.\n *\n * @param {Vector3} [center] - Center of Hilbert curve.\n * @param {number} [size=10] - Total width of Hilbert curve.\n * @param {number} [order=1] - Number of subdivisions.\n * @param {number|bigint} [start=0] - Index of the first point to generate.\n * @param {number|bigint} [length] - Number of points to generate.\n * @param {number} [v0=0] - Corner index -X, +Y, -Z.\n * @param {number} [v1=1] - Corner index -X, +Y, +Z.\n * @param {number} [v2=2] - Corner index -X, -Y, +Z.\n * @param {number} [v3=3] - Corner index -X, -Y, -Z.\n * @param {number} [v4=4] - Corner index +X, -Y, -Z.\n * @param {number} [v5=5] - Corner index +X, -Y, +Z.\n * @param {number} [v6=6] - Corner index +X, +Y, +Z.\n * @param {number} [v7=7] - Corner index +X, +Y, -Z.\n * @returns {Array<Vector3>} The requested Hilbert curve points.\n */\nexport function hilbert3D(\n\tcenter = ZERO_CENTER,\n\tsize = 10,\n\torder = 1,\n\tstart = 0,\n\tlength,\n\tv0 = 0,\n\tv1 = 1,\n\tv2 = 2,\n\tv3 = 3,\n\tv4 = 4,\n\tv5 = 5,\n\tv6 = 6,\n\tv7 = 7\n) {\n\tif ( order < 0 ) return [ new Vector3( 0, 0, 0 ) ];\n\tif ( ! Number.isInteger( order ) ) throw new TypeError( 'Order must be an integer.' );\n\n\tconst points = [];\n\n\tif ( typeof start === 'bigint' || typeof length === 'bigint' ) {\n\t\tconst first = toBigInt( start );\n\t\tconst count = 8n ** BigInt( order + 1 );\n\t\tconst requestedLength = length === undefined ? count : toBigInt( length );\n\t\tconst rangeStart = first < 0n ? 0n : first;\n\t\tconst requestedEnd = rangeStart + ( requestedLength > 0n ? requestedLength : 0n );\n\t\tconst rangeEnd = requestedEnd > count ? count : requestedEnd;\n\n\t\tif ( rangeStart >= rangeEnd ) return points;\n\n\t\tconst baseCorners = [ v0, v1, v2, v3, v4, v5, v6, v7 ];\n\t\tif ( rangeEnd - rangeStart === 1n ) {\n\t\t\tgenerateSingleBigInt( points, center.x, center.y, center.z, size, order, rangeStart, BigInt( order * 3 ), 0, baseCorners );\n\t\t\treturn points;\n\t\t}\n\n\t\tgenerateBigInt( points, center.x, center.y, center.z, size, order, 0n, count / 8n, 0, rangeStart, rangeEnd, baseCorners );\n\t\treturn points;\n\t}\n\n\tconst pointCount = 8 ** ( order + 1 );\n\tconst rawStart = Math.floor( start );\n\tconst first = Math.max( 0, rawStart );\n\tconst requestedLength = length === undefined ? pointCount : Math.max( 0, Math.floor( length ) );\n\tconst end = Math.min( pointCount, first + requestedLength );\n\n\tif ( first >= end ) return points;\n\n\tconst baseCorners = [ v0, v1, v2, v3, v4, v5, v6, v7 ];\n\tgenerateNumber( points, center.x, center.y, center.z, size, order, 0, pointCount / 8, 0, first, end, baseCorners );\n\treturn points;\n}\n\nexport default hilbert3D;\n\nfunction generateNumber( points, x, y, z, size, order, offset, chunkSize, orientationId, first, end, baseCorners ) {\n\tconst orientation = ORIENTATIONS[ orientationId ];\n\tconst transitions = ORIENTATION_TRANSITIONS[ orientationId ];\n\tconst half = size / 2;\n\n\tfor ( let i = 0; i < 8; i ++ ) {\n\t\tconst childOffset = offset + i * chunkSize;\n\t\tconst childEnd = childOffset + chunkSize;\n\t\tif ( childEnd <= first || childOffset >= end ) continue;\n\n\t\tconst actualCorner = baseCorners[ orientation[ i ] ];\n\t\tconst childX = x + ( actualCorner < 4 ? -half : half );\n\t\tconst childY = y + ( actualCorner < 2 || actualCorner > 5 ? half : -half );\n\t\tconst childZ = z + ( actualCorner % 4 === 1 || actualCorner % 4 === 2 ? half : -half );\n\n\t\tif ( order === 0 ) {\n\t\t\tpoints.push( new Vector3( childX, childY, childZ ) );\n\t\t} else {\n\t\t\tgenerateNumber( points, childX, childY, childZ, half, order - 1, childOffset, chunkSize / 8, transitions[ i ], first, end, baseCorners );\n\t\t}\n\t}\n}\n\nfunction generateBigInt( points, x, y, z, size, order, offset, chunkSize, orientationId, first, end, baseCorners ) {\n\tconst orientation = ORIENTATIONS[ orientationId ];\n\tconst transitions = ORIENTATION_TRANSITIONS[ orientationId ];\n\tconst half = size / 2;\n\tconst childChunkSize = chunkSize / 8n;\n\tconst nodeEnd = offset + chunkSize * 8n;\n\tconst firstChild = first <= offset ? 0 : Number( ( first - offset ) / chunkSize );\n\tconst lastChild = end >= nodeEnd ? 7 : Number( ( end - 1n - offset ) / chunkSize );\n\tlet childOffset = offset + BIGINT_CHILD_INDEXES[ firstChild ] * chunkSize;\n\n\tfor ( let i = firstChild; i <= lastChild; i ++, childOffset += chunkSize ) {\n\n\t\tconst actualCorner = baseCorners[ orientation[ i ] ];\n\t\tconst childX = x + ( actualCorner < 4 ? -half : half );\n\t\tconst childY = y + ( actualCorner < 2 || actualCorner > 5 ? half : -half );\n\t\tconst childZ = z + ( actualCorner % 4 === 1 || actualCorner % 4 === 2 ? half : -half );\n\n\t\tif ( order === 0 ) {\n\t\t\tpoints.push( new Vector3( childX, childY, childZ ) );\n\t\t} else {\n\t\t\tgenerateBigInt( points, childX, childY, childZ, half, order - 1, childOffset, childChunkSize, transitions[ i ], first, end, baseCorners );\n\t\t}\n\t}\n}\n\nfunction generateSingleBigInt( points, x, y, z, size, order, index, shift, orientationId, baseCorners ) {\n\tconst orientation = ORIENTATIONS[ orientationId ];\n\tconst child = Number( ( index >> shift ) & 7n );\n\tconst actualCorner = baseCorners[ orientation[ child ] ];\n\tconst half = size / 2;\n\tconst childX = x + ( actualCorner < 4 ? -half : half );\n\tconst childY = y + ( actualCorner < 2 || actualCorner > 5 ? half : -half );\n\tconst childZ = z + ( actualCorner % 4 === 1 || actualCorner % 4 === 2 ? half : -half );\n\n\tif ( order === 0 ) {\n\t\tpoints.push( new Vector3( childX, childY, childZ ) );\n\t} else {\n\t\tgenerateSingleBigInt( points, childX, childY, childZ, half, order - 1, index, shift - 3n, ORIENTATION_TRANSITIONS[ orientationId ][ child ], baseCorners );\n\t}\n}\n\nfunction toBigInt( value ) {\n\tif ( typeof value === 'bigint' ) return value;\n\tif ( ! Number.isSafeInteger( value ) ) throw new TypeError( 'BigInt ranges require integer values.' );\n\treturn BigInt( value );\n}\n","import {\n Box3,\n BufferGeometry,\n Float32BufferAttribute,\n Quaternion,\n Sphere,\n Uint16BufferAttribute,\n Uint32BufferAttribute,\n Vector3\n} from 'three';\n\nconst SINGLE_CUBE_FACES = [\n [0, 1, 5, 4], [1, 2, 6, 5], [2, 3, 7, 6], [3, 0, 4, 7],\n [0, 3, 2, 1], [4, 5, 6, 7]\n];\nconst SINGLE_CUBE_CORNERS = [\n [-1, -1, -1], [1, -1, -1], [1, 1, -1], [-1, 1, -1],\n [-1, -1, 1], [1, -1, 1], [1, 1, 1], [-1, 1, 1]\n];\nconst SINGLE_CUBE_UVS = new Float32Array(24 * 2);\nconst SINGLE_CUBE_NORMALS = new Float32Array(24 * 3);\nconst SINGLE_CUBE_INDICES = new Uint16Array(36);\nconst SINGLE_CUBE_NORMALS_BY_FACE = [\n [0, -1, 0], [1, 0, 0], [0, 1, 0], [-1, 0, 0], [0, 0, -1], [0, 0, 1]\n];\n\nfor (let faceIndex = 0; faceIndex < SINGLE_CUBE_FACES.length; faceIndex++) {\n const face = SINGLE_CUBE_FACES[faceIndex];\n const normal = SINGLE_CUBE_NORMALS_BY_FACE[faceIndex];\n\n for (let i = 0; i < 4; i++) {\n const vertex = faceIndex * 4 + i;\n const corner = face[i];\n SINGLE_CUBE_UVS[vertex * 2] = corner % 2;\n SINGLE_CUBE_UVS[vertex * 2 + 1] = Math.floor(corner / 2) % 2;\n SINGLE_CUBE_NORMALS.set(normal, vertex * 3);\n }\n\n const vertexOffset = faceIndex * 4;\n const indexOffset = faceIndex * 6;\n SINGLE_CUBE_INDICES.set([\n vertexOffset, vertexOffset + 1, vertexOffset + 2,\n vertexOffset, vertexOffset + 2, vertexOffset + 3\n ], indexOffset);\n}\n\nexport default class SquareTubeGeometry extends BufferGeometry {\n constructor(points = [], width = 1) {\n super();\n\n if (!Array.isArray(points)) {\n throw new TypeError('points must be an array of Vector3 instances');\n }\n if (!Number.isFinite(width) || width < 0) {\n throw new RangeError('width must be a non-negative finite number');\n }\n\n this.type = 'SquareTubeGeometry';\n\n if (points.length <= 1) {\n const point = points[0];\n if (points.length === 1 && (!point || !Number.isFinite(point.x) || !Number.isFinite(point.y) || !Number.isFinite(point.z))) {\n throw new TypeError('points[0] must have finite x, y, and z coordinates');\n }\n\n this.parameters = {\n points: point ? [new Vector3(point.x, point.y, point.z)] : [],\n width\n };\n\n if (!point || width === 0) {\n this.setIndex([]);\n this.setAttribute('position', new Float32BufferAttribute([], 3));\n this.setAttribute('uv', new Float32BufferAttribute([], 2));\n return;\n }\n\n const halfWidth = width / 2;\n const x = point.x;\n const y = point.y;\n const z = point.z;\n const positions = new Float32Array(24 * 3);\n let positionOffset = 0;\n\n for (const face of SINGLE_CUBE_FACES) {\n for (const corner of face) {\n const signs = SINGLE_CUBE_CORNERS[corner];\n positions[positionOffset++] = x + signs[0] * halfWidth;\n positions[positionOffset++] = y + signs[1] * halfWidth;\n positions[positionOffset++] = z + signs[2] * halfWidth;\n }\n }\n\n this.setIndex(new Uint16BufferAttribute(SINGLE_CUBE_INDICES.slice(), 1));\n this.setAttribute('position', new Float32BufferAttribute(positions, 3));\n this.setAttribute('uv', new Float32BufferAttribute(SINGLE_CUBE_UVS.slice(), 2));\n this.setAttribute('normal', new Float32BufferAttribute(SINGLE_CUBE_NORMALS.slice(), 3));\n this.boundingBox = new Box3(\n new Vector3(x - halfWidth, y - halfWidth, z - halfWidth),\n new Vector3(x + halfWidth, y + halfWidth, z + halfWidth)\n );\n this.boundingSphere = new Sphere(\n new Vector3(x, y, z),\n Math.sqrt(3) * halfWidth\n );\n return;\n }\n\n const path = [];\n for (let index = 0; index < points.length; index++) {\n const point = points[index];\n if (!point || !Number.isFinite(point.x) || !Number.isFinite(point.y) || !Number.isFinite(point.z)) {\n throw new TypeError(`points[${index}] must have finite x, y, and z coordinates`);\n }\n const copy = new Vector3(point.x, point.y, point.z);\n if (index === 0 || copy.distanceToSquared(path[path.length - 1]) > 0) path.push(copy);\n }\n\n this.parameters = { points: path.map(point => point.clone()), width };\n\n if (path.length === 0 || width === 0) {\n this.setIndex([]);\n this.setAttribute('position', new Float32BufferAttribute([], 3));\n this.setAttribute('uv', new Float32BufferAttribute([], 2));\n return;\n }\n\n if (path.length === 1) {\n const [x, y, z] = path[0].toArray();\n const halfWidth = width / 2;\n const positions = new Float32Array(24 * 3);\n let positionOffset = 0;\n for (const face of SINGLE_CUBE_FACES) {\n for (const corner of face) {\n const signs = SINGLE_CUBE_CORNERS[corner];\n positions[positionOffset++] = x + signs[0] * halfWidth;\n positions[positionOffset++] = y + signs[1] * halfWidth;\n positions[positionOffset++] = z + signs[2] * halfWidth;\n }\n }\n\n this.setIndex(new Uint16BufferAttribute(SINGLE_CUBE_INDICES.slice(), 1));\n this.setAttribute('position', new Float32BufferAttribute(positions, 3));\n this.setAttribute('uv', new Float32BufferAttribute(SINGLE_CUBE_UVS.slice(), 2));\n this.setAttribute('normal', new Float32BufferAttribute(SINGLE_CUBE_NORMALS.slice(), 3));\n this.computeBoundingBox();\n this.computeBoundingSphere();\n return;\n }\n\n const directions = new Array(path.length - 1);\n for (let i = 0; i < directions.length; i++) {\n directions[i] = path[i + 1].clone().sub(path[i]).normalize();\n }\n const turnTolerance = 1e-6;\n const isClosed = path.length > 2 && path[0].distanceToSquared(path[path.length - 1]) === 0;\n for (let i = 1; i < directions.length; i++) {\n const dot = directions[i - 1].dot(directions[i]);\n const isRightAngle = Math.abs(dot) <= turnTolerance;\n const continuesStraight = dot >= 1 - turnTolerance;\n if (!isRightAngle && !continuesStraight) {\n throw new RangeError('path turns must be 90 degrees; straight segments are also allowed');\n }\n }\n if (isClosed) {\n const dot = directions[directions.length - 1].dot(directions[0]);\n if (Math.abs(dot) > turnTolerance && dot < 1 - turnTolerance) {\n throw new RangeError('path turns must be 90 degrees; straight segments are also allowed');\n }\n }\n\n const pathDistances = new Float64Array(path.length);\n for (let i = 1; i < path.length; i++) {\n pathDistances[i] = pathDistances[i - 1] + path[i].distanceTo(path[i - 1]);\n }\n const pathLength = pathDistances[pathDistances.length - 1];\n\n const halfWidth = width / 2;\n const totalLength = pathLength + (isClosed ? 0 : width);\n const frames = new Array(directions.length);\n const normal = new Vector3();\n const binormal = new Vector3();\n const rotation = new Quaternion();\n\n for (let i = 0; i < directions.length; i++) {\n if (i === 0) {\n const tangent = directions[i];\n const absX = Math.abs(tangent.x);\n const absY = Math.abs(tangent.y);\n const absZ = Math.abs(tangent.z);\n normal.set(\n absX <= absY && absX <= absZ ? 1 : 0,\n absY < absX && absY <= absZ ? 1 : 0,\n absZ < absX && absZ < absY ? 1 : 0\n );\n normal.addScaledVector(tangent, -normal.dot(tangent)).normalize();\n } else {\n rotation.setFromUnitVectors(directions[i - 1], directions[i]);\n normal.applyQuaternion(rotation);\n normal.addScaledVector(directions[i], -normal.dot(directions[i])).normalize();\n }\n binormal.crossVectors(directions[i], normal).normalize();\n frames[i] = { normal: normal.clone(), binormal: binormal.clone() };\n }\n\n const sideQuadCount = directions.length * 4;\n const capQuadCount = isClosed ? 0 : 2;\n const quadCount = sideQuadCount + capQuadCount;\n const vertexCount = quadCount * 4;\n const positions = new Float32Array(vertexCount * 3);\n const uvs = new Float32Array(vertexCount * 2);\n const use32BitIndices = vertexCount > 65535;\n const IndexAttribute = use32BitIndices ? Uint32BufferAttribute : Uint16BufferAttribute;\n const indices = use32BitIndices ? new Uint32Array(quadCount * 6) : new Uint16Array(quadCount * 6);\n const faceCorners = [0, 1, 2, 3];\n const startRing = Array.from({ length: 4 }, () => new Vector3());\n const endRing = Array.from({ length: 4 }, () => new Vector3());\n const firstRing = Array.from({ length: 4 }, () => new Vector3());\n const edge1 = new Vector3();\n const edge2 = new Vector3();\n const faceNormal = new Vector3();\n const outward = new Vector3();\n const miterNormal = new Vector3();\n const offset = new Vector3();\n const segmentCenter = new Vector3();\n const quadPoints = [null, null, null, null];\n const sideUVs = new Float32Array(8);\n const startCapUVs = new Float32Array([0, 0, 0.75, 0, 0.5, 0, 0.25, 0]);\n const endCapUVs = new Float32Array([0, 1, 0.25, 1, 0.5, 1, 0.75, 1]);\n let positionOffset = 0;\n let uvOffset = 0;\n let vertexOffset = 0;\n let indexOffset = 0;\n\n function getRing(center, frame, direction, nextDirection, ring, extension = 0) {\n for (let i = 0; i < 4; i++) {\n const normalSign = i === 0 || i === 3 ? 1 : -1;\n const binormalSign = i < 2 ? 1 : -1;\n ring[i].copy(center)\n .addScaledVector(direction, extension * halfWidth)\n .addScaledVector(frame.normal, normalSign * halfWidth)\n .addScaledVector(frame.binormal, binormalSign * halfWidth);\n }\n\n if (nextDirection) {\n miterNormal.copy(direction).add(nextDirection).normalize();\n const denominator = miterNormal.dot(direction);\n for (const corner of ring) {\n offset.copy(corner).sub(center);\n corner.addScaledVector(direction, -miterNormal.dot(offset) / denominator);\n }\n }\n }\n\n function addQuad(corner0, corner1, corner2, corner3, outward, customUVs) {\n const hasCustomUVs = customUVs !== undefined;\n edge1.copy(corner1).sub(corner0);\n edge2.copy(corner2).sub(corner0);\n if (faceNormal.crossVectors(edge1, edge2).dot(outward) < 0) {\n const temp = corner1;\n corner1 = corner3;\n corner3 = temp;\n if (hasCustomUVs) {\n const tempU = customUVs[2];\n const tempV = customUVs[3];\n customUVs[2] = customUVs[6];\n customUVs[3] = customUVs[7];\n customUVs[6] = tempU;\n customUVs[7] = tempV;\n }\n }\n\n quadPoints[0] = corner0;\n quadPoints[1] = corner1;\n quadPoints[2] = corner2;\n quadPoints[3] = corner3;\n for (let i = 0; i < 4; i++) {\n const point = quadPoints[i];\n positions[positionOffset++] = point.x;\n positions[positionOffset++] = point.y;\n positions[positionOffset++] = point.z;\n if (hasCustomUVs) {\n uvs[uvOffset++] = customUVs[i * 2];\n uvs[uvOffset++] = customUVs[i * 2 + 1];\n } else {\n uvs[uvOffset++] = i === 1 || i === 2 ? 1 : 0;\n uvs[uvOffset++] = i >= 2 ? 1 : 0;\n }\n }\n indices[indexOffset++] = vertexOffset;\n indices[indexOffset++] = vertexOffset + 1;\n indices[indexOffset++] = vertexOffset + 2;\n indices[indexOffset++] = vertexOffset;\n indices[indexOffset++] = vertexOffset + 2;\n indices[indexOffset++] = vertexOffset + 3;\n vertexOffset += 4;\n }\n\n for (let i = 0; i < directions.length; i++) {\n const direction = directions[i];\n const previousDirection = i > 0\n ? directions[i - 1]\n : isClosed ? directions[directions.length - 1] : undefined;\n const nextDirection = i < directions.length - 1\n ? directions[i + 1]\n : isClosed ? directions[0] : undefined;\n const startTurn = previousDirection &&\n Math.abs(previousDirection.dot(direction)) <= turnTolerance\n ? previousDirection\n : undefined;\n const endTurn = nextDirection &&\n Math.abs(direction.dot(nextDirection)) <= turnTolerance\n ? nextDirection\n : undefined;\n getRing(\n path[i],\n frames[i],\n direction,\n startTurn,\n startRing,\n i === 0 && !isClosed ? -1 : 0\n );\n getRing(\n path[i + 1],\n frames[i],\n direction,\n endTurn,\n endRing,\n i === directions.length - 1 && !isClosed ? 1 : 0\n );\n if (i === 0) {\n for (let corner = 0; corner < 4; corner++) firstRing[corner].copy(startRing[corner]);\n }\n\n segmentCenter.copy(path[i]).add(path[i + 1]).multiplyScalar(0.5);\n const startV = i === 0 && !isClosed\n ? 0\n : (pathDistances[i] + (isClosed ? 0 : halfWidth)) / totalLength;\n const endV = i === directions.length - 1 && !isClosed\n ? 1\n : (pathDistances[i + 1] + (isClosed ? 0 : halfWidth)) / totalLength;\n for (const a of faceCorners) {\n const b = (a + 1) % 4;\n const startU = 0;\n const endU = 1;\n sideUVs[0] = startU;\n sideUVs[1] = startV;\n sideUVs[2] = endU;\n sideUVs[3] = startV;\n sideUVs[4] = endU;\n sideUVs[5] = endV;\n sideUVs[6] = startU;\n sideUVs[7] = endV;\n outward.copy(startRing[a]).add(startRing[b])\n .add(endRing[a]).add(endRing[b])\n .multiplyScalar(0.25)\n .sub(segmentCenter);\n addQuad(\n startRing[a], startRing[b], endRing[b], endRing[a], outward,\n sideUVs\n );\n }\n }\n\n if (!isClosed) {\n offset.copy(directions[0]).negate();\n addQuad(firstRing[0], firstRing[3], firstRing[2], firstRing[1], offset, startCapUVs);\n addQuad(\n endRing[0], endRing[1], endRing[2], endRing[3],\n directions[directions.length - 1], endCapUVs\n );\n }\n\n this.setIndex(new IndexAttribute(indices, 1));\n this.setAttribute('position', new Float32BufferAttribute(positions, 3));\n this.setAttribute('uv', new Float32BufferAttribute(uvs, 2));\n this.computeVertexNormals();\n this.computeBoundingBox();\n this.computeBoundingSphere();\n }\n\n copy(source) {\n super.copy(source);\n this.parameters = {\n points: source.parameters.points.map(point => point.clone()),\n width: source.parameters.width\n };\n return this;\n }\n}\n","import hilbert3D from './hilbert3d.js';\nimport SquareTubeGeometry from './SquareTubeGeometry.js';\n\nexport default class ThreeHilbertGeometry extends SquareTubeGeometry {\n constructor(order, start, length, {\n padding = 0,\n simplifyCurves = true\n } = {}) {\n super(...getSuperParams());\n\n this.type = 'HilbertGeometry';\n\n const superParams = this.parameters;\n this.parameters = {\n ...superParams,\n order,\n start,\n length,\n padding,\n simplifyCurves\n };\n\n function getSuperParams() {\n typeof start !== 'bigint' && (start = Math.round(start));\n typeof length !== 'bigint' && (length = Math.round(length));\n\n if (simplifyCurves) {\n // resolution simplification\n const n8 = typeof start === 'bigint' ? 8n : 8;\n while (!(start % n8) && !(length % n8) && order > 0) {\n start /= n8;\n length /= n8;\n order -= 1;\n }\n }\n\n const points = hilbert3D(undefined, 1, order - 1, start, length);\n const lineWidth = 1 / (2**(order-1)) * (1 - Math.min(1, padding));\n\n return [points, lineWidth];\n }\n }\n\n clone() {\n return new this.constructor(0, 1, 0).copy(this);\n }\n\n copy(source) {\n super.copy(source);\n this.parameters = Object.assign({}, source.parameters, {\n points: source.parameters.points.map(point => point.clone())\n });\n return this;\n }\n}"],"names":["Vector3","BufferGeometry","Float32BufferAttribute","Uint16BufferAttribute","Box3","Sphere","Quaternion","Uint32BufferAttribute"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"three-hilbert-geometry.js","sources":["../src/hilbert3d.js","../src/SquareTubeGeometry.js","../src/index.js"],"sourcesContent":["import { Vector3 } from 'three';\n\nconst CHILD_PERMUTATIONS = [\n\t[ 0, 3, 4, 7, 6, 5, 2, 1 ],\n\t[ 0, 7, 6, 1, 2, 5, 4, 3 ],\n\t[ 0, 7, 6, 1, 2, 5, 4, 3 ],\n\t[ 2, 3, 0, 1, 6, 7, 4, 5 ],\n\t[ 2, 3, 0, 1, 6, 7, 4, 5 ],\n\t[ 4, 3, 2, 5, 6, 1, 0, 7 ],\n\t[ 4, 3, 2, 5, 6, 1, 0, 7 ],\n\t[ 6, 5, 2, 1, 0, 3, 4, 7 ]\n];\nconst ORIENTATIONS = [ [ 0, 1, 2, 3, 4, 5, 6, 7 ] ];\nconst ORIENTATION_TRANSITIONS = [];\nconst ORIENTATION_IDS = new Map( [ [ ORIENTATIONS[ 0 ].join( '' ), 0 ] ] );\n\nfor ( let i = 0; i < ORIENTATIONS.length; i ++ ) {\n\tconst orientation = ORIENTATIONS[ i ];\n\tconst transitions = [];\n\n\tfor ( const permutation of CHILD_PERMUTATIONS ) {\n\t\tconst childOrientation = permutation.map( index => orientation[ index ] );\n\t\tconst key = childOrientation.join( '' );\n\t\tlet id = ORIENTATION_IDS.get( key );\n\n\t\tif ( id === undefined ) {\n\t\t\tid = ORIENTATIONS.length;\n\t\t\tORIENTATIONS.push( childOrientation );\n\t\t\tORIENTATION_IDS.set( key, id );\n\t\t}\n\n\t\ttransitions.push( id );\n\t}\n\n\tORIENTATION_TRANSITIONS.push( transitions );\n}\n\nconst BIGINT_CHILD_INDEXES = [ 0n, 1n, 2n, 3n, 4n, 5n, 6n, 7n ];\nconst ZERO_CENTER = new Vector3( 0, 0, 0 );\n\n/**\n * Generates a portion of the 3D Hilbert curve.\n *\n * @param {Vector3} [center] - Center of Hilbert curve.\n * @param {number} [size=10] - Total width of Hilbert curve.\n * @param {number} [order=1] - Number of subdivisions.\n * @param {number|bigint} [start=0] - Index of the first point to generate.\n * @param {number|bigint} [length] - Number of points to generate.\n * @param {number} [v0=0] - Corner index -X, +Y, -Z.\n * @param {number} [v1=1] - Corner index -X, +Y, +Z.\n * @param {number} [v2=2] - Corner index -X, -Y, +Z.\n * @param {number} [v3=3] - Corner index -X, -Y, -Z.\n * @param {number} [v4=4] - Corner index +X, -Y, -Z.\n * @param {number} [v5=5] - Corner index +X, -Y, +Z.\n * @param {number} [v6=6] - Corner index +X, +Y, +Z.\n * @param {number} [v7=7] - Corner index +X, +Y, -Z.\n * @returns {Array<Vector3>} The requested Hilbert curve points.\n */\nexport function hilbert3D(\n\tcenter = ZERO_CENTER,\n\tsize = 10,\n\torder = 1,\n\tstart = 0,\n\tlength,\n\tv0 = 0,\n\tv1 = 1,\n\tv2 = 2,\n\tv3 = 3,\n\tv4 = 4,\n\tv5 = 5,\n\tv6 = 6,\n\tv7 = 7\n) {\n\tif ( order < 0 ) return [ new Vector3( 0, 0, 0 ) ];\n\tif ( ! Number.isInteger( order ) ) throw new TypeError( 'Order must be an integer.' );\n\n\tconst points = [];\n\n\tif ( typeof start === 'bigint' || typeof length === 'bigint' ) {\n\t\tconst first = toBigInt( start );\n\t\tconst count = 8n ** BigInt( order + 1 );\n\t\tconst requestedLength = length === undefined ? count : toBigInt( length );\n\t\tconst rangeStart = first < 0n ? 0n : first;\n\t\tconst requestedEnd = rangeStart + ( requestedLength > 0n ? requestedLength : 0n );\n\t\tconst rangeEnd = requestedEnd > count ? count : requestedEnd;\n\n\t\tif ( rangeStart >= rangeEnd ) return points;\n\n\t\tconst baseCorners = [ v0, v1, v2, v3, v4, v5, v6, v7 ];\n\t\tif ( rangeEnd - rangeStart === 1n ) {\n\t\t\tgenerateSingleBigInt( points, center.x, center.y, center.z, size, order, rangeStart, BigInt( order * 3 ), 0, baseCorners );\n\t\t\treturn points;\n\t\t}\n\n\t\tgenerateBigInt( points, center.x, center.y, center.z, size, order, 0n, count / 8n, 0, rangeStart, rangeEnd, baseCorners );\n\t\treturn points;\n\t}\n\n\tconst pointCount = 8 ** ( order + 1 );\n\tconst rawStart = Math.floor( start );\n\tconst first = Math.max( 0, rawStart );\n\tconst requestedLength = length === undefined ? pointCount : Math.max( 0, Math.floor( length ) );\n\tconst end = Math.min( pointCount, first + requestedLength );\n\n\tif ( first >= end ) return points;\n\n\tconst baseCorners = [ v0, v1, v2, v3, v4, v5, v6, v7 ];\n\tgenerateNumber( points, center.x, center.y, center.z, size, order, 0, pointCount / 8, 0, first, end, baseCorners );\n\treturn points;\n}\n\nexport default hilbert3D;\n\nfunction generateNumber( points, x, y, z, size, order, offset, chunkSize, orientationId, first, end, baseCorners ) {\n\tconst orientation = ORIENTATIONS[ orientationId ];\n\tconst transitions = ORIENTATION_TRANSITIONS[ orientationId ];\n\tconst half = size / 2;\n\n\tfor ( let i = 0; i < 8; i ++ ) {\n\t\tconst childOffset = offset + i * chunkSize;\n\t\tconst childEnd = childOffset + chunkSize;\n\t\tif ( childEnd <= first || childOffset >= end ) continue;\n\n\t\tconst actualCorner = baseCorners[ orientation[ i ] ];\n\t\tconst childX = x + ( actualCorner < 4 ? -half : half );\n\t\tconst childY = y + ( actualCorner < 2 || actualCorner > 5 ? half : -half );\n\t\tconst childZ = z + ( actualCorner % 4 === 1 || actualCorner % 4 === 2 ? half : -half );\n\n\t\tif ( order === 0 ) {\n\t\t\tpoints.push( new Vector3( childX, childY, childZ ) );\n\t\t} else {\n\t\t\tgenerateNumber( points, childX, childY, childZ, half, order - 1, childOffset, chunkSize / 8, transitions[ i ], first, end, baseCorners );\n\t\t}\n\t}\n}\n\nfunction generateBigInt( points, x, y, z, size, order, offset, chunkSize, orientationId, first, end, baseCorners ) {\n\tconst orientation = ORIENTATIONS[ orientationId ];\n\tconst transitions = ORIENTATION_TRANSITIONS[ orientationId ];\n\tconst half = size / 2;\n\tconst childChunkSize = chunkSize / 8n;\n\tconst nodeEnd = offset + chunkSize * 8n;\n\tconst firstChild = first <= offset ? 0 : Number( ( first - offset ) / chunkSize );\n\tconst lastChild = end >= nodeEnd ? 7 : Number( ( end - 1n - offset ) / chunkSize );\n\tlet childOffset = offset + BIGINT_CHILD_INDEXES[ firstChild ] * chunkSize;\n\n\tfor ( let i = firstChild; i <= lastChild; i ++, childOffset += chunkSize ) {\n\n\t\tconst actualCorner = baseCorners[ orientation[ i ] ];\n\t\tconst childX = x + ( actualCorner < 4 ? -half : half );\n\t\tconst childY = y + ( actualCorner < 2 || actualCorner > 5 ? half : -half );\n\t\tconst childZ = z + ( actualCorner % 4 === 1 || actualCorner % 4 === 2 ? half : -half );\n\n\t\tif ( order === 0 ) {\n\t\t\tpoints.push( new Vector3( childX, childY, childZ ) );\n\t\t} else {\n\t\t\tgenerateBigInt( points, childX, childY, childZ, half, order - 1, childOffset, childChunkSize, transitions[ i ], first, end, baseCorners );\n\t\t}\n\t}\n}\n\nfunction generateSingleBigInt( points, x, y, z, size, order, index, shift, orientationId, baseCorners ) {\n\tconst orientation = ORIENTATIONS[ orientationId ];\n\tconst child = Number( ( index >> shift ) & 7n );\n\tconst actualCorner = baseCorners[ orientation[ child ] ];\n\tconst half = size / 2;\n\tconst childX = x + ( actualCorner < 4 ? -half : half );\n\tconst childY = y + ( actualCorner < 2 || actualCorner > 5 ? half : -half );\n\tconst childZ = z + ( actualCorner % 4 === 1 || actualCorner % 4 === 2 ? half : -half );\n\n\tif ( order === 0 ) {\n\t\tpoints.push( new Vector3( childX, childY, childZ ) );\n\t} else {\n\t\tgenerateSingleBigInt( points, childX, childY, childZ, half, order - 1, index, shift - 3n, ORIENTATION_TRANSITIONS[ orientationId ][ child ], baseCorners );\n\t}\n}\n\nfunction toBigInt( value ) {\n\tif ( typeof value === 'bigint' ) return value;\n\tif ( ! Number.isSafeInteger( value ) ) throw new TypeError( 'BigInt ranges require integer values.' );\n\treturn BigInt( value );\n}\n","import {\n Box3,\n BufferGeometry,\n Float32BufferAttribute,\n Quaternion,\n Sphere,\n Uint16BufferAttribute,\n Uint32BufferAttribute,\n Vector3\n} from 'three';\n\nconst SINGLE_CUBE_FACES = [\n [0, 1, 5, 4], [1, 2, 6, 5], [2, 3, 7, 6], [3, 0, 4, 7],\n [0, 3, 2, 1], [4, 5, 6, 7]\n];\nconst SINGLE_CUBE_CORNERS = [\n [-1, -1, -1], [1, -1, -1], [1, 1, -1], [-1, 1, -1],\n [-1, -1, 1], [1, -1, 1], [1, 1, 1], [-1, 1, 1]\n];\nconst SINGLE_CUBE_UVS = new Float32Array(24 * 2);\nconst SINGLE_CUBE_NORMALS = new Float32Array(24 * 3);\nconst SINGLE_CUBE_INDICES = new Uint16Array(36);\nconst SINGLE_CUBE_NORMALS_BY_FACE = [\n [0, -1, 0], [1, 0, 0], [0, 1, 0], [-1, 0, 0], [0, 0, -1], [0, 0, 1]\n];\n\nfor (let faceIndex = 0; faceIndex < SINGLE_CUBE_FACES.length; faceIndex++) {\n const face = SINGLE_CUBE_FACES[faceIndex];\n const normal = SINGLE_CUBE_NORMALS_BY_FACE[faceIndex];\n\n for (let i = 0; i < 4; i++) {\n const vertex = faceIndex * 4 + i;\n const corner = face[i];\n SINGLE_CUBE_UVS[vertex * 2] = corner % 2;\n SINGLE_CUBE_UVS[vertex * 2 + 1] = Math.floor(corner / 2) % 2;\n SINGLE_CUBE_NORMALS.set(normal, vertex * 3);\n }\n\n const vertexOffset = faceIndex * 4;\n const indexOffset = faceIndex * 6;\n SINGLE_CUBE_INDICES.set([\n vertexOffset, vertexOffset + 1, vertexOffset + 2,\n vertexOffset, vertexOffset + 2, vertexOffset + 3\n ], indexOffset);\n}\n\nexport default class SquareTubeGeometry extends BufferGeometry {\n constructor(points = [], width = 1) {\n super();\n\n if (!Array.isArray(points)) {\n throw new TypeError('points must be an array of Vector3 instances');\n }\n if (!Number.isFinite(width) || width < 0) {\n throw new RangeError('width must be a non-negative finite number');\n }\n\n this.type = 'SquareTubeGeometry';\n\n if (points.length <= 1) {\n const point = points[0];\n if (points.length === 1 && (!point || !Number.isFinite(point.x) || !Number.isFinite(point.y) || !Number.isFinite(point.z))) {\n throw new TypeError('points[0] must have finite x, y, and z coordinates');\n }\n\n this.parameters = {\n points: point ? [new Vector3(point.x, point.y, point.z)] : [],\n width\n };\n\n if (!point || width === 0) {\n this.setIndex([]);\n this.setAttribute('position', new Float32BufferAttribute([], 3));\n this.setAttribute('uv', new Float32BufferAttribute([], 2));\n return;\n }\n\n const halfWidth = width / 2;\n const x = point.x;\n const y = point.y;\n const z = point.z;\n const positions = new Float32Array(24 * 3);\n let positionOffset = 0;\n\n for (const face of SINGLE_CUBE_FACES) {\n for (const corner of face) {\n const signs = SINGLE_CUBE_CORNERS[corner];\n positions[positionOffset++] = x + signs[0] * halfWidth;\n positions[positionOffset++] = y + signs[1] * halfWidth;\n positions[positionOffset++] = z + signs[2] * halfWidth;\n }\n }\n\n this.setIndex(new Uint16BufferAttribute(SINGLE_CUBE_INDICES.slice(), 1));\n this.setAttribute('position', new Float32BufferAttribute(positions, 3));\n this.setAttribute('uv', new Float32BufferAttribute(SINGLE_CUBE_UVS.slice(), 2));\n this.setAttribute('normal', new Float32BufferAttribute(SINGLE_CUBE_NORMALS.slice(), 3));\n this.boundingBox = new Box3(\n new Vector3(x - halfWidth, y - halfWidth, z - halfWidth),\n new Vector3(x + halfWidth, y + halfWidth, z + halfWidth)\n );\n this.boundingSphere = new Sphere(\n new Vector3(x, y, z),\n Math.sqrt(3) * halfWidth\n );\n return;\n }\n\n const path = [];\n for (let index = 0; index < points.length; index++) {\n const point = points[index];\n if (!point || !Number.isFinite(point.x) || !Number.isFinite(point.y) || !Number.isFinite(point.z)) {\n throw new TypeError(`points[${index}] must have finite x, y, and z coordinates`);\n }\n const copy = new Vector3(point.x, point.y, point.z);\n if (index === 0 || copy.distanceToSquared(path[path.length - 1]) > 0) path.push(copy);\n }\n\n this.parameters = { points: path.map(point => point.clone()), width };\n\n if (path.length === 0 || width === 0) {\n this.setIndex([]);\n this.setAttribute('position', new Float32BufferAttribute([], 3));\n this.setAttribute('uv', new Float32BufferAttribute([], 2));\n return;\n }\n\n if (path.length === 1) {\n const [x, y, z] = path[0].toArray();\n const halfWidth = width / 2;\n const positions = new Float32Array(24 * 3);\n let positionOffset = 0;\n for (const face of SINGLE_CUBE_FACES) {\n for (const corner of face) {\n const signs = SINGLE_CUBE_CORNERS[corner];\n positions[positionOffset++] = x + signs[0] * halfWidth;\n positions[positionOffset++] = y + signs[1] * halfWidth;\n positions[positionOffset++] = z + signs[2] * halfWidth;\n }\n }\n\n this.setIndex(new Uint16BufferAttribute(SINGLE_CUBE_INDICES.slice(), 1));\n this.setAttribute('position', new Float32BufferAttribute(positions, 3));\n this.setAttribute('uv', new Float32BufferAttribute(SINGLE_CUBE_UVS.slice(), 2));\n this.setAttribute('normal', new Float32BufferAttribute(SINGLE_CUBE_NORMALS.slice(), 3));\n this.computeBoundingBox();\n this.computeBoundingSphere();\n return;\n }\n\n const directions = new Array(path.length - 1);\n for (let i = 0; i < directions.length; i++) {\n directions[i] = path[i + 1].clone().sub(path[i]).normalize();\n }\n const turnTolerance = 1e-6;\n const isClosed = path.length > 2 && path[0].distanceToSquared(path[path.length - 1]) === 0;\n for (let i = 1; i < directions.length; i++) {\n const dot = directions[i - 1].dot(directions[i]);\n const isRightAngle = Math.abs(dot) <= turnTolerance;\n const continuesStraight = dot >= 1 - turnTolerance;\n if (!isRightAngle && !continuesStraight) {\n throw new RangeError('path turns must be 90 degrees; straight segments are also allowed');\n }\n }\n if (isClosed) {\n const dot = directions[directions.length - 1].dot(directions[0]);\n if (Math.abs(dot) > turnTolerance && dot < 1 - turnTolerance) {\n throw new RangeError('path turns must be 90 degrees; straight segments are also allowed');\n }\n }\n\n const pathDistances = new Float64Array(path.length);\n for (let i = 1; i < path.length; i++) {\n pathDistances[i] = pathDistances[i - 1] + path[i].distanceTo(path[i - 1]);\n }\n const pathLength = pathDistances[pathDistances.length - 1];\n\n const halfWidth = width / 2;\n const totalLength = pathLength + (isClosed ? 0 : width);\n const frames = new Array(directions.length);\n const normal = new Vector3();\n const binormal = new Vector3();\n const rotation = new Quaternion();\n\n for (let i = 0; i < directions.length; i++) {\n if (i === 0) {\n const tangent = directions[i];\n const absX = Math.abs(tangent.x);\n const absY = Math.abs(tangent.y);\n const absZ = Math.abs(tangent.z);\n normal.set(\n absX <= absY && absX <= absZ ? 1 : 0,\n absY < absX && absY <= absZ ? 1 : 0,\n absZ < absX && absZ < absY ? 1 : 0\n );\n normal.addScaledVector(tangent, -normal.dot(tangent)).normalize();\n } else {\n rotation.setFromUnitVectors(directions[i - 1], directions[i]);\n normal.applyQuaternion(rotation);\n normal.addScaledVector(directions[i], -normal.dot(directions[i])).normalize();\n }\n binormal.crossVectors(directions[i], normal).normalize();\n frames[i] = { normal: normal.clone(), binormal: binormal.clone() };\n }\n\n const sideQuadCount = directions.length * 4;\n const capQuadCount = isClosed ? 0 : 2;\n const quadCount = sideQuadCount + capQuadCount;\n const vertexCount = quadCount * 4;\n const positions = new Float32Array(vertexCount * 3);\n const uvs = new Float32Array(vertexCount * 2);\n const use32BitIndices = vertexCount > 65535;\n const IndexAttribute = use32BitIndices ? Uint32BufferAttribute : Uint16BufferAttribute;\n const indices = use32BitIndices ? new Uint32Array(quadCount * 6) : new Uint16Array(quadCount * 6);\n const faceCorners = [0, 1, 2, 3];\n const startRing = Array.from({ length: 4 }, () => new Vector3());\n const endRing = Array.from({ length: 4 }, () => new Vector3());\n const firstRing = Array.from({ length: 4 }, () => new Vector3());\n const edge1 = new Vector3();\n const edge2 = new Vector3();\n const faceNormal = new Vector3();\n const outward = new Vector3();\n const miterNormal = new Vector3();\n const offset = new Vector3();\n const segmentCenter = new Vector3();\n const quadPoints = [null, null, null, null];\n const sideUVs = new Float32Array(8);\n const startCapUVs = new Float32Array([0, 0, 0.75, 0, 0.5, 0, 0.25, 0]);\n const endCapUVs = new Float32Array([0, 1, 0.25, 1, 0.5, 1, 0.75, 1]);\n let positionOffset = 0;\n let uvOffset = 0;\n let vertexOffset = 0;\n let indexOffset = 0;\n\n function getRing(center, frame, direction, nextDirection, ring, extension = 0) {\n for (let i = 0; i < 4; i++) {\n const normalSign = i === 0 || i === 3 ? 1 : -1;\n const binormalSign = i < 2 ? 1 : -1;\n ring[i].copy(center)\n .addScaledVector(direction, extension * halfWidth)\n .addScaledVector(frame.normal, normalSign * halfWidth)\n .addScaledVector(frame.binormal, binormalSign * halfWidth);\n }\n\n if (nextDirection) {\n miterNormal.copy(direction).add(nextDirection).normalize();\n const denominator = miterNormal.dot(direction);\n for (const corner of ring) {\n offset.copy(corner).sub(center);\n corner.addScaledVector(direction, -miterNormal.dot(offset) / denominator);\n }\n }\n }\n\n function addQuad(corner0, corner1, corner2, corner3, outward, customUVs) {\n const hasCustomUVs = customUVs !== undefined;\n edge1.copy(corner1).sub(corner0);\n edge2.copy(corner2).sub(corner0);\n if (faceNormal.crossVectors(edge1, edge2).dot(outward) < 0) {\n const temp = corner1;\n corner1 = corner3;\n corner3 = temp;\n if (hasCustomUVs) {\n const tempU = customUVs[2];\n const tempV = customUVs[3];\n customUVs[2] = customUVs[6];\n customUVs[3] = customUVs[7];\n customUVs[6] = tempU;\n customUVs[7] = tempV;\n }\n }\n\n quadPoints[0] = corner0;\n quadPoints[1] = corner1;\n quadPoints[2] = corner2;\n quadPoints[3] = corner3;\n for (let i = 0; i < 4; i++) {\n const point = quadPoints[i];\n positions[positionOffset++] = point.x;\n positions[positionOffset++] = point.y;\n positions[positionOffset++] = point.z;\n if (hasCustomUVs) {\n uvs[uvOffset++] = customUVs[i * 2];\n uvs[uvOffset++] = 1 - customUVs[i * 2 + 1];\n } else {\n uvs[uvOffset++] = i === 1 || i === 2 ? 1 : 0;\n uvs[uvOffset++] = i >= 2 ? 0 : 1;\n }\n }\n indices[indexOffset++] = vertexOffset;\n indices[indexOffset++] = vertexOffset + 1;\n indices[indexOffset++] = vertexOffset + 2;\n indices[indexOffset++] = vertexOffset;\n indices[indexOffset++] = vertexOffset + 2;\n indices[indexOffset++] = vertexOffset + 3;\n vertexOffset += 4;\n }\n\n for (let i = 0; i < directions.length; i++) {\n const direction = directions[i];\n const previousDirection = i > 0\n ? directions[i - 1]\n : isClosed ? directions[directions.length - 1] : undefined;\n const nextDirection = i < directions.length - 1\n ? directions[i + 1]\n : isClosed ? directions[0] : undefined;\n const startTurn = previousDirection &&\n Math.abs(previousDirection.dot(direction)) <= turnTolerance\n ? previousDirection\n : undefined;\n const endTurn = nextDirection &&\n Math.abs(direction.dot(nextDirection)) <= turnTolerance\n ? nextDirection\n : undefined;\n getRing(\n path[i],\n frames[i],\n direction,\n startTurn,\n startRing,\n i === 0 && !isClosed ? -1 : 0\n );\n getRing(\n path[i + 1],\n frames[i],\n direction,\n endTurn,\n endRing,\n i === directions.length - 1 && !isClosed ? 1 : 0\n );\n if (i === 0) {\n for (let corner = 0; corner < 4; corner++) firstRing[corner].copy(startRing[corner]);\n }\n\n segmentCenter.copy(path[i]).add(path[i + 1]).multiplyScalar(0.5);\n const startV = i === 0 && !isClosed\n ? 0\n : (pathDistances[i] + (isClosed ? 0 : halfWidth)) / totalLength;\n const endV = i === directions.length - 1 && !isClosed\n ? 1\n : (pathDistances[i + 1] + (isClosed ? 0 : halfWidth)) / totalLength;\n for (const a of faceCorners) {\n const b = (a + 1) % 4;\n const startU = 0;\n const endU = 1;\n sideUVs[0] = startU;\n sideUVs[1] = startV;\n sideUVs[2] = endU;\n sideUVs[3] = startV;\n sideUVs[4] = endU;\n sideUVs[5] = endV;\n sideUVs[6] = startU;\n sideUVs[7] = endV;\n outward.copy(startRing[a]).add(startRing[b])\n .add(endRing[a]).add(endRing[b])\n .multiplyScalar(0.25)\n .sub(segmentCenter);\n addQuad(\n startRing[a], startRing[b], endRing[b], endRing[a], outward,\n sideUVs\n );\n }\n }\n\n if (!isClosed) {\n offset.copy(directions[0]).negate();\n addQuad(firstRing[0], firstRing[3], firstRing[2], firstRing[1], offset, startCapUVs);\n addQuad(\n endRing[0], endRing[1], endRing[2], endRing[3],\n directions[directions.length - 1], endCapUVs\n );\n }\n\n this.setIndex(new IndexAttribute(indices, 1));\n this.setAttribute('position', new Float32BufferAttribute(positions, 3));\n this.setAttribute('uv', new Float32BufferAttribute(uvs, 2));\n this.computeVertexNormals();\n this.computeBoundingBox();\n this.computeBoundingSphere();\n }\n\n copy(source) {\n super.copy(source);\n this.parameters = {\n points: source.parameters.points.map(point => point.clone()),\n width: source.parameters.width\n };\n return this;\n }\n}\n","import hilbert3D from './hilbert3d.js';\nimport SquareTubeGeometry from './SquareTubeGeometry.js';\n\nexport default class ThreeHilbertGeometry extends SquareTubeGeometry {\n constructor(order, start, length, {\n padding = 0,\n simplifyCurves = true\n } = {}) {\n super(...getSuperParams());\n\n this.type = 'HilbertGeometry';\n\n const superParams = this.parameters;\n this.parameters = {\n ...superParams,\n order,\n start,\n length,\n padding,\n simplifyCurves\n };\n\n function getSuperParams() {\n typeof start !== 'bigint' && (start = Math.round(start));\n typeof length !== 'bigint' && (length = Math.round(length));\n\n if (simplifyCurves) {\n // resolution simplification\n const n8 = typeof start === 'bigint' ? 8n : 8;\n while (!(start % n8) && !(length % n8) && order > 0) {\n start /= n8;\n length /= n8;\n order -= 1;\n }\n }\n\n const points = hilbert3D(undefined, 1, order - 1, start, length);\n const lineWidth = 1 / (2**(order-1)) * (1 - Math.min(1, padding));\n\n return [points, lineWidth];\n }\n }\n\n clone() {\n return new this.constructor(0, 1, 0).copy(this);\n }\n\n copy(source) {\n super.copy(source);\n this.parameters = Object.assign({}, source.parameters, {\n points: source.parameters.points.map(point => point.clone())\n });\n return this;\n }\n}"],"names":["Vector3","BufferGeometry","Float32BufferAttribute","Uint16BufferAttribute","Box3","Sphere","Quaternion","Uint32BufferAttribute"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
// Version 1.1.
|
|
2
|
-
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("three")):"function"==typeof define&&define.amd?define(["three"],e):(t="undefined"!=typeof globalThis?globalThis:t||self).HilbertGeometry=e(t.THREE)}(this,function(t){"use strict";const e=[[0,3,4,7,6,5,2,1],[0,7,6,1,2,5,4,3],[0,7,6,1,2,5,4,3],[2,3,0,1,6,7,4,5],[2,3,0,1,6,7,4,5],[4,3,2,5,6,1,0,7],[4,3,2,5,6,1,0,7],[6,5,2,1,0,3,4,7]],n=[[0,1,2,3,4,5,6,7]],r=[],o=new Map([[n[0].join(""),0]]);for(let t=0;t<n.length;t++){const i=n[t],s=[];for(const t of e){const e=t.map(t=>i[t]),r=e.join("");let a=o.get(r);void 0===a&&(a=n.length,n.push(e),o.set(r,a)),s.push(a)}r.push(s)}const i=[0n,1n,2n,3n,4n,5n,6n,7n],s=new t.Vector3(0,0,0);function a(e=s,n=10,r=1,o=0,i,a=0,h=1,d=2,p=3,w=4,b=5,y=6,m=7){if(r<0)return[new t.Vector3(0,0,0)];if(!Number.isInteger(r))throw new TypeError("Order must be an integer.");const g=[];if("bigint"==typeof o||"bigint"==typeof i){const t=f(o),s=8n**BigInt(r+1),c=void 0===i?s:f(i),A=t<0n?0n:t,V=A+(c>0n?c:0n),F=V>s?s:V;if(A>=F)return g;const B=[a,h,d,p,w,b,y,m];return F-A===1n?(l(g,e.x,e.y,e.z,n,r,A,BigInt(3*r),0,B),g):(u(g,e.x,e.y,e.z,n,r,0n,s/8n,0,A,F,B),g)}const A=8**(r+1),V=Math.floor(o),F=Math.max(0,V),B=void 0===i?A:Math.max(0,Math.floor(i)),x=Math.min(A,F+B);if(F>=x)return g;const v=[a,h,d,p,w,b,y,m];return c(g,e.x,e.y,e.z,n,r,0,A/8,0,F,x,v),g}function c(e,o,i,s,a,u,l,f,h,d,p,w){const b=n[h],y=r[h],m=a/2;for(let n=0;n<8;n++){const r=l+n*f;if(r+f<=d||r>=p)continue;const a=w[b[n]],h=o+(a<4?-m:m),g=i+(a<2||a>5?m:-m),A=s+(a%4==1||a%4==2?m:-m);0===u?e.push(new t.Vector3(h,g,A)):c(e,h,g,A,m,u-1,r,f/8,y[n],d,p,w)}}function u(e,o,s,a,c,l,f,h,d,p,w,b){const y=n[d],m=r[d],g=c/2,A=h/8n,V=f+8n*h,F=p<=f?0:Number((p-f)/h),B=w>=V?7:Number((w-1n-f)/h);let x=f+i[F]*h;for(let n=F;n<=B;n++,x+=h){const r=b[y[n]],i=o+(r<4?-g:g),c=s+(r<2||r>5?g:-g),f=a+(r%4==1||r%4==2?g:-g);0===l?e.push(new t.Vector3(i,c,f)):u(e,i,c,f,g,l-1,x,A,m[n],p,w,b)}}function l(e,o,i,s,a,c,u,f,h,d){const p=n[h],w=Number(u>>f&7n),b=d[p[w]],y=a/2,m=o+(b<4?-y:y),g=i+(b<2||b>5?y:-y),A=s+(b%4==1||b%4==2?y:-y);0===c?e.push(new t.Vector3(m,g,A)):l(e,m,g,A,y,c-1,u,f-3n,r[h][w],d)}function f(t){if("bigint"==typeof t)return t;if(!Number.isSafeInteger(t))throw new TypeError("BigInt ranges require integer values.");return BigInt(t)}const h=[[0,1,5,4],[1,2,6,5],[2,3,7,6],[3,0,4,7],[0,3,2,1],[4,5,6,7]],d=[[-1,-1,-1],[1,-1,-1],[1,1,-1],[-1,1,-1],[-1,-1,1],[1,-1,1],[1,1,1],[-1,1,1]],p=new Float32Array(48),w=new Float32Array(72),b=new Uint16Array(36),y=[[0,-1,0],[1,0,0],[0,1,0],[-1,0,0],[0,0,-1],[0,0,1]];for(let t=0;t<h.length;t++){const e=h[t],n=y[t];for(let r=0;r<4;r++){const o=4*t+r,i=e[r];p[2*o]=i%2,p[2*o+1]=Math.floor(i/2)%2,w.set(n,3*o)}const r=4*t,o=6*t;b.set([r,r+1,r+2,r,r+2,r+3],o)}class m extends t.BufferGeometry{constructor(e=[],n=1){if(super(),!Array.isArray(e))throw new TypeError("points must be an array of Vector3 instances");if(!Number.isFinite(n)||n<0)throw new RangeError("width must be a non-negative finite number");if(this.type="SquareTubeGeometry",e.length<=1){const r=e[0];if(!(1!==e.length||r&&Number.isFinite(r.x)&&Number.isFinite(r.y)&&Number.isFinite(r.z)))throw new TypeError("points[0] must have finite x, y, and z coordinates");if(this.parameters={points:r?[new t.Vector3(r.x,r.y,r.z)]:[],width:n},!r||0===n)return this.setIndex([]),this.setAttribute("position",new t.Float32BufferAttribute([],3)),void this.setAttribute("uv",new t.Float32BufferAttribute([],2));const o=n/2,i=r.x,s=r.y,a=r.z,c=new Float32Array(72);let u=0;for(const t of h)for(const e of t){const t=d[e];c[u++]=i+t[0]*o,c[u++]=s+t[1]*o,c[u++]=a+t[2]*o}return this.setIndex(new t.Uint16BufferAttribute(b.slice(),1)),this.setAttribute("position",new t.Float32BufferAttribute(c,3)),this.setAttribute("uv",new t.Float32BufferAttribute(p.slice(),2)),this.setAttribute("normal",new t.Float32BufferAttribute(w.slice(),3)),this.boundingBox=new t.Box3(new t.Vector3(i-o,s-o,a-o),new t.Vector3(i+o,s+o,a+o)),void(this.boundingSphere=new t.Sphere(new t.Vector3(i,s,a),Math.sqrt(3)*o))}const r=[];for(let n=0;n<e.length;n++){const o=e[n];if(!(o&&Number.isFinite(o.x)&&Number.isFinite(o.y)&&Number.isFinite(o.z)))throw new TypeError(`points[${n}] must have finite x, y, and z coordinates`);const i=new t.Vector3(o.x,o.y,o.z);(0===n||i.distanceToSquared(r[r.length-1])>0)&&r.push(i)}if(this.parameters={points:r.map(t=>t.clone()),width:n},0===r.length||0===n)return this.setIndex([]),this.setAttribute("position",new t.Float32BufferAttribute([],3)),void this.setAttribute("uv",new t.Float32BufferAttribute([],2));if(1===r.length){const[e,o,i]=r[0].toArray(),s=n/2,a=new Float32Array(72);let c=0;for(const t of h)for(const n of t){const t=d[n];a[c++]=e+t[0]*s,a[c++]=o+t[1]*s,a[c++]=i+t[2]*s}return this.setIndex(new t.Uint16BufferAttribute(b.slice(),1)),this.setAttribute("position",new t.Float32BufferAttribute(a,3)),this.setAttribute("uv",new t.Float32BufferAttribute(p.slice(),2)),this.setAttribute("normal",new t.Float32BufferAttribute(w.slice(),3)),this.computeBoundingBox(),void this.computeBoundingSphere()}const o=new Array(r.length-1);for(let t=0;t<o.length;t++)o[t]=r[t+1].clone().sub(r[t]).normalize();const i=1e-6,s=r.length>2&&0===r[0].distanceToSquared(r[r.length-1]);for(let t=1;t<o.length;t++){const e=o[t-1].dot(o[t]);if(!(Math.abs(e)<=i)&&!(e>=.999999))throw new RangeError("path turns must be 90 degrees; straight segments are also allowed")}if(s){const t=o[o.length-1].dot(o[0]);if(Math.abs(t)>i&&t<.999999)throw new RangeError("path turns must be 90 degrees; straight segments are also allowed")}const a=new Float64Array(r.length);for(let t=1;t<r.length;t++)a[t]=a[t-1]+r[t].distanceTo(r[t-1]);const c=a[a.length-1],u=n/2,l=c+(s?0:n),f=new Array(o.length),y=new t.Vector3,m=new t.Vector3,g=new t.Quaternion;for(let t=0;t<o.length;t++){if(0===t){const e=o[t],n=Math.abs(e.x),r=Math.abs(e.y),i=Math.abs(e.z);y.set(n<=r&&n<=i?1:0,r<n&&r<=i?1:0,i<n&&i<r?1:0),y.addScaledVector(e,-y.dot(e)).normalize()}else g.setFromUnitVectors(o[t-1],o[t]),y.applyQuaternion(g),y.addScaledVector(o[t],-y.dot(o[t])).normalize();m.crossVectors(o[t],y).normalize(),f[t]={normal:y.clone(),binormal:m.clone()}}const A=4*o.length+(s?0:2),V=4*A,F=new Float32Array(3*V),B=new Float32Array(2*V),x=V>65535,v=x?t.Uint32BufferAttribute:t.Uint16BufferAttribute,M=x?new Uint32Array(6*A):new Uint16Array(6*A),z=[0,1,2,3],S=Array.from({length:4},()=>new t.Vector3),N=Array.from({length:4},()=>new t.Vector3),T=Array.from({length:4},()=>new t.Vector3),I=new t.Vector3,E=new t.Vector3,U=new t.Vector3,q=new t.Vector3,j=new t.Vector3,G=new t.Vector3,R=new t.Vector3,H=[null,null,null,null],C=new Float32Array(8),O=new Float32Array([0,0,.75,0,.5,0,.25,0]),Q=new Float32Array([0,1,.25,1,.5,1,.75,1]);let $=0,k=0,D=0,J=0;function K(t,e,n,r,o,i=0){for(let r=0;r<4;r++){const s=0===r||3===r?1:-1,a=r<2?1:-1;o[r].copy(t).addScaledVector(n,i*u).addScaledVector(e.normal,s*u).addScaledVector(e.binormal,a*u)}if(r){j.copy(n).add(r).normalize();const e=j.dot(n);for(const r of o)G.copy(r).sub(t),r.addScaledVector(n,-j.dot(G)/e)}}function L(t,e,n,r,o,i){const s=void 0!==i;if(I.copy(e).sub(t),E.copy(n).sub(t),U.crossVectors(I,E).dot(o)<0){const t=e;if(e=r,r=t,s){const t=i[2],e=i[3];i[2]=i[6],i[3]=i[7],i[6]=t,i[7]=e}}H[0]=t,H[1]=e,H[2]=n,H[3]=r;for(let t=0;t<4;t++){const e=H[t];F[$++]=e.x,F[$++]=e.y,F[$++]=e.z,s?(B[k++]=i[2*t],B[k++]=i[2*t+1]):(B[k++]=1===t||2===t?1:0,B[k++]=t>=2?1
|
|
1
|
+
// Version 1.1.2 three-hilbert-geometry - https://github.com/vasturiano/three-hilbert-geometry
|
|
2
|
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("three")):"function"==typeof define&&define.amd?define(["three"],e):(t="undefined"!=typeof globalThis?globalThis:t||self).HilbertGeometry=e(t.THREE)}(this,function(t){"use strict";const e=[[0,3,4,7,6,5,2,1],[0,7,6,1,2,5,4,3],[0,7,6,1,2,5,4,3],[2,3,0,1,6,7,4,5],[2,3,0,1,6,7,4,5],[4,3,2,5,6,1,0,7],[4,3,2,5,6,1,0,7],[6,5,2,1,0,3,4,7]],n=[[0,1,2,3,4,5,6,7]],r=[],o=new Map([[n[0].join(""),0]]);for(let t=0;t<n.length;t++){const i=n[t],s=[];for(const t of e){const e=t.map(t=>i[t]),r=e.join("");let a=o.get(r);void 0===a&&(a=n.length,n.push(e),o.set(r,a)),s.push(a)}r.push(s)}const i=[0n,1n,2n,3n,4n,5n,6n,7n],s=new t.Vector3(0,0,0);function a(e=s,n=10,r=1,o=0,i,a=0,h=1,d=2,p=3,w=4,b=5,y=6,m=7){if(r<0)return[new t.Vector3(0,0,0)];if(!Number.isInteger(r))throw new TypeError("Order must be an integer.");const g=[];if("bigint"==typeof o||"bigint"==typeof i){const t=f(o),s=8n**BigInt(r+1),c=void 0===i?s:f(i),A=t<0n?0n:t,V=A+(c>0n?c:0n),F=V>s?s:V;if(A>=F)return g;const B=[a,h,d,p,w,b,y,m];return F-A===1n?(l(g,e.x,e.y,e.z,n,r,A,BigInt(3*r),0,B),g):(u(g,e.x,e.y,e.z,n,r,0n,s/8n,0,A,F,B),g)}const A=8**(r+1),V=Math.floor(o),F=Math.max(0,V),B=void 0===i?A:Math.max(0,Math.floor(i)),x=Math.min(A,F+B);if(F>=x)return g;const v=[a,h,d,p,w,b,y,m];return c(g,e.x,e.y,e.z,n,r,0,A/8,0,F,x,v),g}function c(e,o,i,s,a,u,l,f,h,d,p,w){const b=n[h],y=r[h],m=a/2;for(let n=0;n<8;n++){const r=l+n*f;if(r+f<=d||r>=p)continue;const a=w[b[n]],h=o+(a<4?-m:m),g=i+(a<2||a>5?m:-m),A=s+(a%4==1||a%4==2?m:-m);0===u?e.push(new t.Vector3(h,g,A)):c(e,h,g,A,m,u-1,r,f/8,y[n],d,p,w)}}function u(e,o,s,a,c,l,f,h,d,p,w,b){const y=n[d],m=r[d],g=c/2,A=h/8n,V=f+8n*h,F=p<=f?0:Number((p-f)/h),B=w>=V?7:Number((w-1n-f)/h);let x=f+i[F]*h;for(let n=F;n<=B;n++,x+=h){const r=b[y[n]],i=o+(r<4?-g:g),c=s+(r<2||r>5?g:-g),f=a+(r%4==1||r%4==2?g:-g);0===l?e.push(new t.Vector3(i,c,f)):u(e,i,c,f,g,l-1,x,A,m[n],p,w,b)}}function l(e,o,i,s,a,c,u,f,h,d){const p=n[h],w=Number(u>>f&7n),b=d[p[w]],y=a/2,m=o+(b<4?-y:y),g=i+(b<2||b>5?y:-y),A=s+(b%4==1||b%4==2?y:-y);0===c?e.push(new t.Vector3(m,g,A)):l(e,m,g,A,y,c-1,u,f-3n,r[h][w],d)}function f(t){if("bigint"==typeof t)return t;if(!Number.isSafeInteger(t))throw new TypeError("BigInt ranges require integer values.");return BigInt(t)}const h=[[0,1,5,4],[1,2,6,5],[2,3,7,6],[3,0,4,7],[0,3,2,1],[4,5,6,7]],d=[[-1,-1,-1],[1,-1,-1],[1,1,-1],[-1,1,-1],[-1,-1,1],[1,-1,1],[1,1,1],[-1,1,1]],p=new Float32Array(48),w=new Float32Array(72),b=new Uint16Array(36),y=[[0,-1,0],[1,0,0],[0,1,0],[-1,0,0],[0,0,-1],[0,0,1]];for(let t=0;t<h.length;t++){const e=h[t],n=y[t];for(let r=0;r<4;r++){const o=4*t+r,i=e[r];p[2*o]=i%2,p[2*o+1]=Math.floor(i/2)%2,w.set(n,3*o)}const r=4*t,o=6*t;b.set([r,r+1,r+2,r,r+2,r+3],o)}class m extends t.BufferGeometry{constructor(e=[],n=1){if(super(),!Array.isArray(e))throw new TypeError("points must be an array of Vector3 instances");if(!Number.isFinite(n)||n<0)throw new RangeError("width must be a non-negative finite number");if(this.type="SquareTubeGeometry",e.length<=1){const r=e[0];if(!(1!==e.length||r&&Number.isFinite(r.x)&&Number.isFinite(r.y)&&Number.isFinite(r.z)))throw new TypeError("points[0] must have finite x, y, and z coordinates");if(this.parameters={points:r?[new t.Vector3(r.x,r.y,r.z)]:[],width:n},!r||0===n)return this.setIndex([]),this.setAttribute("position",new t.Float32BufferAttribute([],3)),void this.setAttribute("uv",new t.Float32BufferAttribute([],2));const o=n/2,i=r.x,s=r.y,a=r.z,c=new Float32Array(72);let u=0;for(const t of h)for(const e of t){const t=d[e];c[u++]=i+t[0]*o,c[u++]=s+t[1]*o,c[u++]=a+t[2]*o}return this.setIndex(new t.Uint16BufferAttribute(b.slice(),1)),this.setAttribute("position",new t.Float32BufferAttribute(c,3)),this.setAttribute("uv",new t.Float32BufferAttribute(p.slice(),2)),this.setAttribute("normal",new t.Float32BufferAttribute(w.slice(),3)),this.boundingBox=new t.Box3(new t.Vector3(i-o,s-o,a-o),new t.Vector3(i+o,s+o,a+o)),void(this.boundingSphere=new t.Sphere(new t.Vector3(i,s,a),Math.sqrt(3)*o))}const r=[];for(let n=0;n<e.length;n++){const o=e[n];if(!(o&&Number.isFinite(o.x)&&Number.isFinite(o.y)&&Number.isFinite(o.z)))throw new TypeError(`points[${n}] must have finite x, y, and z coordinates`);const i=new t.Vector3(o.x,o.y,o.z);(0===n||i.distanceToSquared(r[r.length-1])>0)&&r.push(i)}if(this.parameters={points:r.map(t=>t.clone()),width:n},0===r.length||0===n)return this.setIndex([]),this.setAttribute("position",new t.Float32BufferAttribute([],3)),void this.setAttribute("uv",new t.Float32BufferAttribute([],2));if(1===r.length){const[e,o,i]=r[0].toArray(),s=n/2,a=new Float32Array(72);let c=0;for(const t of h)for(const n of t){const t=d[n];a[c++]=e+t[0]*s,a[c++]=o+t[1]*s,a[c++]=i+t[2]*s}return this.setIndex(new t.Uint16BufferAttribute(b.slice(),1)),this.setAttribute("position",new t.Float32BufferAttribute(a,3)),this.setAttribute("uv",new t.Float32BufferAttribute(p.slice(),2)),this.setAttribute("normal",new t.Float32BufferAttribute(w.slice(),3)),this.computeBoundingBox(),void this.computeBoundingSphere()}const o=new Array(r.length-1);for(let t=0;t<o.length;t++)o[t]=r[t+1].clone().sub(r[t]).normalize();const i=1e-6,s=r.length>2&&0===r[0].distanceToSquared(r[r.length-1]);for(let t=1;t<o.length;t++){const e=o[t-1].dot(o[t]);if(!(Math.abs(e)<=i)&&!(e>=.999999))throw new RangeError("path turns must be 90 degrees; straight segments are also allowed")}if(s){const t=o[o.length-1].dot(o[0]);if(Math.abs(t)>i&&t<.999999)throw new RangeError("path turns must be 90 degrees; straight segments are also allowed")}const a=new Float64Array(r.length);for(let t=1;t<r.length;t++)a[t]=a[t-1]+r[t].distanceTo(r[t-1]);const c=a[a.length-1],u=n/2,l=c+(s?0:n),f=new Array(o.length),y=new t.Vector3,m=new t.Vector3,g=new t.Quaternion;for(let t=0;t<o.length;t++){if(0===t){const e=o[t],n=Math.abs(e.x),r=Math.abs(e.y),i=Math.abs(e.z);y.set(n<=r&&n<=i?1:0,r<n&&r<=i?1:0,i<n&&i<r?1:0),y.addScaledVector(e,-y.dot(e)).normalize()}else g.setFromUnitVectors(o[t-1],o[t]),y.applyQuaternion(g),y.addScaledVector(o[t],-y.dot(o[t])).normalize();m.crossVectors(o[t],y).normalize(),f[t]={normal:y.clone(),binormal:m.clone()}}const A=4*o.length+(s?0:2),V=4*A,F=new Float32Array(3*V),B=new Float32Array(2*V),x=V>65535,v=x?t.Uint32BufferAttribute:t.Uint16BufferAttribute,M=x?new Uint32Array(6*A):new Uint16Array(6*A),z=[0,1,2,3],S=Array.from({length:4},()=>new t.Vector3),N=Array.from({length:4},()=>new t.Vector3),T=Array.from({length:4},()=>new t.Vector3),I=new t.Vector3,E=new t.Vector3,U=new t.Vector3,q=new t.Vector3,j=new t.Vector3,G=new t.Vector3,R=new t.Vector3,H=[null,null,null,null],C=new Float32Array(8),O=new Float32Array([0,0,.75,0,.5,0,.25,0]),Q=new Float32Array([0,1,.25,1,.5,1,.75,1]);let $=0,k=0,D=0,J=0;function K(t,e,n,r,o,i=0){for(let r=0;r<4;r++){const s=0===r||3===r?1:-1,a=r<2?1:-1;o[r].copy(t).addScaledVector(n,i*u).addScaledVector(e.normal,s*u).addScaledVector(e.binormal,a*u)}if(r){j.copy(n).add(r).normalize();const e=j.dot(n);for(const r of o)G.copy(r).sub(t),r.addScaledVector(n,-j.dot(G)/e)}}function L(t,e,n,r,o,i){const s=void 0!==i;if(I.copy(e).sub(t),E.copy(n).sub(t),U.crossVectors(I,E).dot(o)<0){const t=e;if(e=r,r=t,s){const t=i[2],e=i[3];i[2]=i[6],i[3]=i[7],i[6]=t,i[7]=e}}H[0]=t,H[1]=e,H[2]=n,H[3]=r;for(let t=0;t<4;t++){const e=H[t];F[$++]=e.x,F[$++]=e.y,F[$++]=e.z,s?(B[k++]=i[2*t],B[k++]=1-i[2*t+1]):(B[k++]=1===t||2===t?1:0,B[k++]=t>=2?0:1)}M[J++]=D,M[J++]=D+1,M[J++]=D+2,M[J++]=D,M[J++]=D+2,M[J++]=D+3,D+=4}for(let t=0;t<o.length;t++){const e=o[t],n=t>0?o[t-1]:s?o[o.length-1]:void 0,c=t<o.length-1?o[t+1]:s?o[0]:void 0,h=n&&Math.abs(n.dot(e))<=i?n:void 0,d=c&&Math.abs(e.dot(c))<=i?c:void 0;if(K(r[t],f[t],e,h,S,0!==t||s?0:-1),K(r[t+1],f[t],e,d,N,t!==o.length-1||s?0:1),0===t)for(let t=0;t<4;t++)T[t].copy(S[t]);R.copy(r[t]).add(r[t+1]).multiplyScalar(.5);const p=0!==t||s?(a[t]+(s?0:u))/l:0,w=t!==o.length-1||s?(a[t+1]+(s?0:u))/l:1;for(const t of z){const e=(t+1)%4,n=0,r=1;C[0]=n,C[1]=p,C[2]=r,C[3]=p,C[4]=r,C[5]=w,C[6]=n,C[7]=w,q.copy(S[t]).add(S[e]).add(N[t]).add(N[e]).multiplyScalar(.25).sub(R),L(S[t],S[e],N[e],N[t],q,C)}}s||(G.copy(o[0]).negate(),L(T[0],T[3],T[2],T[1],G,O),L(N[0],N[1],N[2],N[3],o[o.length-1],Q)),this.setIndex(new v(M,1)),this.setAttribute("position",new t.Float32BufferAttribute(F,3)),this.setAttribute("uv",new t.Float32BufferAttribute(B,2)),this.computeVertexNormals(),this.computeBoundingBox(),this.computeBoundingSphere()}copy(t){return super.copy(t),this.parameters={points:t.parameters.points.map(t=>t.clone()),width:t.parameters.width},this}}return class extends m{constructor(t,e,n,{padding:r=0,simplifyCurves:o=!0}={}){super(...function(){if("bigint"!=typeof e&&(e=Math.round(e)),"bigint"!=typeof n&&(n=Math.round(n)),o){const r="bigint"==typeof e?8n:8;for(;!(e%r)&&!(n%r)&&t>0;)e/=r,n/=r,t-=1}const i=a(void 0,1,t-1,e,n),s=1/2**(t-1)*(1-Math.min(1,r));return[i,s]}()),this.type="HilbertGeometry";const i=this.parameters;this.parameters={...i,order:t,start:e,length:n,padding:r,simplifyCurves:o}}clone(){return new this.constructor(0,1,0).copy(this)}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters,{points:t.parameters.points.map(t=>t.clone())}),this}}});
|
|
@@ -365,10 +365,10 @@ class SquareTubeGeometry extends BufferGeometry {
|
|
|
365
365
|
positions[positionOffset++] = point.z;
|
|
366
366
|
if (hasCustomUVs) {
|
|
367
367
|
uvs[uvOffset++] = customUVs[i * 2];
|
|
368
|
-
uvs[uvOffset++] = customUVs[i * 2 + 1];
|
|
368
|
+
uvs[uvOffset++] = 1 - customUVs[i * 2 + 1];
|
|
369
369
|
} else {
|
|
370
370
|
uvs[uvOffset++] = i === 1 || i === 2 ? 1 : 0;
|
|
371
|
-
uvs[uvOffset++] = i >= 2 ?
|
|
371
|
+
uvs[uvOffset++] = i >= 2 ? 0 : 1;
|
|
372
372
|
}
|
|
373
373
|
}
|
|
374
374
|
indices[indexOffset++] = vertexOffset;
|