@itwin/core-frontend 5.1.0-dev.66 → 5.1.0-dev.69

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.
Files changed (109) hide show
  1. package/lib/cjs/common/gltf/GltfSchema.d.ts +9 -0
  2. package/lib/cjs/common/gltf/GltfSchema.d.ts.map +1 -1
  3. package/lib/cjs/common/gltf/GltfSchema.js.map +1 -1
  4. package/lib/cjs/common/imdl/CompactEdges.d.ts +11 -0
  5. package/lib/cjs/common/imdl/CompactEdges.d.ts.map +1 -1
  6. package/lib/cjs/common/imdl/CompactEdges.js +9 -6
  7. package/lib/cjs/common/imdl/CompactEdges.js.map +1 -1
  8. package/lib/cjs/common/imdl/ImdlSchema.d.ts +5 -1
  9. package/lib/cjs/common/imdl/ImdlSchema.d.ts.map +1 -1
  10. package/lib/cjs/common/imdl/ImdlSchema.js +4 -0
  11. package/lib/cjs/common/imdl/ImdlSchema.js.map +1 -1
  12. package/lib/cjs/common/imdl/ParseImdlDocument.d.ts.map +1 -1
  13. package/lib/cjs/common/imdl/ParseImdlDocument.js +11 -9
  14. package/lib/cjs/common/imdl/ParseImdlDocument.js.map +1 -1
  15. package/lib/cjs/common/internal/render/EdgeParams.d.ts +7 -2
  16. package/lib/cjs/common/internal/render/EdgeParams.d.ts.map +1 -1
  17. package/lib/cjs/common/internal/render/EdgeParams.js +30 -8
  18. package/lib/cjs/common/internal/render/EdgeParams.js.map +1 -1
  19. package/lib/cjs/common/internal/render/MeshPrimitives.d.ts +2 -1
  20. package/lib/cjs/common/internal/render/MeshPrimitives.d.ts.map +1 -1
  21. package/lib/cjs/common/internal/render/MeshPrimitives.js +5 -7
  22. package/lib/cjs/common/internal/render/MeshPrimitives.js.map +1 -1
  23. package/lib/cjs/common/internal/render/PolylineParams.d.ts +8 -3
  24. package/lib/cjs/common/internal/render/PolylineParams.d.ts.map +1 -1
  25. package/lib/cjs/common/internal/render/PolylineParams.js +6 -9
  26. package/lib/cjs/common/internal/render/PolylineParams.js.map +1 -1
  27. package/lib/cjs/common/internal/render/VertexTableSplitter.d.ts.map +1 -1
  28. package/lib/cjs/common/internal/render/VertexTableSplitter.js +9 -7
  29. package/lib/cjs/common/internal/render/VertexTableSplitter.js.map +1 -1
  30. package/lib/cjs/internal/render/webgl/EdgeGeometry.d.ts +8 -6
  31. package/lib/cjs/internal/render/webgl/EdgeGeometry.d.ts.map +1 -1
  32. package/lib/cjs/internal/render/webgl/EdgeGeometry.js +21 -7
  33. package/lib/cjs/internal/render/webgl/EdgeGeometry.js.map +1 -1
  34. package/lib/cjs/internal/render/webgl/IndexedEdgeGeometry.d.ts +6 -1
  35. package/lib/cjs/internal/render/webgl/IndexedEdgeGeometry.d.ts.map +1 -1
  36. package/lib/cjs/internal/render/webgl/IndexedEdgeGeometry.js +19 -4
  37. package/lib/cjs/internal/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  38. package/lib/cjs/internal/render/webgl/Mesh.d.ts +1 -1
  39. package/lib/cjs/internal/render/webgl/Mesh.d.ts.map +1 -1
  40. package/lib/cjs/internal/render/webgl/Mesh.js +13 -6
  41. package/lib/cjs/internal/render/webgl/Mesh.js.map +1 -1
  42. package/lib/cjs/internal/webgl.d.ts +1 -1
  43. package/lib/cjs/internal/webgl.d.ts.map +1 -1
  44. package/lib/cjs/internal/webgl.js.map +1 -1
  45. package/lib/cjs/quantity-formatting/QuantityFormatter.js +0 -2
  46. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  47. package/lib/cjs/render/MeshArgs.d.ts +8 -3
  48. package/lib/cjs/render/MeshArgs.d.ts.map +1 -1
  49. package/lib/cjs/render/MeshArgs.js.map +1 -1
  50. package/lib/cjs/tile/GltfReader.d.ts +1 -0
  51. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  52. package/lib/cjs/tile/GltfReader.js +68 -0
  53. package/lib/cjs/tile/GltfReader.js.map +1 -1
  54. package/lib/esm/common/gltf/GltfSchema.d.ts +9 -0
  55. package/lib/esm/common/gltf/GltfSchema.d.ts.map +1 -1
  56. package/lib/esm/common/gltf/GltfSchema.js.map +1 -1
  57. package/lib/esm/common/imdl/CompactEdges.d.ts +11 -0
  58. package/lib/esm/common/imdl/CompactEdges.d.ts.map +1 -1
  59. package/lib/esm/common/imdl/CompactEdges.js +8 -6
  60. package/lib/esm/common/imdl/CompactEdges.js.map +1 -1
  61. package/lib/esm/common/imdl/ImdlSchema.d.ts +5 -1
  62. package/lib/esm/common/imdl/ImdlSchema.d.ts.map +1 -1
  63. package/lib/esm/common/imdl/ImdlSchema.js +4 -0
  64. package/lib/esm/common/imdl/ImdlSchema.js.map +1 -1
  65. package/lib/esm/common/imdl/ParseImdlDocument.d.ts.map +1 -1
  66. package/lib/esm/common/imdl/ParseImdlDocument.js +11 -9
  67. package/lib/esm/common/imdl/ParseImdlDocument.js.map +1 -1
  68. package/lib/esm/common/internal/render/EdgeParams.d.ts +7 -2
  69. package/lib/esm/common/internal/render/EdgeParams.d.ts.map +1 -1
  70. package/lib/esm/common/internal/render/EdgeParams.js +31 -9
  71. package/lib/esm/common/internal/render/EdgeParams.js.map +1 -1
  72. package/lib/esm/common/internal/render/MeshPrimitives.d.ts +2 -1
  73. package/lib/esm/common/internal/render/MeshPrimitives.d.ts.map +1 -1
  74. package/lib/esm/common/internal/render/MeshPrimitives.js +5 -7
  75. package/lib/esm/common/internal/render/MeshPrimitives.js.map +1 -1
  76. package/lib/esm/common/internal/render/PolylineParams.d.ts +8 -3
  77. package/lib/esm/common/internal/render/PolylineParams.d.ts.map +1 -1
  78. package/lib/esm/common/internal/render/PolylineParams.js +5 -8
  79. package/lib/esm/common/internal/render/PolylineParams.js.map +1 -1
  80. package/lib/esm/common/internal/render/VertexTableSplitter.d.ts.map +1 -1
  81. package/lib/esm/common/internal/render/VertexTableSplitter.js +9 -7
  82. package/lib/esm/common/internal/render/VertexTableSplitter.js.map +1 -1
  83. package/lib/esm/internal/render/webgl/EdgeGeometry.d.ts +8 -6
  84. package/lib/esm/internal/render/webgl/EdgeGeometry.d.ts.map +1 -1
  85. package/lib/esm/internal/render/webgl/EdgeGeometry.js +21 -7
  86. package/lib/esm/internal/render/webgl/EdgeGeometry.js.map +1 -1
  87. package/lib/esm/internal/render/webgl/IndexedEdgeGeometry.d.ts +6 -1
  88. package/lib/esm/internal/render/webgl/IndexedEdgeGeometry.d.ts.map +1 -1
  89. package/lib/esm/internal/render/webgl/IndexedEdgeGeometry.js +19 -4
  90. package/lib/esm/internal/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  91. package/lib/esm/internal/render/webgl/Mesh.d.ts +1 -1
  92. package/lib/esm/internal/render/webgl/Mesh.d.ts.map +1 -1
  93. package/lib/esm/internal/render/webgl/Mesh.js +14 -7
  94. package/lib/esm/internal/render/webgl/Mesh.js.map +1 -1
  95. package/lib/esm/internal/webgl.d.ts +1 -1
  96. package/lib/esm/internal/webgl.d.ts.map +1 -1
  97. package/lib/esm/internal/webgl.js.map +1 -1
  98. package/lib/esm/quantity-formatting/QuantityFormatter.js +0 -2
  99. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  100. package/lib/esm/render/MeshArgs.d.ts +8 -3
  101. package/lib/esm/render/MeshArgs.d.ts.map +1 -1
  102. package/lib/esm/render/MeshArgs.js.map +1 -1
  103. package/lib/esm/tile/GltfReader.d.ts +1 -0
  104. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  105. package/lib/esm/tile/GltfReader.js +69 -1
  106. package/lib/esm/tile/GltfReader.js.map +1 -1
  107. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  108. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  109. package/package.json +20 -20
@@ -1 +1 @@
1
- {"version":3,"file":"EdgeParams.js","sourceRoot":"","sources":["../../../../../src/common/internal/render/EdgeParams.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Rendering\n */\n\nimport { LinePixels, MeshEdge, OctEncodedNormalPair, PolylineIndices } from \"@itwin/core-common\";\nimport { VertexIndices } from \"./VertexIndices\";\nimport { TesselatedPolyline, tesselatePolylineFromMesh, wantJointTriangles } from \"./PolylineParams\";\nimport { MeshArgsEdges } from \"./MeshPrimitives\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { MeshArgs } from \"../../../render/MeshArgs\";\n\n/**\n * Describes a set of line segments representing edges of a mesh.\n * Each segment is expanded into a quad defined by two triangles.\n * The positions are adjusted in the shader to account for the edge width.\n * @internal\n */\nexport interface SegmentEdgeParams {\n /** The 24-bit indices of the tesselated line segment */\n readonly indices: VertexIndices;\n /**\n * For each 24-bit index, 4 bytes:\n * the 24-bit index of the vertex at the other end of the segment, followed by\n * an 8-bit 'quad index' in [0..3] indicating which point in the expanded quad the vertex represents.\n */\n readonly endPointAndQuadIndices: Uint8Array;\n}\n\n/**\n * A set of line segments representing edges of curved portions of a mesh.\n * Each vertex is augmented with a pair of oct-encoded normals used in the shader\n * to determine whether or not the edge should be displayed.\n * @internal\n */\nexport interface SilhouetteParams extends SegmentEdgeParams {\n /** Per index, 2 16-bit oct-encoded normals */\n readonly normalPairs: Uint8Array;\n}\n\n/** A lookup table of edges for a mesh. The table is partitioned such that the lower partition contains simple segment edges\n * and the upper partition contains silhouette edges. Each entry in the lower partition consists of 2 24-bit indices into\n * a [[VertexTable]] from which to obtain the endpoints of the edge. Each entry in the upper partition consists of 2 24-bit\n * vertex indices followed by two 16-bit [[OctEncodedNormal]]s.\n * If both partitions exist then one row may exist between them containing a mix of segments and silhouettes; in this case a handful\n * of padding bytes may exist between the last segment and the first silhouette.\n * @see [[IndexedEdgeParams.edges]].\n * @internal\n */\nexport interface EdgeTable {\n /** The rectangular lookup table. */\n readonly data: Uint8Array;\n /** Width of the table. */\n readonly width: number;\n /** Height of the table. */\n readonly height: number;\n /** The number of segments in the lower partition. */\n readonly numSegments: number;\n /** The number of padding bytes inserted between the partitions to preserve alignment of data. */\n readonly silhouettePadding: number;\n}\n\n/** Describes the edges of a surface as a lookup table. Each edge consists of six identical indices into the lookup table, forming a quad.\n * @see [[EdgeParams.indexed]].\n * @internal\n */\nexport interface IndexedEdgeParams {\n /** The indices into [[edges]]. */\n readonly indices: VertexIndices;\n /** The lookup table indexed by [[indices]]. */\n readonly edges: EdgeTable;\n}\n\n/** @internal */\nexport interface EdgeTableInfo {\n /** Width of the table. */\n readonly width: number;\n /** Height of the table. */\n readonly height: number;\n /** The number of segments in the lower partition. */\n readonly silhouettePadding: number;\n /** The starting byte index of silhouettes */\n readonly silhouetteStartByteIndex: number;\n}\n\n/** Describes the edges of a mesh.\n * @internal\n */\nexport interface EdgeParams {\n /** The edge width in pixels. */\n readonly weight: number;\n /** The line pattern in which edges are drawn. */\n readonly linePixels: LinePixels;\n /** Simple single-segment edges, always displayed when edge display is enabled. */\n readonly segments?: SegmentEdgeParams;\n /** Single-segment edges of curved surfaces, displayed based on edge normal relative to eye. */\n readonly silhouettes?: SilhouetteParams;\n /** Polyline edges, always displayed when edge display is enabled. */\n readonly polylines?: TesselatedPolyline;\n /** Silhouettes and simple-segment edges, compactly represented as indices into a lookup table. */\n readonly indexed?: IndexedEdgeParams;\n}\n\n/** @internal */\nexport function calculateEdgeTableParams(numSegmentEdges: number, numSilhouettes: number, maxSize: number): EdgeTableInfo {\n // Each segment edge requires 2 24-bit indices = 6 bytes = 1.5 RGBA values.\n // Each silhouette requires the same as segment edge plus 2 16-bit oct-encoded normals = 10 bytes = 2.5 RGBA values.\n let nRgbaRequired = Math.ceil(1.5 * numSegmentEdges + 2.5 * numSilhouettes);\n const silhouetteStartByteIndex = numSegmentEdges * 6;\n let silhouettePadding = 0;\n let width = nRgbaRequired;\n let height = 1;\n if (nRgbaRequired >= maxSize) {\n // Make roughly square to reduce unused space in last row.\n width = Math.ceil(Math.sqrt(nRgbaRequired));\n // Each entry's data must fit on the same row. 15 RGBA = 60 bytes = lowest common multiple of 6, 10, and 4.\n const remainder = width % 15;\n if (0 !== remainder)\n width += 15 - remainder;\n\n // If the table contains both segments and silhouettes, there may be one row containing a mix of the two where padding\n // is required between them.\n if (numSilhouettes > 0 && numSegmentEdges > 0) {\n const silOffset = silhouetteStartByteIndex % 60; // some multiple of 6.\n silhouettePadding = (60 - silOffset) % 10;\n nRgbaRequired += Math.ceil(silhouettePadding / 4);\n }\n\n height = Math.ceil(nRgbaRequired / width);\n if (width * height < nRgbaRequired)\n height++;\n }\n\n return {\n width,\n height,\n silhouettePadding,\n silhouetteStartByteIndex,\n };\n}\n\nfunction convertPolylinesAndEdges(polylines?: PolylineIndices[], edges?: MeshEdge[]): SegmentEdgeParams | undefined {\n let numIndices = undefined !== edges ? edges.length : 0;\n if (undefined !== polylines)\n for (const pd of polylines)\n numIndices += (pd.length - 1);\n\n if (0 === numIndices)\n return undefined;\n\n numIndices *= 6;\n const indexBytes = new Uint8Array(numIndices * 3);\n const endPointAndQuadIndexBytes = new Uint8Array(numIndices * 4);\n\n let ndx: number = 0;\n let ndx2: number = 0;\n\n const addPoint = (p0: number, p1: number, quadIndex: number) => {\n VertexIndices.encodeIndex(p0, indexBytes, ndx);\n ndx += 3;\n VertexIndices.encodeIndex(p1, endPointAndQuadIndexBytes, ndx2);\n endPointAndQuadIndexBytes[ndx2 + 3] = quadIndex;\n ndx2 += 4;\n };\n\n if (undefined !== polylines) {\n for (const pd of polylines) {\n const num = pd.length - 1;\n for (let i = 0; i < num; ++i) {\n let p0 = pd[i];\n let p1 = pd[i + 1];\n if (p1 < p0) { // swap so that lower index is first.\n p0 = p1;\n p1 = pd[i];\n }\n addPoint(p0, p1, 0);\n addPoint(p1, p0, 2);\n addPoint(p0, p1, 1);\n addPoint(p0, p1, 1);\n addPoint(p1, p0, 2);\n addPoint(p1, p0, 3);\n }\n }\n }\n\n if (undefined !== edges) {\n for (const meshEdge of edges) {\n const p0 = meshEdge.indices[0];\n const p1 = meshEdge.indices[1];\n addPoint(p0, p1, 0);\n addPoint(p1, p0, 2);\n addPoint(p0, p1, 1);\n addPoint(p0, p1, 1);\n addPoint(p1, p0, 2);\n addPoint(p1, p0, 3);\n }\n }\n\n return {\n indices: new VertexIndices(indexBytes),\n endPointAndQuadIndices: endPointAndQuadIndexBytes,\n };\n}\n\nfunction convertSilhouettes(edges: MeshEdge[], normalPairs: OctEncodedNormalPair[]): SilhouetteParams | undefined {\n const base = convertPolylinesAndEdges(undefined, edges);\n if (undefined === base)\n return undefined;\n\n const normalPairBytes = new Uint8Array(normalPairs.length * 6 * 4);\n const normalPair16 = new Uint16Array(normalPairBytes.buffer);\n\n let ndx = 0;\n for (const pair of normalPairs) {\n for (let i = 0; i < 6; i++) {\n normalPair16[ndx++] = pair.first.value;\n normalPair16[ndx++] = pair.second.value;\n }\n }\n\n return {\n indices: base.indices,\n endPointAndQuadIndices: base.endPointAndQuadIndices,\n normalPairs: normalPairBytes,\n };\n}\n\nfunction buildIndexedEdges(args: MeshArgsEdges, doPolylines: boolean, maxSize: number): IndexedEdgeParams | undefined {\n const hardEdges = args.edges?.edges;\n const silhouettes = args.silhouettes;\n const polylines = doPolylines ? args.polylines?.lines : undefined;\n\n const numHardEdges = hardEdges?.length ?? 0;\n const numSilhouettes = silhouettes?.edges?.length ?? 0;\n const numPolylines = polylines ? polylines.reduce((count: number, pd: PolylineIndices) => count + Math.max(0, pd.length - 1), 0) : 0;\n const numSegmentEdges = numHardEdges + numPolylines;\n const numTotalEdges = numSegmentEdges + numSilhouettes;\n if (numTotalEdges === 0)\n return undefined;\n\n // Each edge is a quad consisting of six vertices. Each vertex is an identical 24-bit index into the lookup table.\n const indices = new VertexIndices(new Uint8Array(numTotalEdges * 6 * 3));\n for (let i = 0; i < numTotalEdges; i++)\n for (let j = 0; j < 6; j++)\n indices.setNthIndex(i * 6 + j, i);\n\n const {width, height, silhouettePadding, silhouetteStartByteIndex } = calculateEdgeTableParams (numSegmentEdges, numSilhouettes, maxSize);\n\n const data = new Uint8Array(width * height * 4);\n function setUint24(byteIndex: number, value: number): void {\n data[byteIndex + 0] = value & 0x0000ff;\n data[byteIndex + 1] = (value & 0x00ff00) >>> 8;\n data[byteIndex + 2] = (value & 0xff0000) >>> 16;\n }\n\n function setEdge(index: number, startPointIndex: number, endPointIndex: number): void {\n const byteIndex = index * 6;\n setUint24(byteIndex, startPointIndex);\n setUint24(byteIndex + 3, endPointIndex);\n }\n\n let curIndex = 0;\n if (hardEdges)\n for (const edge of hardEdges)\n setEdge(curIndex++, edge.indices[0], edge.indices[1]);\n\n if (polylines) {\n for (const pd of polylines) {\n const num = pd.length - 1;\n for (let i = 0; i < num; i++) {\n const p0 = pd[i];\n const p1 = pd[i + 1];\n // Ensure lower index is first.\n if (p0 < p1)\n setEdge(curIndex++, p0, p1);\n else\n setEdge(curIndex++, p1, p0);\n }\n }\n }\n\n if (silhouettes?.edges) {\n assert(undefined !== silhouettes.normals);\n assert(silhouettes.normals.length === silhouettes.edges.length);\n function setSilhouette(index: number, start: number, end: number, normals: OctEncodedNormalPair): void {\n const byteIndex = silhouetteStartByteIndex + silhouettePadding + index * 10;\n setUint24(byteIndex, start);\n setUint24(byteIndex + 3, end);\n data[byteIndex + 6] = normals.first.value & 0xff;\n data[byteIndex + 7] = (normals.first.value & 0xff00) >>> 8;\n data[byteIndex + 8] = normals.second.value & 0xff;\n data[byteIndex + 9] = (normals.second.value & 0xff00) >>> 8;\n }\n\n curIndex = 0;\n for (let i = 0; i < silhouettes.edges.length; i++)\n setSilhouette(curIndex++, silhouettes.edges[i].indices[0], silhouettes.edges[i].indices[1], silhouettes.normals[i]);\n }\n\n return {\n indices,\n edges: {\n data,\n width,\n height,\n numSegments: numSegmentEdges,\n silhouettePadding,\n },\n };\n}\n\n/** @internal */\nexport function createEdgeParams(args: {\n meshArgs: MeshArgs;\n maxWidth: number;\n createIndexed: boolean;\n}): EdgeParams | undefined {\n const { meshArgs, maxWidth, createIndexed } = args;\n const edgeArgs = meshArgs.edges;\n if (!edgeArgs)\n return undefined;\n\n const doJoints = wantJointTriangles(edgeArgs.width, true === meshArgs.is2d);\n const polylines = doJoints ? tesselatePolylineFromMesh(meshArgs) : undefined;\n\n let segments: SegmentEdgeParams | undefined;\n let silhouettes: SilhouetteParams | undefined;\n let indexed: IndexedEdgeParams | undefined;\n\n if (createIndexed) {\n indexed = buildIndexedEdges(edgeArgs, !doJoints, maxWidth);\n } else {\n segments = convertPolylinesAndEdges(undefined, edgeArgs.edges.edges);\n silhouettes = edgeArgs.silhouettes.edges && edgeArgs.silhouettes.normals ? convertSilhouettes(edgeArgs.silhouettes.edges, edgeArgs.silhouettes.normals) : undefined;\n }\n\n if (!segments && !silhouettes && !polylines && !indexed)\n return undefined;\n\n return {\n weight: edgeArgs.width,\n linePixels: edgeArgs.linePixels,\n segments,\n silhouettes,\n polylines,\n indexed,\n };\n}\n"]}
1
+ {"version":3,"file":"EdgeParams.js","sourceRoot":"","sources":["../../../../../src/common/internal/render/EdgeParams.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Rendering\n */\n\nimport { EdgeAppearanceOverrides, LinePixels, MeshEdge, OctEncodedNormalPair, PolylineIndices } from \"@itwin/core-common\";\nimport { VertexIndices } from \"./VertexIndices\";\nimport { TesselatedPolyline, tesselatePolylineList, wantJointTriangles } from \"./PolylineParams\";\nimport { MeshArgsEdges } from \"./MeshPrimitives\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { MeshArgs } from \"../../../render/MeshArgs\";\n\n/**\n * Describes a set of line segments representing edges of a mesh.\n * Each segment is expanded into a quad defined by two triangles.\n * The positions are adjusted in the shader to account for the edge width.\n * @internal\n */\nexport interface SegmentEdgeParams {\n /** The 24-bit indices of the tesselated line segment */\n readonly indices: VertexIndices;\n /**\n * For each 24-bit index, 4 bytes:\n * the 24-bit index of the vertex at the other end of the segment, followed by\n * an 8-bit 'quad index' in [0..3] indicating which point in the expanded quad the vertex represents.\n */\n readonly endPointAndQuadIndices: Uint8Array;\n}\n\n/**\n * A set of line segments representing edges of curved portions of a mesh.\n * Each vertex is augmented with a pair of oct-encoded normals used in the shader\n * to determine whether or not the edge should be displayed.\n * @internal\n */\nexport interface SilhouetteParams extends SegmentEdgeParams {\n /** Per index, 2 16-bit oct-encoded normals */\n readonly normalPairs: Uint8Array;\n}\n\n/** A lookup table of edges for a mesh. The table is partitioned such that the lower partition contains simple segment edges\n * and the upper partition contains silhouette edges. Each entry in the lower partition consists of 2 24-bit indices into\n * a [[VertexTable]] from which to obtain the endpoints of the edge. Each entry in the upper partition consists of 2 24-bit\n * vertex indices followed by two 16-bit [[OctEncodedNormal]]s.\n * If both partitions exist then one row may exist between them containing a mix of segments and silhouettes; in this case a handful\n * of padding bytes may exist between the last segment and the first silhouette.\n * @see [[IndexedEdgeParams.edges]].\n * @internal\n */\nexport interface EdgeTable {\n /** The rectangular lookup table. */\n readonly data: Uint8Array;\n /** Width of the table. */\n readonly width: number;\n /** Height of the table. */\n readonly height: number;\n /** The number of segments in the lower partition. */\n readonly numSegments: number;\n /** The number of padding bytes inserted between the partitions to preserve alignment of data. */\n readonly silhouettePadding: number;\n}\n\n/** Describes the edges of a surface as a lookup table. Each edge consists of six identical indices into the lookup table, forming a quad.\n * @see [[EdgeParams.indexed]].\n * @internal\n */\nexport interface IndexedEdgeParams {\n /** The indices into [[edges]]. */\n readonly indices: VertexIndices;\n /** The lookup table indexed by [[indices]]. */\n readonly edges: EdgeTable;\n readonly appearance?: EdgeAppearanceOverrides;\n}\n\n/** @internal */\nexport interface EdgeTableInfo {\n /** Width of the table. */\n readonly width: number;\n /** Height of the table. */\n readonly height: number;\n /** The number of segments in the lower partition. */\n readonly silhouettePadding: number;\n /** The starting byte index of silhouettes */\n readonly silhouetteStartByteIndex: number;\n}\n\nexport interface PolylineEdgeGroup {\n polyline: TesselatedPolyline;\n appearance?: EdgeAppearanceOverrides;\n}\n\n/** Describes the edges of a mesh.\n * @internal\n */\nexport interface EdgeParams {\n /** The edge width in pixels. */\n readonly weight: number;\n /** The line pattern in which edges are drawn. */\n readonly linePixels: LinePixels;\n /** Simple single-segment edges, always displayed when edge display is enabled. */\n readonly segments?: SegmentEdgeParams;\n /** Single-segment edges of curved surfaces, displayed based on edge normal relative to eye. */\n readonly silhouettes?: SilhouetteParams;\n /** Polyline edges, always displayed when edge display is enabled. */\n readonly polylineGroups?: PolylineEdgeGroup[];\n /** Silhouettes and simple-segment edges, compactly represented as indices into a lookup table. */\n readonly indexed?: IndexedEdgeParams;\n}\n\n/** @internal */\nexport function calculateEdgeTableParams(numSegmentEdges: number, numSilhouettes: number, maxSize: number): EdgeTableInfo {\n // Each segment edge requires 2 24-bit indices = 6 bytes = 1.5 RGBA values.\n // Each silhouette requires the same as segment edge plus 2 16-bit oct-encoded normals = 10 bytes = 2.5 RGBA values.\n let nRgbaRequired = Math.ceil(1.5 * numSegmentEdges + 2.5 * numSilhouettes);\n const silhouetteStartByteIndex = numSegmentEdges * 6;\n let silhouettePadding = 0;\n let width = nRgbaRequired;\n let height = 1;\n if (nRgbaRequired >= maxSize) {\n // Make roughly square to reduce unused space in last row.\n width = Math.ceil(Math.sqrt(nRgbaRequired));\n // Each entry's data must fit on the same row. 15 RGBA = 60 bytes = lowest common multiple of 6, 10, and 4.\n const remainder = width % 15;\n if (0 !== remainder)\n width += 15 - remainder;\n\n // If the table contains both segments and silhouettes, there may be one row containing a mix of the two where padding\n // is required between them.\n if (numSilhouettes > 0 && numSegmentEdges > 0) {\n const silOffset = silhouetteStartByteIndex % 60; // some multiple of 6.\n silhouettePadding = (60 - silOffset) % 10;\n nRgbaRequired += Math.ceil(silhouettePadding / 4);\n }\n\n height = Math.ceil(nRgbaRequired / width);\n if (width * height < nRgbaRequired)\n height++;\n }\n\n return {\n width,\n height,\n silhouettePadding,\n silhouetteStartByteIndex,\n };\n}\n\nfunction convertPolylinesAndEdges(polylines?: PolylineIndices[], edges?: MeshEdge[]): SegmentEdgeParams | undefined {\n let numIndices = undefined !== edges ? edges.length : 0;\n if (undefined !== polylines)\n for (const pd of polylines)\n numIndices += (pd.length - 1);\n\n if (0 === numIndices)\n return undefined;\n\n numIndices *= 6;\n const indexBytes = new Uint8Array(numIndices * 3);\n const endPointAndQuadIndexBytes = new Uint8Array(numIndices * 4);\n\n let ndx: number = 0;\n let ndx2: number = 0;\n\n const addPoint = (p0: number, p1: number, quadIndex: number) => {\n VertexIndices.encodeIndex(p0, indexBytes, ndx);\n ndx += 3;\n VertexIndices.encodeIndex(p1, endPointAndQuadIndexBytes, ndx2);\n endPointAndQuadIndexBytes[ndx2 + 3] = quadIndex;\n ndx2 += 4;\n };\n\n if (undefined !== polylines) {\n for (const pd of polylines) {\n const num = pd.length - 1;\n for (let i = 0; i < num; ++i) {\n let p0 = pd[i];\n let p1 = pd[i + 1];\n if (p1 < p0) { // swap so that lower index is first.\n p0 = p1;\n p1 = pd[i];\n }\n addPoint(p0, p1, 0);\n addPoint(p1, p0, 2);\n addPoint(p0, p1, 1);\n addPoint(p0, p1, 1);\n addPoint(p1, p0, 2);\n addPoint(p1, p0, 3);\n }\n }\n }\n\n if (undefined !== edges) {\n for (const meshEdge of edges) {\n const p0 = meshEdge.indices[0];\n const p1 = meshEdge.indices[1];\n addPoint(p0, p1, 0);\n addPoint(p1, p0, 2);\n addPoint(p0, p1, 1);\n addPoint(p0, p1, 1);\n addPoint(p1, p0, 2);\n addPoint(p1, p0, 3);\n }\n }\n\n return {\n indices: new VertexIndices(indexBytes),\n endPointAndQuadIndices: endPointAndQuadIndexBytes,\n };\n}\n\nfunction convertSilhouettes(edges: MeshEdge[], normalPairs: OctEncodedNormalPair[]): SilhouetteParams | undefined {\n const base = convertPolylinesAndEdges(undefined, edges);\n if (undefined === base)\n return undefined;\n\n const normalPairBytes = new Uint8Array(normalPairs.length * 6 * 4);\n const normalPair16 = new Uint16Array(normalPairBytes.buffer);\n\n let ndx = 0;\n for (const pair of normalPairs) {\n for (let i = 0; i < 6; i++) {\n normalPair16[ndx++] = pair.first.value;\n normalPair16[ndx++] = pair.second.value;\n }\n }\n\n return {\n indices: base.indices,\n endPointAndQuadIndices: base.endPointAndQuadIndices,\n normalPairs: normalPairBytes,\n };\n}\n\nfunction buildIndexedEdges(args: MeshArgsEdges, polylines: PolylineIndices[] | undefined, maxSize: number): IndexedEdgeParams | undefined {\n const hardEdges = args.edges?.edges;\n const silhouettes = args.silhouettes;\n\n const numHardEdges = hardEdges?.length ?? 0;\n const numSilhouettes = silhouettes?.edges?.length ?? 0;\n const numPolylines = polylines ? polylines.reduce((count: number, pd: PolylineIndices) => count + Math.max(0, pd.length - 1), 0) : 0;\n const numSegmentEdges = numHardEdges + numPolylines;\n const numTotalEdges = numSegmentEdges + numSilhouettes;\n if (numTotalEdges === 0)\n return undefined;\n\n // Each edge is a quad consisting of six vertices. Each vertex is an identical 24-bit index into the lookup table.\n const indices = new VertexIndices(new Uint8Array(numTotalEdges * 6 * 3));\n for (let i = 0; i < numTotalEdges; i++)\n for (let j = 0; j < 6; j++)\n indices.setNthIndex(i * 6 + j, i);\n\n const {width, height, silhouettePadding, silhouetteStartByteIndex } = calculateEdgeTableParams (numSegmentEdges, numSilhouettes, maxSize);\n\n const data = new Uint8Array(width * height * 4);\n function setUint24(byteIndex: number, value: number): void {\n data[byteIndex + 0] = value & 0x0000ff;\n data[byteIndex + 1] = (value & 0x00ff00) >>> 8;\n data[byteIndex + 2] = (value & 0xff0000) >>> 16;\n }\n\n function setEdge(index: number, startPointIndex: number, endPointIndex: number): void {\n const byteIndex = index * 6;\n setUint24(byteIndex, startPointIndex);\n setUint24(byteIndex + 3, endPointIndex);\n }\n\n let curIndex = 0;\n if (hardEdges)\n for (const edge of hardEdges)\n setEdge(curIndex++, edge.indices[0], edge.indices[1]);\n\n if (polylines) {\n for (const pd of polylines) {\n const num = pd.length - 1;\n for (let i = 0; i < num; i++) {\n const p0 = pd[i];\n const p1 = pd[i + 1];\n // Ensure lower index is first.\n if (p0 < p1)\n setEdge(curIndex++, p0, p1);\n else\n setEdge(curIndex++, p1, p0);\n }\n }\n }\n\n if (silhouettes?.edges) {\n assert(undefined !== silhouettes.normals);\n assert(silhouettes.normals.length === silhouettes.edges.length);\n function setSilhouette(index: number, start: number, end: number, normals: OctEncodedNormalPair): void {\n const byteIndex = silhouetteStartByteIndex + silhouettePadding + index * 10;\n setUint24(byteIndex, start);\n setUint24(byteIndex + 3, end);\n data[byteIndex + 6] = normals.first.value & 0xff;\n data[byteIndex + 7] = (normals.first.value & 0xff00) >>> 8;\n data[byteIndex + 8] = normals.second.value & 0xff;\n data[byteIndex + 9] = (normals.second.value & 0xff00) >>> 8;\n }\n\n curIndex = 0;\n for (let i = 0; i < silhouettes.edges.length; i++)\n setSilhouette(curIndex++, silhouettes.edges[i].indices[0], silhouettes.edges[i].indices[1], silhouettes.normals[i]);\n }\n\n return {\n indices,\n edges: {\n data,\n width,\n height,\n numSegments: numSegmentEdges,\n silhouettePadding,\n },\n appearance: {\n width: args.width,\n linePixels: args.linePixels,\n color: args.color,\n }\n };\n}\n\n/** @internal */\nexport function createEdgeParams(args: {\n meshArgs: MeshArgs;\n maxWidth: number;\n createIndexed: boolean;\n}): EdgeParams | undefined {\n const { meshArgs, maxWidth, createIndexed } = args;\n const edgeArgs = meshArgs.edges;\n if (!edgeArgs)\n return undefined;\n\n // If we've got a single polyline edge group and we don't need to round its corners, convert it to segment edges.\n const polylinesToProcess =\n 1 === edgeArgs.polylines.groups?.length\n && undefined === edgeArgs.polylines.groups[0].appearance\n && !wantJointTriangles(edgeArgs.width, true === meshArgs.is2d)\n ? edgeArgs.polylines.groups[0].polylines.map((x) => x.indices) : undefined;\n\n let segments: SegmentEdgeParams | undefined;\n let silhouettes: SilhouetteParams | undefined;\n let indexed: IndexedEdgeParams | undefined;\n\n if (createIndexed) {\n indexed = buildIndexedEdges(edgeArgs, polylinesToProcess, maxWidth);\n } else {\n segments = convertPolylinesAndEdges(polylinesToProcess, edgeArgs.edges.edges);\n silhouettes = edgeArgs.silhouettes.edges && edgeArgs.silhouettes.normals ? convertSilhouettes(edgeArgs.silhouettes.edges, edgeArgs.silhouettes.normals) : undefined;\n }\n\n let polylineGroups: PolylineEdgeGroup[] | undefined;\n if (!polylinesToProcess && edgeArgs.polylines.groups) {\n for (const group of edgeArgs.polylines.groups) {\n const polyline = tesselatePolylineList({\n points: args.meshArgs.points,\n polylines: group.polylines,\n width: group.appearance?.width ?? edgeArgs.width,\n is2d: true === args.meshArgs.is2d,\n });\n\n if (!polylineGroups) {\n polylineGroups = [];\n }\n\n polylineGroups.push({ polyline, appearance: group.appearance });\n }\n }\n \n if (!segments && !silhouettes && !polylineGroups && !indexed)\n return undefined;\n\n return {\n weight: edgeArgs.width,\n linePixels: edgeArgs.linePixels,\n segments,\n silhouettes,\n polylineGroups,\n indexed,\n };\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  * @module Rendering
3
3
  */
4
4
  import { AuxChannel, Point2d, Range3d } from "@itwin/core-geometry";
5
- import { EdgeArgs, Feature, FeatureIndex, FeatureTable, LinePixels, MeshEdges, MeshPolyline, MeshPolylineList, OctEncodedNormal, PolylineEdgeArgs, SilhouetteEdgeArgs } from "@itwin/core-common";
5
+ import { ColorDef, EdgeArgs, Feature, FeatureIndex, FeatureTable, LinePixels, MeshEdges, MeshPolyline, MeshPolylineList, OctEncodedNormal, PolylineEdgeArgs, SilhouetteEdgeArgs } from "@itwin/core-common";
6
6
  import { ColorMap } from "./ColorMap";
7
7
  import { DisplayParams } from "./DisplayParams";
8
8
  import { MeshPointList, MeshPrimitiveType } from "./MeshPrimitive";
@@ -18,6 +18,7 @@ export declare class MeshArgsEdges {
18
18
  polylines: PolylineEdgeArgs;
19
19
  width: number;
20
20
  linePixels: LinePixels;
21
+ color?: ColorDef;
21
22
  clear(): void;
22
23
  get isValid(): boolean;
23
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MeshPrimitives.d.ts","sourceRoot":"","sources":["../../../../../src/common/internal/render/MeshPrimitives.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MeshPrimitives.d.ts","sourceRoot":"","sources":["../../../../../src/common/internal/render/MeshPrimitives.ts"],"names":[],"mappings":"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"}
@@ -59,6 +59,7 @@ class MeshArgsEdges {
59
59
  polylines = new core_common_1.PolylineEdgeArgs();
60
60
  width = 0;
61
61
  linePixels = core_common_1.LinePixels.Solid;
62
+ color;
62
63
  clear() {
63
64
  this.edges.clear();
64
65
  this.silhouettes.clear();
@@ -81,15 +82,12 @@ function createMeshArgs(mesh) {
81
82
  let edges;
82
83
  if (mesh.edges) {
83
84
  edges = new MeshArgsEdges();
84
- edges.width = mesh.displayParams.width;
85
- edges.linePixels = mesh.displayParams.linePixels;
85
+ edges.width = mesh.edges.appearance?.width ?? mesh.displayParams.width;
86
+ edges.linePixels = mesh.edges.appearance?.linePixels ?? mesh.displayParams.linePixels;
86
87
  edges.edges.init(mesh.edges);
87
88
  edges.silhouettes.init(mesh.edges);
88
- const polylines = [];
89
- for (const meshPolyline of mesh.edges.polylines)
90
- if (meshPolyline.indices.length > 0)
91
- polylines.push(meshPolyline.indices);
92
- edges.polylines.init(polylines);
89
+ edges.color = mesh.edges.appearance?.color;
90
+ edges.polylines.init(mesh.edges.polylineGroups);
93
91
  }
94
92
  return {
95
93
  vertIndices: mesh.triangles.indices,
@@ -1 +1 @@
1
- {"version":3,"file":"MeshPrimitives.js","sourceRoot":"","sources":["../../../../../src/common/internal/render/MeshPrimitives.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Rendering\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { AuxChannel, AuxChannelData, Point2d, Point3d, Range3d } from \"@itwin/core-geometry\";\nimport {\n ColorIndex, EdgeArgs, Feature, FeatureIndex, FeatureIndexType, FeatureTable, LinePixels, MeshEdges, MeshPolyline, MeshPolylineList,\n OctEncodedNormal, PolylineEdgeArgs, PolylineFlags, PolylineTypeFlags, QParams3d, QPoint3dList,\n SilhouetteEdgeArgs,\n} from \"@itwin/core-common\";\nimport { ColorMap } from \"./ColorMap\";\nimport { DisplayParams } from \"./DisplayParams\";\nimport { MeshPointList, MeshPrimitiveType, Point3dList } from \"./MeshPrimitive\";\nimport { Triangle, TriangleList } from \"./Primitives\";\nimport { VertexKeyProps } from \"./VertexKey\";\nimport { MeshArgs } from \"../../../render/MeshArgs\";\nimport { PolylineArgs } from \"../../../render/PolylineArgs\";\n\nexport function createPolylineArgs(mesh: Mesh): PolylineArgs | undefined {\n if (!mesh.polylines || mesh.polylines.length === 0)\n return undefined;\n\n const polylines = [];\n for (const polyline of mesh.polylines)\n if (polyline.indices.length > 0)\n polylines.push(polyline.indices);\n\n if (polylines.length === 0)\n return undefined;\n\n const flags: PolylineFlags = {\n is2d: mesh.is2d,\n isPlanar: mesh.isPlanar,\n isDisjoint: mesh.type === MeshPrimitiveType.Point,\n };\n\n if (mesh.displayParams.regionEdgeType === DisplayParams.RegionEdgeType.Outline) {\n // This polyline is behaving as the edges of a region surface.\n if (!mesh.displayParams.gradient || mesh.displayParams.gradient.isOutlined)\n flags.type = PolylineTypeFlags.Edge;\n else\n flags.type = PolylineTypeFlags.Outline; // edges only displayed if fill undisplayed\n }\n\n const colors = new ColorIndex();\n mesh.colorMap.toColorIndex(colors, mesh.colors);\n\n const features = new FeatureIndex();\n mesh.toFeatureIndex(features);\n\n return {\n width: mesh.displayParams.width,\n linePixels: mesh.displayParams.linePixels,\n flags,\n polylines,\n points: mesh.points,\n colors,\n features,\n };\n}\n\n/** The vertices of the edges are shared with those of the surface. */\nexport class MeshArgsEdges {\n public edges = new EdgeArgs();\n public silhouettes = new SilhouetteEdgeArgs();\n public polylines = new PolylineEdgeArgs();\n public width = 0;\n public linePixels = LinePixels.Solid;\n\n public clear(): void {\n this.edges.clear();\n this.silhouettes.clear();\n this.polylines.clear();\n this.width = 0;\n this.linePixels = LinePixels.Solid;\n }\n public get isValid(): boolean { return this.edges.isValid || this.silhouettes.isValid || this.polylines.isValid; }\n}\n\nexport function createMeshArgs(mesh: Mesh): MeshArgs | undefined {\n if (!mesh.triangles || mesh.triangles.isEmpty || mesh.points.length === 0)\n return undefined;\n\n const texture = mesh.displayParams.textureMapping?.texture;\n const textureMapping = texture && mesh.uvParams.length > 0 ? { texture, uvParams: mesh.uvParams } : undefined;\n\n const colors = new ColorIndex();\n mesh.colorMap.toColorIndex(colors, mesh.colors);\n\n const features = new FeatureIndex();\n mesh.toFeatureIndex(features);\n\n let edges;\n if (mesh.edges) {\n edges = new MeshArgsEdges();\n edges.width = mesh.displayParams.width;\n edges.linePixels = mesh.displayParams.linePixels;\n edges.edges.init(mesh.edges);\n edges.silhouettes.init(mesh.edges);\n\n const polylines = [];\n for (const meshPolyline of mesh.edges.polylines)\n if (meshPolyline.indices.length > 0)\n polylines.push(meshPolyline.indices);\n\n edges.polylines.init(polylines);\n }\n\n return {\n vertIndices: mesh.triangles.indices,\n points: mesh.points,\n normals: !mesh.displayParams.ignoreLighting && mesh.normals.length > 0 ? mesh.normals : undefined,\n textureMapping,\n colors,\n features,\n material: mesh.displayParams.material,\n fillFlags: mesh.displayParams.fillFlags,\n isPlanar: mesh.isPlanar,\n is2d: mesh.is2d,\n hasBakedLighting: true === mesh.hasBakedLighting,\n isVolumeClassifier: true === mesh.isVolumeClassifier,\n edges,\n auxChannels: mesh.auxChannels,\n };\n}\n\nexport class Mesh {\n private readonly _data: TriangleList | MeshPolylineList;\n public readonly points: MeshPointList;\n public readonly normals: OctEncodedNormal[] = [];\n public readonly uvParams: Point2d[] = [];\n public readonly colorMap: ColorMap = new ColorMap(); // used to be called ColorTable\n public colors: number[] = [];\n public edges?: MeshEdges;\n public readonly features?: Mesh.Features;\n public readonly type: MeshPrimitiveType;\n public readonly is2d: boolean;\n public readonly isPlanar: boolean;\n public readonly hasBakedLighting: boolean;\n public readonly isVolumeClassifier: boolean;\n public displayParams: DisplayParams;\n private _auxChannels?: AuxChannel[];\n\n private constructor(props: Mesh.Props) {\n const { displayParams, features, type, range, is2d, isPlanar } = props;\n this._data = MeshPrimitiveType.Mesh === type ? new TriangleList() : [];\n this.displayParams = displayParams;\n this.features = features ? new Mesh.Features(features) : undefined;\n this.type = type;\n this.is2d = is2d;\n this.isPlanar = isPlanar;\n this.hasBakedLighting = (true === props.hasBakedLighting);\n this.isVolumeClassifier = (true === props.isVolumeClassifier);\n if (props.quantizePositions) {\n this.points = new QPoint3dList(QParams3d.fromRange(range));\n } else {\n const points = [] as unknown as Point3dList;\n points.range = range;\n const center = range.center;\n points.add = (pt: Point3d) => {\n // assert(range.containsPoint(pt)); rounding error triggers this sometimes...\n points.push(pt.minus(center));\n };\n this.points = points;\n }\n }\n\n public static create(props: Mesh.Props): Mesh { return new Mesh(props); }\n\n public get triangles(): TriangleList | undefined {\n return MeshPrimitiveType.Mesh === this.type ? this._data as TriangleList : undefined;\n }\n\n public get polylines(): MeshPolylineList | undefined {\n return MeshPrimitiveType.Mesh !== this.type ? this._data as MeshPolylineList : undefined;\n }\n\n public get auxChannels(): ReadonlyArray<AuxChannel> | undefined {\n return this._auxChannels;\n }\n\n public addAuxChannels(channels: ReadonlyArray<AuxChannel>, srcIndex: number): void {\n // The native version of this function appears to assume that all polyfaces added to the Mesh will have\n // the same number + type of aux channels.\n // ###TODO We should really produce a separate Mesh for each unique combination. For now just bail on mismatch.\n if (this._auxChannels) {\n if (this._auxChannels.length !== channels.length)\n return;\n\n for (let i = 0; i < channels.length; i++) {\n const src = channels[i];\n const dst = this._auxChannels[i];\n if (src.dataType !== dst.dataType || src.name !== dst.name || src.inputName !== dst.inputName)\n return;\n }\n }\n\n if (!this._auxChannels) {\n // Copy the channels, leaving each AuxData's values array empty.\n this._auxChannels = channels.map((x) => new AuxChannel(x.data.map((y) => new AuxChannelData(y.input, [])), x.dataType, x.name, x.inputName));\n }\n\n // Append the value at srcIndex from each source channel's data to our channels.\n for (let channelIndex = 0; channelIndex < channels.length; channelIndex++) {\n const srcChannel = channels[channelIndex];\n const dstChannel = this._auxChannels[channelIndex];\n const dstIndex = dstChannel.valueCount;\n for (let dataIndex = 0; dataIndex < srcChannel.data.length; dataIndex++) {\n const dstData = dstChannel.data[dataIndex];\n dstData.copyValues(srcChannel.data[dataIndex], dstIndex, srcIndex, dstChannel.entriesPerValue);\n }\n }\n }\n\n public toFeatureIndex(index: FeatureIndex): void {\n if (undefined !== this.features)\n this.features.toFeatureIndex(index);\n }\n\n public toMeshArgs(): MeshArgs | undefined {\n return createMeshArgs(this);\n }\n\n public toPolylineArgs(): PolylineArgs | undefined {\n return createPolylineArgs(this);\n }\n\n public addPolyline(poly: MeshPolyline): void {\n const { type, polylines } = this;\n\n assert(MeshPrimitiveType.Polyline === type || MeshPrimitiveType.Point === type);\n assert(undefined !== polylines);\n\n if (MeshPrimitiveType.Polyline === type && poly.indices.length < 2)\n return;\n\n if (undefined !== polylines)\n polylines.push(poly);\n }\n\n public addTriangle(triangle: Triangle): void {\n const { triangles, type } = this;\n\n assert(MeshPrimitiveType.Mesh === type);\n assert(undefined !== triangles);\n\n if (undefined !== triangles)\n triangles.addTriangle(triangle);\n }\n\n public addVertex(props: VertexKeyProps): number {\n const { feature, position, normal, uvParam, fillColor } = props;\n\n this.points.add(position);\n\n if (undefined !== normal)\n this.normals.push(normal);\n\n if (undefined !== uvParam)\n this.uvParams.push(uvParam);\n\n if (feature) {\n assert(undefined !== this.features);\n this.features.add(feature, this.points.length);\n }\n\n // Don't allocate color indices until we have non-uniform colors\n if (0 === this.colorMap.length) {\n this.colorMap.insert(fillColor);\n assert(this.colorMap.isUniform);\n assert(0 === this.colorMap.indexOf(fillColor));\n } else if (!this.colorMap.isUniform || !this.colorMap.hasColor(fillColor)) {\n // Back-fill uniform value (index=0) for existing vertices if previously uniform\n if (0 === this.colors.length)\n this.colors.length = this.points.length - 1;\n\n this.colors.push(this.colorMap.insert(fillColor));\n assert(!this.colorMap.isUniform);\n }\n\n return this.points.length - 1;\n }\n}\n\nexport namespace Mesh {\n export class Features {\n public readonly table: FeatureTable;\n public indices: number[] = [];\n public uniform = 0;\n public initialized = false;\n\n public constructor(table: FeatureTable) { this.table = table; }\n\n public add(feat: Feature, numVerts: number): void {\n const index = this.table.insert(feat);\n if (!this.initialized) {\n // First feature - uniform.\n this.uniform = index;\n this.initialized = true;\n } else if (0 < this.indices.length) {\n // Already non-uniform\n this.indices.push(index);\n } else {\n // Second feature - back-fill uniform for existing verts\n while (this.indices.length < numVerts - 1)\n this.indices.push(this.uniform);\n\n this.indices.push(index);\n }\n }\n\n public setIndices(indices: number[]) {\n this.indices.length = 0;\n this.uniform = 0;\n this.initialized = 0 < indices.length;\n\n assert(0 < indices.length);\n if (1 === indices.length)\n this.uniform = indices[0];\n else if (1 < indices.length)\n this.indices = indices;\n }\n\n public toFeatureIndex(output?: FeatureIndex): FeatureIndex {\n const index = output ?? new FeatureIndex();\n if (!this.initialized) {\n index.type = FeatureIndexType.Empty;\n } else if (this.indices.length === 0) {\n index.type = FeatureIndexType.Uniform;\n index.featureID = this.uniform;\n } else {\n index.type = FeatureIndexType.NonUniform;\n index.featureIDs = new Uint32Array(this.indices);\n }\n\n return index;\n }\n }\n\n export interface Props {\n displayParams: DisplayParams;\n features?: FeatureTable;\n type: MeshPrimitiveType;\n range: Range3d;\n quantizePositions: boolean;\n is2d: boolean;\n isPlanar: boolean;\n hasBakedLighting?: boolean;\n isVolumeClassifier?: boolean;\n }\n}\n\nexport class MeshList extends Array<Mesh> {\n public readonly features?: FeatureTable;\n public readonly range?: Range3d;\n constructor(features?: FeatureTable, range?: Range3d) {\n super();\n this.features = features;\n this.range = range;\n }\n}\n"]}
1
+ {"version":3,"file":"MeshPrimitives.js","sourceRoot":"","sources":["../../../../../src/common/internal/render/MeshPrimitives.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Rendering\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { AuxChannel, AuxChannelData, Point2d, Point3d, Range3d } from \"@itwin/core-geometry\";\nimport {\n ColorDef,\n ColorIndex, EdgeArgs, Feature, FeatureIndex, FeatureIndexType, FeatureTable, LinePixels, MeshEdges, MeshPolyline, MeshPolylineList,\n OctEncodedNormal, PolylineEdgeArgs, PolylineFlags, PolylineTypeFlags, QParams3d, QPoint3dList,\n SilhouetteEdgeArgs,\n} from \"@itwin/core-common\";\nimport { ColorMap } from \"./ColorMap\";\nimport { DisplayParams } from \"./DisplayParams\";\nimport { MeshPointList, MeshPrimitiveType, Point3dList } from \"./MeshPrimitive\";\nimport { Triangle, TriangleList } from \"./Primitives\";\nimport { VertexKeyProps } from \"./VertexKey\";\nimport { MeshArgs } from \"../../../render/MeshArgs\";\nimport { PolylineArgs } from \"../../../render/PolylineArgs\";\n\nexport function createPolylineArgs(mesh: Mesh): PolylineArgs | undefined {\n if (!mesh.polylines || mesh.polylines.length === 0)\n return undefined;\n\n const polylines = [];\n for (const polyline of mesh.polylines)\n if (polyline.indices.length > 0)\n polylines.push(polyline.indices);\n\n if (polylines.length === 0)\n return undefined;\n\n const flags: PolylineFlags = {\n is2d: mesh.is2d,\n isPlanar: mesh.isPlanar,\n isDisjoint: mesh.type === MeshPrimitiveType.Point,\n };\n\n if (mesh.displayParams.regionEdgeType === DisplayParams.RegionEdgeType.Outline) {\n // This polyline is behaving as the edges of a region surface.\n if (!mesh.displayParams.gradient || mesh.displayParams.gradient.isOutlined)\n flags.type = PolylineTypeFlags.Edge;\n else\n flags.type = PolylineTypeFlags.Outline; // edges only displayed if fill undisplayed\n }\n\n const colors = new ColorIndex();\n mesh.colorMap.toColorIndex(colors, mesh.colors);\n\n const features = new FeatureIndex();\n mesh.toFeatureIndex(features);\n\n return {\n width: mesh.displayParams.width,\n linePixels: mesh.displayParams.linePixels,\n flags,\n polylines,\n points: mesh.points,\n colors,\n features,\n };\n}\n\n/** The vertices of the edges are shared with those of the surface. */\nexport class MeshArgsEdges {\n public edges = new EdgeArgs();\n public silhouettes = new SilhouetteEdgeArgs();\n public polylines = new PolylineEdgeArgs();\n public width = 0;\n public linePixels = LinePixels.Solid;\n public color?: ColorDef;\n\n public clear(): void {\n this.edges.clear();\n this.silhouettes.clear();\n this.polylines.clear();\n this.width = 0;\n this.linePixels = LinePixels.Solid;\n }\n public get isValid(): boolean { return this.edges.isValid || this.silhouettes.isValid || this.polylines.isValid; }\n}\n\nexport function createMeshArgs(mesh: Mesh): MeshArgs | undefined {\n if (!mesh.triangles || mesh.triangles.isEmpty || mesh.points.length === 0)\n return undefined;\n\n const texture = mesh.displayParams.textureMapping?.texture;\n const textureMapping = texture && mesh.uvParams.length > 0 ? { texture, uvParams: mesh.uvParams } : undefined;\n\n const colors = new ColorIndex();\n mesh.colorMap.toColorIndex(colors, mesh.colors);\n\n const features = new FeatureIndex();\n mesh.toFeatureIndex(features);\n\n let edges;\n if (mesh.edges) {\n edges = new MeshArgsEdges();\n edges.width = mesh.edges.appearance?.width ?? mesh.displayParams.width;\n edges.linePixels = mesh.edges.appearance?.linePixels ?? mesh.displayParams.linePixels;\n edges.edges.init(mesh.edges);\n edges.silhouettes.init(mesh.edges);\n edges.color = mesh.edges.appearance?.color;\n\n edges.polylines.init(mesh.edges.polylineGroups);\n }\n\n return {\n vertIndices: mesh.triangles.indices,\n points: mesh.points,\n normals: !mesh.displayParams.ignoreLighting && mesh.normals.length > 0 ? mesh.normals : undefined,\n textureMapping,\n colors,\n features,\n material: mesh.displayParams.material,\n fillFlags: mesh.displayParams.fillFlags,\n isPlanar: mesh.isPlanar,\n is2d: mesh.is2d,\n hasBakedLighting: true === mesh.hasBakedLighting,\n isVolumeClassifier: true === mesh.isVolumeClassifier,\n edges,\n auxChannels: mesh.auxChannels,\n };\n}\n\nexport class Mesh {\n private readonly _data: TriangleList | MeshPolylineList;\n public readonly points: MeshPointList;\n public readonly normals: OctEncodedNormal[] = [];\n public readonly uvParams: Point2d[] = [];\n public readonly colorMap: ColorMap = new ColorMap(); // used to be called ColorTable\n public colors: number[] = [];\n public edges?: MeshEdges;\n public readonly features?: Mesh.Features;\n public readonly type: MeshPrimitiveType;\n public readonly is2d: boolean;\n public readonly isPlanar: boolean;\n public readonly hasBakedLighting: boolean;\n public readonly isVolumeClassifier: boolean;\n public displayParams: DisplayParams;\n private _auxChannels?: AuxChannel[];\n\n private constructor(props: Mesh.Props) {\n const { displayParams, features, type, range, is2d, isPlanar } = props;\n this._data = MeshPrimitiveType.Mesh === type ? new TriangleList() : [];\n this.displayParams = displayParams;\n this.features = features ? new Mesh.Features(features) : undefined;\n this.type = type;\n this.is2d = is2d;\n this.isPlanar = isPlanar;\n this.hasBakedLighting = (true === props.hasBakedLighting);\n this.isVolumeClassifier = (true === props.isVolumeClassifier);\n if (props.quantizePositions) {\n this.points = new QPoint3dList(QParams3d.fromRange(range));\n } else {\n const points = [] as unknown as Point3dList;\n points.range = range;\n const center = range.center;\n points.add = (pt: Point3d) => {\n // assert(range.containsPoint(pt)); rounding error triggers this sometimes...\n points.push(pt.minus(center));\n };\n this.points = points;\n }\n }\n\n public static create(props: Mesh.Props): Mesh { return new Mesh(props); }\n\n public get triangles(): TriangleList | undefined {\n return MeshPrimitiveType.Mesh === this.type ? this._data as TriangleList : undefined;\n }\n\n public get polylines(): MeshPolylineList | undefined {\n return MeshPrimitiveType.Mesh !== this.type ? this._data as MeshPolylineList : undefined;\n }\n\n public get auxChannels(): ReadonlyArray<AuxChannel> | undefined {\n return this._auxChannels;\n }\n\n public addAuxChannels(channels: ReadonlyArray<AuxChannel>, srcIndex: number): void {\n // The native version of this function appears to assume that all polyfaces added to the Mesh will have\n // the same number + type of aux channels.\n // ###TODO We should really produce a separate Mesh for each unique combination. For now just bail on mismatch.\n if (this._auxChannels) {\n if (this._auxChannels.length !== channels.length)\n return;\n\n for (let i = 0; i < channels.length; i++) {\n const src = channels[i];\n const dst = this._auxChannels[i];\n if (src.dataType !== dst.dataType || src.name !== dst.name || src.inputName !== dst.inputName)\n return;\n }\n }\n\n if (!this._auxChannels) {\n // Copy the channels, leaving each AuxData's values array empty.\n this._auxChannels = channels.map((x) => new AuxChannel(x.data.map((y) => new AuxChannelData(y.input, [])), x.dataType, x.name, x.inputName));\n }\n\n // Append the value at srcIndex from each source channel's data to our channels.\n for (let channelIndex = 0; channelIndex < channels.length; channelIndex++) {\n const srcChannel = channels[channelIndex];\n const dstChannel = this._auxChannels[channelIndex];\n const dstIndex = dstChannel.valueCount;\n for (let dataIndex = 0; dataIndex < srcChannel.data.length; dataIndex++) {\n const dstData = dstChannel.data[dataIndex];\n dstData.copyValues(srcChannel.data[dataIndex], dstIndex, srcIndex, dstChannel.entriesPerValue);\n }\n }\n }\n\n public toFeatureIndex(index: FeatureIndex): void {\n if (undefined !== this.features)\n this.features.toFeatureIndex(index);\n }\n\n public toMeshArgs(): MeshArgs | undefined {\n return createMeshArgs(this);\n }\n\n public toPolylineArgs(): PolylineArgs | undefined {\n return createPolylineArgs(this);\n }\n\n public addPolyline(poly: MeshPolyline): void {\n const { type, polylines } = this;\n\n assert(MeshPrimitiveType.Polyline === type || MeshPrimitiveType.Point === type);\n assert(undefined !== polylines);\n\n if (MeshPrimitiveType.Polyline === type && poly.indices.length < 2)\n return;\n\n if (undefined !== polylines)\n polylines.push(poly);\n }\n\n public addTriangle(triangle: Triangle): void {\n const { triangles, type } = this;\n\n assert(MeshPrimitiveType.Mesh === type);\n assert(undefined !== triangles);\n\n if (undefined !== triangles)\n triangles.addTriangle(triangle);\n }\n\n public addVertex(props: VertexKeyProps): number {\n const { feature, position, normal, uvParam, fillColor } = props;\n\n this.points.add(position);\n\n if (undefined !== normal)\n this.normals.push(normal);\n\n if (undefined !== uvParam)\n this.uvParams.push(uvParam);\n\n if (feature) {\n assert(undefined !== this.features);\n this.features.add(feature, this.points.length);\n }\n\n // Don't allocate color indices until we have non-uniform colors\n if (0 === this.colorMap.length) {\n this.colorMap.insert(fillColor);\n assert(this.colorMap.isUniform);\n assert(0 === this.colorMap.indexOf(fillColor));\n } else if (!this.colorMap.isUniform || !this.colorMap.hasColor(fillColor)) {\n // Back-fill uniform value (index=0) for existing vertices if previously uniform\n if (0 === this.colors.length)\n this.colors.length = this.points.length - 1;\n\n this.colors.push(this.colorMap.insert(fillColor));\n assert(!this.colorMap.isUniform);\n }\n\n return this.points.length - 1;\n }\n}\n\nexport namespace Mesh {\n export class Features {\n public readonly table: FeatureTable;\n public indices: number[] = [];\n public uniform = 0;\n public initialized = false;\n\n public constructor(table: FeatureTable) { this.table = table; }\n\n public add(feat: Feature, numVerts: number): void {\n const index = this.table.insert(feat);\n if (!this.initialized) {\n // First feature - uniform.\n this.uniform = index;\n this.initialized = true;\n } else if (0 < this.indices.length) {\n // Already non-uniform\n this.indices.push(index);\n } else {\n // Second feature - back-fill uniform for existing verts\n while (this.indices.length < numVerts - 1)\n this.indices.push(this.uniform);\n\n this.indices.push(index);\n }\n }\n\n public setIndices(indices: number[]) {\n this.indices.length = 0;\n this.uniform = 0;\n this.initialized = 0 < indices.length;\n\n assert(0 < indices.length);\n if (1 === indices.length)\n this.uniform = indices[0];\n else if (1 < indices.length)\n this.indices = indices;\n }\n\n public toFeatureIndex(output?: FeatureIndex): FeatureIndex {\n const index = output ?? new FeatureIndex();\n if (!this.initialized) {\n index.type = FeatureIndexType.Empty;\n } else if (this.indices.length === 0) {\n index.type = FeatureIndexType.Uniform;\n index.featureID = this.uniform;\n } else {\n index.type = FeatureIndexType.NonUniform;\n index.featureIDs = new Uint32Array(this.indices);\n }\n\n return index;\n }\n }\n\n export interface Props {\n displayParams: DisplayParams;\n features?: FeatureTable;\n type: MeshPrimitiveType;\n range: Range3d;\n quantizePositions: boolean;\n is2d: boolean;\n isPlanar: boolean;\n hasBakedLighting?: boolean;\n isVolumeClassifier?: boolean;\n }\n}\n\nexport class MeshList extends Array<Mesh> {\n public readonly features?: FeatureTable;\n public readonly range?: Range3d;\n constructor(features?: FeatureTable, range?: Range3d) {\n super();\n this.features = features;\n this.range = range;\n }\n}\n"]}
@@ -4,8 +4,9 @@
4
4
  import { LinePixels, PolylineIndices, PolylineTypeFlags, QPoint3dList } from "@itwin/core-common";
5
5
  import { VertexIndices } from "./VertexIndices";
6
6
  import { VertexTable } from "./VertexTable";
7
- import { MeshArgs } from "../../../render/MeshArgs";
7
+ import { MeshArgsPositions } from "../../../render/MeshArgs";
8
8
  import { PolylineArgs } from "../../../render/PolylineArgs";
9
+ import { MeshPolylineList } from "@itwin/core-common/lib/cjs/internal/RenderMesh";
9
10
  /** Represents a tesselated polyline.
10
11
  * Given a polyline as a line string, each segment of the line string is triangulated into a quad.
11
12
  * Based on the angle between two segments, additional joint triangles may be inserted in between to enable smoothly-rounded corners.
@@ -28,8 +29,12 @@ export interface PolylineParams {
28
29
  weight: number;
29
30
  linePixels: LinePixels;
30
31
  }
31
- /** @internal */
32
- export declare function tesselatePolylineFromMesh(args: MeshArgs): TesselatedPolyline | undefined;
32
+ export declare function tesselatePolylineList(args: {
33
+ points: MeshArgsPositions;
34
+ polylines: MeshPolylineList;
35
+ width: number;
36
+ is2d: boolean;
37
+ }): TesselatedPolyline;
33
38
  /** Strictly for tests. @internal */
34
39
  export declare function tesselatePolyline(polylines: PolylineIndices[], points: QPoint3dList, doJointTriangles: boolean): TesselatedPolyline;
35
40
  /** @internal */
@@ -1 +1 @@
1
- {"version":3,"file":"PolylineParams.d.ts","sourceRoot":"","sources":["../../../../../src/common/internal/render/PolylineParams.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClG,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,OAAO,EAAE,aAAa,CAAC;IACvB,2DAA2D;IAC3D,WAAW,EAAE,aAAa,CAAC;IAC3B,qHAAqH;IACrH,oBAAoB,EAAE,UAAU,CAAC;CAClC;AAED,gBAAgB;AAChB,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,WAAW,CAAC;IACtB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;CACxB;AAcD,gBAAgB;AAChB,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,QAAQ,GAAG,kBAAkB,GAAG,SAAS,CAGxF;AAgLD,oCAAoC;AACpC,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,OAAO,GAAG,kBAAkB,CAGnI;AAED,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAkBzG;AAED,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAIzE"}
1
+ {"version":3,"file":"PolylineParams.d.ts","sourceRoot":"","sources":["../../../../../src/common/internal/render/PolylineParams.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClG,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAElF;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,OAAO,EAAE,aAAa,CAAC;IACvB,2DAA2D;IAC3D,WAAW,EAAE,aAAa,CAAC;IAC3B,qHAAqH;IACrH,oBAAoB,EAAE,UAAU,CAAC;CAClC;AAED,gBAAgB;AAChB,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,WAAW,CAAC;IACtB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;CACxB;AAcD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf,GAAG,kBAAkB,CAGrB;AAkLD,oCAAoC;AACpC,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,OAAO,GAAG,kBAAkB,CAGnI;AAED,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAkBzG;AAED,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAIzE"}
@@ -7,7 +7,7 @@
7
7
  * @module Rendering
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.tesselatePolylineFromMesh = tesselatePolylineFromMesh;
10
+ exports.tesselatePolylineList = tesselatePolylineList;
11
11
  exports.tesselatePolyline = tesselatePolyline;
12
12
  exports.createPolylineParams = createPolylineParams;
13
13
  exports.wantJointTriangles = wantJointTriangles;
@@ -16,10 +16,9 @@ const VertexIndices_1 = require("./VertexIndices");
16
16
  const core_geometry_1 = require("@itwin/core-geometry");
17
17
  const core_bentley_1 = require("@itwin/core-bentley");
18
18
  const VertexTableBuilder_1 = require("./VertexTableBuilder");
19
- /** @internal */
20
- function tesselatePolylineFromMesh(args) {
21
- const tesselator = PolylineTesselator.fromMesh(args);
22
- return tesselator?.tesselate();
19
+ function tesselatePolylineList(args) {
20
+ const tesselator = PolylineTesselator.create(args);
21
+ return tesselator.tesselate();
23
22
  }
24
23
  class PolylineVertex {
25
24
  isSegmentStart = false;
@@ -76,10 +75,8 @@ class PolylineTesselator {
76
75
  static fromPolyline(args) {
77
76
  return new PolylineTesselator(args.polylines, args.points, wantJointTriangles(args.width, !!args.flags.is2d));
78
77
  }
79
- static fromMesh(args) {
80
- if (undefined !== args.edges?.polylines.lines && undefined !== args.points)
81
- return new PolylineTesselator(args.edges.polylines.lines, args.points, wantJointTriangles(args.edges.width, true === args.is2d));
82
- return undefined;
78
+ static create(args) {
79
+ return new PolylineTesselator(args.polylines.map((x) => x.indices), args.points, wantJointTriangles(args.width, args.is2d));
83
80
  }
84
81
  tesselate() {
85
82
  this._tesselate();
@@ -1 +1 @@
1
- {"version":3,"file":"PolylineParams.js","sourceRoot":"","sources":["../../../../../src/common/internal/render/PolylineParams.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Rendering\n */\n\nimport { LinePixels, PolylineIndices, PolylineTypeFlags, QPoint3dList } from \"@itwin/core-common\";\nimport { VertexIndices } from \"./VertexIndices\";\nimport { VertexTable } from \"./VertexTable\";\nimport { Point3d, Vector3d } from \"@itwin/core-geometry\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { VertexTableBuilder } from \"./VertexTableBuilder\";\nimport { MeshArgs } from \"../../../render/MeshArgs\";\nimport { PolylineArgs } from \"../../../render/PolylineArgs\";\n\n/** Represents a tesselated polyline.\n * Given a polyline as a line string, each segment of the line string is triangulated into a quad.\n * Based on the angle between two segments, additional joint triangles may be inserted in between to enable smoothly-rounded corners.\n * @internal\n */\nexport interface TesselatedPolyline {\n /** 24-bit index of each vertex. */\n indices: VertexIndices;\n /** 24-bit index of the previous vertex in the polyline. */\n prevIndices: VertexIndices;\n /** 24-bit index of the next vertex in the polyline, plus 8-bit parameter describing the semantics of this vertex. */\n nextIndicesAndParams: Uint8Array;\n}\n\n/** @internal */\nexport interface PolylineParams {\n vertices: VertexTable;\n polyline: TesselatedPolyline;\n isPlanar: boolean;\n type: PolylineTypeFlags;\n weight: number;\n linePixels: LinePixels;\n}\n\n/** Parameter associated with each vertex index of a tesselated polyline. */\nconst enum PolylineParam { // eslint-disable-line no-restricted-syntax\n kNone = 0,\n kSquare = 1 * 3,\n kMiter = 2 * 3,\n kMiterInsideOnly = 3 * 3,\n kJointBase = 4 * 3,\n kNegatePerp = 8 * 3,\n kNegateAlong = 16 * 3,\n kNoneAdjustWeight = 32 * 3,\n}\n\n/** @internal */\nexport function tesselatePolylineFromMesh(args: MeshArgs): TesselatedPolyline | undefined {\n const tesselator = PolylineTesselator.fromMesh(args);\n return tesselator?.tesselate();\n}\n\nclass PolylineVertex {\n public isSegmentStart: boolean = false;\n public isPolylineStartOrEnd: boolean = false;\n public vertexIndex: number = 0;\n public prevIndex: number = 0;\n public nextIndex: number = 0;\n\n public constructor() { }\n\n public init(isSegmentStart: boolean, isPolylineStartOrEnd: boolean, vertexIndex: number, prevIndex: number, nextIndex: number) {\n this.isSegmentStart = isSegmentStart;\n this.isPolylineStartOrEnd = isPolylineStartOrEnd;\n this.vertexIndex = vertexIndex;\n this.prevIndex = prevIndex;\n this.nextIndex = nextIndex;\n }\n\n public computeParam(negatePerp: boolean, adjacentToJoint: boolean = false, joint: boolean = false, noDisplacement: boolean = false): number {\n if (joint)\n return PolylineParam.kJointBase;\n\n let param: PolylineParam;\n if (noDisplacement)\n param = PolylineParam.kNoneAdjustWeight; // prevent getting tossed before width adjustment\n else if (adjacentToJoint)\n param = PolylineParam.kMiterInsideOnly;\n else\n param = this.isPolylineStartOrEnd ? PolylineParam.kSquare : PolylineParam.kMiter;\n\n let adjust = 0;\n if (negatePerp)\n adjust = PolylineParam.kNegatePerp;\n if (!this.isSegmentStart)\n adjust += PolylineParam.kNegateAlong;\n\n return param + adjust;\n }\n}\n\nclass PolylineTesselator {\n private _polylines: PolylineIndices[];\n private _doJoints: boolean;\n private _numIndices = 0;\n private _vertIndex: number[] = [];\n private _prevIndex: number[] = [];\n private _nextIndex: number[] = [];\n private _nextParam: number[] = [];\n private _position: Point3d[] = [];\n\n public constructor(polylines: PolylineIndices[], points: QPoint3dList | Point3d[], doJointTriangles: boolean) {\n this._polylines = polylines;\n if (points instanceof QPoint3dList) {\n for (const p of points.list)\n this._position.push(p.unquantize(points.params));\n } else {\n this._position = points;\n }\n\n this._doJoints = doJointTriangles;\n }\n\n public static fromPolyline(args: PolylineArgs): PolylineTesselator {\n return new PolylineTesselator(args.polylines, args.points, wantJointTriangles(args.width, !!args.flags.is2d));\n }\n\n public static fromMesh(args: MeshArgs): PolylineTesselator | undefined {\n if (undefined !== args.edges?.polylines.lines && undefined !== args.points)\n return new PolylineTesselator(args.edges.polylines.lines, args.points, wantJointTriangles(args.edges.width, true === args.is2d));\n\n return undefined;\n }\n\n public tesselate(): TesselatedPolyline {\n this._tesselate();\n\n const vertIndex = VertexIndices.fromArray(this._vertIndex);\n const prevIndex = VertexIndices.fromArray(this._prevIndex);\n\n const nextIndexAndParam = new Uint8Array(this._numIndices * 4);\n for (let i = 0; i < this._numIndices; i++) {\n const index = this._nextIndex[i];\n const j = i * 4;\n VertexIndices.encodeIndex(index, nextIndexAndParam, j);\n nextIndexAndParam[j + 3] = this._nextParam[i] & 0x000000ff;\n }\n\n return {\n indices: vertIndex,\n prevIndices: prevIndex,\n nextIndicesAndParams: nextIndexAndParam,\n };\n }\n\n private _tesselate() {\n const v0 = new PolylineVertex(), v1 = new PolylineVertex();\n const maxJointDot = -0.7;\n\n for (const line of this._polylines) {\n if (line.length < 2)\n continue;\n\n const last = line.length - 1;\n const isClosed: boolean = line[0] === line[last];\n\n for (let i = 0; i < last; ++i) {\n const idx0 = line[i];\n const idx1 = line[i + 1];\n const isStart: boolean = (0 === i);\n const isEnd: boolean = (last - 1 === i);\n const prevIdx0 = isStart ? (isClosed ? line[last - 1] : idx0) : line[i - 1];\n const nextIdx1 = isEnd ? (isClosed ? line[1] : idx1) : line[i + 2];\n\n v0.init(true, isStart && !isClosed, idx0, prevIdx0, idx1);\n v1.init(false, isEnd && !isClosed, idx1, nextIdx1, idx0);\n\n const jointAt0: boolean = this._doJoints && (isClosed || !isStart) && this._dotProduct(v0) > maxJointDot;\n const jointAt1: boolean = this._doJoints && (isClosed || !isEnd) && this._dotProduct(v1) > maxJointDot;\n\n if (jointAt0 || jointAt1) {\n this._addVertex(v0, v0.computeParam(true, jointAt0, false, false));\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, false));\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, false));\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, false));\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, false));\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\n this._addVertex(v1, v1.computeParam(true, jointAt1, false, false));\n\n if (jointAt0)\n this.addJointTriangles(v0, v0.computeParam(false, true, false, true), v0);\n\n if (jointAt1)\n this.addJointTriangles(v1, v1.computeParam(false, true, false, true), v1);\n } else {\n this._addVertex(v0, v0.computeParam(true));\n this._addVertex(v1, v1.computeParam(false));\n this._addVertex(v0, v0.computeParam(false));\n this._addVertex(v0, v0.computeParam(false));\n this._addVertex(v1, v1.computeParam(false));\n this._addVertex(v1, v1.computeParam(true));\n }\n }\n }\n }\n\n private addJointTriangles(v0: PolylineVertex, p0: number, v1: PolylineVertex): void {\n const param = v1.computeParam(false, false, true);\n for (let i = 0; i < 3; i++) {\n this._addVertex(v0, p0);\n this._addVertex(v1, param + i + 1);\n this._addVertex(v1, param + i);\n }\n }\n\n private _dotProduct(v: PolylineVertex): number {\n const pos: Point3d = this._position[v.vertexIndex];\n const prevDir: Vector3d = Vector3d.createStartEnd(this._position[v.prevIndex], pos);\n const nextDir: Vector3d = Vector3d.createStartEnd(this._position[v.nextIndex], pos);\n return prevDir.dotProduct(nextDir);\n }\n\n private _addVertex(vertex: PolylineVertex, param: number): void {\n this._vertIndex[this._numIndices] = vertex.vertexIndex;\n this._prevIndex[this._numIndices] = vertex.prevIndex;\n this._nextIndex[this._numIndices] = vertex.nextIndex;\n this._nextParam[this._numIndices] = param;\n this._numIndices++;\n }\n}\n\n/** Strictly for tests. @internal */\nexport function tesselatePolyline(polylines: PolylineIndices[], points: QPoint3dList, doJointTriangles: boolean): TesselatedPolyline {\n const tesselator = new PolylineTesselator(polylines, points, doJointTriangles);\n return tesselator.tesselate();\n}\n\n/** @internal */\nexport function createPolylineParams(args: PolylineArgs, maxDimension: number): PolylineParams | undefined {\n assert(!args.flags.isDisjoint);\n const vertices = VertexTableBuilder.buildFromPolylines(args, maxDimension);\n if (undefined === vertices)\n return undefined;\n\n const tesselator = PolylineTesselator.fromPolyline(args);\n if (undefined === tesselator)\n return undefined;\n\n return {\n vertices,\n polyline: tesselator.tesselate(),\n isPlanar: !!args.flags.isPlanar,\n type: args.flags.type ?? PolylineTypeFlags.Normal,\n weight: args.width,\n linePixels: args.linePixels,\n };\n}\n\n/** @internal */\nexport function wantJointTriangles(weight: number, is2d: boolean): boolean {\n // Joints are incredibly expensive. In 3d, only generate them if the line is sufficiently wide for them to be noticeable.\n const jointWidthThreshold = 3;\n return is2d || weight >= jointWidthThreshold;\n}\n"]}
1
+ {"version":3,"file":"PolylineParams.js","sourceRoot":"","sources":["../../../../../src/common/internal/render/PolylineParams.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Rendering\n */\n\nimport { LinePixels, PolylineIndices, PolylineTypeFlags, QPoint3dList } from \"@itwin/core-common\";\nimport { VertexIndices } from \"./VertexIndices\";\nimport { VertexTable } from \"./VertexTable\";\nimport { Point3d, Vector3d } from \"@itwin/core-geometry\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { VertexTableBuilder } from \"./VertexTableBuilder\";\nimport { MeshArgsPositions } from \"../../../render/MeshArgs\";\nimport { PolylineArgs } from \"../../../render/PolylineArgs\";\nimport { MeshPolylineList } from \"@itwin/core-common/lib/cjs/internal/RenderMesh\";\n\n/** Represents a tesselated polyline.\n * Given a polyline as a line string, each segment of the line string is triangulated into a quad.\n * Based on the angle between two segments, additional joint triangles may be inserted in between to enable smoothly-rounded corners.\n * @internal\n */\nexport interface TesselatedPolyline {\n /** 24-bit index of each vertex. */\n indices: VertexIndices;\n /** 24-bit index of the previous vertex in the polyline. */\n prevIndices: VertexIndices;\n /** 24-bit index of the next vertex in the polyline, plus 8-bit parameter describing the semantics of this vertex. */\n nextIndicesAndParams: Uint8Array;\n}\n\n/** @internal */\nexport interface PolylineParams {\n vertices: VertexTable;\n polyline: TesselatedPolyline;\n isPlanar: boolean;\n type: PolylineTypeFlags;\n weight: number;\n linePixels: LinePixels;\n}\n\n/** Parameter associated with each vertex index of a tesselated polyline. */\nconst enum PolylineParam { // eslint-disable-line no-restricted-syntax\n kNone = 0,\n kSquare = 1 * 3,\n kMiter = 2 * 3,\n kMiterInsideOnly = 3 * 3,\n kJointBase = 4 * 3,\n kNegatePerp = 8 * 3,\n kNegateAlong = 16 * 3,\n kNoneAdjustWeight = 32 * 3,\n}\n\nexport function tesselatePolylineList(args: {\n points: MeshArgsPositions,\n polylines: MeshPolylineList,\n width: number,\n is2d: boolean,\n}): TesselatedPolyline {\n const tesselator = PolylineTesselator.create(args);\n return tesselator.tesselate();\n}\n\nclass PolylineVertex {\n public isSegmentStart: boolean = false;\n public isPolylineStartOrEnd: boolean = false;\n public vertexIndex: number = 0;\n public prevIndex: number = 0;\n public nextIndex: number = 0;\n\n public constructor() { }\n\n public init(isSegmentStart: boolean, isPolylineStartOrEnd: boolean, vertexIndex: number, prevIndex: number, nextIndex: number) {\n this.isSegmentStart = isSegmentStart;\n this.isPolylineStartOrEnd = isPolylineStartOrEnd;\n this.vertexIndex = vertexIndex;\n this.prevIndex = prevIndex;\n this.nextIndex = nextIndex;\n }\n\n public computeParam(negatePerp: boolean, adjacentToJoint: boolean = false, joint: boolean = false, noDisplacement: boolean = false): number {\n if (joint)\n return PolylineParam.kJointBase;\n\n let param: PolylineParam;\n if (noDisplacement)\n param = PolylineParam.kNoneAdjustWeight; // prevent getting tossed before width adjustment\n else if (adjacentToJoint)\n param = PolylineParam.kMiterInsideOnly;\n else\n param = this.isPolylineStartOrEnd ? PolylineParam.kSquare : PolylineParam.kMiter;\n\n let adjust = 0;\n if (negatePerp)\n adjust = PolylineParam.kNegatePerp;\n if (!this.isSegmentStart)\n adjust += PolylineParam.kNegateAlong;\n\n return param + adjust;\n }\n}\n\nclass PolylineTesselator {\n private _polylines: PolylineIndices[];\n private _doJoints: boolean;\n private _numIndices = 0;\n private _vertIndex: number[] = [];\n private _prevIndex: number[] = [];\n private _nextIndex: number[] = [];\n private _nextParam: number[] = [];\n private _position: Point3d[] = [];\n\n public constructor(polylines: PolylineIndices[], points: QPoint3dList | Point3d[], doJointTriangles: boolean) {\n this._polylines = polylines;\n if (points instanceof QPoint3dList) {\n for (const p of points.list)\n this._position.push(p.unquantize(points.params));\n } else {\n this._position = points;\n }\n\n this._doJoints = doJointTriangles;\n }\n\n public static fromPolyline(args: PolylineArgs): PolylineTesselator {\n return new PolylineTesselator(args.polylines, args.points, wantJointTriangles(args.width, !!args.flags.is2d));\n }\n\n public static create(args: {\n points: MeshArgsPositions,\n polylines: MeshPolylineList,\n width: number,\n is2d: boolean,\n }): PolylineTesselator {\n return new PolylineTesselator(args.polylines.map((x) => x.indices), args.points, wantJointTriangles(args.width, args.is2d));\n }\n\n public tesselate(): TesselatedPolyline {\n this._tesselate();\n\n const vertIndex = VertexIndices.fromArray(this._vertIndex);\n const prevIndex = VertexIndices.fromArray(this._prevIndex);\n\n const nextIndexAndParam = new Uint8Array(this._numIndices * 4);\n for (let i = 0; i < this._numIndices; i++) {\n const index = this._nextIndex[i];\n const j = i * 4;\n VertexIndices.encodeIndex(index, nextIndexAndParam, j);\n nextIndexAndParam[j + 3] = this._nextParam[i] & 0x000000ff;\n }\n\n return {\n indices: vertIndex,\n prevIndices: prevIndex,\n nextIndicesAndParams: nextIndexAndParam,\n };\n }\n\n private _tesselate() {\n const v0 = new PolylineVertex(), v1 = new PolylineVertex();\n const maxJointDot = -0.7;\n\n for (const line of this._polylines) {\n if (line.length < 2)\n continue;\n\n const last = line.length - 1;\n const isClosed: boolean = line[0] === line[last];\n\n for (let i = 0; i < last; ++i) {\n const idx0 = line[i];\n const idx1 = line[i + 1];\n const isStart: boolean = (0 === i);\n const isEnd: boolean = (last - 1 === i);\n const prevIdx0 = isStart ? (isClosed ? line[last - 1] : idx0) : line[i - 1];\n const nextIdx1 = isEnd ? (isClosed ? line[1] : idx1) : line[i + 2];\n\n v0.init(true, isStart && !isClosed, idx0, prevIdx0, idx1);\n v1.init(false, isEnd && !isClosed, idx1, nextIdx1, idx0);\n\n const jointAt0: boolean = this._doJoints && (isClosed || !isStart) && this._dotProduct(v0) > maxJointDot;\n const jointAt1: boolean = this._doJoints && (isClosed || !isEnd) && this._dotProduct(v1) > maxJointDot;\n\n if (jointAt0 || jointAt1) {\n this._addVertex(v0, v0.computeParam(true, jointAt0, false, false));\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, false));\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, false));\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, false));\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, false));\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\n this._addVertex(v1, v1.computeParam(true, jointAt1, false, false));\n\n if (jointAt0)\n this.addJointTriangles(v0, v0.computeParam(false, true, false, true), v0);\n\n if (jointAt1)\n this.addJointTriangles(v1, v1.computeParam(false, true, false, true), v1);\n } else {\n this._addVertex(v0, v0.computeParam(true));\n this._addVertex(v1, v1.computeParam(false));\n this._addVertex(v0, v0.computeParam(false));\n this._addVertex(v0, v0.computeParam(false));\n this._addVertex(v1, v1.computeParam(false));\n this._addVertex(v1, v1.computeParam(true));\n }\n }\n }\n }\n\n private addJointTriangles(v0: PolylineVertex, p0: number, v1: PolylineVertex): void {\n const param = v1.computeParam(false, false, true);\n for (let i = 0; i < 3; i++) {\n this._addVertex(v0, p0);\n this._addVertex(v1, param + i + 1);\n this._addVertex(v1, param + i);\n }\n }\n\n private _dotProduct(v: PolylineVertex): number {\n const pos: Point3d = this._position[v.vertexIndex];\n const prevDir: Vector3d = Vector3d.createStartEnd(this._position[v.prevIndex], pos);\n const nextDir: Vector3d = Vector3d.createStartEnd(this._position[v.nextIndex], pos);\n return prevDir.dotProduct(nextDir);\n }\n\n private _addVertex(vertex: PolylineVertex, param: number): void {\n this._vertIndex[this._numIndices] = vertex.vertexIndex;\n this._prevIndex[this._numIndices] = vertex.prevIndex;\n this._nextIndex[this._numIndices] = vertex.nextIndex;\n this._nextParam[this._numIndices] = param;\n this._numIndices++;\n }\n}\n\n/** Strictly for tests. @internal */\nexport function tesselatePolyline(polylines: PolylineIndices[], points: QPoint3dList, doJointTriangles: boolean): TesselatedPolyline {\n const tesselator = new PolylineTesselator(polylines, points, doJointTriangles);\n return tesselator.tesselate();\n}\n\n/** @internal */\nexport function createPolylineParams(args: PolylineArgs, maxDimension: number): PolylineParams | undefined {\n assert(!args.flags.isDisjoint);\n const vertices = VertexTableBuilder.buildFromPolylines(args, maxDimension);\n if (undefined === vertices)\n return undefined;\n\n const tesselator = PolylineTesselator.fromPolyline(args);\n if (undefined === tesselator)\n return undefined;\n\n return {\n vertices,\n polyline: tesselator.tesselate(),\n isPlanar: !!args.flags.isPlanar,\n type: args.flags.type ?? PolylineTypeFlags.Normal,\n weight: args.width,\n linePixels: args.linePixels,\n };\n}\n\n/** @internal */\nexport function wantJointTriangles(weight: number, is2d: boolean): boolean {\n // Joints are incredibly expensive. In 3d, only generate them if the line is sufficiently wide for them to be noticeable.\n const jointWidthThreshold = 3;\n return is2d || weight >= jointWidthThreshold;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"VertexTableSplitter.d.ts","sourceRoot":"","sources":["../../../../../src/common/internal/render/VertexTableSplitter.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAY,kBAAkB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAElF,OAAO,EAAqB,WAAW,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAyB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAsB,MAAM,kBAAkB,CAAC;AAEtE,gBAAgB;AAChB,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,WAAW,CAAC;IACtB,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8C;gBAEnD,eAAe,SAAI;IAItC,IAAW,UAAU,IAAI,MAAM,CAG9B;IAEM,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKzB,eAAe,IAAI,aAAa;CAGxC;AAkHD,KAAK,oBAAoB,GAAG,CAAC,IAAI,EAAE,cAAc,KAAK,cAAc,GAAG,SAAS,CAAC;AAoJjF,gBAAgB;AAChB,MAAM,MAAM,sBAAsB,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;AAmEtE,gBAAgB;AAChB,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,kBAAkB,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,sBAAsB,CAAC;CACvC;AAED,gBAAgB;AAChB,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB;IAChE,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,oBAAoB,GAAG,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAcjG;AAqRD,gBAAgB;AAChB,MAAM,WAAW,aAAc,SAAQ,oBAAoB;IACzD,MAAM,EAAE,UAAU,CAAC;IACnB,cAAc,EAAE,oBAAoB,CAAC;CACtC;AAED,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAsC5E;AAED,gBAAgB;AAChB,MAAM,WAAW,iBAAkB,SAAQ,oBAAoB;IAC7D,MAAM,EAAE,cAAc,CAAC;CACxB;AAOD,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAqDxF"}
1
+ {"version":3,"file":"VertexTableSplitter.d.ts","sourceRoot":"","sources":["../../../../../src/common/internal/render/VertexTableSplitter.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAY,kBAAkB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAElF,OAAO,EAAqB,WAAW,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAyB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAsB,MAAM,kBAAkB,CAAC;AAEtE,gBAAgB;AAChB,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,WAAW,CAAC;IACtB,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8C;gBAEnD,eAAe,SAAI;IAItC,IAAW,UAAU,IAAI,MAAM,CAG9B;IAEM,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKzB,eAAe,IAAI,aAAa;CAGxC;AAkHD,KAAK,oBAAoB,GAAG,CAAC,IAAI,EAAE,cAAc,KAAK,cAAc,GAAG,SAAS,CAAC;AAoJjF,gBAAgB;AAChB,MAAM,MAAM,sBAAsB,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;AAmEtE,gBAAgB;AAChB,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,kBAAkB,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,sBAAsB,CAAC;CACvC;AAED,gBAAgB;AAChB,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB;IAChE,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,oBAAoB,GAAG,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAcjG;AAuRD,gBAAgB;AAChB,MAAM,WAAW,aAAc,SAAQ,oBAAoB;IACzD,MAAM,EAAE,UAAU,CAAC;IACnB,cAAc,EAAE,oBAAoB,CAAC;CACtC;AAED,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAsC5E;AAED,gBAAgB;AAChB,MAAM,WAAW,iBAAkB,SAAQ,oBAAoB;IAC7D,MAAM,EAAE,cAAc,CAAC;CACxB;AAOD,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAqDxF"}
@@ -483,8 +483,8 @@ function splitEdges(source, nodes, maxDimension) {
483
483
  const edges = new Map();
484
484
  remapSegmentEdges("segments", source, nodes, edges);
485
485
  remapSegmentEdges("silhouettes", source, nodes, edges);
486
- if (source.polylines)
487
- remapPolylineEdges(source.polylines, nodes, edges);
486
+ if (source.polylineGroups?.length === 1)
487
+ remapPolylineEdges(source.polylineGroups[0].polyline, nodes, edges);
488
488
  if (source.indexed)
489
489
  remapIndexedEdges(source.indexed, nodes, edges);
490
490
  const result = new Map();
@@ -526,11 +526,13 @@ function splitEdges(source, nodes, maxDimension) {
526
526
  endPointAndQuadIndices: remappedEdges.silhouettes.endPointAndQuadIndices.toUint8Array(),
527
527
  normalPairs: remappedEdges.silhouettes.normalPairs.toUint8Array(),
528
528
  } : undefined,
529
- polylines: remappedEdges.polylines ? {
530
- indices: remappedEdges.polylines.indices.toVertexIndices(),
531
- prevIndices: remappedEdges.polylines.prevIndices.toVertexIndices(),
532
- nextIndicesAndParams: remappedEdges.polylines.nextIndicesAndParams.toUint8Array(),
533
- } : undefined,
529
+ polylineGroups: remappedEdges.polylines ? [{
530
+ polyline: {
531
+ indices: remappedEdges.polylines.indices.toVertexIndices(),
532
+ prevIndices: remappedEdges.polylines.prevIndices.toVertexIndices(),
533
+ nextIndicesAndParams: remappedEdges.polylines.nextIndicesAndParams.toUint8Array(),
534
+ },
535
+ }] : undefined,
534
536
  indexed: remappedEdges.indexed ? {
535
537
  indices: edgeIndices,
536
538
  edges: edgeTable,