@babylonjs/core 9.5.1 → 9.5.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.
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Lights/Clustered/clusteredLightContainer.js +1 -1
- package/Lights/Clustered/clusteredLightContainer.js.map +1 -1
- package/Materials/Background/backgroundMaterial.js +1 -0
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.d.ts +2 -0
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js +14 -0
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.d.ts +2 -0
- package/Materials/Node/Blocks/Dual/textureBlock.js +19 -4
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +11 -6
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.js +1 -0
- package/Materials/PBR/openpbrMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +1 -0
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/materialHelper.functions.d.ts +2 -1
- package/Materials/materialHelper.functions.js +8 -3
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/standardMaterial.js +1 -0
- package/Materials/standardMaterial.js.map +1 -1
- package/Meshes/Node/Blocks/bevelBlock.d.ts +52 -0
- package/Meshes/Node/Blocks/bevelBlock.js +1327 -0
- package/Meshes/Node/Blocks/bevelBlock.js.map +1 -0
- package/Meshes/Node/index.d.ts +1 -0
- package/Meshes/Node/index.js +1 -0
- package/Meshes/Node/index.js.map +1 -1
- package/Misc/tools.js +1 -1
- package/Misc/tools.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bevelBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Meshes/Node/Blocks/bevelBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { editableInPropertyPage, PropertyTypeForEdition } from \"../../../Decorators/nodeDecorator\";\r\nimport { Vector3 } from \"../../../Maths/math.vector\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { VertexData, VertexDataMaterialInfo } from \"../../mesh.vertexData\";\r\nimport { NodeGeometryBlockConnectionPointTypes } from \"../Enums/nodeGeometryConnectionPointTypes\";\r\nimport { type NodeGeometryBuildState } from \"../nodeGeometryBuildState\";\r\nimport { NodeGeometryBlock } from \"../nodeGeometryBlock\";\r\nimport { type NodeGeometryConnectionPoint } from \"../nodeGeometryBlockConnectionPoint\";\r\n\r\nconst PositionEpsilon = 1e-5;\r\nconst OutputPositionEpsilon = 1e-4;\r\nconst NormalEpsilon = 1e-8;\r\nconst AngleEpsilon = 1e-7;\r\nconst TriangleAreaEpsilon = PositionEpsilon * PositionEpsilon * PositionEpsilon * PositionEpsilon;\r\n\r\ntype BevelFaceEdgeSegment = {\r\n edgeKey: string;\r\n faceIndex: number;\r\n inward: Vector3;\r\n tMin: number;\r\n tMax: number;\r\n minPoint: Vector3;\r\n maxPoint: Vector3;\r\n minNormal: Vector3;\r\n maxNormal: Vector3;\r\n minAttributes: number[];\r\n maxAttributes: number[];\r\n materialIndex: number;\r\n};\r\n\r\ntype BevelPolygonPoint = {\r\n position: Vector3;\r\n normal: Vector3;\r\n attributes: number[];\r\n materialIndex: number;\r\n};\r\n\r\ntype BevelCapPoint = Vector3 | BevelPolygonPoint;\r\n\r\ntype BevelPreparedFace = {\r\n faceIndex: number;\r\n polygon: BevelPolygonPoint[];\r\n selectedFaceEdges: BevelFaceClipEdge[];\r\n isFlat: boolean;\r\n};\r\n\r\ntype BevelEdgeInterval = {\r\n tStart: number;\r\n tEnd: number;\r\n};\r\n\r\ntype BevelFaceClipEdge = {\r\n key: string;\r\n start: number;\r\n end: number;\r\n inward: Vector3;\r\n};\r\n\r\ntype BevelFace = {\r\n indices: [number, number, number];\r\n originalIndices: [number, number, number];\r\n normal: Vector3;\r\n cornerNormals: [Vector3, Vector3, Vector3];\r\n materialIndex: number;\r\n};\r\n\r\ntype BevelEdgeFace = {\r\n faceIndex: number;\r\n};\r\n\r\ntype BevelEdge = {\r\n key: string;\r\n v0: number;\r\n v1: number;\r\n faces: BevelEdgeFace[];\r\n};\r\n\r\ntype BevelTopology = {\r\n positions: Vector3[];\r\n faces: BevelFace[];\r\n edges: Map<string, BevelEdge>;\r\n vertexFaces: Map<number, number[]>;\r\n};\r\n\r\ntype BevelAttributeName =\r\n | \"tangents\"\r\n | \"uvs\"\r\n | \"uvs2\"\r\n | \"uvs3\"\r\n | \"uvs4\"\r\n | \"uvs5\"\r\n | \"uvs6\"\r\n | \"colors\"\r\n | \"matricesIndices\"\r\n | \"matricesWeights\"\r\n | \"matricesIndicesExtra\"\r\n | \"matricesWeightsExtra\";\r\n\r\ntype BevelAttributeDescriptor = {\r\n name: BevelAttributeName;\r\n source: ArrayLike<number>;\r\n stride: number;\r\n offset: number;\r\n output: number[];\r\n};\r\n\r\nfunction _Quantize(value: number) {\r\n const quantized = Math.round(value / PositionEpsilon);\r\n return quantized === 0 ? 0 : quantized;\r\n}\r\n\r\nfunction _PositionKey(x: number, y: number, z: number) {\r\n return `${_Quantize(x)}:${_Quantize(y)}:${_Quantize(z)}`;\r\n}\r\n\r\nfunction _VectorKey(position: Vector3) {\r\n return _PositionKey(position.x, position.y, position.z);\r\n}\r\n\r\nfunction _OutputQuantize(value: number) {\r\n const quantized = Math.round(value / OutputPositionEpsilon);\r\n return quantized === 0 ? 0 : quantized;\r\n}\r\n\r\nfunction _OutputPositionKey(x: number, y: number, z: number) {\r\n return `${x}:${y}:${z}`;\r\n}\r\n\r\nfunction _EdgeKey(v0: number, v1: number) {\r\n return v0 < v1 ? `${v0}:${v1}` : `${v1}:${v0}`;\r\n}\r\n\r\nfunction _CloneVertexData(vertexData: VertexData) {\r\n const clone = vertexData.clone();\r\n if (!clone.normals && clone.positions && clone.indices) {\r\n const normals: number[] = [];\r\n VertexData.ComputeNormals(clone.positions, clone.indices, normals);\r\n clone.normals = normals;\r\n }\r\n\r\n return clone;\r\n}\r\n\r\nfunction _NormalizeNormalOrFallback(normal: Vector3, fallback: Vector3) {\r\n return normal.lengthSquared() > NormalEpsilon ? normal.normalizeToNew() : fallback.normalizeToNew();\r\n}\r\n\r\nfunction _BuildAttributeDescriptors(vertexData: VertexData, vertexCount: number) {\r\n const descriptors: BevelAttributeDescriptor[] = [];\r\n const addDescriptor = (name: BevelAttributeName, stride: number) => {\r\n const source = vertexData[name];\r\n\r\n if (!source || source.length < vertexCount * stride) {\r\n return;\r\n }\r\n\r\n descriptors.push({\r\n name,\r\n source,\r\n stride,\r\n offset: descriptors.reduce((sum, descriptor) => sum + descriptor.stride, 0),\r\n output: [],\r\n });\r\n };\r\n\r\n addDescriptor(\"tangents\", 4);\r\n addDescriptor(\"uvs\", 2);\r\n addDescriptor(\"uvs2\", 2);\r\n addDescriptor(\"uvs3\", 2);\r\n addDescriptor(\"uvs4\", 2);\r\n addDescriptor(\"uvs5\", 2);\r\n addDescriptor(\"uvs6\", 2);\r\n if (vertexData.colors) {\r\n addDescriptor(\"colors\", vertexData.colors.length === vertexData.positions!.length ? 3 : 4);\r\n }\r\n addDescriptor(\"matricesIndices\", 4);\r\n addDescriptor(\"matricesWeights\", 4);\r\n addDescriptor(\"matricesIndicesExtra\", 4);\r\n addDescriptor(\"matricesWeightsExtra\", 4);\r\n\r\n return descriptors;\r\n}\r\n\r\nfunction _GetAttributeLength(descriptors: BevelAttributeDescriptor[]) {\r\n return descriptors.reduce((sum, descriptor) => sum + descriptor.stride, 0);\r\n}\r\n\r\nfunction _GetVertexAttributes(descriptors: BevelAttributeDescriptor[], vertexIndex: number) {\r\n const attributes: number[] = [];\r\n\r\n for (const descriptor of descriptors) {\r\n const sourceOffset = vertexIndex * descriptor.stride;\r\n for (let index = 0; index < descriptor.stride; index++) {\r\n attributes.push(descriptor.source[sourceOffset + index]);\r\n }\r\n }\r\n\r\n return attributes;\r\n}\r\n\r\nfunction _InterpolateAttributes(start: number[], end: number[], amount: number) {\r\n if (!start.length) {\r\n return start;\r\n }\r\n\r\n return start.map((value, index) => value + (end[index] - value) * amount);\r\n}\r\n\r\nfunction _AverageAttributes(attributes: number[][], length: number) {\r\n if (!length || !attributes.length) {\r\n return [];\r\n }\r\n\r\n const result = new Array<number>(length).fill(0);\r\n\r\n for (const attribute of attributes) {\r\n for (let index = 0; index < length; index++) {\r\n result[index] += attribute[index] ?? 0;\r\n }\r\n }\r\n\r\n for (let index = 0; index < length; index++) {\r\n result[index] /= attributes.length;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction _AttributesMatch(left: number[], right: number[]) {\r\n if (left.length !== right.length) {\r\n return false;\r\n }\r\n\r\n for (let index = 0; index < left.length; index++) {\r\n if (Math.abs(left[index] - right[index]) > OutputPositionEpsilon) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction _AssignAttributeOutputs(result: VertexData, descriptors: BevelAttributeDescriptor[], vertexAttributes: number[][]) {\r\n for (const descriptor of descriptors) {\r\n descriptor.output.length = 0;\r\n\r\n for (const attributes of vertexAttributes) {\r\n for (let index = 0; index < descriptor.stride; index++) {\r\n descriptor.output.push(attributes[descriptor.offset + index] ?? 0);\r\n }\r\n }\r\n\r\n switch (descriptor.name) {\r\n case \"tangents\":\r\n result.tangents = descriptor.output;\r\n break;\r\n case \"uvs\":\r\n result.uvs = descriptor.output;\r\n break;\r\n case \"uvs2\":\r\n result.uvs2 = descriptor.output;\r\n break;\r\n case \"uvs3\":\r\n result.uvs3 = descriptor.output;\r\n break;\r\n case \"uvs4\":\r\n result.uvs4 = descriptor.output;\r\n break;\r\n case \"uvs5\":\r\n result.uvs5 = descriptor.output;\r\n break;\r\n case \"uvs6\":\r\n result.uvs6 = descriptor.output;\r\n break;\r\n case \"colors\":\r\n result.colors = descriptor.output;\r\n break;\r\n case \"matricesIndices\":\r\n result.matricesIndices = descriptor.output;\r\n break;\r\n case \"matricesWeights\":\r\n result.matricesWeights = descriptor.output;\r\n break;\r\n case \"matricesIndicesExtra\":\r\n result.matricesIndicesExtra = descriptor.output;\r\n break;\r\n case \"matricesWeightsExtra\":\r\n result.matricesWeightsExtra = descriptor.output;\r\n break;\r\n }\r\n }\r\n}\r\n\r\nfunction _GetMaterialIndex(vertexData: VertexData, indexStart: number) {\r\n if (!vertexData.materialInfos) {\r\n return 0;\r\n }\r\n\r\n for (const materialInfo of vertexData.materialInfos) {\r\n if (indexStart >= materialInfo.indexStart && indexStart < materialInfo.indexStart + materialInfo.indexCount) {\r\n return materialInfo.materialIndex;\r\n }\r\n }\r\n\r\n return 0;\r\n}\r\n\r\nfunction _BuildMaterialInfoResult(vertexData: VertexData, indices: number[], materialIndices: number[], vertexCount: number) {\r\n if (!vertexData.materialInfos?.length) {\r\n return { indices, materialInfos: null };\r\n }\r\n\r\n const materialOrder = vertexData.materialInfos.map((materialInfo) => materialInfo.materialIndex);\r\n const groups = new Map<number, number[]>();\r\n\r\n for (let triangleIndex = 0; triangleIndex < materialIndices.length; triangleIndex++) {\r\n const materialIndex = materialIndices[triangleIndex];\r\n let group = groups.get(materialIndex);\r\n\r\n if (!group) {\r\n group = [];\r\n groups.set(materialIndex, group);\r\n if (!materialOrder.includes(materialIndex)) {\r\n materialOrder.push(materialIndex);\r\n }\r\n }\r\n\r\n const indexOffset = triangleIndex * 3;\r\n group.push(indices[indexOffset], indices[indexOffset + 1], indices[indexOffset + 2]);\r\n }\r\n\r\n const groupedIndices: number[] = [];\r\n const materialInfos: VertexDataMaterialInfo[] = [];\r\n\r\n for (const materialIndex of materialOrder) {\r\n const group = groups.get(materialIndex);\r\n\r\n if (!group?.length) {\r\n continue;\r\n }\r\n\r\n const materialInfo = new VertexDataMaterialInfo();\r\n materialInfo.materialIndex = materialIndex;\r\n materialInfo.indexStart = groupedIndices.length;\r\n materialInfo.indexCount = group.length;\r\n materialInfo.verticesStart = 0;\r\n materialInfo.verticesCount = vertexCount;\r\n groupedIndices.push(...group);\r\n materialInfos.push(materialInfo);\r\n }\r\n\r\n return { indices: groupedIndices, materialInfos };\r\n}\r\n\r\nfunction _IsFlatFace(face: BevelFace) {\r\n return face.cornerNormals.every((normal) => Vector3.Dot(normal, face.normal) > 1 - PositionEpsilon);\r\n}\r\n\r\nfunction _IsBevelPolygonPoint(point: BevelCapPoint): point is BevelPolygonPoint {\r\n return (point as BevelPolygonPoint).position !== undefined;\r\n}\r\n\r\nfunction _GetCapPointPosition(point: BevelCapPoint) {\r\n return _IsBevelPolygonPoint(point) ? point.position : point;\r\n}\r\n\r\nfunction _GetCapPointNormal(point: BevelCapPoint, fallback: Vector3) {\r\n return _IsBevelPolygonPoint(point) ? point.normal : fallback;\r\n}\r\n\r\nfunction _GetCapPointAttributes(point: BevelCapPoint) {\r\n return _IsBevelPolygonPoint(point) ? point.attributes : [];\r\n}\r\n\r\nfunction _GetCapPointMaterialIndex(point: BevelCapPoint) {\r\n return _IsBevelPolygonPoint(point) ? point.materialIndex : 0;\r\n}\r\n\r\nfunction _BuildTopology(vertexData: VertexData): BevelTopology | null {\r\n const positions = vertexData.positions;\r\n const normals = vertexData.normals;\r\n\r\n if (!positions || positions.length < 9) {\r\n return null;\r\n }\r\n\r\n const vertexCount = positions.length / 3;\r\n const indices = vertexData.indices && vertexData.indices.length ? Array.from(vertexData.indices) : Array.from({ length: vertexCount }, (_, index) => index);\r\n const weldedPositionMap = new Map<string, number>();\r\n const originalToWelded: number[] = [];\r\n const weldedPositions: Vector3[] = [];\r\n\r\n for (let index = 0; index < vertexCount; index++) {\r\n const x = positions[index * 3];\r\n const y = positions[index * 3 + 1];\r\n const z = positions[index * 3 + 2];\r\n const key = _PositionKey(x, y, z);\r\n let weldedIndex = weldedPositionMap.get(key);\r\n\r\n if (weldedIndex === undefined) {\r\n weldedIndex = weldedPositions.length;\r\n weldedPositionMap.set(key, weldedIndex);\r\n weldedPositions.push(new Vector3(x, y, z));\r\n }\r\n\r\n originalToWelded[index] = weldedIndex;\r\n }\r\n\r\n const faces: BevelFace[] = [];\r\n const edges = new Map<string, BevelEdge>();\r\n const vertexFaces = new Map<number, number[]>();\r\n const edge0 = new Vector3();\r\n const edge1 = new Vector3();\r\n const normal = new Vector3();\r\n\r\n for (let index = 0; index < indices.length; index += 3) {\r\n let originalIndices: [number, number, number] = [indices[index], indices[index + 1], indices[index + 2]];\r\n const i0 = originalToWelded[originalIndices[0]];\r\n const i1 = originalToWelded[originalIndices[1]];\r\n const i2 = originalToWelded[originalIndices[2]];\r\n\r\n if (i0 === i1 || i1 === i2 || i2 === i0) {\r\n continue;\r\n }\r\n\r\n let faceIndices: [number, number, number] = [i0, i1, i2];\r\n const p0 = weldedPositions[faceIndices[0]];\r\n const p1 = weldedPositions[faceIndices[1]];\r\n const p2 = weldedPositions[faceIndices[2]];\r\n\r\n p1.subtractToRef(p0, edge0);\r\n p2.subtractToRef(p0, edge1);\r\n Vector3.CrossToRef(edge0, edge1, normal);\r\n\r\n if (normal.lengthSquared() < NormalEpsilon) {\r\n continue;\r\n }\r\n\r\n let cornerNormals: [Vector3, Vector3, Vector3] = normals\r\n ? [\r\n _NormalizeNormalOrFallback(Vector3.FromArray(normals, originalIndices[0] * 3), normal),\r\n _NormalizeNormalOrFallback(Vector3.FromArray(normals, originalIndices[1] * 3), normal),\r\n _NormalizeNormalOrFallback(Vector3.FromArray(normals, originalIndices[2] * 3), normal),\r\n ]\r\n : [normal.normalizeToNew(), normal.normalizeToNew(), normal.normalizeToNew()];\r\n\r\n const averageCornerNormal = _NormalizeNormalOrFallback(cornerNormals[0].add(cornerNormals[1]).addInPlace(cornerNormals[2]), normal);\r\n\r\n if (normals && Vector3.Dot(normal, averageCornerNormal) < 0) {\r\n faceIndices = [i0, i2, i1];\r\n originalIndices = [originalIndices[0], originalIndices[2], originalIndices[1]];\r\n cornerNormals = [cornerNormals[0], cornerNormals[2], cornerNormals[1]];\r\n normal.scaleInPlace(-1);\r\n }\r\n\r\n const faceNormal = normal.normalizeToNew();\r\n\r\n if (!normals) {\r\n cornerNormals = [faceNormal.clone(), faceNormal.clone(), faceNormal.clone()];\r\n }\r\n\r\n const faceIndex = faces.length;\r\n faces.push({\r\n indices: faceIndices,\r\n originalIndices,\r\n normal: faceNormal,\r\n cornerNormals,\r\n materialIndex: _GetMaterialIndex(vertexData, index),\r\n });\r\n\r\n for (const vertexIndex of faceIndices) {\r\n let faceList = vertexFaces.get(vertexIndex);\r\n if (!faceList) {\r\n faceList = [];\r\n vertexFaces.set(vertexIndex, faceList);\r\n }\r\n faceList.push(faceIndex);\r\n }\r\n\r\n for (let edgeIndex = 0; edgeIndex < 3; edgeIndex++) {\r\n const v0 = faceIndices[edgeIndex];\r\n const v1 = faceIndices[(edgeIndex + 1) % 3];\r\n const key = _EdgeKey(v0, v1);\r\n let edge = edges.get(key);\r\n\r\n if (!edge) {\r\n edge = {\r\n key,\r\n v0: Math.min(v0, v1),\r\n v1: Math.max(v0, v1),\r\n faces: [],\r\n };\r\n edges.set(key, edge);\r\n }\r\n\r\n edge.faces.push({ faceIndex });\r\n }\r\n }\r\n\r\n if (!faces.length) {\r\n return null;\r\n }\r\n\r\n return {\r\n positions: weldedPositions,\r\n faces,\r\n edges,\r\n vertexFaces,\r\n };\r\n}\r\n\r\nfunction _ClonePolygonPoint(point: BevelPolygonPoint): BevelPolygonPoint {\r\n return {\r\n position: point.position.clone(),\r\n normal: point.normal.clone(),\r\n attributes: point.attributes.slice(),\r\n materialIndex: point.materialIndex,\r\n };\r\n}\r\n\r\nfunction _InterpolatePolygonPoint(start: BevelPolygonPoint, end: BevelPolygonPoint, amount: number): BevelPolygonPoint {\r\n return {\r\n position: Vector3.Lerp(start.position, end.position, amount),\r\n normal: _NormalizeNormalOrFallback(Vector3.Lerp(start.normal, end.normal, amount), start.normal),\r\n attributes: _InterpolateAttributes(start.attributes, end.attributes, amount),\r\n materialIndex: start.materialIndex,\r\n };\r\n}\r\n\r\nfunction _InterpolateSegmentNormal(segment: BevelFaceEdgeSegment, t: number) {\r\n const denominator = segment.tMax - segment.tMin;\r\n\r\n if (denominator <= PositionEpsilon) {\r\n return segment.minNormal.clone();\r\n }\r\n\r\n const amount = Math.min(1, Math.max(0, (t - segment.tMin) / denominator));\r\n return _NormalizeNormalOrFallback(Vector3.Lerp(segment.minNormal, segment.maxNormal, amount), segment.minNormal);\r\n}\r\n\r\nfunction _InterpolateSegmentPoint(segment: BevelFaceEdgeSegment, t: number) {\r\n if (t <= segment.tMin + PositionEpsilon) {\r\n return segment.minPoint;\r\n }\r\n\r\n if (t >= segment.tMax - PositionEpsilon) {\r\n return segment.maxPoint;\r\n }\r\n\r\n return Vector3.Lerp(segment.minPoint, segment.maxPoint, (t - segment.tMin) / (segment.tMax - segment.tMin));\r\n}\r\n\r\nfunction _InterpolateSegmentAttributes(segment: BevelFaceEdgeSegment, t: number) {\r\n if (t <= segment.tMin + PositionEpsilon) {\r\n return segment.minAttributes;\r\n }\r\n\r\n if (t >= segment.tMax - PositionEpsilon) {\r\n return segment.maxAttributes;\r\n }\r\n\r\n return _InterpolateAttributes(segment.minAttributes, segment.maxAttributes, (t - segment.tMin) / (segment.tMax - segment.tMin));\r\n}\r\n\r\nfunction _ClipPolygonAgainstEdge(polygon: BevelPolygonPoint[], edgeStart: Vector3, inward: Vector3, amount: number) {\r\n if (!polygon.length) {\r\n return polygon;\r\n }\r\n\r\n const output: BevelPolygonPoint[] = [];\r\n let previous = polygon[polygon.length - 1];\r\n let previousDistance = Vector3.Dot(previous.position.subtract(edgeStart), inward) - amount;\r\n let previousInside = previousDistance >= -PositionEpsilon;\r\n\r\n for (const current of polygon) {\r\n const currentDistance = Vector3.Dot(current.position.subtract(edgeStart), inward) - amount;\r\n const currentInside = currentDistance >= -PositionEpsilon;\r\n\r\n if (currentInside !== previousInside) {\r\n const denominator = previousDistance - currentDistance;\r\n if (Math.abs(denominator) > NormalEpsilon) {\r\n const t = previousDistance / denominator;\r\n output.push(_InterpolatePolygonPoint(previous, current, t));\r\n }\r\n }\r\n\r\n if (currentInside) {\r\n output.push(_ClonePolygonPoint(current));\r\n }\r\n\r\n previous = current;\r\n previousDistance = currentDistance;\r\n previousInside = currentInside;\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction _SlerpDirections(start: Vector3, end: Vector3, amount: number) {\r\n const dot = Math.min(1, Math.max(-1, Vector3.Dot(start, end)));\r\n\r\n if (dot > 1 - PositionEpsilon) {\r\n return Vector3.Lerp(start, end, amount).normalize();\r\n }\r\n\r\n const theta = Math.acos(dot);\r\n const sinTheta = Math.sin(theta);\r\n\r\n if (Math.abs(sinTheta) < NormalEpsilon) {\r\n return Vector3.Lerp(start, end, amount).normalize();\r\n }\r\n\r\n const startScale = Math.sin((1 - amount) * theta) / sinTheta;\r\n const endScale = Math.sin(amount * theta) / sinTheta;\r\n const result = start.scale(startScale).addInPlace(end.scale(endScale));\r\n\r\n if (result.lengthSquared() < NormalEpsilon) {\r\n return Vector3.Lerp(start, end, amount).normalize();\r\n }\r\n\r\n return result.normalize();\r\n}\r\n\r\nfunction _AddUniquePoint(points: BevelCapPoint[], point: Vector3, normal: Vector3, attributes: number[], materialIndex: number) {\r\n const key = _VectorKey(point);\r\n const normalizedNormal = _NormalizeNormalOrFallback(normal, normal);\r\n\r\n for (const existing of points) {\r\n if (_VectorKey(_GetCapPointPosition(existing)) === key) {\r\n if (_IsBevelPolygonPoint(existing)) {\r\n existing.normal.addInPlace(normalizedNormal).normalize();\r\n existing.attributes = _AverageAttributes([existing.attributes, attributes], attributes.length);\r\n }\r\n return;\r\n }\r\n }\r\n\r\n points.push({\r\n position: point.clone(),\r\n normal: normalizedNormal,\r\n attributes: attributes.slice(),\r\n materialIndex,\r\n });\r\n}\r\n\r\nfunction _AddUniqueNormal(normals: Vector3[], normal: Vector3) {\r\n for (const existing of normals) {\r\n if (Vector3.Dot(existing, normal) > 1 - PositionEpsilon) {\r\n return;\r\n }\r\n }\r\n\r\n normals.push(normal.clone());\r\n}\r\n\r\nfunction _SolveThreePlaneIntersection(normals: Vector3[], distances: number[]) {\r\n const cross12 = Vector3.Cross(normals[1], normals[2]);\r\n const denominator = Vector3.Dot(normals[0], cross12);\r\n\r\n if (Math.abs(denominator) < NormalEpsilon) {\r\n return null;\r\n }\r\n\r\n const result = cross12.scale(distances[0]);\r\n result.addInPlace(Vector3.Cross(normals[2], normals[0]).scale(distances[1]));\r\n result.addInPlace(Vector3.Cross(normals[0], normals[1]).scale(distances[2]));\r\n result.scaleInPlace(1 / denominator);\r\n\r\n return result;\r\n}\r\n\r\nfunction _BuildCoplanarFaceClipEdges(topology: BevelTopology, selectedEdges: Set<string>) {\r\n const result = new Map<number, BevelFaceClipEdge[]>();\r\n const visitedFaces = new Set<number>();\r\n\r\n for (let startFaceIndex = 0; startFaceIndex < topology.faces.length; startFaceIndex++) {\r\n if (visitedFaces.has(startFaceIndex)) {\r\n continue;\r\n }\r\n\r\n const group: number[] = [];\r\n const stack = [startFaceIndex];\r\n const groupNormal = topology.faces[startFaceIndex].normal;\r\n visitedFaces.add(startFaceIndex);\r\n\r\n while (stack.length) {\r\n const faceIndex = stack.pop()!;\r\n const face = topology.faces[faceIndex];\r\n group.push(faceIndex);\r\n\r\n for (let edgeIndex = 0; edgeIndex < 3; edgeIndex++) {\r\n const key = _EdgeKey(face.indices[edgeIndex], face.indices[(edgeIndex + 1) % 3]);\r\n const edge = topology.edges.get(key);\r\n\r\n if (!edge) {\r\n continue;\r\n }\r\n\r\n for (const edgeFace of edge.faces) {\r\n if (visitedFaces.has(edgeFace.faceIndex)) {\r\n continue;\r\n }\r\n\r\n if (Vector3.Dot(groupNormal, topology.faces[edgeFace.faceIndex].normal) < 1 - PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n visitedFaces.add(edgeFace.faceIndex);\r\n stack.push(edgeFace.faceIndex);\r\n }\r\n }\r\n }\r\n\r\n const clipEdges: BevelFaceClipEdge[] = [];\r\n const addedClipEdges = new Set<string>();\r\n\r\n for (const faceIndex of group) {\r\n const face = topology.faces[faceIndex];\r\n\r\n for (let edgeIndex = 0; edgeIndex < 3; edgeIndex++) {\r\n const start = face.indices[edgeIndex];\r\n const end = face.indices[(edgeIndex + 1) % 3];\r\n const key = _EdgeKey(start, end);\r\n\r\n if (!selectedEdges.has(key) || addedClipEdges.has(key)) {\r\n continue;\r\n }\r\n\r\n const edgeStart = topology.positions[start];\r\n const edgeEnd = topology.positions[end];\r\n const edgeDirection = edgeEnd.subtract(edgeStart).normalize();\r\n const inward = Vector3.Cross(face.normal, edgeDirection).normalize();\r\n clipEdges.push({ key, start, end, inward });\r\n addedClipEdges.add(key);\r\n }\r\n }\r\n\r\n for (const faceIndex of group) {\r\n result.set(faceIndex, clipEdges);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction _InsertPointOnPolygonBoundary(polygon: BevelPolygonPoint[], point: Vector3) {\r\n for (const existing of polygon) {\r\n if (existing.position.subtract(point).lengthSquared() <= PositionEpsilon * PositionEpsilon) {\r\n return;\r\n }\r\n }\r\n\r\n let bestEdgeIndex = -1;\r\n let bestDistanceSquared = Number.MAX_VALUE;\r\n let bestProjection = 0;\r\n\r\n for (let index = 0; index < polygon.length; index++) {\r\n const start = polygon[index].position;\r\n const end = polygon[(index + 1) % polygon.length].position;\r\n const edge = end.subtract(start);\r\n const edgeLengthSquared = edge.lengthSquared();\r\n\r\n if (edgeLengthSquared < PositionEpsilon * PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n const projection = Vector3.Dot(point.subtract(start), edge) / edgeLengthSquared;\r\n\r\n if (projection < -PositionEpsilon || projection > 1 + PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n const closest = start.add(edge.scale(projection));\r\n const distanceSquared = closest.subtract(point).lengthSquared();\r\n\r\n if (distanceSquared < bestDistanceSquared) {\r\n bestDistanceSquared = distanceSquared;\r\n bestEdgeIndex = index;\r\n bestProjection = projection;\r\n }\r\n }\r\n\r\n if (bestEdgeIndex !== -1 && bestDistanceSquared <= OutputPositionEpsilon * OutputPositionEpsilon) {\r\n const insertedPoint = _InterpolatePolygonPoint(polygon[bestEdgeIndex], polygon[(bestEdgeIndex + 1) % polygon.length], bestProjection);\r\n insertedPoint.position = point.clone();\r\n polygon.splice(bestEdgeIndex + 1, 0, insertedPoint);\r\n }\r\n}\r\n\r\nfunction _BuildMergedBoundaryPolygon(polygons: BevelPolygonPoint[][]) {\r\n const points = new Map<string, BevelPolygonPoint>();\r\n const edgeUseCounts = new Map<string, { count: number; key0: string; key1: string }>();\r\n\r\n for (const polygon of polygons) {\r\n for (const point of polygon) {\r\n const key = _VectorKey(point.position);\r\n const existing = points.get(key);\r\n\r\n if (existing) {\r\n existing.normal.addInPlace(point.normal).normalize();\r\n } else {\r\n points.set(key, _ClonePolygonPoint(point));\r\n }\r\n }\r\n\r\n for (let index = 0; index < polygon.length; index++) {\r\n const key0 = _VectorKey(polygon[index].position);\r\n const key1 = _VectorKey(polygon[(index + 1) % polygon.length].position);\r\n\r\n if (key0 === key1) {\r\n continue;\r\n }\r\n\r\n const edgeKey = key0 < key1 ? `${key0}|${key1}` : `${key1}|${key0}`;\r\n const edgeUseCount = edgeUseCounts.get(edgeKey);\r\n\r\n if (edgeUseCount) {\r\n edgeUseCount.count++;\r\n } else {\r\n edgeUseCounts.set(edgeKey, { count: 1, key0, key1 });\r\n }\r\n }\r\n }\r\n\r\n const adjacency = new Map<string, string[]>();\r\n for (const edge of Array.from(edgeUseCounts.values())) {\r\n if (edge.count !== 1) {\r\n continue;\r\n }\r\n\r\n let adjacency0 = adjacency.get(edge.key0);\r\n if (!adjacency0) {\r\n adjacency0 = [];\r\n adjacency.set(edge.key0, adjacency0);\r\n }\r\n adjacency0.push(edge.key1);\r\n\r\n let adjacency1 = adjacency.get(edge.key1);\r\n if (!adjacency1) {\r\n adjacency1 = [];\r\n adjacency.set(edge.key1, adjacency1);\r\n }\r\n adjacency1.push(edge.key0);\r\n }\r\n\r\n if (!adjacency.size || Array.from(adjacency.values()).some((neighbors) => neighbors.length !== 2)) {\r\n return null;\r\n }\r\n\r\n const startKey = Array.from(adjacency.keys()).sort()[0];\r\n const orderedKeys: string[] = [];\r\n let previousKey = \"\";\r\n let currentKey = startKey;\r\n\r\n do {\r\n orderedKeys.push(currentKey);\r\n const neighbors = adjacency.get(currentKey)!;\r\n const nextKey = neighbors[0] === previousKey ? neighbors[1] : neighbors[0];\r\n previousKey = currentKey;\r\n currentKey = nextKey;\r\n\r\n if (orderedKeys.length > adjacency.size) {\r\n return null;\r\n }\r\n } while (currentKey !== startKey);\r\n\r\n if (orderedKeys.length !== adjacency.size) {\r\n return null;\r\n }\r\n\r\n return orderedKeys.map((key) => points.get(key)!);\r\n}\r\n\r\nfunction _BevelVertexData(vertexData: VertexData, amount: number, segments: number, angle: number) {\r\n const topology = _BuildTopology(vertexData);\r\n\r\n if (!topology || amount <= PositionEpsilon || segments <= 0) {\r\n return _CloneVertexData(vertexData);\r\n }\r\n\r\n const selectedEdges = new Set<string>();\r\n const selectedVertices = new Set<number>();\r\n const selectedEdgeCountPerVertex = new Map<number, number>();\r\n const threshold = Math.cos(angle + AngleEpsilon);\r\n let shortestSelectedEdgeLength = Number.MAX_VALUE;\r\n\r\n for (const edge of Array.from(topology.edges.values())) {\r\n if (edge.faces.length !== 2) {\r\n continue;\r\n }\r\n\r\n const face0 = topology.faces[edge.faces[0].faceIndex];\r\n const face1 = topology.faces[edge.faces[1].faceIndex];\r\n\r\n if (Vector3.Dot(face0.normal, face1.normal) < threshold) {\r\n selectedEdges.add(edge.key);\r\n selectedVertices.add(edge.v0);\r\n selectedVertices.add(edge.v1);\r\n selectedEdgeCountPerVertex.set(edge.v0, (selectedEdgeCountPerVertex.get(edge.v0) ?? 0) + 1);\r\n selectedEdgeCountPerVertex.set(edge.v1, (selectedEdgeCountPerVertex.get(edge.v1) ?? 0) + 1);\r\n shortestSelectedEdgeLength = Math.min(shortestSelectedEdgeLength, Vector3.Distance(topology.positions[edge.v0], topology.positions[edge.v1]));\r\n }\r\n }\r\n\r\n if (!selectedEdges.size) {\r\n return _CloneVertexData(vertexData);\r\n }\r\n\r\n const bevelAmount = Math.min(amount, shortestSelectedEdgeLength * 0.5);\r\n\r\n if (bevelAmount <= PositionEpsilon) {\r\n return _CloneVertexData(vertexData);\r\n }\r\n\r\n const faceClipEdges = _BuildCoplanarFaceClipEdges(topology, selectedEdges);\r\n const attributeDescriptors = _BuildAttributeDescriptors(vertexData, vertexData.positions!.length / 3);\r\n const attributeLength = _GetAttributeLength(attributeDescriptors);\r\n const outputPositions: number[] = [];\r\n const outputNormals: Vector3[] = [];\r\n const outputNormalContributions: Vector3[][] = [];\r\n const outputVertexAttributes: number[][] = [];\r\n const outputIndices: number[] = [];\r\n const outputTriangleMaterialIndices: number[] = [];\r\n const outputVertexBuckets = new Map<string, number[]>();\r\n const outputVertexGroups: string[] = [];\r\n const faceEdgeSegments = new Map<string, BevelFaceEdgeSegment>();\r\n const capPoints = new Map<number, BevelCapPoint[]>();\r\n const preparedFaces: BevelPreparedFace[] = [];\r\n const edgeIntervals = new Map<string, BevelEdgeInterval>();\r\n\r\n const getOrCreateVertex = (position: Vector3, normal: Vector3, smoothingGroup: string, attributes: number[]) => {\r\n const normalizedNormal = normal.normalizeToNew();\r\n const vertexAttributes = attributeLength ? (attributes.length === attributeLength ? attributes : new Array<number>(attributeLength).fill(0)) : [];\r\n const qx = _OutputQuantize(position.x);\r\n const qy = _OutputQuantize(position.y);\r\n const qz = _OutputQuantize(position.z);\r\n let canonicalIndex = -1;\r\n\r\n for (let dz = -1; dz <= 1; dz++) {\r\n for (let dy = -1; dy <= 1; dy++) {\r\n for (let dx = -1; dx <= 1; dx++) {\r\n const bucket = outputVertexBuckets.get(_OutputPositionKey(qx + dx, qy + dy, qz + dz));\r\n\r\n if (!bucket) {\r\n continue;\r\n }\r\n\r\n for (const index of bucket) {\r\n const outputIndex = index * 3;\r\n const deltaX = outputPositions[outputIndex] - position.x;\r\n const deltaY = outputPositions[outputIndex + 1] - position.y;\r\n const deltaZ = outputPositions[outputIndex + 2] - position.z;\r\n\r\n if (deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ <= OutputPositionEpsilon * OutputPositionEpsilon) {\r\n if (canonicalIndex === -1) {\r\n canonicalIndex = index;\r\n }\r\n\r\n if (outputVertexGroups[index] !== smoothingGroup) {\r\n continue;\r\n }\r\n\r\n if (!_AttributesMatch(outputVertexAttributes[index], vertexAttributes)) {\r\n continue;\r\n }\r\n\r\n const normalContributions = outputNormalContributions[index];\r\n if (!normalContributions.some((normal) => Vector3.Dot(normal, normalizedNormal) > 1 - PositionEpsilon)) {\r\n normalContributions.push(normalizedNormal);\r\n outputNormals[index].addInPlace(normalizedNormal);\r\n }\r\n return index;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const index = outputPositions.length / 3;\r\n const outputX = canonicalIndex === -1 ? position.x : outputPositions[canonicalIndex * 3];\r\n const outputY = canonicalIndex === -1 ? position.y : outputPositions[canonicalIndex * 3 + 1];\r\n const outputZ = canonicalIndex === -1 ? position.z : outputPositions[canonicalIndex * 3 + 2];\r\n const key = _OutputPositionKey(_OutputQuantize(outputX), _OutputQuantize(outputY), _OutputQuantize(outputZ));\r\n let bucket = outputVertexBuckets.get(key);\r\n\r\n if (!bucket) {\r\n bucket = [];\r\n outputVertexBuckets.set(key, bucket);\r\n }\r\n\r\n bucket.push(index);\r\n outputPositions.push(outputX, outputY, outputZ);\r\n outputNormals.push(normalizedNormal);\r\n outputNormalContributions.push([normalizedNormal.clone()]);\r\n outputVertexAttributes.push(vertexAttributes.slice());\r\n outputVertexGroups.push(smoothingGroup);\r\n\r\n return index;\r\n };\r\n\r\n const addCapPoint = (vertexIndex: number, point: Vector3, normal: Vector3, attributes: number[], materialIndex: number) => {\r\n let points = capPoints.get(vertexIndex);\r\n if (!points) {\r\n points = [];\r\n capPoints.set(vertexIndex, points);\r\n }\r\n _AddUniquePoint(points, point, normal, attributes, materialIndex);\r\n };\r\n\r\n const addTriangle = (\r\n p0: Vector3,\r\n p1: Vector3,\r\n p2: Vector3,\r\n targetNormal: Vector3,\r\n n0 = targetNormal,\r\n n1 = targetNormal,\r\n n2 = targetNormal,\r\n smoothingGroup = \"smooth\",\r\n p0Attributes: number[] = [],\r\n p1Attributes: number[] = [],\r\n p2Attributes: number[] = [],\r\n materialIndex = 0\r\n ) => {\r\n const edge0 = p1.subtract(p0);\r\n const edge1 = p2.subtract(p0);\r\n const normal = Vector3.Cross(edge0, edge1);\r\n\r\n if (normal.lengthSquared() < TriangleAreaEpsilon) {\r\n return;\r\n }\r\n\r\n let v1 = p1;\r\n let v2 = p2;\r\n let vn1 = n1;\r\n let vn2 = n2;\r\n let va1 = p1Attributes;\r\n let va2 = p2Attributes;\r\n\r\n if (Vector3.Dot(normal, targetNormal) > 0) {\r\n v1 = p2;\r\n v2 = p1;\r\n vn1 = n2;\r\n vn2 = n1;\r\n va1 = p2Attributes;\r\n va2 = p1Attributes;\r\n }\r\n\r\n const i0 = getOrCreateVertex(p0, n0, smoothingGroup, p0Attributes);\r\n const i1 = getOrCreateVertex(v1, vn1, smoothingGroup, va1);\r\n const i2 = getOrCreateVertex(v2, vn2, smoothingGroup, va2);\r\n\r\n if (i0 === i1 || i1 === i2 || i2 === i0) {\r\n return;\r\n }\r\n\r\n outputIndices.push(i0, i1, i2);\r\n outputTriangleMaterialIndices.push(materialIndex);\r\n };\r\n\r\n const addFacePolygon = (polygon: BevelPolygonPoint[], normal: Vector3, smoothingGroup: string, useFlatNormals: boolean) => {\r\n const center = new Vector3();\r\n const centerAttributes = _AverageAttributes(\r\n polygon.map((point) => point.attributes),\r\n attributeLength\r\n );\r\n const materialIndex = polygon[0]?.materialIndex ?? 0;\r\n const centerNormal = useFlatNormals\r\n ? normal\r\n : _NormalizeNormalOrFallback(\r\n polygon.reduce((accumulator, point) => accumulator.addInPlace(point.normal), new Vector3()),\r\n normal\r\n );\r\n\r\n for (const point of polygon) {\r\n center.addInPlace(point.position);\r\n }\r\n center.scaleInPlace(1 / polygon.length);\r\n\r\n for (let index = 0; index < polygon.length; index++) {\r\n const nextIndex = (index + 1) % polygon.length;\r\n addTriangle(\r\n center,\r\n polygon[index].position,\r\n polygon[nextIndex].position,\r\n normal,\r\n centerNormal,\r\n useFlatNormals ? normal : polygon[index].normal,\r\n useFlatNormals ? normal : polygon[nextIndex].normal,\r\n smoothingGroup,\r\n centerAttributes,\r\n polygon[index].attributes,\r\n polygon[nextIndex].attributes,\r\n materialIndex\r\n );\r\n }\r\n };\r\n\r\n for (let faceIndex = 0; faceIndex < topology.faces.length; faceIndex++) {\r\n const face = topology.faces[faceIndex];\r\n const isFlat = _IsFlatFace(face);\r\n let polygon = face.indices.map((index, cornerIndex) => ({\r\n position: topology.positions[index].clone(),\r\n normal: face.cornerNormals[cornerIndex].clone(),\r\n attributes: _GetVertexAttributes(attributeDescriptors, face.originalIndices[cornerIndex]),\r\n materialIndex: face.materialIndex,\r\n }));\r\n const selectedFaceEdges: BevelFaceClipEdge[] = [];\r\n\r\n for (let edgeIndex = 0; edgeIndex < 3; edgeIndex++) {\r\n const start = face.indices[edgeIndex];\r\n const end = face.indices[(edgeIndex + 1) % 3];\r\n const key = _EdgeKey(start, end);\r\n\r\n if (!selectedEdges.has(key)) {\r\n continue;\r\n }\r\n\r\n const edgeStart = topology.positions[start];\r\n const edgeEnd = topology.positions[end];\r\n const edgeDirection = edgeEnd.subtract(edgeStart).normalize();\r\n const inward = Vector3.Cross(face.normal, edgeDirection).normalize();\r\n selectedFaceEdges.push({ key, start, end, inward });\r\n }\r\n\r\n const clipEdges = faceClipEdges.get(faceIndex) ?? selectedFaceEdges;\r\n\r\n for (const clipEdge of clipEdges) {\r\n polygon = _ClipPolygonAgainstEdge(polygon, topology.positions[clipEdge.start], clipEdge.inward, bevelAmount);\r\n }\r\n\r\n if (isFlat) {\r\n for (const point of polygon) {\r\n point.normal = face.normal.clone();\r\n }\r\n }\r\n\r\n preparedFaces.push({ faceIndex, polygon, selectedFaceEdges, isFlat });\r\n\r\n for (const selectedFaceEdge of selectedFaceEdges) {\r\n const edge = topology.edges.get(selectedFaceEdge.key)!;\r\n const edgeStart = topology.positions[edge.v0];\r\n const edgeEnd = topology.positions[edge.v1];\r\n const axis = edgeEnd.subtract(edgeStart);\r\n const edgeLength = axis.length();\r\n\r\n if (edgeLength < PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n axis.normalize();\r\n\r\n const pointsOnLine: Array<{ point: BevelPolygonPoint; t: number }> = [];\r\n const orientedEdgeStart = topology.positions[selectedFaceEdge.start];\r\n\r\n for (const point of polygon) {\r\n const distance = Vector3.Dot(point.position.subtract(orientedEdgeStart), selectedFaceEdge.inward);\r\n\r\n if (Math.abs(distance - bevelAmount) < PositionEpsilon * 10) {\r\n const t = Vector3.Dot(point.position.subtract(edgeStart), axis);\r\n if (t >= -PositionEpsilon && t <= edgeLength + PositionEpsilon) {\r\n pointsOnLine.push({ point, t: Math.min(edgeLength, Math.max(0, t)) });\r\n }\r\n }\r\n }\r\n\r\n if (pointsOnLine.length < 2) {\r\n continue;\r\n }\r\n\r\n pointsOnLine.sort((a, b) => a.t - b.t);\r\n\r\n const minPoint = pointsOnLine[0].point.position;\r\n const maxPoint = pointsOnLine[pointsOnLine.length - 1].point.position;\r\n const minNormal = pointsOnLine[0].point.normal;\r\n const maxNormal = pointsOnLine[pointsOnLine.length - 1].point.normal;\r\n const minAttributes = pointsOnLine[0].point.attributes;\r\n const maxAttributes = pointsOnLine[pointsOnLine.length - 1].point.attributes;\r\n const segment: BevelFaceEdgeSegment = {\r\n edgeKey: selectedFaceEdge.key,\r\n faceIndex,\r\n inward: selectedFaceEdge.inward,\r\n tMin: pointsOnLine[0].t,\r\n tMax: pointsOnLine[pointsOnLine.length - 1].t,\r\n minPoint,\r\n maxPoint,\r\n minNormal,\r\n maxNormal,\r\n minAttributes,\r\n maxAttributes,\r\n materialIndex: face.materialIndex,\r\n };\r\n\r\n faceEdgeSegments.set(`${faceIndex}|${selectedFaceEdge.key}`, segment);\r\n addCapPoint(edge.v0, minPoint, pointsOnLine[0].point.normal, minAttributes, face.materialIndex);\r\n addCapPoint(edge.v1, maxPoint, pointsOnLine[pointsOnLine.length - 1].point.normal, maxAttributes, face.materialIndex);\r\n }\r\n }\r\n\r\n for (const edgeKey of Array.from(selectedEdges)) {\r\n const edge = topology.edges.get(edgeKey)!;\r\n const face0 = edge.faces[0].faceIndex;\r\n const face1 = edge.faces[1].faceIndex;\r\n const segment0 = faceEdgeSegments.get(`${face0}|${edgeKey}`);\r\n const segment1 = faceEdgeSegments.get(`${face1}|${edgeKey}`);\r\n\r\n if (!segment0 || !segment1) {\r\n continue;\r\n }\r\n\r\n const edgeStart = topology.positions[edge.v0];\r\n const edgeEnd = topology.positions[edge.v1];\r\n const axis = edgeEnd.subtract(edgeStart);\r\n const edgeLength = axis.length();\r\n\r\n if (edgeLength < PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n axis.normalize();\r\n\r\n const tStart = Math.max(segment0.tMin, segment1.tMin);\r\n const tEnd = Math.min(segment0.tMax, segment1.tMax);\r\n\r\n if (tEnd - tStart <= PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n edgeIntervals.set(edgeKey, { tStart, tEnd });\r\n }\r\n\r\n for (const preparedFace of preparedFaces) {\r\n for (const selectedFaceEdge of preparedFace.selectedFaceEdges) {\r\n const edge = topology.edges.get(selectedFaceEdge.key)!;\r\n const interval = edgeIntervals.get(selectedFaceEdge.key);\r\n const segment = faceEdgeSegments.get(`${preparedFace.faceIndex}|${selectedFaceEdge.key}`);\r\n\r\n if (!interval || !segment) {\r\n continue;\r\n }\r\n\r\n const edgeStart = topology.positions[edge.v0];\r\n const edgeEnd = topology.positions[edge.v1];\r\n const axis = edgeEnd.subtract(edgeStart);\r\n const edgeLength = axis.length();\r\n\r\n if (edgeLength < PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n axis.normalize();\r\n\r\n for (const t of [interval.tStart, interval.tEnd]) {\r\n if (t <= segment.tMin + PositionEpsilon || t >= segment.tMax - PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n _InsertPointOnPolygonBoundary(preparedFace.polygon, edgeStart.add(axis.scale(t)).addInPlace(segment.inward.scale(bevelAmount)));\r\n }\r\n }\r\n }\r\n\r\n const emittedMergedFaces = new Set<number>();\r\n const preparedFacesByPlane = new Map<string, BevelPreparedFace[]>();\r\n\r\n for (const preparedFace of preparedFaces) {\r\n if (!preparedFace.selectedFaceEdges.length || !preparedFace.isFlat) {\r\n continue;\r\n }\r\n\r\n const face = topology.faces[preparedFace.faceIndex];\r\n const distance = Vector3.Dot(topology.positions[face.indices[0]], face.normal);\r\n const planeKey = `${_PositionKey(face.normal.x, face.normal.y, face.normal.z)}:${_Quantize(distance)}`;\r\n let group = preparedFacesByPlane.get(planeKey);\r\n\r\n if (!group) {\r\n group = [];\r\n preparedFacesByPlane.set(planeKey, group);\r\n }\r\n\r\n group.push(preparedFace);\r\n }\r\n\r\n for (const group of Array.from(preparedFacesByPlane.values())) {\r\n if (group.length < 2) {\r\n continue;\r\n }\r\n\r\n const mergedPolygon = _BuildMergedBoundaryPolygon(group.map((preparedFace) => preparedFace.polygon));\r\n\r\n if (!mergedPolygon || mergedPolygon.length < 3) {\r\n continue;\r\n }\r\n\r\n const face = topology.faces[group[0].faceIndex];\r\n addFacePolygon(mergedPolygon, face.normal, `face-flat:${_PositionKey(face.normal.x, face.normal.y, face.normal.z)}`, true);\r\n\r\n for (const preparedFace of group) {\r\n emittedMergedFaces.add(preparedFace.faceIndex);\r\n }\r\n }\r\n\r\n for (const preparedFace of preparedFaces) {\r\n if (emittedMergedFaces.has(preparedFace.faceIndex)) {\r\n continue;\r\n }\r\n\r\n const face = topology.faces[preparedFace.faceIndex];\r\n const smoothingGroup = preparedFace.selectedFaceEdges.length && !preparedFace.isFlat ? \"smooth\" : `face-flat:${_PositionKey(face.normal.x, face.normal.y, face.normal.z)}`;\r\n\r\n if (preparedFace.polygon.length >= 3) {\r\n if (smoothingGroup === \"smooth\") {\r\n addFacePolygon(preparedFace.polygon, face.normal, smoothingGroup, false);\r\n } else {\r\n for (let index = 1; index < preparedFace.polygon.length - 1; index++) {\r\n addTriangle(\r\n preparedFace.polygon[0].position,\r\n preparedFace.polygon[index].position,\r\n preparedFace.polygon[index + 1].position,\r\n face.normal,\r\n face.normal,\r\n face.normal,\r\n face.normal,\r\n smoothingGroup,\r\n preparedFace.polygon[0].attributes,\r\n preparedFace.polygon[index].attributes,\r\n preparedFace.polygon[index + 1].attributes,\r\n face.materialIndex\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (const edgeKey of Array.from(selectedEdges)) {\r\n const edge = topology.edges.get(edgeKey)!;\r\n const face0 = edge.faces[0].faceIndex;\r\n const face1 = edge.faces[1].faceIndex;\r\n const segment0 = faceEdgeSegments.get(`${face0}|${edgeKey}`);\r\n const segment1 = faceEdgeSegments.get(`${face1}|${edgeKey}`);\r\n const interval = edgeIntervals.get(edgeKey);\r\n\r\n if (!segment0 || !segment1 || !interval) {\r\n continue;\r\n }\r\n\r\n const edgeStart = topology.positions[edge.v0];\r\n const edgeEnd = topology.positions[edge.v1];\r\n const axis = edgeEnd.subtract(edgeStart);\r\n const edgeLength = axis.length();\r\n\r\n if (edgeLength < PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n axis.normalize();\r\n\r\n const { tStart, tEnd } = interval;\r\n const faceNormal0 = topology.faces[segment0.faceIndex].normal;\r\n const faceNormal1 = topology.faces[segment1.faceIndex].normal;\r\n const segment0Start = _InterpolateSegmentPoint(segment0, tStart);\r\n const segment1Start = _InterpolateSegmentPoint(segment1, tStart);\r\n const segment0End = _InterpolateSegmentPoint(segment0, tEnd);\r\n const segment1End = _InterpolateSegmentPoint(segment1, tEnd);\r\n const segment0StartNormal = _InterpolateSegmentNormal(segment0, tStart);\r\n const segment1StartNormal = _InterpolateSegmentNormal(segment1, tStart);\r\n const segment0EndNormal = _InterpolateSegmentNormal(segment0, tEnd);\r\n const segment1EndNormal = _InterpolateSegmentNormal(segment1, tEnd);\r\n const segment0StartAttributes = _InterpolateSegmentAttributes(segment0, tStart);\r\n const segment1StartAttributes = _InterpolateSegmentAttributes(segment1, tStart);\r\n const segment0EndAttributes = _InterpolateSegmentAttributes(segment0, tEnd);\r\n const segment1EndAttributes = _InterpolateSegmentAttributes(segment1, tEnd);\r\n const centerStart = segment0Start\r\n .subtract(faceNormal0.scale(bevelAmount))\r\n .addInPlace(segment1Start.subtract(faceNormal1.scale(bevelAmount)))\r\n .scaleInPlace(0.5);\r\n const centerEnd = segment0End\r\n .subtract(faceNormal0.scale(bevelAmount))\r\n .addInPlace(segment1End.subtract(faceNormal1.scale(bevelAmount)))\r\n .scaleInPlace(0.5);\r\n const startProfilePoints: Vector3[] = [];\r\n const endProfilePoints: Vector3[] = [];\r\n const startProfileNormals: Vector3[] = [];\r\n const endProfileNormals: Vector3[] = [];\r\n const startProfileAttributes: number[][] = [];\r\n const endProfileAttributes: number[][] = [];\r\n\r\n for (let segmentIndex = 0; segmentIndex <= segments; segmentIndex++) {\r\n const profileAmount = segmentIndex / segments;\r\n const profileNormal = _SlerpDirections(faceNormal0, faceNormal1, profileAmount);\r\n const startNormal = _SlerpDirections(segment0StartNormal, segment1StartNormal, profileAmount);\r\n const endNormal = _SlerpDirections(segment0EndNormal, segment1EndNormal, profileAmount);\r\n const startAttributes = _InterpolateAttributes(segment0StartAttributes, segment1StartAttributes, profileAmount);\r\n const endAttributes = _InterpolateAttributes(segment0EndAttributes, segment1EndAttributes, profileAmount);\r\n let startPoint = centerStart.add(profileNormal.scale(bevelAmount));\r\n let endPoint = centerEnd.add(profileNormal.scale(bevelAmount));\r\n\r\n if (segmentIndex === 0) {\r\n startPoint = segment0Start;\r\n endPoint = segment0End;\r\n } else if (segmentIndex === segments) {\r\n startPoint = segment1Start;\r\n endPoint = segment1End;\r\n }\r\n\r\n startProfilePoints.push(startPoint);\r\n endProfilePoints.push(endPoint);\r\n startProfileNormals.push(startNormal);\r\n endProfileNormals.push(endNormal);\r\n startProfileAttributes.push(startAttributes);\r\n endProfileAttributes.push(endAttributes);\r\n addCapPoint(edge.v0, startPoint, startNormal, startAttributes, segment0.materialIndex);\r\n addCapPoint(edge.v1, endPoint, endNormal, endAttributes, segment0.materialIndex);\r\n }\r\n\r\n for (let segmentIndex = 0; segmentIndex < segments; segmentIndex++) {\r\n const normalTarget = _SlerpDirections(faceNormal0, faceNormal1, (segmentIndex + 0.5) / segments);\r\n\r\n addTriangle(\r\n startProfilePoints[segmentIndex],\r\n endProfilePoints[segmentIndex],\r\n endProfilePoints[segmentIndex + 1],\r\n normalTarget,\r\n startProfileNormals[segmentIndex],\r\n endProfileNormals[segmentIndex],\r\n endProfileNormals[segmentIndex + 1],\r\n \"smooth\",\r\n startProfileAttributes[segmentIndex],\r\n endProfileAttributes[segmentIndex],\r\n endProfileAttributes[segmentIndex + 1],\r\n segment0.materialIndex\r\n );\r\n addTriangle(\r\n startProfilePoints[segmentIndex],\r\n endProfilePoints[segmentIndex + 1],\r\n startProfilePoints[segmentIndex + 1],\r\n normalTarget,\r\n startProfileNormals[segmentIndex],\r\n endProfileNormals[segmentIndex + 1],\r\n startProfileNormals[segmentIndex + 1],\r\n \"smooth\",\r\n startProfileAttributes[segmentIndex],\r\n endProfileAttributes[segmentIndex + 1],\r\n startProfileAttributes[segmentIndex + 1],\r\n segment0.materialIndex\r\n );\r\n }\r\n }\r\n\r\n const addSphericalCornerPatch = (vertexIndex: number) => {\r\n if ((selectedEdgeCountPerVertex.get(vertexIndex) ?? 0) < 3) {\r\n return false;\r\n }\r\n\r\n const incidentNormals: Vector3[] = [];\r\n const vertexPosition = topology.positions[vertexIndex];\r\n const cornerCapPoints = capPoints.get(vertexIndex) ?? [];\r\n const cornerAttributes = _AverageAttributes(\r\n cornerCapPoints.map((point) => _GetCapPointAttributes(point)),\r\n attributeLength\r\n );\r\n const materialIndex = cornerCapPoints.length ? _GetCapPointMaterialIndex(cornerCapPoints[0]) : 0;\r\n\r\n for (const edgeKey of Array.from(selectedEdges)) {\r\n const edge = topology.edges.get(edgeKey)!;\r\n\r\n if (edge.v0 !== vertexIndex && edge.v1 !== vertexIndex) {\r\n continue;\r\n }\r\n\r\n for (const edgeFace of edge.faces) {\r\n _AddUniqueNormal(incidentNormals, topology.faces[edgeFace.faceIndex].normal);\r\n }\r\n }\r\n\r\n if (incidentNormals.length !== 3) {\r\n return false;\r\n }\r\n\r\n const averageNormal = incidentNormals[0].add(incidentNormals[1]).addInPlace(incidentNormals[2]).normalize();\r\n const tangent = incidentNormals[0].subtract(averageNormal.scale(Vector3.Dot(incidentNormals[0], averageNormal))).normalize();\r\n const bitangent = Vector3.Cross(averageNormal, tangent).normalize();\r\n incidentNormals.sort((a, b) => Math.atan2(Vector3.Dot(a, bitangent), Vector3.Dot(a, tangent)) - Math.atan2(Vector3.Dot(b, bitangent), Vector3.Dot(b, tangent)));\r\n\r\n const distances = incidentNormals.map((normal) => Vector3.Dot(vertexPosition, normal) - bevelAmount);\r\n const center = _SolveThreePlaneIntersection(incidentNormals, distances);\r\n\r\n if (!center) {\r\n return false;\r\n }\r\n\r\n const rows: BevelPolygonPoint[][] = [];\r\n for (let rowIndex = 0; rowIndex <= segments; rowIndex++) {\r\n const rowAmount = rowIndex / segments;\r\n const left = _SlerpDirections(incidentNormals[0], incidentNormals[1], rowAmount);\r\n const right = _SlerpDirections(incidentNormals[0], incidentNormals[2], rowAmount);\r\n const row: BevelPolygonPoint[] = [];\r\n\r\n for (let columnIndex = 0; columnIndex <= rowIndex; columnIndex++) {\r\n const columnAmount = rowIndex === 0 ? 0 : columnIndex / rowIndex;\r\n const direction = rowIndex === 0 ? incidentNormals[0].clone() : _SlerpDirections(left, right, columnAmount);\r\n row.push({\r\n position: center.add(direction.scale(bevelAmount)),\r\n normal: direction,\r\n attributes: cornerAttributes,\r\n materialIndex,\r\n });\r\n }\r\n\r\n rows.push(row);\r\n }\r\n\r\n for (let rowIndex = 0; rowIndex < segments; rowIndex++) {\r\n const row = rows[rowIndex];\r\n const nextRow = rows[rowIndex + 1];\r\n\r\n for (let columnIndex = 0; columnIndex < row.length; columnIndex++) {\r\n const targetNormal0 = row[columnIndex].position.subtract(center).normalize();\r\n const targetNormal1 = nextRow[columnIndex].position.subtract(center).normalize();\r\n const targetNormal2 = nextRow[columnIndex + 1].position.subtract(center).normalize();\r\n const targetNormal = targetNormal0.addInPlace(targetNormal1).addInPlace(targetNormal2).normalize();\r\n\r\n addTriangle(\r\n row[columnIndex].position,\r\n nextRow[columnIndex].position,\r\n nextRow[columnIndex + 1].position,\r\n targetNormal,\r\n targetNormal0,\r\n targetNormal1,\r\n targetNormal2,\r\n \"smooth\",\r\n row[columnIndex].attributes,\r\n nextRow[columnIndex].attributes,\r\n nextRow[columnIndex + 1].attributes,\r\n materialIndex\r\n );\r\n\r\n if (columnIndex < row.length - 1) {\r\n const secondTargetNormal0 = row[columnIndex].position.subtract(center).normalize();\r\n const secondTargetNormal1 = nextRow[columnIndex + 1].position.subtract(center).normalize();\r\n const secondTargetNormal2 = row[columnIndex + 1].position.subtract(center).normalize();\r\n const secondTargetNormal = secondTargetNormal0.add(secondTargetNormal1).addInPlace(secondTargetNormal2).normalize();\r\n\r\n addTriangle(\r\n row[columnIndex].position,\r\n nextRow[columnIndex + 1].position,\r\n row[columnIndex + 1].position,\r\n secondTargetNormal,\r\n secondTargetNormal0,\r\n secondTargetNormal1,\r\n secondTargetNormal2,\r\n \"smooth\",\r\n row[columnIndex].attributes,\r\n nextRow[columnIndex + 1].attributes,\r\n row[columnIndex + 1].attributes,\r\n materialIndex\r\n );\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n const verticesWithSphericalPatch = new Set<number>();\r\n for (const vertexIndex of Array.from(selectedVertices)) {\r\n if (addSphericalCornerPatch(vertexIndex)) {\r\n verticesWithSphericalPatch.add(vertexIndex);\r\n }\r\n }\r\n\r\n for (const [vertexIndex, points] of Array.from(capPoints)) {\r\n if (points.length < 3) {\r\n continue;\r\n }\r\n\r\n if (verticesWithSphericalPatch.has(vertexIndex)) {\r\n continue;\r\n }\r\n\r\n const center = new Vector3();\r\n for (const point of points) {\r\n center.addInPlace(_GetCapPointPosition(point));\r\n }\r\n center.scaleInPlace(1 / points.length);\r\n\r\n let normal = new Vector3();\r\n const incidentFaces = topology.vertexFaces.get(vertexIndex) || [];\r\n for (const faceIndex of incidentFaces) {\r\n normal.addInPlace(topology.faces[faceIndex].normal);\r\n }\r\n\r\n if (normal.lengthSquared() < NormalEpsilon) {\r\n normal = topology.positions[vertexIndex].subtract(center);\r\n }\r\n\r\n if (normal.lengthSquared() < NormalEpsilon) {\r\n continue;\r\n }\r\n\r\n normal.normalize();\r\n\r\n const reference = Math.abs(normal.y) < 0.9 ? Vector3.Up() : Vector3.Right();\r\n const tangent = Vector3.Cross(reference, normal).normalize();\r\n const bitangent = Vector3.Cross(normal, tangent).normalize();\r\n const sortedPoints = points.slice().sort((a, b) => {\r\n const da = _GetCapPointPosition(a).subtract(center);\r\n const db = _GetCapPointPosition(b).subtract(center);\r\n const angleA = Math.atan2(Vector3.Dot(da, bitangent), Vector3.Dot(da, tangent));\r\n const angleB = Math.atan2(Vector3.Dot(db, bitangent), Vector3.Dot(db, tangent));\r\n return angleA - angleB;\r\n });\r\n\r\n if ((selectedEdgeCountPerVertex.get(vertexIndex) ?? 0) === 2) {\r\n const polygonPoints = sortedPoints.map((point) => ({\r\n position: _GetCapPointPosition(point),\r\n normal: _GetCapPointNormal(point, normal),\r\n attributes: _GetCapPointAttributes(point),\r\n materialIndex: _GetCapPointMaterialIndex(point),\r\n }));\r\n const addPatchTriangle = (point0: BevelPolygonPoint, point1: BevelPolygonPoint, point2: BevelPolygonPoint) => {\r\n const targetNormal = _NormalizeNormalOrFallback(point0.normal.add(point1.normal).addInPlace(point2.normal), normal);\r\n addTriangle(\r\n point0.position,\r\n point1.position,\r\n point2.position,\r\n targetNormal,\r\n point0.normal,\r\n point1.normal,\r\n point2.normal,\r\n \"smooth\",\r\n point0.attributes,\r\n point1.attributes,\r\n point2.attributes,\r\n point0.materialIndex\r\n );\r\n };\r\n\r\n while (polygonPoints.length > 3) {\r\n let bestIndex = -1;\r\n let bestScore = Number.MAX_VALUE;\r\n\r\n for (let index = 0; index < polygonPoints.length; index++) {\r\n const previous = polygonPoints[(index + polygonPoints.length - 1) % polygonPoints.length];\r\n const current = polygonPoints[index];\r\n const next = polygonPoints[(index + 1) % polygonPoints.length];\r\n const edge0 = current.position.subtract(previous.position);\r\n const edge1 = next.position.subtract(previous.position);\r\n const triangleNormal = Vector3.Cross(edge0, edge1);\r\n\r\n if (triangleNormal.lengthSquared() < TriangleAreaEpsilon) {\r\n continue;\r\n }\r\n\r\n const score = previous.position.subtract(next.position).lengthSquared();\r\n if (score < bestScore) {\r\n bestScore = score;\r\n bestIndex = index;\r\n }\r\n }\r\n\r\n if (bestIndex === -1) {\r\n break;\r\n }\r\n\r\n addPatchTriangle(\r\n polygonPoints[(bestIndex + polygonPoints.length - 1) % polygonPoints.length],\r\n polygonPoints[bestIndex],\r\n polygonPoints[(bestIndex + 1) % polygonPoints.length]\r\n );\r\n polygonPoints.splice(bestIndex, 1);\r\n }\r\n\r\n if (polygonPoints.length === 3) {\r\n addPatchTriangle(polygonPoints[0], polygonPoints[1], polygonPoints[2]);\r\n }\r\n\r\n continue;\r\n }\r\n\r\n const centerAttributes = _AverageAttributes(\r\n sortedPoints.map((point) => _GetCapPointAttributes(point)),\r\n attributeLength\r\n );\r\n const centerMaterialIndex = sortedPoints.length ? _GetCapPointMaterialIndex(sortedPoints[0]) : 0;\r\n for (let index = 0; index < sortedPoints.length; index++) {\r\n const point0 = sortedPoints[index];\r\n const point1 = sortedPoints[(index + 1) % sortedPoints.length];\r\n const point0Position = _GetCapPointPosition(point0);\r\n const point1Position = _GetCapPointPosition(point1);\r\n\r\n addTriangle(\r\n center,\r\n point0Position,\r\n point1Position,\r\n normal,\r\n normal,\r\n _GetCapPointNormal(point0, normal),\r\n _GetCapPointNormal(point1, normal),\r\n \"smooth\",\r\n centerAttributes,\r\n _GetCapPointAttributes(point0),\r\n _GetCapPointAttributes(point1),\r\n centerMaterialIndex\r\n );\r\n }\r\n }\r\n\r\n if (!outputPositions.length || !outputIndices.length) {\r\n return _CloneVertexData(vertexData);\r\n }\r\n\r\n const result = new VertexData();\r\n result.positions = outputPositions;\r\n result.normals = [];\r\n\r\n for (let index = 0; index < outputNormals.length; index++) {\r\n const normal = outputNormals[index];\r\n normal.normalize();\r\n\r\n result.normals.push(normal.x, normal.y, normal.z);\r\n }\r\n\r\n _AssignAttributeOutputs(result, attributeDescriptors, outputVertexAttributes);\r\n\r\n const materialResult = _BuildMaterialInfoResult(vertexData, outputIndices, outputTriangleMaterialIndices, outputPositions.length / 3);\r\n result.indices = materialResult.indices;\r\n result.materialInfos = materialResult.materialInfos;\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Block used to bevel sharp edges in a geometry.\r\n */\r\nexport class BevelBlock extends NodeGeometryBlock {\r\n /**\r\n * Gets or sets a boolean indicating that this block can evaluate context.\r\n * Build performance is improved when this value is set to false as the system will cache values instead of reevaluating everything per context change.\r\n */\r\n @editableInPropertyPage(\"Evaluate context\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true } })\r\n public evaluateContext = false;\r\n\r\n /**\r\n * Creates a new BevelBlock.\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this.registerInput(\"geometry\", NodeGeometryBlockConnectionPointTypes.Geometry);\r\n this.registerInput(\"amount\", NodeGeometryBlockConnectionPointTypes.Float, true, 0.1, 0, 1);\r\n this.registerInput(\"segments\", NodeGeometryBlockConnectionPointTypes.Int, true, 1, 1, 64);\r\n this.registerInput(\"angle\", NodeGeometryBlockConnectionPointTypes.Float, true, 30, 0, 180);\r\n this.registerOutput(\"output\", NodeGeometryBlockConnectionPointTypes.Geometry);\r\n }\r\n\r\n /**\r\n * Gets the current class name.\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"BevelBlock\";\r\n }\r\n\r\n /**\r\n * Gets the geometry input component.\r\n */\r\n public get geometry(): NodeGeometryConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the bevel amount input component.\r\n */\r\n public get amount(): NodeGeometryConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the bevel segment count input component.\r\n */\r\n public get segments(): NodeGeometryConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the angle threshold input component in degrees.\r\n */\r\n public get angle(): NodeGeometryConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the geometry output component.\r\n */\r\n public get output(): NodeGeometryConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n protected override _buildBlock(state: NodeGeometryBuildState) {\r\n const func = (state: NodeGeometryBuildState) => {\r\n const source = this.geometry.getConnectedValue(state) as VertexData;\r\n\r\n if (!source || !source.positions) {\r\n return null;\r\n }\r\n\r\n const amount = Math.min(1, Math.max(0, this.amount.getConnectedValue(state) ?? 0.1));\r\n const segments = Math.min(64, Math.max(1, Math.floor(this.segments.getConnectedValue(state) ?? 1)));\r\n const angleDegrees = Math.max(0, Math.min(180, this.angle.getConnectedValue(state) ?? 30));\r\n const angle = (angleDegrees * Math.PI) / 180;\r\n\r\n return _BevelVertexData(source, amount, segments, angle);\r\n };\r\n\r\n if (this.evaluateContext) {\r\n this.output._storedFunction = func;\r\n } else {\r\n this.output._storedFunction = null;\r\n this.output._storedValue = func(state);\r\n }\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n return super._dumpPropertiesCode() + `${this._codeVariableName}.evaluateContext = ${this.evaluateContext ? \"true\" : \"false\"};\\n`;\r\n }\r\n\r\n /**\r\n * Serializes this block in a JSON representation.\r\n * @returns the serialized block object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.evaluateContext = this.evaluateContext;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /** @internal */\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n\r\n if (serializationObject.evaluateContext !== undefined) {\r\n this.evaluateContext = serializationObject.evaluateContext;\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.BevelBlock\", BevelBlock);\r\n"]}
|
package/Meshes/Node/index.d.ts
CHANGED
package/Meshes/Node/index.js
CHANGED
|
@@ -86,4 +86,5 @@ export * from "./Blocks/geometryEaseBlock.js";
|
|
|
86
86
|
export * from "./Blocks/Set/aggregatorBlock.js";
|
|
87
87
|
export * from "./Blocks/subdivideBlock.js";
|
|
88
88
|
export * from "./Blocks/extrudeGeometryBlock.js";
|
|
89
|
+
export * from "./Blocks/bevelBlock.js";
|
|
89
90
|
//# sourceMappingURL=index.js.map
|
package/Meshes/Node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/Node/index.ts"],"names":[],"mappings":"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","sourcesContent":["export * from \"./nodeGeometry\";\r\nexport * from \"./nodeGeometryBlock\";\r\nexport * from \"./nodeGeometryBlockConnectionPoint\";\r\nexport * from \"./nodeGeometryBuildState\";\r\nexport * from \"./Interfaces/nodeGeometryExecutionContext\";\r\nexport * from \"./Enums/nodeGeometryConnectionPointTypes\";\r\nexport * from \"./Enums/nodeGeometryContextualSources\";\r\nexport * from \"./Blocks/geometryOptimizeBlock\";\r\nexport * from \"./Blocks/geometryOutputBlock\";\r\nexport * from \"./Blocks/geometryInputBlock\";\r\nexport * from \"./Blocks/Sources/planeBlock\";\r\nexport * from \"./Blocks/Sources/boxBlock\";\r\nexport * from \"./Blocks/Sources/meshBlock\";\r\nexport * from \"./Blocks/Sources/icoSphereBlock\";\r\nexport * from \"./Blocks/Sources/sphereBlock\";\r\nexport * from \"./Blocks/Sources/gridBlock\";\r\nexport * from \"./Blocks/Sources/torusBlock\";\r\nexport * from \"./Blocks/Sources/cylinderBlock\";\r\nexport * from \"./Blocks/Sources/capsuleBlock\";\r\nexport * from \"./Blocks/Sources/discBlock\";\r\nexport * from \"./Blocks/Sources/nullBlock\";\r\nexport * from \"./Blocks/Sources/pointListBlock\";\r\nexport * from \"./Blocks/Set/setPositionsBlock\";\r\nexport * from \"./Blocks/Set/setNormalsBlock\";\r\nexport * from \"./Blocks/Set/setUVsBlock\";\r\nexport * from \"./Blocks/Set/setColorsBlock\";\r\nexport * from \"./Blocks/Set/setTangentsBlock\";\r\nexport * from \"./Blocks/mathBlock\";\r\nexport * from \"./Blocks/mapRangeBlock\";\r\nexport * from \"./Blocks/conditionBlock\";\r\nexport * from \"./Blocks/randomBlock\";\r\nexport * from \"./Blocks/noiseBlock\";\r\nexport * from \"./Blocks/mergeGeometryBlock\";\r\nexport * from \"./Blocks/geometryCollectionBlock\";\r\nexport * from \"./Blocks/cleanGeometryBlock\";\r\nexport * from \"./Blocks/geometryElbowBlock\";\r\nexport * from \"./Blocks/computeNormalsBlock\";\r\nexport * from \"./Blocks/vectorConverterBlock\";\r\nexport * from \"./Blocks/normalizeVectorBlock\";\r\nexport * from \"./Blocks/Set/setMaterialIDBlock\";\r\nexport * from \"./Blocks/Set/latticeBlock\";\r\nexport * from \"./Blocks/geometryTrigonometryBlock\";\r\nexport * from \"./Blocks/geometryTransformBlock\";\r\nexport * from \"./Blocks/Matrices/rotationXBlock\";\r\nexport * from \"./Blocks/Matrices/rotationYBlock\";\r\nexport * from \"./Blocks/Matrices/rotationZBlock\";\r\nexport * from \"./Blocks/Matrices/scalingBlock\";\r\nexport * from \"./Blocks/Matrices/alignBlock\";\r\nexport * from \"./Blocks/Matrices/translationBlock\";\r\nexport * from \"./Blocks/Instances/instantiateOnVerticesBlock\";\r\nexport * from \"./Blocks/Instances/instantiateOnFacesBlock\";\r\nexport * from \"./Blocks/Instances/instantiateOnVolumeBlock\";\r\nexport * from \"./Blocks/Instances/instantiateBlock\";\r\nexport * from \"./Blocks/Instances/instantiateLinearBlock\";\r\nexport * from \"./Blocks/Instances/instantiateRadialBlock\";\r\nexport * from \"./Blocks/intFloatConverterBlock\";\r\nexport * from \"./Blocks/debugBlock\";\r\nexport * from \"./Blocks/geometryInfoBlock\";\r\nexport * from \"./Blocks/mappingBlock\";\r\nexport * from \"./Blocks/matrixComposeBlock\";\r\nexport * from \"./Blocks/Teleport/teleportInBlock\";\r\nexport * from \"./Blocks/Teleport/teleportOutBlock\";\r\nexport * from \"./Blocks/Textures/geometryTextureBlock\";\r\nexport * from \"./Blocks/Textures/geometryTextureFetchBlock\";\r\nexport * from \"./Blocks/boundingBlock\";\r\nexport * from \"./Blocks/booleanGeometryBlock\";\r\nexport * from \"./Blocks/geometryArcTan2Block\";\r\nexport * from \"./Blocks/geometryLerpBlock\";\r\nexport * from \"./Blocks/geometryNLerpBlock\";\r\nexport * from \"./Blocks/geometryStepBlock\";\r\nexport * from \"./Blocks/geometrySmoothStepBlock\";\r\nexport * from \"./Blocks/geometryModBlock\";\r\nexport * from \"./Blocks/geometryPowBlock\";\r\nexport * from \"./Blocks/geometryClampBlock\";\r\nexport * from \"./Blocks/geometryCrossBlock\";\r\nexport * from \"./Blocks/geometryCurveBlock\";\r\nexport * from \"./Blocks/geometryDesaturateBlock\";\r\nexport * from \"./Blocks/geometryPosterizeBlock\";\r\nexport * from \"./Blocks/geometryReplaceColorBlock\";\r\nexport * from \"./Blocks/geometryDistanceBlock\";\r\nexport * from \"./Blocks/geometryDotBlock\";\r\nexport * from \"./Blocks/geometryLengthBlock\";\r\nexport * from \"./Blocks/geometryRotate2dBlock\";\r\nexport * from \"./Blocks/geometryInterceptorBlock\";\r\nexport * from \"./Blocks/geometryEaseBlock\";\r\nexport * from \"./Blocks/Set/aggregatorBlock\";\r\nexport * from \"./Blocks/subdivideBlock\";\r\nexport * from \"./Blocks/extrudeGeometryBlock\";\r\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/Node/index.ts"],"names":[],"mappings":"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","sourcesContent":["export * from \"./nodeGeometry\";\r\nexport * from \"./nodeGeometryBlock\";\r\nexport * from \"./nodeGeometryBlockConnectionPoint\";\r\nexport * from \"./nodeGeometryBuildState\";\r\nexport * from \"./Interfaces/nodeGeometryExecutionContext\";\r\nexport * from \"./Enums/nodeGeometryConnectionPointTypes\";\r\nexport * from \"./Enums/nodeGeometryContextualSources\";\r\nexport * from \"./Blocks/geometryOptimizeBlock\";\r\nexport * from \"./Blocks/geometryOutputBlock\";\r\nexport * from \"./Blocks/geometryInputBlock\";\r\nexport * from \"./Blocks/Sources/planeBlock\";\r\nexport * from \"./Blocks/Sources/boxBlock\";\r\nexport * from \"./Blocks/Sources/meshBlock\";\r\nexport * from \"./Blocks/Sources/icoSphereBlock\";\r\nexport * from \"./Blocks/Sources/sphereBlock\";\r\nexport * from \"./Blocks/Sources/gridBlock\";\r\nexport * from \"./Blocks/Sources/torusBlock\";\r\nexport * from \"./Blocks/Sources/cylinderBlock\";\r\nexport * from \"./Blocks/Sources/capsuleBlock\";\r\nexport * from \"./Blocks/Sources/discBlock\";\r\nexport * from \"./Blocks/Sources/nullBlock\";\r\nexport * from \"./Blocks/Sources/pointListBlock\";\r\nexport * from \"./Blocks/Set/setPositionsBlock\";\r\nexport * from \"./Blocks/Set/setNormalsBlock\";\r\nexport * from \"./Blocks/Set/setUVsBlock\";\r\nexport * from \"./Blocks/Set/setColorsBlock\";\r\nexport * from \"./Blocks/Set/setTangentsBlock\";\r\nexport * from \"./Blocks/mathBlock\";\r\nexport * from \"./Blocks/mapRangeBlock\";\r\nexport * from \"./Blocks/conditionBlock\";\r\nexport * from \"./Blocks/randomBlock\";\r\nexport * from \"./Blocks/noiseBlock\";\r\nexport * from \"./Blocks/mergeGeometryBlock\";\r\nexport * from \"./Blocks/geometryCollectionBlock\";\r\nexport * from \"./Blocks/cleanGeometryBlock\";\r\nexport * from \"./Blocks/geometryElbowBlock\";\r\nexport * from \"./Blocks/computeNormalsBlock\";\r\nexport * from \"./Blocks/vectorConverterBlock\";\r\nexport * from \"./Blocks/normalizeVectorBlock\";\r\nexport * from \"./Blocks/Set/setMaterialIDBlock\";\r\nexport * from \"./Blocks/Set/latticeBlock\";\r\nexport * from \"./Blocks/geometryTrigonometryBlock\";\r\nexport * from \"./Blocks/geometryTransformBlock\";\r\nexport * from \"./Blocks/Matrices/rotationXBlock\";\r\nexport * from \"./Blocks/Matrices/rotationYBlock\";\r\nexport * from \"./Blocks/Matrices/rotationZBlock\";\r\nexport * from \"./Blocks/Matrices/scalingBlock\";\r\nexport * from \"./Blocks/Matrices/alignBlock\";\r\nexport * from \"./Blocks/Matrices/translationBlock\";\r\nexport * from \"./Blocks/Instances/instantiateOnVerticesBlock\";\r\nexport * from \"./Blocks/Instances/instantiateOnFacesBlock\";\r\nexport * from \"./Blocks/Instances/instantiateOnVolumeBlock\";\r\nexport * from \"./Blocks/Instances/instantiateBlock\";\r\nexport * from \"./Blocks/Instances/instantiateLinearBlock\";\r\nexport * from \"./Blocks/Instances/instantiateRadialBlock\";\r\nexport * from \"./Blocks/intFloatConverterBlock\";\r\nexport * from \"./Blocks/debugBlock\";\r\nexport * from \"./Blocks/geometryInfoBlock\";\r\nexport * from \"./Blocks/mappingBlock\";\r\nexport * from \"./Blocks/matrixComposeBlock\";\r\nexport * from \"./Blocks/Teleport/teleportInBlock\";\r\nexport * from \"./Blocks/Teleport/teleportOutBlock\";\r\nexport * from \"./Blocks/Textures/geometryTextureBlock\";\r\nexport * from \"./Blocks/Textures/geometryTextureFetchBlock\";\r\nexport * from \"./Blocks/boundingBlock\";\r\nexport * from \"./Blocks/booleanGeometryBlock\";\r\nexport * from \"./Blocks/geometryArcTan2Block\";\r\nexport * from \"./Blocks/geometryLerpBlock\";\r\nexport * from \"./Blocks/geometryNLerpBlock\";\r\nexport * from \"./Blocks/geometryStepBlock\";\r\nexport * from \"./Blocks/geometrySmoothStepBlock\";\r\nexport * from \"./Blocks/geometryModBlock\";\r\nexport * from \"./Blocks/geometryPowBlock\";\r\nexport * from \"./Blocks/geometryClampBlock\";\r\nexport * from \"./Blocks/geometryCrossBlock\";\r\nexport * from \"./Blocks/geometryCurveBlock\";\r\nexport * from \"./Blocks/geometryDesaturateBlock\";\r\nexport * from \"./Blocks/geometryPosterizeBlock\";\r\nexport * from \"./Blocks/geometryReplaceColorBlock\";\r\nexport * from \"./Blocks/geometryDistanceBlock\";\r\nexport * from \"./Blocks/geometryDotBlock\";\r\nexport * from \"./Blocks/geometryLengthBlock\";\r\nexport * from \"./Blocks/geometryRotate2dBlock\";\r\nexport * from \"./Blocks/geometryInterceptorBlock\";\r\nexport * from \"./Blocks/geometryEaseBlock\";\r\nexport * from \"./Blocks/Set/aggregatorBlock\";\r\nexport * from \"./Blocks/subdivideBlock\";\r\nexport * from \"./Blocks/extrudeGeometryBlock\";\r\nexport * from \"./Blocks/bevelBlock\";\r\n"]}
|
package/Misc/tools.js
CHANGED
|
@@ -1221,7 +1221,7 @@ Tools._DefaultCdnUrl = "https://cdn.babylonjs.com";
|
|
|
1221
1221
|
* When set, unversioned CDN URLs will be rewritten to include this version prefix.
|
|
1222
1222
|
* @internal
|
|
1223
1223
|
*/
|
|
1224
|
-
Tools._CdnVersion = "9.5.
|
|
1224
|
+
Tools._CdnVersion = "9.5.2";
|
|
1225
1225
|
/**
|
|
1226
1226
|
* @internal
|
|
1227
1227
|
*/
|