@itwin/core-frontend 5.8.0-dev.13 → 5.8.0-dev.15

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 (136) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/lib/cjs/common/gltf/GltfSchema.d.ts +11 -0
  3. package/lib/cjs/common/gltf/GltfSchema.d.ts.map +1 -1
  4. package/lib/cjs/common/gltf/GltfSchema.js.map +1 -1
  5. package/lib/cjs/common/imdl/ImdlModel.d.ts +1 -0
  6. package/lib/cjs/common/imdl/ImdlModel.d.ts.map +1 -1
  7. package/lib/cjs/common/imdl/ImdlModel.js.map +1 -1
  8. package/lib/cjs/common/imdl/ParseImdlDocument.d.ts.map +1 -1
  9. package/lib/cjs/common/imdl/ParseImdlDocument.js +2 -0
  10. package/lib/cjs/common/imdl/ParseImdlDocument.js.map +1 -1
  11. package/lib/cjs/common/internal/render/LineCode.d.ts +30 -2
  12. package/lib/cjs/common/internal/render/LineCode.d.ts.map +1 -1
  13. package/lib/cjs/common/internal/render/LineCode.js +105 -14
  14. package/lib/cjs/common/internal/render/LineCode.js.map +1 -1
  15. package/lib/cjs/common/internal/render/MeshPrimitives.d.ts +1 -0
  16. package/lib/cjs/common/internal/render/MeshPrimitives.d.ts.map +1 -1
  17. package/lib/cjs/common/internal/render/MeshPrimitives.js +2 -0
  18. package/lib/cjs/common/internal/render/MeshPrimitives.js.map +1 -1
  19. package/lib/cjs/common/internal/render/PolylineParams.d.ts +1 -0
  20. package/lib/cjs/common/internal/render/PolylineParams.d.ts.map +1 -1
  21. package/lib/cjs/common/internal/render/PolylineParams.js +1 -0
  22. package/lib/cjs/common/internal/render/PolylineParams.js.map +1 -1
  23. package/lib/cjs/common/internal/render/VertexTableBuilder.d.ts.map +1 -1
  24. package/lib/cjs/common/internal/render/VertexTableBuilder.js +87 -4
  25. package/lib/cjs/common/internal/render/VertexTableBuilder.js.map +1 -1
  26. package/lib/cjs/internal/render/webgl/CachedGeometry.d.ts +1 -0
  27. package/lib/cjs/internal/render/webgl/CachedGeometry.d.ts.map +1 -1
  28. package/lib/cjs/internal/render/webgl/CachedGeometry.js +1 -0
  29. package/lib/cjs/internal/render/webgl/CachedGeometry.js.map +1 -1
  30. package/lib/cjs/internal/render/webgl/LineCode.d.ts +4 -2
  31. package/lib/cjs/internal/render/webgl/LineCode.d.ts.map +1 -1
  32. package/lib/cjs/internal/render/webgl/LineCode.js +55 -22
  33. package/lib/cjs/internal/render/webgl/LineCode.js.map +1 -1
  34. package/lib/cjs/internal/render/webgl/Polyline.d.ts +2 -0
  35. package/lib/cjs/internal/render/webgl/Polyline.d.ts.map +1 -1
  36. package/lib/cjs/internal/render/webgl/Polyline.js +3 -0
  37. package/lib/cjs/internal/render/webgl/Polyline.js.map +1 -1
  38. package/lib/cjs/internal/render/webgl/System.d.ts +2 -0
  39. package/lib/cjs/internal/render/webgl/System.d.ts.map +1 -1
  40. package/lib/cjs/internal/render/webgl/System.js +15 -1
  41. package/lib/cjs/internal/render/webgl/System.js.map +1 -1
  42. package/lib/cjs/internal/render/webgl/Texture.d.ts +1 -1
  43. package/lib/cjs/internal/render/webgl/Texture.d.ts.map +1 -1
  44. package/lib/cjs/internal/render/webgl/Texture.js +2 -1
  45. package/lib/cjs/internal/render/webgl/Texture.js.map +1 -1
  46. package/lib/cjs/internal/render/webgl/glsl/Edge.js +1 -1
  47. package/lib/cjs/internal/render/webgl/glsl/Edge.js.map +1 -1
  48. package/lib/cjs/internal/render/webgl/glsl/Polyline.d.ts.map +1 -1
  49. package/lib/cjs/internal/render/webgl/glsl/Polyline.js +82 -13
  50. package/lib/cjs/internal/render/webgl/glsl/Polyline.js.map +1 -1
  51. package/lib/cjs/internal/tile/ImdlGraphicsCreator.d.ts.map +1 -1
  52. package/lib/cjs/internal/tile/ImdlGraphicsCreator.js +1 -0
  53. package/lib/cjs/internal/tile/ImdlGraphicsCreator.js.map +1 -1
  54. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts +11 -2
  55. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  56. package/lib/cjs/quantity-formatting/QuantityFormatter.js +17 -20
  57. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  58. package/lib/cjs/render/PolylineArgs.d.ts +2 -0
  59. package/lib/cjs/render/PolylineArgs.d.ts.map +1 -1
  60. package/lib/cjs/render/PolylineArgs.js.map +1 -1
  61. package/lib/cjs/tile/GltfReader.d.ts +9 -2
  62. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  63. package/lib/cjs/tile/GltfReader.js +104 -14
  64. package/lib/cjs/tile/GltfReader.js.map +1 -1
  65. package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
  66. package/lib/cjs/tools/ToolAdmin.js +6 -1
  67. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  68. package/lib/esm/common/gltf/GltfSchema.d.ts +11 -0
  69. package/lib/esm/common/gltf/GltfSchema.d.ts.map +1 -1
  70. package/lib/esm/common/gltf/GltfSchema.js.map +1 -1
  71. package/lib/esm/common/imdl/ImdlModel.d.ts +1 -0
  72. package/lib/esm/common/imdl/ImdlModel.d.ts.map +1 -1
  73. package/lib/esm/common/imdl/ImdlModel.js.map +1 -1
  74. package/lib/esm/common/imdl/ParseImdlDocument.d.ts.map +1 -1
  75. package/lib/esm/common/imdl/ParseImdlDocument.js +2 -0
  76. package/lib/esm/common/imdl/ParseImdlDocument.js.map +1 -1
  77. package/lib/esm/common/internal/render/LineCode.d.ts +30 -2
  78. package/lib/esm/common/internal/render/LineCode.d.ts.map +1 -1
  79. package/lib/esm/common/internal/render/LineCode.js +98 -14
  80. package/lib/esm/common/internal/render/LineCode.js.map +1 -1
  81. package/lib/esm/common/internal/render/MeshPrimitives.d.ts +1 -0
  82. package/lib/esm/common/internal/render/MeshPrimitives.d.ts.map +1 -1
  83. package/lib/esm/common/internal/render/MeshPrimitives.js +2 -0
  84. package/lib/esm/common/internal/render/MeshPrimitives.js.map +1 -1
  85. package/lib/esm/common/internal/render/PolylineParams.d.ts +1 -0
  86. package/lib/esm/common/internal/render/PolylineParams.d.ts.map +1 -1
  87. package/lib/esm/common/internal/render/PolylineParams.js +1 -0
  88. package/lib/esm/common/internal/render/PolylineParams.js.map +1 -1
  89. package/lib/esm/common/internal/render/VertexTableBuilder.d.ts.map +1 -1
  90. package/lib/esm/common/internal/render/VertexTableBuilder.js +87 -4
  91. package/lib/esm/common/internal/render/VertexTableBuilder.js.map +1 -1
  92. package/lib/esm/internal/render/webgl/CachedGeometry.d.ts +1 -0
  93. package/lib/esm/internal/render/webgl/CachedGeometry.d.ts.map +1 -1
  94. package/lib/esm/internal/render/webgl/CachedGeometry.js +1 -0
  95. package/lib/esm/internal/render/webgl/CachedGeometry.js.map +1 -1
  96. package/lib/esm/internal/render/webgl/LineCode.d.ts +4 -2
  97. package/lib/esm/internal/render/webgl/LineCode.d.ts.map +1 -1
  98. package/lib/esm/internal/render/webgl/LineCode.js +56 -23
  99. package/lib/esm/internal/render/webgl/LineCode.js.map +1 -1
  100. package/lib/esm/internal/render/webgl/Polyline.d.ts +2 -0
  101. package/lib/esm/internal/render/webgl/Polyline.d.ts.map +1 -1
  102. package/lib/esm/internal/render/webgl/Polyline.js +3 -0
  103. package/lib/esm/internal/render/webgl/Polyline.js.map +1 -1
  104. package/lib/esm/internal/render/webgl/System.d.ts +2 -0
  105. package/lib/esm/internal/render/webgl/System.d.ts.map +1 -1
  106. package/lib/esm/internal/render/webgl/System.js +16 -2
  107. package/lib/esm/internal/render/webgl/System.js.map +1 -1
  108. package/lib/esm/internal/render/webgl/Texture.d.ts +1 -1
  109. package/lib/esm/internal/render/webgl/Texture.d.ts.map +1 -1
  110. package/lib/esm/internal/render/webgl/Texture.js +1 -1
  111. package/lib/esm/internal/render/webgl/Texture.js.map +1 -1
  112. package/lib/esm/internal/render/webgl/glsl/Edge.js +1 -1
  113. package/lib/esm/internal/render/webgl/glsl/Edge.js.map +1 -1
  114. package/lib/esm/internal/render/webgl/glsl/Polyline.d.ts.map +1 -1
  115. package/lib/esm/internal/render/webgl/glsl/Polyline.js +82 -13
  116. package/lib/esm/internal/render/webgl/glsl/Polyline.js.map +1 -1
  117. package/lib/esm/internal/tile/ImdlGraphicsCreator.d.ts.map +1 -1
  118. package/lib/esm/internal/tile/ImdlGraphicsCreator.js +1 -0
  119. package/lib/esm/internal/tile/ImdlGraphicsCreator.js.map +1 -1
  120. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts +11 -2
  121. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  122. package/lib/esm/quantity-formatting/QuantityFormatter.js +17 -20
  123. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  124. package/lib/esm/render/PolylineArgs.d.ts +2 -0
  125. package/lib/esm/render/PolylineArgs.d.ts.map +1 -1
  126. package/lib/esm/render/PolylineArgs.js.map +1 -1
  127. package/lib/esm/tile/GltfReader.d.ts +9 -2
  128. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  129. package/lib/esm/tile/GltfReader.js +104 -14
  130. package/lib/esm/tile/GltfReader.js.map +1 -1
  131. package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
  132. package/lib/esm/tools/ToolAdmin.js +6 -1
  133. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  134. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  135. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  136. package/package.json +20 -20
@@ -7,24 +7,115 @@
7
7
  * @module WebGL
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.lineCodeTextureSize = void 0;
11
+ exports.initializeLineCodeCapacity = initializeLineCodeCapacity;
12
+ exports.initializeDefaultPatterns = initializeDefaultPatterns;
13
+ exports.resetLineCodeState = resetLineCodeState;
10
14
  exports.lineCodeFromLinePixels = lineCodeFromLinePixels;
15
+ exports.onLineCodeAssigned = onLineCodeAssigned;
16
+ exports.getLineCodePatterns = getLineCodePatterns;
17
+ exports.lineCodeTextureCapacity = lineCodeTextureCapacity;
18
+ const core_bentley_1 = require("@itwin/core-bentley");
11
19
  const core_common_1 = require("@itwin/core-common");
12
- /** Map a LinePixels value to an integer in [0..9] that can be used by shaders to index into the corresponding pixel pattern.
13
- * This is used for feature overrides, including those defined by InstancedGraphicParams.
20
+ const textureSize = 32;
21
+ // Initial capacity - will be updated to System.maxTextureSize in initializeLineCodeCapacity().
22
+ // This value is used only for tests that don't initialize the full System.
23
+ let maxLineCodeSlots = 16384;
24
+ const patternToCode = new Map();
25
+ const patterns = [];
26
+ const assignmentEvent = new core_bentley_1.BeEvent();
27
+ let defaultPatternsInitialized = false;
28
+ /** Initialize the maximum line code slots based on System's maxTextureSize.
29
+ * Must be called before initializeDefaultPatterns().
30
+ * @internal
14
31
  */
15
- function lineCodeFromLinePixels(pixels) {
32
+ function initializeLineCodeCapacity(maxTexSize) {
33
+ // Cap at the smaller of maxTextureSize or theoretical maximum (65,536)
34
+ maxLineCodeSlots = Math.min(maxTexSize, 65536);
35
+ }
36
+ const defaultPatterns = [
37
+ core_common_1.LinePixels.Solid,
38
+ core_common_1.LinePixels.Code1,
39
+ core_common_1.LinePixels.Code2,
40
+ core_common_1.LinePixels.Code3,
41
+ core_common_1.LinePixels.Code4,
42
+ core_common_1.LinePixels.Code5,
43
+ core_common_1.LinePixels.Code6,
44
+ core_common_1.LinePixels.Code7,
45
+ core_common_1.LinePixels.HiddenLine,
46
+ core_common_1.LinePixels.Invisible,
47
+ ];
48
+ function normalizePatternValue(pixels) {
16
49
  switch (pixels) {
17
- case core_common_1.LinePixels.Code0: return 0;
18
- case core_common_1.LinePixels.Code1: return 1;
19
- case core_common_1.LinePixels.Code2: return 2;
20
- case core_common_1.LinePixels.Code3: return 3;
21
- case core_common_1.LinePixels.Code4: return 4;
22
- case core_common_1.LinePixels.Code5: return 5;
23
- case core_common_1.LinePixels.Code6: return 6;
24
- case core_common_1.LinePixels.Code7: return 7;
25
- case core_common_1.LinePixels.HiddenLine: return 8;
26
- case core_common_1.LinePixels.Invisible: return 9;
27
- default: return 0;
50
+ case core_common_1.LinePixels.Invalid:
51
+ return normalizePatternValue(core_common_1.LinePixels.Solid);
52
+ case core_common_1.LinePixels.Solid:
53
+ case core_common_1.LinePixels.Code0:
54
+ return 0xffffffff;
55
+ default:
56
+ return pixels >>> 0;
57
+ }
58
+ }
59
+ function assignCodeForPattern(pattern) {
60
+ const normalized = pattern >>> 0;
61
+ const existing = patternToCode.get(normalized);
62
+ if (undefined !== existing)
63
+ return existing;
64
+ if (patterns.length >= maxLineCodeSlots) {
65
+ // Exceeded maximum supported line patterns
66
+ return 0;
28
67
  }
68
+ const code = patterns.length;
69
+ patterns.push(normalized);
70
+ patternToCode.set(normalized, code);
71
+ assignmentEvent.raiseEvent({ code, pattern: normalized });
72
+ return code;
73
+ }
74
+ /** Initialize default line patterns. Called when System is ready.
75
+ * @internal
76
+ */
77
+ function initializeDefaultPatterns() {
78
+ if (defaultPatternsInitialized)
79
+ return;
80
+ defaultPatternsInitialized = true;
81
+ for (const pattern of defaultPatterns) {
82
+ const normalized = normalizePatternValue(pattern);
83
+ if (undefined !== normalized)
84
+ assignCodeForPattern(normalized);
85
+ }
86
+ }
87
+ /** Reset initialization state - used when System reinitializes.
88
+ * @internal
89
+ */
90
+ function resetLineCodeState() {
91
+ patternToCode.clear();
92
+ patterns.length = 0;
93
+ defaultPatternsInitialized = false;
94
+ }
95
+ /** Map a LinePixels value to a texture row index that identifies the corresponding pattern. */
96
+ function lineCodeFromLinePixels(pixels) {
97
+ // Ensure default patterns are initialized (for tests that don't call System.onInitialized)
98
+ initializeDefaultPatterns();
99
+ const normalized = normalizePatternValue(pixels);
100
+ if (undefined === normalized)
101
+ return 0;
102
+ return assignCodeForPattern(normalized);
103
+ }
104
+ /** @internal */
105
+ function onLineCodeAssigned(listener) {
106
+ assignmentEvent.addListener(listener);
107
+ return () => assignmentEvent.removeListener(listener);
108
+ }
109
+ /** @internal */
110
+ function getLineCodePatterns() {
111
+ return patterns;
112
+ }
113
+ /** @internal */
114
+ exports.lineCodeTextureSize = textureSize;
115
+ /** Get the current capacity of the line code texture.
116
+ * @internal
117
+ */
118
+ function lineCodeTextureCapacity() {
119
+ return maxLineCodeSlots;
29
120
  }
30
121
  //# sourceMappingURL=LineCode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LineCode.js","sourceRoot":"","sources":["../../../../../src/common/internal/render/LineCode.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;AAOH,wDAcC;AAnBD,oDAAgD;AAEhD;;GAEG;AACH,SAAgB,sBAAsB,CAAC,MAAkB;IACvD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,wBAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;QAChC,KAAK,wBAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;QAChC,KAAK,wBAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;QAChC,KAAK,wBAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;QAChC,KAAK,wBAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;QAChC,KAAK,wBAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;QAChC,KAAK,wBAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;QAChC,KAAK,wBAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;QAChC,KAAK,wBAAU,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC;QACrC,KAAK,wBAAU,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC;QACpC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC;AACH,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { LinePixels } from \"@itwin/core-common\";\r\n\r\n/** Map a LinePixels value to an integer in [0..9] that can be used by shaders to index into the corresponding pixel pattern.\r\n * This is used for feature overrides, including those defined by InstancedGraphicParams.\r\n */\r\nexport function lineCodeFromLinePixels(pixels: LinePixels): number {\r\n switch (pixels) {\r\n case LinePixels.Code0: return 0;\r\n case LinePixels.Code1: return 1;\r\n case LinePixels.Code2: return 2;\r\n case LinePixels.Code3: return 3;\r\n case LinePixels.Code4: return 4;\r\n case LinePixels.Code5: return 5;\r\n case LinePixels.Code6: return 6;\r\n case LinePixels.Code7: return 7;\r\n case LinePixels.HiddenLine: return 8;\r\n case LinePixels.Invisible: return 9;\r\n default: return 0;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"LineCode.js","sourceRoot":"","sources":["../../../../../src/common/internal/render/LineCode.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { BeEvent } from \"@itwin/core-bentley\";\r\nimport { LinePixels } from \"@itwin/core-common\";\r\n\r\n/** @internal */\r\nexport interface LineCodeAssignmentArgs {\r\n /** Zero-based index of the new pattern within the texture. */\r\n readonly code: number;\r\n /** The 32-bit bitfield representing the pattern written into the texture. */\r\n readonly pattern: number;\r\n}\r\n\r\nconst textureSize = 32;\r\n// Initial capacity - will be updated to System.maxTextureSize in initializeLineCodeCapacity().\r\n// This value is used only for tests that don't initialize the full System.\r\nlet maxLineCodeSlots = 16384;\r\n\r\nconst patternToCode = new Map<number, number>();\r\nconst patterns: number[] = [];\r\nconst assignmentEvent = new BeEvent<(args: LineCodeAssignmentArgs) => void>();\r\nlet defaultPatternsInitialized = false;\r\n\r\n/** Initialize the maximum line code slots based on System's maxTextureSize.\r\n * Must be called before initializeDefaultPatterns().\r\n * @internal\r\n */\r\nexport function initializeLineCodeCapacity(maxTexSize: number): void {\r\n // Cap at the smaller of maxTextureSize or theoretical maximum (65,536)\r\n maxLineCodeSlots = Math.min(maxTexSize, 65536);\r\n}\r\n\r\nconst defaultPatterns: LinePixels[] = [\r\n LinePixels.Solid,\r\n LinePixels.Code1,\r\n LinePixels.Code2,\r\n LinePixels.Code3,\r\n LinePixels.Code4,\r\n LinePixels.Code5,\r\n LinePixels.Code6,\r\n LinePixels.Code7,\r\n LinePixels.HiddenLine,\r\n LinePixels.Invisible,\r\n];\r\n\r\nfunction normalizePatternValue(pixels: LinePixels): number | undefined {\r\n switch (pixels) {\r\n case LinePixels.Invalid:\r\n return normalizePatternValue(LinePixels.Solid);\r\n case LinePixels.Solid:\r\n case LinePixels.Code0:\r\n return 0xffffffff;\r\n default:\r\n return pixels >>> 0;\r\n }\r\n}\r\n\r\nfunction assignCodeForPattern(pattern: number): number {\r\n const normalized = pattern >>> 0;\r\n const existing = patternToCode.get(normalized);\r\n if (undefined !== existing)\r\n return existing;\r\n\r\n if (patterns.length >= maxLineCodeSlots) {\r\n // Exceeded maximum supported line patterns\r\n return 0;\r\n }\r\n\r\n const code = patterns.length;\r\n patterns.push(normalized);\r\n patternToCode.set(normalized, code);\r\n assignmentEvent.raiseEvent({ code, pattern: normalized });\r\n return code;\r\n}\r\n\r\n/** Initialize default line patterns. Called when System is ready.\r\n * @internal\r\n */\r\nexport function initializeDefaultPatterns(): void {\r\n if (defaultPatternsInitialized)\r\n return;\r\n\r\n defaultPatternsInitialized = true;\r\n for (const pattern of defaultPatterns) {\r\n const normalized = normalizePatternValue(pattern);\r\n if (undefined !== normalized)\r\n assignCodeForPattern(normalized);\r\n }\r\n}\r\n\r\n/** Reset initialization state - used when System reinitializes.\r\n * @internal\r\n */\r\nexport function resetLineCodeState(): void {\r\n patternToCode.clear();\r\n patterns.length = 0;\r\n defaultPatternsInitialized = false;\r\n}\r\n\r\n/** Map a LinePixels value to a texture row index that identifies the corresponding pattern. */\r\nexport function lineCodeFromLinePixels(pixels: LinePixels): number {\r\n // Ensure default patterns are initialized (for tests that don't call System.onInitialized)\r\n initializeDefaultPatterns();\r\n\r\n const normalized = normalizePatternValue(pixels);\r\n if (undefined === normalized)\r\n return 0;\r\n\r\n return assignCodeForPattern(normalized);\r\n}\r\n\r\n/** @internal */\r\nexport function onLineCodeAssigned(listener: (args: LineCodeAssignmentArgs) => void): () => void {\r\n assignmentEvent.addListener(listener);\r\n return () => assignmentEvent.removeListener(listener);\r\n}\r\n\r\n/** @internal */\r\nexport function getLineCodePatterns(): readonly number[] {\r\n return patterns;\r\n}\r\n\r\n/** @internal */\r\nexport const lineCodeTextureSize = textureSize;\r\n\r\n/** Get the current capacity of the line code texture.\r\n * @internal\r\n */\r\nexport function lineCodeTextureCapacity(): number {\r\n return maxLineCodeSlots;\r\n}\r\n"]}
@@ -30,6 +30,7 @@ export declare class Mesh {
30
30
  readonly uvParams: Point2d[];
31
31
  readonly colorMap: ColorMap;
32
32
  colors: number[];
33
+ cumulativeDistances?: Float32Array;
33
34
  edges?: MeshEdges;
34
35
  readonly features?: Mesh.Features;
35
36
  readonly type: MeshPrimitiveType;
@@ -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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"}
@@ -50,6 +50,7 @@ function createPolylineArgs(mesh) {
50
50
  points: mesh.points,
51
51
  colors,
52
52
  features,
53
+ cumulativeDistances: mesh.cumulativeDistances,
53
54
  };
54
55
  }
55
56
  /** The vertices of the edges are shared with those of the surface. */
@@ -115,6 +116,7 @@ class Mesh {
115
116
  uvParams = [];
116
117
  colorMap = new ColorMap_1.ColorMap(); // used to be called ColorTable
117
118
  colors = [];
119
+ cumulativeDistances;
118
120
  edges;
119
121
  features;
120
122
  type;
@@ -1 +1 @@
1
- {"version":3,"file":"MeshPrimitives.js","sourceRoot":"","sources":["../../../../../src/common/internal/render/MeshPrimitives.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { AuxChannel, AuxChannelData, Point2d, Point3d, Range3d } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef,\r\n ColorIndex, EdgeArgs, Feature, FeatureIndex, FeatureIndexType, FeatureTable, LinePixels, MeshEdges, MeshPolyline, MeshPolylineList,\r\n OctEncodedNormal, PolylineEdgeArgs, PolylineFlags, PolylineTypeFlags, QParams3d, QPoint3dList,\r\n SilhouetteEdgeArgs,\r\n} from \"@itwin/core-common\";\r\nimport { ColorMap } from \"./ColorMap\";\r\nimport { DisplayParams } from \"./DisplayParams\";\r\nimport { MeshPointList, MeshPrimitiveType, Point3dList } from \"./MeshPrimitive\";\r\nimport { Triangle, TriangleList } from \"./Primitives\";\r\nimport { VertexKeyProps } from \"./VertexKey\";\r\nimport { MeshArgs } from \"../../../render/MeshArgs\";\r\nimport { PolylineArgs } from \"../../../render/PolylineArgs\";\r\n\r\nexport function createPolylineArgs(mesh: Mesh): PolylineArgs | undefined {\r\n if (!mesh.polylines || mesh.polylines.length === 0)\r\n return undefined;\r\n\r\n const polylines = [];\r\n for (const polyline of mesh.polylines)\r\n if (polyline.indices.length > 0)\r\n polylines.push(polyline.indices);\r\n\r\n if (polylines.length === 0)\r\n return undefined;\r\n\r\n const flags: PolylineFlags = {\r\n is2d: mesh.is2d,\r\n isPlanar: mesh.isPlanar,\r\n isDisjoint: mesh.type === MeshPrimitiveType.Point,\r\n };\r\n\r\n if (mesh.displayParams.regionEdgeType === DisplayParams.RegionEdgeType.Outline) {\r\n // This polyline is behaving as the edges of a region surface.\r\n if (!mesh.displayParams.gradient || mesh.displayParams.gradient.isOutlined)\r\n flags.type = PolylineTypeFlags.Edge;\r\n else\r\n flags.type = PolylineTypeFlags.Outline; // edges only displayed if fill undisplayed\r\n }\r\n\r\n const colors = new ColorIndex();\r\n mesh.colorMap.toColorIndex(colors, mesh.colors);\r\n\r\n const features = new FeatureIndex();\r\n mesh.toFeatureIndex(features);\r\n\r\n return {\r\n width: mesh.displayParams.width,\r\n linePixels: mesh.displayParams.linePixels,\r\n flags,\r\n polylines,\r\n points: mesh.points,\r\n colors,\r\n features,\r\n };\r\n}\r\n\r\n/** The vertices of the edges are shared with those of the surface. */\r\nexport class MeshArgsEdges {\r\n public edges = new EdgeArgs();\r\n public silhouettes = new SilhouetteEdgeArgs();\r\n public polylines = new PolylineEdgeArgs();\r\n public width = 0;\r\n public linePixels = LinePixels.Solid;\r\n public color?: ColorDef;\r\n\r\n public clear(): void {\r\n this.edges.clear();\r\n this.silhouettes.clear();\r\n this.polylines.clear();\r\n this.width = 0;\r\n this.linePixels = LinePixels.Solid;\r\n }\r\n public get isValid(): boolean { return this.edges.isValid || this.silhouettes.isValid || this.polylines.isValid; }\r\n}\r\n\r\nexport function createMeshArgs(mesh: Mesh): MeshArgs | undefined {\r\n if (!mesh.triangles || mesh.triangles.isEmpty || mesh.points.length === 0)\r\n return undefined;\r\n\r\n const texture = mesh.displayParams.textureMapping?.texture;\r\n const useConstantLod = mesh.displayParams.textureMapping?.params?.useConstantLod;\r\n const constantLodParams = mesh.displayParams.textureMapping?.params?.constantLodParams;\r\n const textureMapping = texture && mesh.uvParams.length > 0 ? { texture, uvParams: mesh.uvParams, useConstantLod, constantLodParams } : undefined;\r\n\r\n const colors = new ColorIndex();\r\n mesh.colorMap.toColorIndex(colors, mesh.colors);\r\n\r\n const features = new FeatureIndex();\r\n mesh.toFeatureIndex(features);\r\n\r\n let edges;\r\n if (mesh.edges) {\r\n edges = new MeshArgsEdges();\r\n edges.width = mesh.edges.appearance?.width ?? mesh.displayParams.width;\r\n edges.linePixels = mesh.edges.appearance?.linePixels ?? mesh.displayParams.linePixels;\r\n edges.edges.init(mesh.edges);\r\n edges.silhouettes.init(mesh.edges);\r\n edges.color = mesh.edges.appearance?.color;\r\n\r\n edges.polylines.init(mesh.edges.polylineGroups);\r\n }\r\n\r\n return {\r\n vertIndices: mesh.triangles.indices,\r\n points: mesh.points,\r\n normals: !mesh.displayParams.ignoreLighting && mesh.normals.length > 0 ? mesh.normals : undefined,\r\n textureMapping,\r\n colors,\r\n features,\r\n material: mesh.displayParams.material,\r\n fillFlags: mesh.displayParams.fillFlags,\r\n isPlanar: mesh.isPlanar,\r\n is2d: mesh.is2d,\r\n hasBakedLighting: true === mesh.hasBakedLighting,\r\n isVolumeClassifier: true === mesh.isVolumeClassifier,\r\n edges,\r\n auxChannels: mesh.auxChannels,\r\n };\r\n}\r\n\r\nexport class Mesh {\r\n private readonly _data: TriangleList | MeshPolylineList;\r\n public readonly points: MeshPointList;\r\n public readonly normals: OctEncodedNormal[] = [];\r\n public readonly uvParams: Point2d[] = [];\r\n public readonly colorMap: ColorMap = new ColorMap(); // used to be called ColorTable\r\n public colors: number[] = [];\r\n public edges?: MeshEdges;\r\n public readonly features?: Mesh.Features;\r\n public readonly type: MeshPrimitiveType;\r\n public readonly is2d: boolean;\r\n public readonly isPlanar: boolean;\r\n public readonly hasBakedLighting: boolean;\r\n public readonly isVolumeClassifier: boolean;\r\n public displayParams: DisplayParams;\r\n private _auxChannels?: AuxChannel[];\r\n\r\n private constructor(props: Mesh.Props) {\r\n const { displayParams, features, type, range, is2d, isPlanar } = props;\r\n this._data = MeshPrimitiveType.Mesh === type ? new TriangleList() : [];\r\n this.displayParams = displayParams;\r\n this.features = features ? new Mesh.Features(features) : undefined;\r\n this.type = type;\r\n this.is2d = is2d;\r\n this.isPlanar = isPlanar;\r\n this.hasBakedLighting = (true === props.hasBakedLighting);\r\n this.isVolumeClassifier = (true === props.isVolumeClassifier);\r\n if (props.quantizePositions) {\r\n this.points = new QPoint3dList(QParams3d.fromRange(range));\r\n } else {\r\n const points = [] as unknown as Point3dList;\r\n points.range = range;\r\n const center = range.center;\r\n points.add = (pt: Point3d) => {\r\n // assert(range.containsPoint(pt)); rounding error triggers this sometimes...\r\n points.push(pt.minus(center));\r\n };\r\n this.points = points;\r\n }\r\n }\r\n\r\n public static create(props: Mesh.Props): Mesh { return new Mesh(props); }\r\n\r\n public get triangles(): TriangleList | undefined {\r\n return MeshPrimitiveType.Mesh === this.type ? this._data as TriangleList : undefined;\r\n }\r\n\r\n public get polylines(): MeshPolylineList | undefined {\r\n return MeshPrimitiveType.Mesh !== this.type ? this._data as MeshPolylineList : undefined;\r\n }\r\n\r\n public get auxChannels(): ReadonlyArray<AuxChannel> | undefined {\r\n return this._auxChannels;\r\n }\r\n\r\n public addAuxChannels(channels: ReadonlyArray<AuxChannel>, srcIndex: number): void {\r\n // The native version of this function appears to assume that all polyfaces added to the Mesh will have\r\n // the same number + type of aux channels.\r\n // ###TODO We should really produce a separate Mesh for each unique combination. For now just bail on mismatch.\r\n if (this._auxChannels) {\r\n if (this._auxChannels.length !== channels.length)\r\n return;\r\n\r\n for (let i = 0; i < channels.length; i++) {\r\n const src = channels[i];\r\n const dst = this._auxChannels[i];\r\n if (src.dataType !== dst.dataType || src.name !== dst.name || src.inputName !== dst.inputName)\r\n return;\r\n }\r\n }\r\n\r\n if (!this._auxChannels) {\r\n // Copy the channels, leaving each AuxData's values array empty.\r\n this._auxChannels = channels.map((x) => new AuxChannel(x.data.map((y) => new AuxChannelData(y.input, [])), x.dataType, x.name, x.inputName));\r\n }\r\n\r\n // Append the value at srcIndex from each source channel's data to our channels.\r\n for (let channelIndex = 0; channelIndex < channels.length; channelIndex++) {\r\n const srcChannel = channels[channelIndex];\r\n const dstChannel = this._auxChannels[channelIndex];\r\n const dstIndex = dstChannel.valueCount;\r\n for (let dataIndex = 0; dataIndex < srcChannel.data.length; dataIndex++) {\r\n const dstData = dstChannel.data[dataIndex];\r\n dstData.copyValues(srcChannel.data[dataIndex], dstIndex, srcIndex, dstChannel.entriesPerValue);\r\n }\r\n }\r\n }\r\n\r\n public toFeatureIndex(index: FeatureIndex): void {\r\n if (undefined !== this.features)\r\n this.features.toFeatureIndex(index);\r\n }\r\n\r\n public toMeshArgs(): MeshArgs | undefined {\r\n return createMeshArgs(this);\r\n }\r\n\r\n public toPolylineArgs(): PolylineArgs | undefined {\r\n return createPolylineArgs(this);\r\n }\r\n\r\n public addPolyline(poly: MeshPolyline): void {\r\n const { type, polylines } = this;\r\n\r\n assert(MeshPrimitiveType.Polyline === type || MeshPrimitiveType.Point === type);\r\n assert(undefined !== polylines);\r\n\r\n if (MeshPrimitiveType.Polyline === type && poly.indices.length < 2)\r\n return;\r\n\r\n if (undefined !== polylines)\r\n polylines.push(poly);\r\n }\r\n\r\n public addTriangle(triangle: Triangle): void {\r\n const { triangles, type } = this;\r\n\r\n assert(MeshPrimitiveType.Mesh === type);\r\n assert(undefined !== triangles);\r\n\r\n if (undefined !== triangles)\r\n triangles.addTriangle(triangle);\r\n }\r\n\r\n public addVertex(props: VertexKeyProps): number {\r\n const { feature, position, normal, uvParam, fillColor } = props;\r\n\r\n this.points.add(position);\r\n\r\n if (undefined !== normal)\r\n this.normals.push(normal);\r\n\r\n if (undefined !== uvParam)\r\n this.uvParams.push(uvParam);\r\n\r\n if (feature) {\r\n assert(undefined !== this.features);\r\n this.features.add(feature, this.points.length);\r\n }\r\n\r\n // Don't allocate color indices until we have non-uniform colors\r\n if (0 === this.colorMap.length) {\r\n this.colorMap.insert(fillColor);\r\n assert(this.colorMap.isUniform);\r\n assert(0 === this.colorMap.indexOf(fillColor));\r\n } else if (!this.colorMap.isUniform || !this.colorMap.hasColor(fillColor)) {\r\n // Back-fill uniform value (index=0) for existing vertices if previously uniform\r\n if (0 === this.colors.length)\r\n this.colors.length = this.points.length - 1;\r\n\r\n this.colors.push(this.colorMap.insert(fillColor));\r\n assert(!this.colorMap.isUniform);\r\n }\r\n\r\n return this.points.length - 1;\r\n }\r\n}\r\n\r\nexport namespace Mesh {\r\n export class Features {\r\n public readonly table: FeatureTable;\r\n public indices: number[] = [];\r\n public uniform = 0;\r\n public initialized = false;\r\n\r\n public constructor(table: FeatureTable) { this.table = table; }\r\n\r\n public add(feat: Feature, numVerts: number): void {\r\n const index = this.table.insert(feat);\r\n if (!this.initialized) {\r\n // First feature - uniform.\r\n this.uniform = index;\r\n this.initialized = true;\r\n } else if (0 < this.indices.length) {\r\n // Already non-uniform\r\n this.indices.push(index);\r\n } else {\r\n // Second feature - back-fill uniform for existing verts\r\n while (this.indices.length < numVerts - 1)\r\n this.indices.push(this.uniform);\r\n\r\n this.indices.push(index);\r\n }\r\n }\r\n\r\n public setIndices(indices: number[]) {\r\n this.indices.length = 0;\r\n this.uniform = 0;\r\n this.initialized = 0 < indices.length;\r\n\r\n assert(0 < indices.length);\r\n if (1 === indices.length)\r\n this.uniform = indices[0];\r\n else if (1 < indices.length)\r\n this.indices = indices;\r\n }\r\n\r\n public toFeatureIndex(output?: FeatureIndex): FeatureIndex {\r\n const index = output ?? new FeatureIndex();\r\n if (!this.initialized) {\r\n index.type = FeatureIndexType.Empty;\r\n } else if (this.indices.length === 0) {\r\n index.type = FeatureIndexType.Uniform;\r\n index.featureID = this.uniform;\r\n } else {\r\n index.type = FeatureIndexType.NonUniform;\r\n index.featureIDs = new Uint32Array(this.indices);\r\n }\r\n\r\n return index;\r\n }\r\n }\r\n\r\n export interface Props {\r\n displayParams: DisplayParams;\r\n features?: FeatureTable;\r\n type: MeshPrimitiveType;\r\n range: Range3d;\r\n quantizePositions: boolean;\r\n is2d: boolean;\r\n isPlanar: boolean;\r\n hasBakedLighting?: boolean;\r\n isVolumeClassifier?: boolean;\r\n }\r\n}\r\n\r\nexport class MeshList extends Array<Mesh> {\r\n public readonly features?: FeatureTable;\r\n public readonly range?: Range3d;\r\n constructor(features?: FeatureTable, range?: Range3d) {\r\n super();\r\n this.features = features;\r\n this.range = range;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"MeshPrimitives.js","sourceRoot":"","sources":["../../../../../src/common/internal/render/MeshPrimitives.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { AuxChannel, AuxChannelData, Point2d, Point3d, Range3d } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef,\r\n ColorIndex, EdgeArgs, Feature, FeatureIndex, FeatureIndexType, FeatureTable, LinePixels, MeshEdges, MeshPolyline, MeshPolylineList,\r\n OctEncodedNormal, PolylineEdgeArgs, PolylineFlags, PolylineTypeFlags, QParams3d, QPoint3dList,\r\n SilhouetteEdgeArgs,\r\n} from \"@itwin/core-common\";\r\nimport { ColorMap } from \"./ColorMap\";\r\nimport { DisplayParams } from \"./DisplayParams\";\r\nimport { MeshPointList, MeshPrimitiveType, Point3dList } from \"./MeshPrimitive\";\r\nimport { Triangle, TriangleList } from \"./Primitives\";\r\nimport { VertexKeyProps } from \"./VertexKey\";\r\nimport { MeshArgs } from \"../../../render/MeshArgs\";\r\nimport { PolylineArgs } from \"../../../render/PolylineArgs\";\r\n\r\nexport function createPolylineArgs(mesh: Mesh): PolylineArgs | undefined {\r\n if (!mesh.polylines || mesh.polylines.length === 0)\r\n return undefined;\r\n\r\n const polylines = [];\r\n for (const polyline of mesh.polylines)\r\n if (polyline.indices.length > 0)\r\n polylines.push(polyline.indices);\r\n\r\n if (polylines.length === 0)\r\n return undefined;\r\n\r\n const flags: PolylineFlags = {\r\n is2d: mesh.is2d,\r\n isPlanar: mesh.isPlanar,\r\n isDisjoint: mesh.type === MeshPrimitiveType.Point,\r\n };\r\n\r\n if (mesh.displayParams.regionEdgeType === DisplayParams.RegionEdgeType.Outline) {\r\n // This polyline is behaving as the edges of a region surface.\r\n if (!mesh.displayParams.gradient || mesh.displayParams.gradient.isOutlined)\r\n flags.type = PolylineTypeFlags.Edge;\r\n else\r\n flags.type = PolylineTypeFlags.Outline; // edges only displayed if fill undisplayed\r\n }\r\n\r\n const colors = new ColorIndex();\r\n mesh.colorMap.toColorIndex(colors, mesh.colors);\r\n\r\n const features = new FeatureIndex();\r\n mesh.toFeatureIndex(features);\r\n\r\n return {\r\n width: mesh.displayParams.width,\r\n linePixels: mesh.displayParams.linePixels,\r\n flags,\r\n polylines,\r\n points: mesh.points,\r\n colors,\r\n features,\r\n cumulativeDistances: mesh.cumulativeDistances,\r\n };\r\n}\r\n\r\n/** The vertices of the edges are shared with those of the surface. */\r\nexport class MeshArgsEdges {\r\n public edges = new EdgeArgs();\r\n public silhouettes = new SilhouetteEdgeArgs();\r\n public polylines = new PolylineEdgeArgs();\r\n public width = 0;\r\n public linePixels = LinePixels.Solid;\r\n public color?: ColorDef;\r\n\r\n public clear(): void {\r\n this.edges.clear();\r\n this.silhouettes.clear();\r\n this.polylines.clear();\r\n this.width = 0;\r\n this.linePixels = LinePixels.Solid;\r\n }\r\n public get isValid(): boolean { return this.edges.isValid || this.silhouettes.isValid || this.polylines.isValid; }\r\n}\r\n\r\nexport function createMeshArgs(mesh: Mesh): MeshArgs | undefined {\r\n if (!mesh.triangles || mesh.triangles.isEmpty || mesh.points.length === 0)\r\n return undefined;\r\n\r\n const texture = mesh.displayParams.textureMapping?.texture;\r\n const useConstantLod = mesh.displayParams.textureMapping?.params?.useConstantLod;\r\n const constantLodParams = mesh.displayParams.textureMapping?.params?.constantLodParams;\r\n const textureMapping = texture && mesh.uvParams.length > 0 ? { texture, uvParams: mesh.uvParams, useConstantLod, constantLodParams } : undefined;\r\n\r\n const colors = new ColorIndex();\r\n mesh.colorMap.toColorIndex(colors, mesh.colors);\r\n\r\n const features = new FeatureIndex();\r\n mesh.toFeatureIndex(features);\r\n\r\n let edges;\r\n if (mesh.edges) {\r\n edges = new MeshArgsEdges();\r\n edges.width = mesh.edges.appearance?.width ?? mesh.displayParams.width;\r\n edges.linePixels = mesh.edges.appearance?.linePixels ?? mesh.displayParams.linePixels;\r\n edges.edges.init(mesh.edges);\r\n edges.silhouettes.init(mesh.edges);\r\n edges.color = mesh.edges.appearance?.color;\r\n\r\n edges.polylines.init(mesh.edges.polylineGroups);\r\n }\r\n\r\n return {\r\n vertIndices: mesh.triangles.indices,\r\n points: mesh.points,\r\n normals: !mesh.displayParams.ignoreLighting && mesh.normals.length > 0 ? mesh.normals : undefined,\r\n textureMapping,\r\n colors,\r\n features,\r\n material: mesh.displayParams.material,\r\n fillFlags: mesh.displayParams.fillFlags,\r\n isPlanar: mesh.isPlanar,\r\n is2d: mesh.is2d,\r\n hasBakedLighting: true === mesh.hasBakedLighting,\r\n isVolumeClassifier: true === mesh.isVolumeClassifier,\r\n edges,\r\n auxChannels: mesh.auxChannels,\r\n };\r\n}\r\n\r\nexport class Mesh {\r\n private readonly _data: TriangleList | MeshPolylineList;\r\n public readonly points: MeshPointList;\r\n public readonly normals: OctEncodedNormal[] = [];\r\n public readonly uvParams: Point2d[] = [];\r\n public readonly colorMap: ColorMap = new ColorMap(); // used to be called ColorTable\r\n public colors: number[] = [];\r\n public cumulativeDistances?: Float32Array;\r\n public edges?: MeshEdges;\r\n public readonly features?: Mesh.Features;\r\n public readonly type: MeshPrimitiveType;\r\n public readonly is2d: boolean;\r\n public readonly isPlanar: boolean;\r\n public readonly hasBakedLighting: boolean;\r\n public readonly isVolumeClassifier: boolean;\r\n public displayParams: DisplayParams;\r\n private _auxChannels?: AuxChannel[];\r\n\r\n private constructor(props: Mesh.Props) {\r\n const { displayParams, features, type, range, is2d, isPlanar } = props;\r\n this._data = MeshPrimitiveType.Mesh === type ? new TriangleList() : [];\r\n this.displayParams = displayParams;\r\n this.features = features ? new Mesh.Features(features) : undefined;\r\n this.type = type;\r\n this.is2d = is2d;\r\n this.isPlanar = isPlanar;\r\n this.hasBakedLighting = (true === props.hasBakedLighting);\r\n this.isVolumeClassifier = (true === props.isVolumeClassifier);\r\n if (props.quantizePositions) {\r\n this.points = new QPoint3dList(QParams3d.fromRange(range));\r\n } else {\r\n const points = [] as unknown as Point3dList;\r\n points.range = range;\r\n const center = range.center;\r\n points.add = (pt: Point3d) => {\r\n // assert(range.containsPoint(pt)); rounding error triggers this sometimes...\r\n points.push(pt.minus(center));\r\n };\r\n this.points = points;\r\n }\r\n }\r\n\r\n public static create(props: Mesh.Props): Mesh { return new Mesh(props); }\r\n\r\n public get triangles(): TriangleList | undefined {\r\n return MeshPrimitiveType.Mesh === this.type ? this._data as TriangleList : undefined;\r\n }\r\n\r\n public get polylines(): MeshPolylineList | undefined {\r\n return MeshPrimitiveType.Mesh !== this.type ? this._data as MeshPolylineList : undefined;\r\n }\r\n\r\n public get auxChannels(): ReadonlyArray<AuxChannel> | undefined {\r\n return this._auxChannels;\r\n }\r\n\r\n public addAuxChannels(channels: ReadonlyArray<AuxChannel>, srcIndex: number): void {\r\n // The native version of this function appears to assume that all polyfaces added to the Mesh will have\r\n // the same number + type of aux channels.\r\n // ###TODO We should really produce a separate Mesh for each unique combination. For now just bail on mismatch.\r\n if (this._auxChannels) {\r\n if (this._auxChannels.length !== channels.length)\r\n return;\r\n\r\n for (let i = 0; i < channels.length; i++) {\r\n const src = channels[i];\r\n const dst = this._auxChannels[i];\r\n if (src.dataType !== dst.dataType || src.name !== dst.name || src.inputName !== dst.inputName)\r\n return;\r\n }\r\n }\r\n\r\n if (!this._auxChannels) {\r\n // Copy the channels, leaving each AuxData's values array empty.\r\n this._auxChannels = channels.map((x) => new AuxChannel(x.data.map((y) => new AuxChannelData(y.input, [])), x.dataType, x.name, x.inputName));\r\n }\r\n\r\n // Append the value at srcIndex from each source channel's data to our channels.\r\n for (let channelIndex = 0; channelIndex < channels.length; channelIndex++) {\r\n const srcChannel = channels[channelIndex];\r\n const dstChannel = this._auxChannels[channelIndex];\r\n const dstIndex = dstChannel.valueCount;\r\n for (let dataIndex = 0; dataIndex < srcChannel.data.length; dataIndex++) {\r\n const dstData = dstChannel.data[dataIndex];\r\n dstData.copyValues(srcChannel.data[dataIndex], dstIndex, srcIndex, dstChannel.entriesPerValue);\r\n }\r\n }\r\n }\r\n\r\n public toFeatureIndex(index: FeatureIndex): void {\r\n if (undefined !== this.features)\r\n this.features.toFeatureIndex(index);\r\n }\r\n\r\n public toMeshArgs(): MeshArgs | undefined {\r\n return createMeshArgs(this);\r\n }\r\n\r\n public toPolylineArgs(): PolylineArgs | undefined {\r\n return createPolylineArgs(this);\r\n }\r\n\r\n public addPolyline(poly: MeshPolyline): void {\r\n const { type, polylines } = this;\r\n\r\n assert(MeshPrimitiveType.Polyline === type || MeshPrimitiveType.Point === type);\r\n assert(undefined !== polylines);\r\n\r\n if (MeshPrimitiveType.Polyline === type && poly.indices.length < 2)\r\n return;\r\n\r\n if (undefined !== polylines)\r\n polylines.push(poly);\r\n }\r\n\r\n public addTriangle(triangle: Triangle): void {\r\n const { triangles, type } = this;\r\n\r\n assert(MeshPrimitiveType.Mesh === type);\r\n assert(undefined !== triangles);\r\n\r\n if (undefined !== triangles)\r\n triangles.addTriangle(triangle);\r\n }\r\n\r\n public addVertex(props: VertexKeyProps): number {\r\n const { feature, position, normal, uvParam, fillColor } = props;\r\n\r\n this.points.add(position);\r\n\r\n if (undefined !== normal)\r\n this.normals.push(normal);\r\n\r\n if (undefined !== uvParam)\r\n this.uvParams.push(uvParam);\r\n\r\n if (feature) {\r\n assert(undefined !== this.features);\r\n this.features.add(feature, this.points.length);\r\n }\r\n\r\n // Don't allocate color indices until we have non-uniform colors\r\n if (0 === this.colorMap.length) {\r\n this.colorMap.insert(fillColor);\r\n assert(this.colorMap.isUniform);\r\n assert(0 === this.colorMap.indexOf(fillColor));\r\n } else if (!this.colorMap.isUniform || !this.colorMap.hasColor(fillColor)) {\r\n // Back-fill uniform value (index=0) for existing vertices if previously uniform\r\n if (0 === this.colors.length)\r\n this.colors.length = this.points.length - 1;\r\n\r\n this.colors.push(this.colorMap.insert(fillColor));\r\n assert(!this.colorMap.isUniform);\r\n }\r\n\r\n return this.points.length - 1;\r\n }\r\n}\r\n\r\nexport namespace Mesh {\r\n export class Features {\r\n public readonly table: FeatureTable;\r\n public indices: number[] = [];\r\n public uniform = 0;\r\n public initialized = false;\r\n\r\n public constructor(table: FeatureTable) { this.table = table; }\r\n\r\n public add(feat: Feature, numVerts: number): void {\r\n const index = this.table.insert(feat);\r\n if (!this.initialized) {\r\n // First feature - uniform.\r\n this.uniform = index;\r\n this.initialized = true;\r\n } else if (0 < this.indices.length) {\r\n // Already non-uniform\r\n this.indices.push(index);\r\n } else {\r\n // Second feature - back-fill uniform for existing verts\r\n while (this.indices.length < numVerts - 1)\r\n this.indices.push(this.uniform);\r\n\r\n this.indices.push(index);\r\n }\r\n }\r\n\r\n public setIndices(indices: number[]) {\r\n this.indices.length = 0;\r\n this.uniform = 0;\r\n this.initialized = 0 < indices.length;\r\n\r\n assert(0 < indices.length);\r\n if (1 === indices.length)\r\n this.uniform = indices[0];\r\n else if (1 < indices.length)\r\n this.indices = indices;\r\n }\r\n\r\n public toFeatureIndex(output?: FeatureIndex): FeatureIndex {\r\n const index = output ?? new FeatureIndex();\r\n if (!this.initialized) {\r\n index.type = FeatureIndexType.Empty;\r\n } else if (this.indices.length === 0) {\r\n index.type = FeatureIndexType.Uniform;\r\n index.featureID = this.uniform;\r\n } else {\r\n index.type = FeatureIndexType.NonUniform;\r\n index.featureIDs = new Uint32Array(this.indices);\r\n }\r\n\r\n return index;\r\n }\r\n }\r\n\r\n export interface Props {\r\n displayParams: DisplayParams;\r\n features?: FeatureTable;\r\n type: MeshPrimitiveType;\r\n range: Range3d;\r\n quantizePositions: boolean;\r\n is2d: boolean;\r\n isPlanar: boolean;\r\n hasBakedLighting?: boolean;\r\n isVolumeClassifier?: boolean;\r\n }\r\n}\r\n\r\nexport class MeshList extends Array<Mesh> {\r\n public readonly features?: FeatureTable;\r\n public readonly range?: Range3d;\r\n constructor(features?: FeatureTable, range?: Range3d) {\r\n super();\r\n this.features = features;\r\n this.range = range;\r\n }\r\n}\r\n"]}
@@ -28,6 +28,7 @@ export interface PolylineParams {
28
28
  type: PolylineTypeFlags;
29
29
  weight: number;
30
30
  linePixels: LinePixels;
31
+ hasCumulativeDistances: boolean;
31
32
  }
32
33
  export declare function tesselatePolylineList(args: {
33
34
  points: MeshArgsPositions;
@@ -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,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"}
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;IACvB,sBAAsB,EAAE,OAAO,CAAC;CACjC;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,CAmBzG;AAED,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAIzE"}
@@ -186,6 +186,7 @@ function createPolylineParams(args, maxDimension) {
186
186
  type: args.flags.type ?? core_common_1.PolylineTypeFlags.Normal,
187
187
  weight: args.width,
188
188
  linePixels: args.linePixels,
189
+ hasCumulativeDistances: (args.cumulativeDistances?.length ?? 0) > 0,
189
190
  };
190
191
  }
191
192
  /** @internal */
@@ -1 +1 @@
1
- {"version":3,"file":"PolylineParams.js","sourceRoot":"","sources":["../../../../../src/common/internal/render/PolylineParams.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { LinePixels, PolylineIndices, PolylineTypeFlags, QPoint3dList } from \"@itwin/core-common\";\r\nimport { VertexIndices } from \"./VertexIndices\";\r\nimport { VertexTable } from \"./VertexTable\";\r\nimport { Point3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { VertexTableBuilder } from \"./VertexTableBuilder\";\r\nimport { MeshArgsPositions } from \"../../../render/MeshArgs\";\r\nimport { PolylineArgs } from \"../../../render/PolylineArgs\";\r\nimport { MeshPolylineList } from \"@itwin/core-common/lib/cjs/internal/RenderMesh\";\r\n\r\n/** Represents a tesselated polyline.\r\n * Given a polyline as a line string, each segment of the line string is triangulated into a quad.\r\n * Based on the angle between two segments, additional joint triangles may be inserted in between to enable smoothly-rounded corners.\r\n * @internal\r\n */\r\nexport interface TesselatedPolyline {\r\n /** 24-bit index of each vertex. */\r\n indices: VertexIndices;\r\n /** 24-bit index of the previous vertex in the polyline. */\r\n prevIndices: VertexIndices;\r\n /** 24-bit index of the next vertex in the polyline, plus 8-bit parameter describing the semantics of this vertex. */\r\n nextIndicesAndParams: Uint8Array;\r\n}\r\n\r\n/** @internal */\r\nexport interface PolylineParams {\r\n vertices: VertexTable;\r\n polyline: TesselatedPolyline;\r\n isPlanar: boolean;\r\n type: PolylineTypeFlags;\r\n weight: number;\r\n linePixels: LinePixels;\r\n}\r\n\r\n/** Parameter associated with each vertex index of a tesselated polyline. */\r\nconst enum PolylineParam { // eslint-disable-line no-restricted-syntax\r\n kNone = 0,\r\n kSquare = 1 * 3,\r\n kMiter = 2 * 3,\r\n kMiterInsideOnly = 3 * 3,\r\n kJointBase = 4 * 3,\r\n kNegatePerp = 8 * 3,\r\n kNegateAlong = 16 * 3,\r\n kNoneAdjustWeight = 32 * 3,\r\n}\r\n\r\nexport function tesselatePolylineList(args: {\r\n points: MeshArgsPositions,\r\n polylines: MeshPolylineList,\r\n width: number,\r\n is2d: boolean,\r\n}): TesselatedPolyline {\r\n const tesselator = PolylineTesselator.create(args);\r\n return tesselator.tesselate();\r\n}\r\n\r\nclass PolylineVertex {\r\n public isSegmentStart: boolean = false;\r\n public isPolylineStartOrEnd: boolean = false;\r\n public vertexIndex: number = 0;\r\n public prevIndex: number = 0;\r\n public nextIndex: number = 0;\r\n\r\n public constructor() { }\r\n\r\n public init(isSegmentStart: boolean, isPolylineStartOrEnd: boolean, vertexIndex: number, prevIndex: number, nextIndex: number) {\r\n this.isSegmentStart = isSegmentStart;\r\n this.isPolylineStartOrEnd = isPolylineStartOrEnd;\r\n this.vertexIndex = vertexIndex;\r\n this.prevIndex = prevIndex;\r\n this.nextIndex = nextIndex;\r\n }\r\n\r\n public computeParam(negatePerp: boolean, adjacentToJoint: boolean = false, joint: boolean = false, noDisplacement: boolean = false): number {\r\n if (joint)\r\n return PolylineParam.kJointBase;\r\n\r\n let param: PolylineParam;\r\n if (noDisplacement)\r\n param = PolylineParam.kNoneAdjustWeight; // prevent getting tossed before width adjustment\r\n else if (adjacentToJoint)\r\n param = PolylineParam.kMiterInsideOnly;\r\n else\r\n param = this.isPolylineStartOrEnd ? PolylineParam.kSquare : PolylineParam.kMiter;\r\n\r\n let adjust = 0;\r\n if (negatePerp)\r\n adjust = PolylineParam.kNegatePerp;\r\n if (!this.isSegmentStart)\r\n adjust += PolylineParam.kNegateAlong;\r\n\r\n return param + adjust;\r\n }\r\n}\r\n\r\nclass PolylineTesselator {\r\n private _polylines: PolylineIndices[];\r\n private _doJoints: boolean;\r\n private _numIndices = 0;\r\n private _vertIndex: number[] = [];\r\n private _prevIndex: number[] = [];\r\n private _nextIndex: number[] = [];\r\n private _nextParam: number[] = [];\r\n private _position: Point3d[] = [];\r\n\r\n public constructor(polylines: PolylineIndices[], points: QPoint3dList | Point3d[], doJointTriangles: boolean) {\r\n this._polylines = polylines;\r\n if (points instanceof QPoint3dList) {\r\n for (const p of points.list)\r\n this._position.push(p.unquantize(points.params));\r\n } else {\r\n this._position = points;\r\n }\r\n\r\n this._doJoints = doJointTriangles;\r\n }\r\n\r\n public static fromPolyline(args: PolylineArgs): PolylineTesselator {\r\n return new PolylineTesselator(args.polylines, args.points, wantJointTriangles(args.width, !!args.flags.is2d));\r\n }\r\n\r\n public static create(args: {\r\n points: MeshArgsPositions,\r\n polylines: MeshPolylineList,\r\n width: number,\r\n is2d: boolean,\r\n }): PolylineTesselator {\r\n return new PolylineTesselator(args.polylines.map((x) => x.indices), args.points, wantJointTriangles(args.width, args.is2d));\r\n }\r\n\r\n public tesselate(): TesselatedPolyline {\r\n this._tesselate();\r\n\r\n const vertIndex = VertexIndices.fromArray(this._vertIndex);\r\n const prevIndex = VertexIndices.fromArray(this._prevIndex);\r\n\r\n const nextIndexAndParam = new Uint8Array(this._numIndices * 4);\r\n for (let i = 0; i < this._numIndices; i++) {\r\n const index = this._nextIndex[i];\r\n const j = i * 4;\r\n VertexIndices.encodeIndex(index, nextIndexAndParam, j);\r\n nextIndexAndParam[j + 3] = this._nextParam[i] & 0x000000ff;\r\n }\r\n\r\n return {\r\n indices: vertIndex,\r\n prevIndices: prevIndex,\r\n nextIndicesAndParams: nextIndexAndParam,\r\n };\r\n }\r\n\r\n private _tesselate() {\r\n const v0 = new PolylineVertex(), v1 = new PolylineVertex();\r\n const maxJointDot = -0.7;\r\n\r\n for (const line of this._polylines) {\r\n if (line.length < 2)\r\n continue;\r\n\r\n const last = line.length - 1;\r\n const isClosed: boolean = line[0] === line[last];\r\n\r\n for (let i = 0; i < last; ++i) {\r\n const idx0 = line[i];\r\n const idx1 = line[i + 1];\r\n const isStart: boolean = (0 === i);\r\n const isEnd: boolean = (last - 1 === i);\r\n const prevIdx0 = isStart ? (isClosed ? line[last - 1] : idx0) : line[i - 1];\r\n const nextIdx1 = isEnd ? (isClosed ? line[1] : idx1) : line[i + 2];\r\n\r\n v0.init(true, isStart && !isClosed, idx0, prevIdx0, idx1);\r\n v1.init(false, isEnd && !isClosed, idx1, nextIdx1, idx0);\r\n\r\n const jointAt0: boolean = this._doJoints && (isClosed || !isStart) && this._dotProduct(v0) > maxJointDot;\r\n const jointAt1: boolean = this._doJoints && (isClosed || !isEnd) && this._dotProduct(v1) > maxJointDot;\r\n\r\n if (jointAt0 || jointAt1) {\r\n this._addVertex(v0, v0.computeParam(true, jointAt0, false, false));\r\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, false));\r\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\r\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\r\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, false));\r\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\r\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\r\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\r\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, false));\r\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, false));\r\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\r\n this._addVertex(v1, v1.computeParam(true, jointAt1, false, false));\r\n\r\n if (jointAt0)\r\n this.addJointTriangles(v0, v0.computeParam(false, true, false, true), v0);\r\n\r\n if (jointAt1)\r\n this.addJointTriangles(v1, v1.computeParam(false, true, false, true), v1);\r\n } else {\r\n this._addVertex(v0, v0.computeParam(true));\r\n this._addVertex(v1, v1.computeParam(false));\r\n this._addVertex(v0, v0.computeParam(false));\r\n this._addVertex(v0, v0.computeParam(false));\r\n this._addVertex(v1, v1.computeParam(false));\r\n this._addVertex(v1, v1.computeParam(true));\r\n }\r\n }\r\n }\r\n }\r\n\r\n private addJointTriangles(v0: PolylineVertex, p0: number, v1: PolylineVertex): void {\r\n const param = v1.computeParam(false, false, true);\r\n for (let i = 0; i < 3; i++) {\r\n this._addVertex(v0, p0);\r\n this._addVertex(v1, param + i + 1);\r\n this._addVertex(v1, param + i);\r\n }\r\n }\r\n\r\n private _dotProduct(v: PolylineVertex): number {\r\n const pos: Point3d = this._position[v.vertexIndex];\r\n const prevDir: Vector3d = Vector3d.createStartEnd(this._position[v.prevIndex], pos);\r\n const nextDir: Vector3d = Vector3d.createStartEnd(this._position[v.nextIndex], pos);\r\n return prevDir.dotProduct(nextDir);\r\n }\r\n\r\n private _addVertex(vertex: PolylineVertex, param: number): void {\r\n this._vertIndex[this._numIndices] = vertex.vertexIndex;\r\n this._prevIndex[this._numIndices] = vertex.prevIndex;\r\n this._nextIndex[this._numIndices] = vertex.nextIndex;\r\n this._nextParam[this._numIndices] = param;\r\n this._numIndices++;\r\n }\r\n}\r\n\r\n/** Strictly for tests. @internal */\r\nexport function tesselatePolyline(polylines: PolylineIndices[], points: QPoint3dList, doJointTriangles: boolean): TesselatedPolyline {\r\n const tesselator = new PolylineTesselator(polylines, points, doJointTriangles);\r\n return tesselator.tesselate();\r\n}\r\n\r\n/** @internal */\r\nexport function createPolylineParams(args: PolylineArgs, maxDimension: number): PolylineParams | undefined {\r\n assert(!args.flags.isDisjoint);\r\n const vertices = VertexTableBuilder.buildFromPolylines(args, maxDimension);\r\n if (undefined === vertices)\r\n return undefined;\r\n\r\n const tesselator = PolylineTesselator.fromPolyline(args);\r\n if (undefined === tesselator)\r\n return undefined;\r\n\r\n return {\r\n vertices,\r\n polyline: tesselator.tesselate(),\r\n isPlanar: !!args.flags.isPlanar,\r\n type: args.flags.type ?? PolylineTypeFlags.Normal,\r\n weight: args.width,\r\n linePixels: args.linePixels,\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function wantJointTriangles(weight: number, is2d: boolean): boolean {\r\n // Joints are incredibly expensive. In 3d, only generate them if the line is sufficiently wide for them to be noticeable.\r\n const jointWidthThreshold = 3;\r\n return is2d || weight >= jointWidthThreshold;\r\n}\r\n"]}
1
+ {"version":3,"file":"PolylineParams.js","sourceRoot":"","sources":["../../../../../src/common/internal/render/PolylineParams.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { LinePixels, PolylineIndices, PolylineTypeFlags, QPoint3dList } from \"@itwin/core-common\";\r\nimport { VertexIndices } from \"./VertexIndices\";\r\nimport { VertexTable } from \"./VertexTable\";\r\nimport { Point3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { VertexTableBuilder } from \"./VertexTableBuilder\";\r\nimport { MeshArgsPositions } from \"../../../render/MeshArgs\";\r\nimport { PolylineArgs } from \"../../../render/PolylineArgs\";\r\nimport { MeshPolylineList } from \"@itwin/core-common/lib/cjs/internal/RenderMesh\";\r\n\r\n/** Represents a tesselated polyline.\r\n * Given a polyline as a line string, each segment of the line string is triangulated into a quad.\r\n * Based on the angle between two segments, additional joint triangles may be inserted in between to enable smoothly-rounded corners.\r\n * @internal\r\n */\r\nexport interface TesselatedPolyline {\r\n /** 24-bit index of each vertex. */\r\n indices: VertexIndices;\r\n /** 24-bit index of the previous vertex in the polyline. */\r\n prevIndices: VertexIndices;\r\n /** 24-bit index of the next vertex in the polyline, plus 8-bit parameter describing the semantics of this vertex. */\r\n nextIndicesAndParams: Uint8Array;\r\n}\r\n\r\n/** @internal */\r\nexport interface PolylineParams {\r\n vertices: VertexTable;\r\n polyline: TesselatedPolyline;\r\n isPlanar: boolean;\r\n type: PolylineTypeFlags;\r\n weight: number;\r\n linePixels: LinePixels;\r\n hasCumulativeDistances: boolean;\r\n}\r\n\r\n/** Parameter associated with each vertex index of a tesselated polyline. */\r\nconst enum PolylineParam { // eslint-disable-line no-restricted-syntax\r\n kNone = 0,\r\n kSquare = 1 * 3,\r\n kMiter = 2 * 3,\r\n kMiterInsideOnly = 3 * 3,\r\n kJointBase = 4 * 3,\r\n kNegatePerp = 8 * 3,\r\n kNegateAlong = 16 * 3,\r\n kNoneAdjustWeight = 32 * 3,\r\n}\r\n\r\nexport function tesselatePolylineList(args: {\r\n points: MeshArgsPositions,\r\n polylines: MeshPolylineList,\r\n width: number,\r\n is2d: boolean,\r\n}): TesselatedPolyline {\r\n const tesselator = PolylineTesselator.create(args);\r\n return tesselator.tesselate();\r\n}\r\n\r\nclass PolylineVertex {\r\n public isSegmentStart: boolean = false;\r\n public isPolylineStartOrEnd: boolean = false;\r\n public vertexIndex: number = 0;\r\n public prevIndex: number = 0;\r\n public nextIndex: number = 0;\r\n\r\n public constructor() { }\r\n\r\n public init(isSegmentStart: boolean, isPolylineStartOrEnd: boolean, vertexIndex: number, prevIndex: number, nextIndex: number) {\r\n this.isSegmentStart = isSegmentStart;\r\n this.isPolylineStartOrEnd = isPolylineStartOrEnd;\r\n this.vertexIndex = vertexIndex;\r\n this.prevIndex = prevIndex;\r\n this.nextIndex = nextIndex;\r\n }\r\n\r\n public computeParam(negatePerp: boolean, adjacentToJoint: boolean = false, joint: boolean = false, noDisplacement: boolean = false): number {\r\n if (joint)\r\n return PolylineParam.kJointBase;\r\n\r\n let param: PolylineParam;\r\n if (noDisplacement)\r\n param = PolylineParam.kNoneAdjustWeight; // prevent getting tossed before width adjustment\r\n else if (adjacentToJoint)\r\n param = PolylineParam.kMiterInsideOnly;\r\n else\r\n param = this.isPolylineStartOrEnd ? PolylineParam.kSquare : PolylineParam.kMiter;\r\n\r\n let adjust = 0;\r\n if (negatePerp)\r\n adjust = PolylineParam.kNegatePerp;\r\n if (!this.isSegmentStart)\r\n adjust += PolylineParam.kNegateAlong;\r\n\r\n return param + adjust;\r\n }\r\n}\r\n\r\nclass PolylineTesselator {\r\n private _polylines: PolylineIndices[];\r\n private _doJoints: boolean;\r\n private _numIndices = 0;\r\n private _vertIndex: number[] = [];\r\n private _prevIndex: number[] = [];\r\n private _nextIndex: number[] = [];\r\n private _nextParam: number[] = [];\r\n private _position: Point3d[] = [];\r\n\r\n public constructor(polylines: PolylineIndices[], points: QPoint3dList | Point3d[], doJointTriangles: boolean) {\r\n this._polylines = polylines;\r\n if (points instanceof QPoint3dList) {\r\n for (const p of points.list)\r\n this._position.push(p.unquantize(points.params));\r\n } else {\r\n this._position = points;\r\n }\r\n\r\n this._doJoints = doJointTriangles;\r\n }\r\n\r\n public static fromPolyline(args: PolylineArgs): PolylineTesselator {\r\n return new PolylineTesselator(args.polylines, args.points, wantJointTriangles(args.width, !!args.flags.is2d));\r\n }\r\n\r\n public static create(args: {\r\n points: MeshArgsPositions,\r\n polylines: MeshPolylineList,\r\n width: number,\r\n is2d: boolean,\r\n }): PolylineTesselator {\r\n return new PolylineTesselator(args.polylines.map((x) => x.indices), args.points, wantJointTriangles(args.width, args.is2d));\r\n }\r\n\r\n public tesselate(): TesselatedPolyline {\r\n this._tesselate();\r\n\r\n const vertIndex = VertexIndices.fromArray(this._vertIndex);\r\n const prevIndex = VertexIndices.fromArray(this._prevIndex);\r\n\r\n const nextIndexAndParam = new Uint8Array(this._numIndices * 4);\r\n for (let i = 0; i < this._numIndices; i++) {\r\n const index = this._nextIndex[i];\r\n const j = i * 4;\r\n VertexIndices.encodeIndex(index, nextIndexAndParam, j);\r\n nextIndexAndParam[j + 3] = this._nextParam[i] & 0x000000ff;\r\n }\r\n\r\n return {\r\n indices: vertIndex,\r\n prevIndices: prevIndex,\r\n nextIndicesAndParams: nextIndexAndParam,\r\n };\r\n }\r\n\r\n private _tesselate() {\r\n const v0 = new PolylineVertex(), v1 = new PolylineVertex();\r\n const maxJointDot = -0.7;\r\n\r\n for (const line of this._polylines) {\r\n if (line.length < 2)\r\n continue;\r\n\r\n const last = line.length - 1;\r\n const isClosed: boolean = line[0] === line[last];\r\n\r\n for (let i = 0; i < last; ++i) {\r\n const idx0 = line[i];\r\n const idx1 = line[i + 1];\r\n const isStart: boolean = (0 === i);\r\n const isEnd: boolean = (last - 1 === i);\r\n const prevIdx0 = isStart ? (isClosed ? line[last - 1] : idx0) : line[i - 1];\r\n const nextIdx1 = isEnd ? (isClosed ? line[1] : idx1) : line[i + 2];\r\n\r\n v0.init(true, isStart && !isClosed, idx0, prevIdx0, idx1);\r\n v1.init(false, isEnd && !isClosed, idx1, nextIdx1, idx0);\r\n\r\n const jointAt0: boolean = this._doJoints && (isClosed || !isStart) && this._dotProduct(v0) > maxJointDot;\r\n const jointAt1: boolean = this._doJoints && (isClosed || !isEnd) && this._dotProduct(v1) > maxJointDot;\r\n\r\n if (jointAt0 || jointAt1) {\r\n this._addVertex(v0, v0.computeParam(true, jointAt0, false, false));\r\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, false));\r\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\r\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\r\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, false));\r\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\r\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\r\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\r\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, false));\r\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, false));\r\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\r\n this._addVertex(v1, v1.computeParam(true, jointAt1, false, false));\r\n\r\n if (jointAt0)\r\n this.addJointTriangles(v0, v0.computeParam(false, true, false, true), v0);\r\n\r\n if (jointAt1)\r\n this.addJointTriangles(v1, v1.computeParam(false, true, false, true), v1);\r\n } else {\r\n this._addVertex(v0, v0.computeParam(true));\r\n this._addVertex(v1, v1.computeParam(false));\r\n this._addVertex(v0, v0.computeParam(false));\r\n this._addVertex(v0, v0.computeParam(false));\r\n this._addVertex(v1, v1.computeParam(false));\r\n this._addVertex(v1, v1.computeParam(true));\r\n }\r\n }\r\n }\r\n }\r\n\r\n private addJointTriangles(v0: PolylineVertex, p0: number, v1: PolylineVertex): void {\r\n const param = v1.computeParam(false, false, true);\r\n for (let i = 0; i < 3; i++) {\r\n this._addVertex(v0, p0);\r\n this._addVertex(v1, param + i + 1);\r\n this._addVertex(v1, param + i);\r\n }\r\n }\r\n\r\n private _dotProduct(v: PolylineVertex): number {\r\n const pos: Point3d = this._position[v.vertexIndex];\r\n const prevDir: Vector3d = Vector3d.createStartEnd(this._position[v.prevIndex], pos);\r\n const nextDir: Vector3d = Vector3d.createStartEnd(this._position[v.nextIndex], pos);\r\n return prevDir.dotProduct(nextDir);\r\n }\r\n\r\n private _addVertex(vertex: PolylineVertex, param: number): void {\r\n this._vertIndex[this._numIndices] = vertex.vertexIndex;\r\n this._prevIndex[this._numIndices] = vertex.prevIndex;\r\n this._nextIndex[this._numIndices] = vertex.nextIndex;\r\n this._nextParam[this._numIndices] = param;\r\n this._numIndices++;\r\n }\r\n}\r\n\r\n/** Strictly for tests. @internal */\r\nexport function tesselatePolyline(polylines: PolylineIndices[], points: QPoint3dList, doJointTriangles: boolean): TesselatedPolyline {\r\n const tesselator = new PolylineTesselator(polylines, points, doJointTriangles);\r\n return tesselator.tesselate();\r\n}\r\n\r\n/** @internal */\r\nexport function createPolylineParams(args: PolylineArgs, maxDimension: number): PolylineParams | undefined {\r\n assert(!args.flags.isDisjoint);\r\n const vertices = VertexTableBuilder.buildFromPolylines(args, maxDimension);\r\n if (undefined === vertices)\r\n return undefined;\r\n\r\n const tesselator = PolylineTesselator.fromPolyline(args);\r\n if (undefined === tesselator)\r\n return undefined;\r\n\r\n return {\r\n vertices,\r\n polyline: tesselator.tesselate(),\r\n isPlanar: !!args.flags.isPlanar,\r\n type: args.flags.type ?? PolylineTypeFlags.Normal,\r\n weight: args.width,\r\n linePixels: args.linePixels,\r\n hasCumulativeDistances: (args.cumulativeDistances?.length ?? 0) > 0,\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function wantJointTriangles(weight: number, is2d: boolean): boolean {\r\n // Joints are incredibly expensive. In 3d, only generate them if the line is sufficiently wide for them to be noticeable.\r\n const jointWidthThreshold = 3;\r\n return is2d || weight >= jointWidthThreshold;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"VertexTableBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/common/internal/render/VertexTableBuilder.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EACK,UAAU,EAAE,YAAY,EAA+B,SAAS,EAAE,SAAS,EACtF,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAqB,WAAW,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,gBAAgB;AAChB,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,GAAG,UAAU,CAwB9G;AAED;;GAEG;AACH,8BAAsB,kBAAkB;IAC/B,IAAI,CAAC,EAAE,UAAU,CAAC;IACzB,OAAO,CAAC,SAAS,CAAa;IAE9B,aAAoB,WAAW,IAAI,MAAM,CAAC;IAC1C,aAAoB,gBAAgB,IAAI,MAAM,CAAC;IAC/C,aAAoB,OAAO,IAAI,SAAS,CAAC;IACzC,aAAoB,wBAAwB,IAAI,OAAO,CAAC;IACxD,IAAW,QAAQ,IAAI,SAAS,GAAG,SAAS,CAAsB;aAClD,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAE9C,gBAAgB,CAAC,UAAU,EAAE,UAAU;IAQ9C,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM;IAMhC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM;IAQ7B,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM;IAI9B,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM;IAK9B,OAAO,CAAC,WAAW;IA6BZ,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,WAAW;WAgCrF,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;CAQpG"}
1
+ {"version":3,"file":"VertexTableBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/common/internal/render/VertexTableBuilder.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EACK,UAAU,EAAE,YAAY,EAA+B,SAAS,EAAE,SAAS,EACtF,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAqB,WAAW,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAuD5D,gBAAgB;AAChB,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,GAAG,UAAU,CAwB9G;AAED;;GAEG;AACH,8BAAsB,kBAAkB;IAC/B,IAAI,CAAC,EAAE,UAAU,CAAC;IACzB,OAAO,CAAC,SAAS,CAAa;IAE9B,aAAoB,WAAW,IAAI,MAAM,CAAC;IAC1C,aAAoB,gBAAgB,IAAI,MAAM,CAAC;IAC/C,aAAoB,OAAO,IAAI,SAAS,CAAC;IACzC,aAAoB,wBAAwB,IAAI,OAAO,CAAC;IACxD,IAAW,QAAQ,IAAI,SAAS,GAAG,SAAS,CAAsB;aAClD,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAE9C,gBAAgB,CAAC,UAAU,EAAE,UAAU;IAQ9C,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM;IAMhC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM;IAQ7B,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM;IAI9B,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM;IAK9B,OAAO,CAAC,WAAW;IA6BZ,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,WAAW;WAgCrF,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;CAQpG"}
@@ -17,6 +17,50 @@ const VertexTable_1 = require("./VertexTable");
17
17
  const SurfaceParams_1 = require("./SurfaceParams");
18
18
  const VertexIndices_1 = require("./VertexIndices");
19
19
  const EdgeParams_1 = require("./EdgeParams");
20
+ const scratchU32 = new Uint32Array(1);
21
+ const scratchF32 = new Float32Array(scratchU32.buffer);
22
+ function floatToUint32(val) {
23
+ scratchF32[0] = val;
24
+ return scratchU32[0];
25
+ }
26
+ function computePolylineCumulativeDistances(args) {
27
+ if (args.cumulativeDistances !== undefined)
28
+ return args.cumulativeDistances;
29
+ const positions = [];
30
+ if (args.points instanceof core_common_1.QPoint3dList) {
31
+ positions.length = args.points.length;
32
+ for (let i = 0; i < args.points.length; i++)
33
+ positions[i] = args.points.list[i].unquantize(args.points.params);
34
+ }
35
+ else {
36
+ positions.length = args.points.length;
37
+ for (let i = 0; i < args.points.length; i++)
38
+ positions[i] = args.points[i];
39
+ }
40
+ const cumulativeDistances = new Float32Array(positions.length);
41
+ cumulativeDistances.fill(Number.NaN);
42
+ for (const line of args.polylines) {
43
+ if (line.length < 2)
44
+ continue;
45
+ let dist = 0.0;
46
+ for (let i = 0; i < line.length; i++) {
47
+ const idx = line[i];
48
+ if (i > 0) {
49
+ const p0 = positions[line[i - 1]];
50
+ const p1 = positions[idx];
51
+ dist += p0.distance(p1);
52
+ }
53
+ // Preserve the first assignment if a vertex is shared across lines.
54
+ if (Number.isNaN(cumulativeDistances[idx]))
55
+ cumulativeDistances[idx] = dist;
56
+ }
57
+ }
58
+ for (let i = 0; i < cumulativeDistances.length; i++) {
59
+ if (Number.isNaN(cumulativeDistances[i]))
60
+ cumulativeDistances[i] = 0.0;
61
+ }
62
+ return cumulativeDistances;
63
+ }
20
64
  /** @internal */
21
65
  function createMeshParams(args, maxDimension, enableIndexedEdges) {
22
66
  const builder = createMeshBuilder(args);
@@ -188,6 +232,23 @@ var Quantized;
188
232
  }
189
233
  }
190
234
  Quantized.SimpleBuilder = SimpleBuilder;
235
+ class PolylineBuilder extends SimpleBuilder {
236
+ _cumDist;
237
+ constructor(args) {
238
+ super(args);
239
+ this._cumDist = computePolylineCumulativeDistances(args);
240
+ }
241
+ get numRgbaPerVertex() { return 4; }
242
+ appendVertex(vertIndex) {
243
+ super.appendVertex(vertIndex);
244
+ this.appendCumulativeDistance(vertIndex);
245
+ }
246
+ appendCumulativeDistance(vertIndex) {
247
+ const dist = vertIndex < this._cumDist.length ? this._cumDist[vertIndex] : 0.0;
248
+ this.append32(floatToUint32(dist));
249
+ }
250
+ }
251
+ Quantized.PolylineBuilder = PolylineBuilder;
191
252
  /** Supplies vertex data from a MeshArgs. */
192
253
  class MeshBuilder extends SimpleBuilder {
193
254
  type;
@@ -366,6 +427,23 @@ var Unquantized;
366
427
  }
367
428
  }
368
429
  Unquantized.SimpleBuilder = SimpleBuilder;
430
+ class PolylineBuilder extends SimpleBuilder {
431
+ _cumDist;
432
+ constructor(args) {
433
+ super(args);
434
+ this._cumDist = computePolylineCumulativeDistances(args);
435
+ }
436
+ get numRgbaPerVertex() { return 6; }
437
+ appendVertex(vertIndex) {
438
+ super.appendVertex(vertIndex);
439
+ this.appendCumulativeDistance(vertIndex);
440
+ }
441
+ appendCumulativeDistance(vertIndex) {
442
+ const dist = vertIndex < this._cumDist.length ? this._cumDist[vertIndex] : 0.0;
443
+ this.append32(floatToUint32(dist));
444
+ }
445
+ }
446
+ Unquantized.PolylineBuilder = PolylineBuilder;
369
447
  class MeshBuilder extends SimpleBuilder {
370
448
  type;
371
449
  constructor(args, type) {
@@ -456,9 +534,14 @@ function createMeshBuilder(args) {
456
534
  return Unquantized.MeshBuilder.create(args);
457
535
  }
458
536
  function createPolylineBuilder(args) {
459
- if (args.points instanceof core_common_1.QPoint3dList)
460
- return new Quantized.SimpleBuilder(args);
461
- else
462
- return new Unquantized.SimpleBuilder(args);
537
+ const quantized = args.points instanceof core_common_1.QPoint3dList;
538
+ if (args.flags.isDisjoint) {
539
+ return quantized
540
+ ? new Quantized.SimpleBuilder(args)
541
+ : new Unquantized.SimpleBuilder(args);
542
+ }
543
+ return quantized
544
+ ? new Quantized.PolylineBuilder(args)
545
+ : new Unquantized.PolylineBuilder(args);
463
546
  }
464
547
  //# sourceMappingURL=VertexTableBuilder.js.map