@itwin/core-frontend 4.4.0-dev.21 → 4.4.0-dev.24

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 (83) hide show
  1. package/lib/cjs/Viewport.d.ts +5 -0
  2. package/lib/cjs/Viewport.d.ts.map +1 -1
  3. package/lib/cjs/Viewport.js +6 -0
  4. package/lib/cjs/Viewport.js.map +1 -1
  5. package/lib/cjs/common/imdl/ImdlModel.d.ts +15 -1
  6. package/lib/cjs/common/imdl/ImdlModel.d.ts.map +1 -1
  7. package/lib/cjs/common/imdl/ImdlModel.js +11 -3
  8. package/lib/cjs/common/imdl/ImdlModel.js.map +1 -1
  9. package/lib/cjs/common/imdl/ParseImdlDocument.d.ts +3 -1
  10. package/lib/cjs/common/imdl/ParseImdlDocument.d.ts.map +1 -1
  11. package/lib/cjs/common/imdl/ParseImdlDocument.js +66 -11
  12. package/lib/cjs/common/imdl/ParseImdlDocument.js.map +1 -1
  13. package/lib/cjs/render/GraphicBranch.d.ts +10 -0
  14. package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
  15. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  16. package/lib/cjs/render/webgl/BranchState.d.ts +2 -0
  17. package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
  18. package/lib/cjs/render/webgl/BranchState.js +2 -0
  19. package/lib/cjs/render/webgl/BranchState.js.map +1 -1
  20. package/lib/cjs/render/webgl/Graphic.d.ts.map +1 -1
  21. package/lib/cjs/render/webgl/Graphic.js +3 -0
  22. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  23. package/lib/cjs/tile/ImdlDecoder.d.ts +7 -1
  24. package/lib/cjs/tile/ImdlDecoder.d.ts.map +1 -1
  25. package/lib/cjs/tile/ImdlDecoder.js.map +1 -1
  26. package/lib/cjs/tile/ImdlGraphicsCreator.d.ts.map +1 -1
  27. package/lib/cjs/tile/ImdlGraphicsCreator.js +28 -17
  28. package/lib/cjs/tile/ImdlGraphicsCreator.js.map +1 -1
  29. package/lib/cjs/tile/ImdlReader.d.ts +2 -1
  30. package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
  31. package/lib/cjs/tile/ImdlReader.js +1 -0
  32. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  33. package/lib/cjs/tile/TileDrawArgs.d.ts +6 -0
  34. package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
  35. package/lib/cjs/tile/TileDrawArgs.js +7 -0
  36. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  37. package/lib/cjs/tile/TileTreeReference.d.ts +2 -0
  38. package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
  39. package/lib/cjs/tile/TileTreeReference.js +5 -0
  40. package/lib/cjs/tile/TileTreeReference.js.map +1 -1
  41. package/lib/esm/Viewport.d.ts +5 -0
  42. package/lib/esm/Viewport.d.ts.map +1 -1
  43. package/lib/esm/Viewport.js +6 -0
  44. package/lib/esm/Viewport.js.map +1 -1
  45. package/lib/esm/common/imdl/ImdlModel.d.ts +15 -1
  46. package/lib/esm/common/imdl/ImdlModel.d.ts.map +1 -1
  47. package/lib/esm/common/imdl/ImdlModel.js +11 -3
  48. package/lib/esm/common/imdl/ImdlModel.js.map +1 -1
  49. package/lib/esm/common/imdl/ParseImdlDocument.d.ts +3 -1
  50. package/lib/esm/common/imdl/ParseImdlDocument.d.ts.map +1 -1
  51. package/lib/esm/common/imdl/ParseImdlDocument.js +67 -12
  52. package/lib/esm/common/imdl/ParseImdlDocument.js.map +1 -1
  53. package/lib/esm/render/GraphicBranch.d.ts +10 -0
  54. package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
  55. package/lib/esm/render/GraphicBranch.js.map +1 -1
  56. package/lib/esm/render/webgl/BranchState.d.ts +2 -0
  57. package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
  58. package/lib/esm/render/webgl/BranchState.js +2 -0
  59. package/lib/esm/render/webgl/BranchState.js.map +1 -1
  60. package/lib/esm/render/webgl/Graphic.d.ts.map +1 -1
  61. package/lib/esm/render/webgl/Graphic.js +3 -0
  62. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  63. package/lib/esm/tile/ImdlDecoder.d.ts +7 -1
  64. package/lib/esm/tile/ImdlDecoder.d.ts.map +1 -1
  65. package/lib/esm/tile/ImdlDecoder.js.map +1 -1
  66. package/lib/esm/tile/ImdlGraphicsCreator.d.ts.map +1 -1
  67. package/lib/esm/tile/ImdlGraphicsCreator.js +28 -17
  68. package/lib/esm/tile/ImdlGraphicsCreator.js.map +1 -1
  69. package/lib/esm/tile/ImdlReader.d.ts +2 -1
  70. package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
  71. package/lib/esm/tile/ImdlReader.js +1 -0
  72. package/lib/esm/tile/ImdlReader.js.map +1 -1
  73. package/lib/esm/tile/TileDrawArgs.d.ts +6 -0
  74. package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
  75. package/lib/esm/tile/TileDrawArgs.js +8 -1
  76. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  77. package/lib/esm/tile/TileTreeReference.d.ts +2 -0
  78. package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
  79. package/lib/esm/tile/TileTreeReference.js +5 -0
  80. package/lib/esm/tile/TileTreeReference.js.map +1 -1
  81. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  82. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  83. package/package.json +19 -18
@@ -140,20 +140,34 @@ export declare namespace ImdlModel {
140
140
  animationNodeId?: never;
141
141
  animationId?: never;
142
142
  layerId?: never;
143
+ groupId?: never;
143
144
  }
144
145
  interface AnimationNode {
145
146
  primitives: NodePrimitive[];
146
147
  animationNodeId: number;
147
148
  animationId?: string;
148
149
  layerId?: never;
150
+ groupId?: never;
149
151
  }
150
152
  interface Layer {
151
153
  primitives: NodePrimitive[];
152
154
  layerId: string;
155
+ groupId?: never;
153
156
  animationNodeId?: never;
154
157
  animationId?: never;
155
158
  }
156
- type Node = BasicNode | AnimationNode | Layer;
159
+ /** Nodes that contain primitives. */
160
+ type PrimitivesNode = BasicNode | AnimationNode | Layer;
161
+ /** A grouping node that contains other nodes. These don't nest. */
162
+ interface GroupNode {
163
+ groupId: number;
164
+ nodes: PrimitivesNode[];
165
+ primitives?: never;
166
+ animationNodeId?: never;
167
+ animationId?: never;
168
+ layerId?: never;
169
+ }
170
+ type Node = PrimitivesNode | GroupNode;
157
171
  interface SingleModelFeatureTable {
158
172
  multiModel: false;
159
173
  data: Uint32Array;
@@ -1 +1 @@
1
- {"version":3,"file":"ImdlModel.d.ts","sourceRoot":"","sources":["../../../../src/common/imdl/ImdlModel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ImdlModel.d.ts","sourceRoot":"","sources":["../../../../src/common/imdl/ImdlModel.ts"],"names":[],"mappings":"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"}
@@ -59,9 +59,17 @@ function collectTransferables(document) {
59
59
  break;
60
60
  }
61
61
  };
62
- for (const node of document.nodes)
63
- for (const primitive of node.primitives)
64
- addPrimitive(primitive);
62
+ for (const node of document.nodes) {
63
+ if (undefined !== node.groupId) {
64
+ for (const primNode of node.nodes)
65
+ for (const primitive of primNode.primitives)
66
+ addPrimitive(primitive);
67
+ }
68
+ else {
69
+ for (const primitive of node.primitives)
70
+ addPrimitive(primitive);
71
+ }
72
+ }
65
73
  for (const primitives of document.patterns.values())
66
74
  for (const primitive of primitives)
67
75
  addPrimitive(primitive);
@@ -1 +1 @@
1
- {"version":3,"file":"ImdlModel.js","sourceRoot":"","sources":["../../../../src/common/imdl/ImdlModel.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 Tiles\r\n */\r\n\r\nimport { UintArray } from \"@itwin/core-bentley\";\r\nimport { LowAndHighXYZ, XYAndZ } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDefProps, FeatureIndexType, FillFlags, Gradient, LinePixels, PolylineTypeFlags, QParams2dProps, QParams3dProps,\r\n} from \"@itwin/core-common\";\r\nimport { EdgeTable } from \"../render/primitives/EdgeParams\";\r\nimport { SurfaceMaterialAtlas, SurfaceType } from \"../render/primitives/SurfaceParams\";\r\nimport { AuxChannelTableProps } from \"../render/primitives/AuxChannelTable\";\r\nimport { ImdlAreaPattern, ImdlDocument } from \"./ImdlSchema\";\r\n\r\n/** Types comprising the parsed representation of an ImdlDocument, produced by [[parseImdlDocument]] and consumed by [[decodeImdlGraphics]].\r\n * All of the types are required to support [structured cloning](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm) so that they\r\n * can be passed between workers and the main JavaScript thread.\r\n * @internal\r\n */\r\nexport namespace ImdlModel {\r\n export interface VertexTable {\r\n data: Uint8Array;\r\n usesUnquantizedPositions?: boolean;\r\n qparams: QParams3dProps;\r\n width: number;\r\n height: number;\r\n hasTranslucency: boolean;\r\n uniformColor?: ColorDefProps;\r\n featureIndexType: FeatureIndexType;\r\n uniformFeatureID?: number;\r\n numVertices: number;\r\n numRgbaPerVertex: number;\r\n uvParams?: QParams2dProps;\r\n }\r\n\r\n export interface PointStringParams {\r\n vertices: VertexTable;\r\n indices: Uint8Array;\r\n weight: number;\r\n }\r\n\r\n export interface TesselatedPolyline {\r\n indices: Uint8Array;\r\n prevIndices: Uint8Array;\r\n nextIndicesAndParams: Uint8Array;\r\n }\r\n\r\n export 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 export interface SegmentEdgeParams {\r\n indices: Uint8Array;\r\n endPointAndQuadIndices: Uint8Array;\r\n }\r\n\r\n export interface SilhouetteParams extends SegmentEdgeParams {\r\n normalPairs: Uint8Array;\r\n }\r\n\r\n export interface IndexedEdgeParams {\r\n indices: Uint8Array;\r\n edges: EdgeTable;\r\n }\r\n\r\n export interface EdgeParams {\r\n weight: number;\r\n linePixels: LinePixels;\r\n segments?: SegmentEdgeParams;\r\n silhouettes?: SilhouetteParams;\r\n polylines?: TesselatedPolyline;\r\n indexed?: IndexedEdgeParams;\r\n }\r\n\r\n export interface SurfaceMaterialParams {\r\n alpha?: number;\r\n diffuse?: {\r\n color?: ColorDefProps;\r\n weight?: number;\r\n };\r\n specular?: {\r\n color?: ColorDefProps;\r\n weight?: number;\r\n exponent?: number;\r\n };\r\n }\r\n\r\n export interface SurfaceRenderMaterial {\r\n isAtlas: false;\r\n material: string | SurfaceMaterialParams;\r\n }\r\n\r\n export type SurfaceMaterial = SurfaceRenderMaterial | SurfaceMaterialAtlas;\r\n\r\n export interface SurfaceParams {\r\n type: SurfaceType;\r\n indices: Uint8Array;\r\n fillFlags: FillFlags;\r\n hasBakedLighting: boolean;\r\n material?: SurfaceMaterial;\r\n textureMapping?: {\r\n texture: string | Gradient.SymbProps;\r\n alwaysDisplayed: boolean;\r\n };\r\n }\r\n\r\n export interface MeshParams {\r\n vertices: VertexTable;\r\n surface: SurfaceParams;\r\n edges?: EdgeParams;\r\n isPlanar: boolean;\r\n auxChannels?: AuxChannelTableProps;\r\n }\r\n\r\n export interface Instances {\r\n type: \"instances\";\r\n count: number;\r\n transforms: Float32Array;\r\n transformCenter: XYAndZ;\r\n featureIds?: Uint8Array;\r\n symbologyOverrides?: Uint8Array;\r\n range?: LowAndHighXYZ;\r\n }\r\n\r\n export interface ViewIndependentOrigin {\r\n type: \"viewIndependentOrigin\";\r\n origin: XYAndZ;\r\n }\r\n\r\n export type PrimitiveModifier = Instances | ViewIndependentOrigin;\r\n\r\n export type Primitive = {\r\n params: MeshParams;\r\n modifier?: PrimitiveModifier;\r\n type: \"mesh\";\r\n } | {\r\n params: PointStringParams;\r\n modifier?: PrimitiveModifier;\r\n type: \"point\";\r\n } | {\r\n params: PolylineParams;\r\n modifier?: PrimitiveModifier;\r\n type: \"polyline\";\r\n };\r\n\r\n export type AreaPatternParams = Omit<ImdlAreaPattern, \"xyOffsets\"> & {\r\n xyOffsets: Float32Array;\r\n };\r\n\r\n export type NodePrimitive = Primitive | {\r\n params: AreaPatternParams;\r\n modifier?: never;\r\n type: \"pattern\";\r\n };\r\n\r\n export interface BasicNode {\r\n primitives: NodePrimitive[];\r\n animationNodeId?: never;\r\n animationId?: never;\r\n layerId?: never;\r\n }\r\n\r\n export interface AnimationNode {\r\n primitives: NodePrimitive[];\r\n animationNodeId: number;\r\n animationId?: string;\r\n layerId?: never;\r\n }\r\n\r\n export interface Layer {\r\n primitives: NodePrimitive[];\r\n layerId: string;\r\n animationNodeId?: never;\r\n animationId?: never;\r\n }\r\n\r\n export type Node = BasicNode | AnimationNode | Layer;\r\n\r\n export interface SingleModelFeatureTable {\r\n multiModel: false;\r\n data: Uint32Array;\r\n numFeatures: number;\r\n animationNodeIds?: UintArray;\r\n numSubCategories?: never;\r\n }\r\n\r\n export interface MultiModelFeatureTable {\r\n multiModel: true;\r\n data: Uint32Array;\r\n numFeatures: number;\r\n numSubCategories: number;\r\n animationNodeIds?: UintArray;\r\n }\r\n\r\n export type FeatureTable = SingleModelFeatureTable | MultiModelFeatureTable;\r\n\r\n export interface Document {\r\n featureTable: FeatureTable;\r\n nodes: Node[];\r\n patterns: Map<string, Primitive[]>;\r\n rtcCenter?: XYAndZ;\r\n binaryData: Uint8Array;\r\n json: ImdlDocument;\r\n }\r\n}\r\n\r\n/** Collect an array of all the [transferable objects](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Transferable_objects)\r\n * within the specified document.\r\n * @internal\r\n */\r\nexport function collectTransferables(document: ImdlModel.Document): Transferable[] {\r\n const xfers = new Set<Transferable>();\r\n const add = (array: UintArray | Float32Array | undefined) => {\r\n if (array)\r\n xfers.add(array.buffer);\r\n };\r\n\r\n add(document.binaryData);\r\n add(document.featureTable.data);\r\n add(document.featureTable.animationNodeIds);\r\n\r\n const addPrimitive = (primitive: ImdlModel.NodePrimitive) => {\r\n if (primitive.type === \"pattern\") {\r\n add(primitive.params.xyOffsets);\r\n return;\r\n }\r\n\r\n add(primitive.params.vertices.data);\r\n if (primitive.modifier?.type === \"instances\") {\r\n add(primitive.modifier.transforms);\r\n add(primitive.modifier.featureIds);\r\n add(primitive.modifier.symbologyOverrides);\r\n }\r\n\r\n switch (primitive.type) {\r\n case \"point\":\r\n add(primitive.params.indices);\r\n break;\r\n case \"polyline\":\r\n add(primitive.params.polyline.indices);\r\n add(primitive.params.polyline.prevIndices);\r\n add(primitive.params.polyline.nextIndicesAndParams);\r\n break;\r\n case \"mesh\":\r\n add(primitive.params.surface.indices);\r\n const edges = primitive.params.edges;\r\n if (edges) {\r\n add(edges.segments?.indices);\r\n add(edges.segments?.endPointAndQuadIndices);\r\n add(edges.silhouettes?.indices);\r\n add(edges.silhouettes?.endPointAndQuadIndices);\r\n add(edges.silhouettes?.normalPairs);\r\n add(edges.polylines?.indices);\r\n add(edges.polylines?.prevIndices);\r\n add(edges.polylines?.nextIndicesAndParams);\r\n add(edges.indexed?.indices);\r\n add(edges.indexed?.edges.data);\r\n }\r\n\r\n break;\r\n }\r\n };\r\n\r\n for (const node of document.nodes)\r\n for (const primitive of node.primitives)\r\n addPrimitive(primitive);\r\n\r\n for (const primitives of document.patterns.values())\r\n for (const primitive of primitives)\r\n addPrimitive(primitive);\r\n\r\n return Array.from(xfers);\r\n}\r\n"]}
1
+ {"version":3,"file":"ImdlModel.js","sourceRoot":"","sources":["../../../../src/common/imdl/ImdlModel.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 Tiles\r\n */\r\n\r\nimport { UintArray } from \"@itwin/core-bentley\";\r\nimport { LowAndHighXYZ, XYAndZ } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDefProps, FeatureIndexType, FillFlags, Gradient, LinePixels, PolylineTypeFlags, QParams2dProps, QParams3dProps,\r\n} from \"@itwin/core-common\";\r\nimport { EdgeTable } from \"../render/primitives/EdgeParams\";\r\nimport { SurfaceMaterialAtlas, SurfaceType } from \"../render/primitives/SurfaceParams\";\r\nimport { AuxChannelTableProps } from \"../render/primitives/AuxChannelTable\";\r\nimport { ImdlAreaPattern, ImdlDocument } from \"./ImdlSchema\";\r\n\r\n/** Types comprising the parsed representation of an ImdlDocument, produced by [[parseImdlDocument]] and consumed by [[decodeImdlGraphics]].\r\n * All of the types are required to support [structured cloning](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm) so that they\r\n * can be passed between workers and the main JavaScript thread.\r\n * @internal\r\n */\r\nexport namespace ImdlModel {\r\n export interface VertexTable {\r\n data: Uint8Array;\r\n usesUnquantizedPositions?: boolean;\r\n qparams: QParams3dProps;\r\n width: number;\r\n height: number;\r\n hasTranslucency: boolean;\r\n uniformColor?: ColorDefProps;\r\n featureIndexType: FeatureIndexType;\r\n uniformFeatureID?: number;\r\n numVertices: number;\r\n numRgbaPerVertex: number;\r\n uvParams?: QParams2dProps;\r\n }\r\n\r\n export interface PointStringParams {\r\n vertices: VertexTable;\r\n indices: Uint8Array;\r\n weight: number;\r\n }\r\n\r\n export interface TesselatedPolyline {\r\n indices: Uint8Array;\r\n prevIndices: Uint8Array;\r\n nextIndicesAndParams: Uint8Array;\r\n }\r\n\r\n export 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 export interface SegmentEdgeParams {\r\n indices: Uint8Array;\r\n endPointAndQuadIndices: Uint8Array;\r\n }\r\n\r\n export interface SilhouetteParams extends SegmentEdgeParams {\r\n normalPairs: Uint8Array;\r\n }\r\n\r\n export interface IndexedEdgeParams {\r\n indices: Uint8Array;\r\n edges: EdgeTable;\r\n }\r\n\r\n export interface EdgeParams {\r\n weight: number;\r\n linePixels: LinePixels;\r\n segments?: SegmentEdgeParams;\r\n silhouettes?: SilhouetteParams;\r\n polylines?: TesselatedPolyline;\r\n indexed?: IndexedEdgeParams;\r\n }\r\n\r\n export interface SurfaceMaterialParams {\r\n alpha?: number;\r\n diffuse?: {\r\n color?: ColorDefProps;\r\n weight?: number;\r\n };\r\n specular?: {\r\n color?: ColorDefProps;\r\n weight?: number;\r\n exponent?: number;\r\n };\r\n }\r\n\r\n export interface SurfaceRenderMaterial {\r\n isAtlas: false;\r\n material: string | SurfaceMaterialParams;\r\n }\r\n\r\n export type SurfaceMaterial = SurfaceRenderMaterial | SurfaceMaterialAtlas;\r\n\r\n export interface SurfaceParams {\r\n type: SurfaceType;\r\n indices: Uint8Array;\r\n fillFlags: FillFlags;\r\n hasBakedLighting: boolean;\r\n material?: SurfaceMaterial;\r\n textureMapping?: {\r\n texture: string | Gradient.SymbProps;\r\n alwaysDisplayed: boolean;\r\n };\r\n }\r\n\r\n export interface MeshParams {\r\n vertices: VertexTable;\r\n surface: SurfaceParams;\r\n edges?: EdgeParams;\r\n isPlanar: boolean;\r\n auxChannels?: AuxChannelTableProps;\r\n }\r\n\r\n export interface Instances {\r\n type: \"instances\";\r\n count: number;\r\n transforms: Float32Array;\r\n transformCenter: XYAndZ;\r\n featureIds?: Uint8Array;\r\n symbologyOverrides?: Uint8Array;\r\n range?: LowAndHighXYZ;\r\n }\r\n\r\n export interface ViewIndependentOrigin {\r\n type: \"viewIndependentOrigin\";\r\n origin: XYAndZ;\r\n }\r\n\r\n export type PrimitiveModifier = Instances | ViewIndependentOrigin;\r\n\r\n export type Primitive = {\r\n params: MeshParams;\r\n modifier?: PrimitiveModifier;\r\n type: \"mesh\";\r\n } | {\r\n params: PointStringParams;\r\n modifier?: PrimitiveModifier;\r\n type: \"point\";\r\n } | {\r\n params: PolylineParams;\r\n modifier?: PrimitiveModifier;\r\n type: \"polyline\";\r\n };\r\n\r\n export type AreaPatternParams = Omit<ImdlAreaPattern, \"xyOffsets\"> & {\r\n xyOffsets: Float32Array;\r\n };\r\n\r\n export type NodePrimitive = Primitive | {\r\n params: AreaPatternParams;\r\n modifier?: never;\r\n type: \"pattern\";\r\n };\r\n\r\n export interface BasicNode {\r\n primitives: NodePrimitive[];\r\n animationNodeId?: never;\r\n animationId?: never;\r\n layerId?: never;\r\n groupId?: never;\r\n }\r\n\r\n export interface AnimationNode {\r\n primitives: NodePrimitive[];\r\n animationNodeId: number;\r\n animationId?: string;\r\n layerId?: never;\r\n groupId?: never;\r\n }\r\n\r\n export interface Layer {\r\n primitives: NodePrimitive[];\r\n layerId: string;\r\n groupId?: never;\r\n animationNodeId?: never;\r\n animationId?: never;\r\n }\r\n\r\n /** Nodes that contain primitives. */\r\n export type PrimitivesNode = BasicNode | AnimationNode | Layer;\r\n\r\n /** A grouping node that contains other nodes. These don't nest. */\r\n export interface GroupNode {\r\n groupId: number;\r\n nodes: PrimitivesNode[];\r\n primitives?: never;\r\n animationNodeId?: never;\r\n animationId?: never;\r\n layerId?: never;\r\n }\r\n\r\n export type Node = PrimitivesNode | GroupNode;\r\n\r\n export interface SingleModelFeatureTable {\r\n multiModel: false;\r\n data: Uint32Array;\r\n numFeatures: number;\r\n animationNodeIds?: UintArray;\r\n numSubCategories?: never;\r\n }\r\n\r\n export interface MultiModelFeatureTable {\r\n multiModel: true;\r\n data: Uint32Array;\r\n numFeatures: number;\r\n numSubCategories: number;\r\n animationNodeIds?: UintArray;\r\n }\r\n\r\n export type FeatureTable = SingleModelFeatureTable | MultiModelFeatureTable;\r\n\r\n export interface Document {\r\n featureTable: FeatureTable;\r\n nodes: Node[];\r\n patterns: Map<string, Primitive[]>;\r\n rtcCenter?: XYAndZ;\r\n binaryData: Uint8Array;\r\n json: ImdlDocument;\r\n }\r\n}\r\n\r\n/** Collect an array of all the [transferable objects](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Transferable_objects)\r\n * within the specified document.\r\n * @internal\r\n */\r\nexport function collectTransferables(document: ImdlModel.Document): Transferable[] {\r\n const xfers = new Set<Transferable>();\r\n const add = (array: UintArray | Float32Array | undefined) => {\r\n if (array)\r\n xfers.add(array.buffer);\r\n };\r\n\r\n add(document.binaryData);\r\n add(document.featureTable.data);\r\n add(document.featureTable.animationNodeIds);\r\n\r\n const addPrimitive = (primitive: ImdlModel.NodePrimitive) => {\r\n if (primitive.type === \"pattern\") {\r\n add(primitive.params.xyOffsets);\r\n return;\r\n }\r\n\r\n add(primitive.params.vertices.data);\r\n if (primitive.modifier?.type === \"instances\") {\r\n add(primitive.modifier.transforms);\r\n add(primitive.modifier.featureIds);\r\n add(primitive.modifier.symbologyOverrides);\r\n }\r\n\r\n switch (primitive.type) {\r\n case \"point\":\r\n add(primitive.params.indices);\r\n break;\r\n case \"polyline\":\r\n add(primitive.params.polyline.indices);\r\n add(primitive.params.polyline.prevIndices);\r\n add(primitive.params.polyline.nextIndicesAndParams);\r\n break;\r\n case \"mesh\":\r\n add(primitive.params.surface.indices);\r\n const edges = primitive.params.edges;\r\n if (edges) {\r\n add(edges.segments?.indices);\r\n add(edges.segments?.endPointAndQuadIndices);\r\n add(edges.silhouettes?.indices);\r\n add(edges.silhouettes?.endPointAndQuadIndices);\r\n add(edges.silhouettes?.normalPairs);\r\n add(edges.polylines?.indices);\r\n add(edges.polylines?.prevIndices);\r\n add(edges.polylines?.nextIndicesAndParams);\r\n add(edges.indexed?.indices);\r\n add(edges.indexed?.edges.data);\r\n }\r\n\r\n break;\r\n }\r\n };\r\n\r\n for (const node of document.nodes) {\r\n if (undefined !== node.groupId) {\r\n for (const primNode of node.nodes)\r\n for (const primitive of primNode.primitives)\r\n addPrimitive(primitive);\r\n } else {\r\n for (const primitive of node.primitives)\r\n addPrimitive(primitive);\r\n }\r\n }\r\n\r\n for (const primitives of document.patterns.values())\r\n for (const primitive of primitives)\r\n addPrimitive(primitive);\r\n\r\n return Array.from(xfers);\r\n}\r\n"]}
@@ -1,7 +1,7 @@
1
1
  /** @packageDocumentation
2
2
  * @module Tiles
3
3
  */
4
- import { Id64String } from "@itwin/core-bentley";
4
+ import { Id64Set, Id64String } from "@itwin/core-bentley";
5
5
  import { RenderFeatureTable, RenderSchedule, TileReadStatus } from "@itwin/core-common";
6
6
  import { ImdlModel as Imdl } from "./ImdlModel";
7
7
  import { EdgeParams } from "../render/primitives/EdgeParams";
@@ -18,9 +18,11 @@ export interface ImdlParserOptions {
18
18
  data: Uint8Array;
19
19
  batchModelId: Id64String;
20
20
  is3d: boolean;
21
+ /** The limit on the width and height of a [[VertexTable]]. */
21
22
  maxVertexTableSize: number;
22
23
  omitEdges?: boolean;
23
24
  createUntransformedRootNode?: boolean;
25
+ modelGroups?: Id64Set[];
24
26
  }
25
27
  /** Arguments provided to [[parseImdlDocument]].
26
28
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"ParseImdlDocument.d.ts","sourceRoot":"","sources":["../../../../src/common/imdl/ParseImdlDocument.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAsB,UAAU,EAA2B,MAAM,qBAAqB,CAAC;AAE9F,OAAO,EAEwD,kBAAkB,EAAkB,cAAc,EACnG,cAAc,EAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,aAAa,CAAC;AAWhD,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAI1D;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,EAAE,UAAU,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAC;CACpC;AAoDD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;AAuG7E,gBAAgB;AAChB,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,GAAG,WAAW,CAOjE;AAWD,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAqBpE;AAs2BD,gBAAgB;AAChB,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,qBAAqB,GAAG,cAAc,CAkBhF;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,GAAG,kBAAkB,CAOrH;AAED,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAAC,QAAQ,GAAG,cAAc,CAyDhG"}
1
+ {"version":3,"file":"ParseImdlDocument.d.ts","sourceRoot":"","sources":["../../../../src/common/imdl/ParseImdlDocument.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAA4B,OAAO,EAAE,UAAU,EAA2B,MAAM,qBAAqB,CAAC;AAE7G,OAAO,EAEwD,kBAAkB,EAAkB,cAAc,EACnG,cAAc,EAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,aAAa,CAAC;AAWhD,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAI1D;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,EAAE,UAAU,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,8DAA8D;IAC9D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2BAA2B,CAAC,EAAE,OAAO,CAAC;IAEtC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAC;CACpC;AAoDD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;AAuG7E,gBAAgB;AAChB,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,GAAG,WAAW,CAOjE;AAWD,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAqBpE;AAy6BD,gBAAgB;AAChB,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,qBAAqB,GAAG,cAAc,CAkBhF;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,GAAG,kBAAkB,CAOrH;AAED,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAAC,QAAQ,GAAG,cAAc,CAyDhG"}
@@ -220,7 +220,8 @@ class Parser {
220
220
  y: this._document.rtcCenter[1] ?? 0,
221
221
  z: this._document.rtcCenter[2] ?? 0,
222
222
  } : undefined;
223
- const nodes = this.parseNodes(featureTable);
223
+ const primitiveNodes = this.parseNodes(featureTable);
224
+ const nodes = this.groupPrimitiveNodes(primitiveNodes, featureTable);
224
225
  return {
225
226
  featureTable,
226
227
  nodes,
@@ -339,8 +340,12 @@ class Parser {
339
340
  const docPrimitives = docMesh.primitives;
340
341
  if (!docPrimitives)
341
342
  return;
343
+ const primitives = docPrimitives.map((x) => this.parseNodePrimitive(x)).filter((x) => x !== undefined);
344
+ if (primitives.length === 0)
345
+ return;
342
346
  const nodesById = new Map();
343
347
  const getNode = (nodeId) => {
348
+ nodeId = nodeId ?? AnimationNodeId_1.AnimationNodeId.Untransformed;
344
349
  let node = nodesById.get(nodeId);
345
350
  if (!node) {
346
351
  node = {
@@ -363,6 +368,9 @@ class Parser {
363
368
  const nodeId = featureTable.getAnimationNodeId(featureIndex);
364
369
  return 0 !== nodeId && discreteNodeIds.has(nodeId) ? nodeId : 0;
365
370
  };
371
+ this.splitPrimitives(primitives, featureTable, computeNodeId, getNode);
372
+ }
373
+ splitPrimitives(primitives, featureTable, computeNodeId, getPrimitivesNode) {
366
374
  const splitArgs = {
367
375
  maxDimension: this._options.maxVertexTableSize,
368
376
  computeNodeId,
@@ -376,15 +384,13 @@ class Parser {
376
384
  const material = (typeof imdl.material === "string") ? this.materialFromJson(imdl.material) : Material.create(toMaterialParams(imdl.material));
377
385
  return material ? { isAtlas: false, material } : undefined;
378
386
  };
379
- for (const docPrimitive of docPrimitives) {
380
- const primitive = this.parseNodePrimitive(docPrimitive);
381
- if (!primitive)
382
- continue;
387
+ for (const primitive of primitives) {
383
388
  switch (primitive.type) {
384
- case "pattern":
385
- // ###TODO animated area patterns
386
- getNode(AnimationNodeId_1.AnimationNodeId.Untransformed).primitives.push(primitive);
389
+ case "pattern": {
390
+ // ###TODO splitting area patterns
391
+ getPrimitivesNode(undefined).primitives.push(primitive);
387
392
  break;
393
+ }
388
394
  case "mesh": {
389
395
  const mesh = primitive.params;
390
396
  const texMap = mesh.surface.textureMapping;
@@ -421,8 +427,9 @@ class Parser {
421
427
  }
422
428
  }
423
429
  (0, core_bentley_1.assert)(p.surface.textureMapping === undefined || p.surface.textureMapping.texture instanceof Texture);
424
- getNode(nodeId).primitives.push({
430
+ getPrimitivesNode(nodeId).primitives.push({
425
431
  type: "mesh",
432
+ modifier: primitive.modifier,
426
433
  params: {
427
434
  vertices: fromVertexTable(p.vertices),
428
435
  surface: {
@@ -450,8 +457,9 @@ class Parser {
450
457
  };
451
458
  const split = (0, VertexTableSplitter_1.splitPointStringParams)({ ...splitArgs, params });
452
459
  for (const [nodeId, p] of split) {
453
- getNode(nodeId).primitives.push({
460
+ getPrimitivesNode(nodeId).primitives.push({
454
461
  type: "point",
462
+ modifier: primitive.modifier,
455
463
  params: {
456
464
  vertices: fromVertexTable(p.vertices),
457
465
  indices: p.indices.data,
@@ -473,8 +481,9 @@ class Parser {
473
481
  };
474
482
  const split = (0, VertexTableSplitter_1.splitPolylineParams)({ ...splitArgs, params });
475
483
  for (const [nodeId, p] of split) {
476
- getNode(nodeId).primitives.push({
484
+ getPrimitivesNode(nodeId).primitives.push({
477
485
  type: "polyline",
486
+ modifier: primitive.modifier,
478
487
  params: {
479
488
  ...p,
480
489
  vertices: fromVertexTable(p.vertices),
@@ -491,6 +500,52 @@ class Parser {
491
500
  }
492
501
  }
493
502
  }
503
+ groupPrimitiveNodes(inputNodes, imdlFeatureTable) {
504
+ const modelGroups = this._options.modelGroups;
505
+ if (!modelGroups?.length)
506
+ return inputNodes;
507
+ const groupNodes = [];
508
+ let orphanNode;
509
+ const getGroupNode = (groupId) => {
510
+ (0, core_bentley_1.assert)(groupId <= modelGroups.length);
511
+ if (groupId === modelGroups.length) {
512
+ // This would happen if:
513
+ // - The tile contains geometry from a model not present in modelGroups (should never occur); or
514
+ // - The tile contains an area pattern (we haven't yet implemented splitting for them).
515
+ // In either case, orphaned geometry will end up getting discarded.
516
+ return orphanNode ?? (orphanNode = { groupId, nodes: [] });
517
+ }
518
+ let groupNode = groupNodes[groupId];
519
+ if (!groupNode)
520
+ groupNodes[groupId] = groupNode = { groupId, nodes: [] };
521
+ return groupNode;
522
+ };
523
+ const featureTable = convertFeatureTable(imdlFeatureTable, this._options.batchModelId);
524
+ const modelIdPair = { lower: 0, upper: 0 };
525
+ const computeNodeId = (featureIndex) => {
526
+ featureTable.getModelIdPair(featureIndex, modelIdPair);
527
+ const modelId = core_bentley_1.Id64.fromUint32PairObject(modelIdPair);
528
+ for (let i = 0; i < modelGroups.length; i++) {
529
+ if (modelGroups[i].has(modelId))
530
+ return i;
531
+ }
532
+ return modelGroups.length;
533
+ };
534
+ for (const inputNode of inputNodes) {
535
+ // Indexed by model group index.
536
+ const splitNodes = [];
537
+ const getSplitNode = (groupIndex) => {
538
+ groupIndex = groupIndex ?? modelGroups.length;
539
+ if (!splitNodes[groupIndex]) {
540
+ const splitNode = splitNodes[groupIndex] = { ...inputNode, primitives: [] };
541
+ getGroupNode(groupIndex).nodes.push(splitNode);
542
+ }
543
+ return splitNodes[groupIndex];
544
+ };
545
+ this.splitPrimitives(inputNode.primitives, featureTable, computeNodeId, getSplitNode);
546
+ }
547
+ return groupNodes.filter((x) => undefined !== x);
548
+ }
494
549
  parseTesselatedPolyline(json) {
495
550
  const indices = this.findBuffer(json.indices);
496
551
  const prevIndices = this.findBuffer(json.prevIndices);