@miris-inc/core 0.0.8-91608f2 → 0.0.8-9249a0d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AquaApi.wasm +0 -0
- package/dist/aqua-parser.wasm +0 -0
- package/dist/core.d.ts +128 -11
- package/dist/core.js +430 -71
- package/dist/core.prod.js +1 -1
- package/dist/core.standalone.js +952 -573
- package/dist/core.standalone.prod.js +1 -1
- package/dist/webshark.d.ts +321 -0
- package/dist/webshark.js +2 -0
- package/dist/webshark.wasm +0 -0
- package/package.json +5 -1
package/dist/AquaApi.wasm
CHANGED
|
Binary file
|
package/dist/aqua-parser.wasm
CHANGED
|
Binary file
|
package/dist/core.d.ts
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
|
+
export declare const AssetFormat: {
|
|
2
|
+
readonly GaussianSplats: 1;
|
|
3
|
+
readonly GES: 2;
|
|
4
|
+
};
|
|
5
|
+
|
|
1
6
|
declare interface AttributeInfo extends EmbindObject {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
readonly
|
|
5
|
-
readonly
|
|
7
|
+
// Logical elements from the drop metadata: splats for a per-splat attribute, records for a
|
|
8
|
+
// per-surfel one. Not necessarily dataSizeBytes / bytesPerElement.
|
|
9
|
+
readonly elementCount: number;
|
|
10
|
+
readonly dataSizeBytes: number;
|
|
6
11
|
readonly clientSideId: bigint;
|
|
12
|
+
// An embind CompressionType value, compared by identity against MainModule.CompressionType
|
|
13
|
+
readonly compressionType: unknown;
|
|
14
|
+
readonly minValue: { x: number; y: number; z: number; w: number };
|
|
7
15
|
readonly maxValue: { x: number; y: number; z: number };
|
|
8
16
|
}
|
|
9
17
|
|
|
@@ -24,6 +32,15 @@ export declare class AttributeNames {
|
|
|
24
32
|
static readonly SHARK_SPHERICAL_HARMONICS: string;
|
|
25
33
|
static readonly COLOR: string;
|
|
26
34
|
static readonly OCTANT_OFFSETS: string;
|
|
35
|
+
static readonly SURFEL_OCTANT_OFFSETS: string;
|
|
36
|
+
static readonly SURFEL_COUNT: string;
|
|
37
|
+
static readonly SURFEL_OWNER_GROUPS: string;
|
|
38
|
+
static readonly OCTANT_CELL: string;
|
|
39
|
+
static readonly REFLECTANCE_DATA_V1: string;
|
|
40
|
+
static readonly REFLECTANCE_DATA_V2: string;
|
|
41
|
+
static readonly GLASS_MESH_GEOMETRY: string;
|
|
42
|
+
static readonly GLASS_MESH_PANELS: string;
|
|
43
|
+
static readonly MOD_DEPTH: string;
|
|
27
44
|
}
|
|
28
45
|
|
|
29
46
|
declare type CachedAttribute = {
|
|
@@ -96,6 +113,7 @@ declare class Client {
|
|
|
96
113
|
getSceneMetadata(...args: ClientMethodParameters["getSceneMetadata"]): number;
|
|
97
114
|
getSceneObjectParent(...args: ClientMethodParameters["getSceneObjectParent"]): number;
|
|
98
115
|
getSceneObjectType(...args: ClientMethodParameters["getSceneObjectType"]): SceneObjectType;
|
|
116
|
+
getStreamStatus(...args: ClientMethodParameters["getStreamStatus"]): StreamStatus;
|
|
99
117
|
getDrawnOctantMask(...args: ClientMethodParameters["getDrawnOctantMask"]): number;
|
|
100
118
|
getLocalTransform(...args: ClientMethodParameters["getLocalTransform"]): AquaStatus;
|
|
101
119
|
getWorldTransform(...args: ClientMethodParameters["getWorldTransform"]): AquaStatus;
|
|
@@ -112,6 +130,8 @@ declare class Client {
|
|
|
112
130
|
hasFeature(...args: ClientMethodParameters["hasFeature"]): boolean;
|
|
113
131
|
getFeatureVersion(...args: ClientMethodParameters["getFeatureVersion"]): number;
|
|
114
132
|
getFeatureState(...args: ClientMethodParameters["getFeatureState"]): number;
|
|
133
|
+
getAssetFormatVersion(...args: ClientMethodParameters["getAssetFormatVersion"]): number;
|
|
134
|
+
getDrMapLadderRoughnessLevels(...args: ClientMethodParameters["getDrMapLadderRoughnessLevels"]): number[];
|
|
115
135
|
getName(...args: ClientMethodParameters["getName"]): string;
|
|
116
136
|
setVariantSelection(...args: ClientMethodParameters["setVariantSelection"]): AquaStatus;
|
|
117
137
|
takeAttribute(...args: ClientMethodParameters["takeAttribute"]): AquaStatus;
|
|
@@ -119,7 +139,6 @@ declare class Client {
|
|
|
119
139
|
takeRenderRequired(...args: ClientMethodParameters["takeRenderRequired"]): boolean;
|
|
120
140
|
unlockScene(...args: ClientMethodParameters["unlockScene"]): boolean;
|
|
121
141
|
updateSceneExecution(...args: ClientMethodParameters["updateSceneExecution"]): AquaStatus;
|
|
122
|
-
recordFrameTime(...args: ClientMethodParameters["recordFrameTime"]): AquaStatus;
|
|
123
142
|
}
|
|
124
143
|
|
|
125
144
|
declare type ClientInit = {
|
|
@@ -178,11 +197,23 @@ declare class Engine {
|
|
|
178
197
|
readonly Loaded: 2;
|
|
179
198
|
readonly Failed: 3;
|
|
180
199
|
};
|
|
200
|
+
static StreamStatus: {
|
|
201
|
+
readonly Unknown: 0;
|
|
202
|
+
readonly Resolving: 1;
|
|
203
|
+
readonly Loading: 2;
|
|
204
|
+
readonly Ready: 3;
|
|
205
|
+
readonly Failed: 4;
|
|
206
|
+
};
|
|
181
207
|
readonly ready: Promise<this>;
|
|
182
208
|
readonly pending: boolean;
|
|
183
209
|
get module(): MainModule;
|
|
184
210
|
constructor(moduleOptions?: Record<string, unknown>);
|
|
185
211
|
get AttributeInfo(): new () => AttributeInfo;
|
|
212
|
+
get CompressionType(): {
|
|
213
|
+
SHARK_ELLIPSOID_COMPRESSED: unknown;
|
|
214
|
+
SHARK_ELLIPSOID_COMPRESSED_ROOT_RELATIVE: unknown;
|
|
215
|
+
SHARK_ELLIPSOID_COMPRESSED_ROOT_RELATIVE_V2: unknown;
|
|
216
|
+
};
|
|
186
217
|
get Handedness(): {
|
|
187
218
|
Right: number;
|
|
188
219
|
Left: number;
|
|
@@ -229,8 +260,8 @@ declare class Engine {
|
|
|
229
260
|
attributeName: string,
|
|
230
261
|
attributeInfo: AttributeInfo
|
|
231
262
|
]): AquaStatus;
|
|
232
|
-
getDefaultCameraId(...args: [handle: AquaClientHandle]): number;
|
|
233
|
-
getViewingVolumeId(...args: [handle: AquaClientHandle]): number;
|
|
263
|
+
getDefaultCameraId(...args: [handle: AquaClientHandle, streamObjectId: number]): number;
|
|
264
|
+
getViewingVolumeId(...args: [handle: AquaClientHandle, streamObjectId: number]): number;
|
|
234
265
|
getLocalBoundingBox(...args: [handle: AquaClientHandle, sceneObjectId: number, boxData: number]): AquaStatus;
|
|
235
266
|
getWorldBoundingBox(...args: [handle: AquaClientHandle, sceneObjectId: number, boxData: number]): AquaStatus;
|
|
236
267
|
getLodIndex(...args: [handle: AquaClientHandle, sceneObjectId: number]): number;
|
|
@@ -238,6 +269,7 @@ declare class Engine {
|
|
|
238
269
|
getSceneChangesCounts(...args: [handle: AquaClientHandle, sceneChangeIds: SceneChangeIds]): void;
|
|
239
270
|
getSceneMetadata(...args: [handle: AquaClientHandle, metadata: SceneMetadata]): number;
|
|
240
271
|
getSceneObjectParent(...args: [handle: AquaClientHandle, sceneObjectId: number]): number;
|
|
272
|
+
getStreamStatus(...args: [handle: AquaClientHandle, streamObjectId: number]): StreamStatus;
|
|
241
273
|
getSceneObjectType(...args: [handle: AquaClientHandle, sceneObjectId: number]): SceneObjectType;
|
|
242
274
|
getLocalTransform(...args: [
|
|
243
275
|
handle: AquaClientHandle,
|
|
@@ -290,6 +322,7 @@ declare class Engine {
|
|
|
290
322
|
viewportHeightPixels: number
|
|
291
323
|
]): AquaStatus;
|
|
292
324
|
setMaxCacheSize(...args: [maxSizeBytes: number]): void;
|
|
325
|
+
setPreferSharkEncodingProfiles(...args: [preferShark: boolean]): void;
|
|
293
326
|
setSceneObjectTransform(...args: [
|
|
294
327
|
handle: AquaClientHandle,
|
|
295
328
|
sceneObjectId: number,
|
|
@@ -298,6 +331,8 @@ declare class Engine {
|
|
|
298
331
|
hasFeature(...args: [handle: AquaClientHandle, sceneObjectId: number, feature: number]): boolean;
|
|
299
332
|
getFeatureVersion(...args: [handle: AquaClientHandle, sceneObjectId: number, feature: number]): number;
|
|
300
333
|
getFeatureState(...args: [handle: AquaClientHandle, sceneObjectId: number, feature: number]): number;
|
|
334
|
+
getDrMapLadderRoughnessLevels(...args: [handle: AquaClientHandle, sceneObjectId: number]): number[];
|
|
335
|
+
getAssetFormatVersion(...args: [handle: AquaClientHandle, sceneObjectId: number]): number;
|
|
301
336
|
getName(...args: [handle: AquaClientHandle, sceneObjectId: number]): string;
|
|
302
337
|
setVariantSelection(...args: [handle: AquaClientHandle, sceneObjectId: number]): AquaStatus;
|
|
303
338
|
takeAttribute(...args: [
|
|
@@ -310,8 +345,15 @@ declare class Engine {
|
|
|
310
345
|
getActiveClientSideIdsCheckSum(): number;
|
|
311
346
|
unlockScene(...args: [handle: AquaClientHandle]): boolean;
|
|
312
347
|
updateSceneExecution(...args: [handle: AquaClientHandle]): AquaStatus;
|
|
313
|
-
recordFrameTime(...args: [handle: AquaClientHandle, frameTimeMs: number]): AquaStatus;
|
|
314
348
|
takeRenderRequired(...args: [handle: AquaClientHandle]): boolean;
|
|
349
|
+
/**
|
|
350
|
+
* Advances the runtime by one frame and recomputes the streaming budget. Call once per
|
|
351
|
+
* displayed frame per context, before the per-client updateSceneExecution() calls.
|
|
352
|
+
* `previousFrameTimeMs` is how long the previous frame took; pass 0 when there is no plausible
|
|
353
|
+
* measurement (first frame, or a resume from a stall) and the frame advances without recording
|
|
354
|
+
* one.
|
|
355
|
+
*/
|
|
356
|
+
beginFrame(...args: [contextHandle: AquaContextHandle, previousFrameTimeMs: number]): AquaStatus;
|
|
315
357
|
createDeserializeWorker(_url: string, _workerUrl: string, poolSize: number): boolean;
|
|
316
358
|
cancelRequest(requestIdLow: number, requestIdHigh: number): boolean;
|
|
317
359
|
submitToWorker(requestIdLow: number, requestIdHigh: number, descriptorBuffer: ArrayBuffer, contextPtr: number): boolean;
|
|
@@ -325,6 +367,12 @@ declare type EngineMethodParameters<E extends Engine = Engine> = {
|
|
|
325
367
|
[Key in keyof E]: E[Key] extends (...args: any[]) => any ? Parameters<E[Key]> : never;
|
|
326
368
|
};
|
|
327
369
|
|
|
370
|
+
export declare const HaveData = 2;
|
|
371
|
+
|
|
372
|
+
export declare const HaveMetadata = 1;
|
|
373
|
+
|
|
374
|
+
export declare const HaveNothing = 0;
|
|
375
|
+
|
|
328
376
|
export declare class Lod {
|
|
329
377
|
#private;
|
|
330
378
|
readonly id: LodInit["id"];
|
|
@@ -357,9 +405,15 @@ export declare class Lod {
|
|
|
357
405
|
set _drawnOctantMask(mask: number);
|
|
358
406
|
get _octantOffsets(): Uint32Array<ArrayBuffer> | null;
|
|
359
407
|
get _hasOctantOffsets(): boolean;
|
|
408
|
+
get _surfelOctantOffsets(): Uint32Array<ArrayBuffer> | null;
|
|
409
|
+
get _surfelCount(): number;
|
|
410
|
+
get _surfelOwnerGroups(): Uint32Array<ArrayBuffer> | null;
|
|
411
|
+
get _octantCell(): Uint32Array<ArrayBuffer> | null;
|
|
360
412
|
_readOctantOffsets(engine: Engine): void;
|
|
361
413
|
hasAttribute(attributeName: string): boolean;
|
|
362
414
|
getDataFromAttribute(engine: Engine, attributeName: string, attributeInfo: AttributeInfo): CachedAttribute | null;
|
|
415
|
+
_getRawByteAttribute(engine: Engine, attributeName: string): Uint8Array<ArrayBuffer> | null;
|
|
416
|
+
_getRawByteAttributeWithBounds(engine: Engine, attributeName: string): RawByteAttributeWithBounds | null;
|
|
363
417
|
dispose(): void;
|
|
364
418
|
constructor({ id, modelRoot, lodStore, client }: LodInit);
|
|
365
419
|
}
|
|
@@ -384,6 +438,11 @@ export declare class LodStore {
|
|
|
384
438
|
|
|
385
439
|
declare interface MainModule {
|
|
386
440
|
AttributeInfo: new () => AttributeInfo;
|
|
441
|
+
CompressionType: {
|
|
442
|
+
SHARK_ELLIPSOID_COMPRESSED: unknown;
|
|
443
|
+
SHARK_ELLIPSOID_COMPRESSED_ROOT_RELATIVE: unknown;
|
|
444
|
+
SHARK_ELLIPSOID_COMPRESSED_ROOT_RELATIVE_V2: unknown;
|
|
445
|
+
};
|
|
387
446
|
Handedness: { Right: number; Left: number };
|
|
388
447
|
HEAPF32: Float32Array<ArrayBuffer>;
|
|
389
448
|
HEAPU8: Uint8Array<ArrayBuffer>;
|
|
@@ -420,13 +479,17 @@ declare interface MainModule {
|
|
|
420
479
|
HasFeature(handle: number, sceneObjectId: number, feature: number): boolean;
|
|
421
480
|
GetFeatureVersion(handle: number, sceneObjectId: number, feature: number): number;
|
|
422
481
|
GetFeatureState(handle: number, sceneObjectId: number, feature: number): number;
|
|
482
|
+
GetAssetFormatVersion(handle: number, sceneObjectId: number): number;
|
|
483
|
+
GetDrMapLadderRoughnessLevels(handle: number, sceneObjectId: number): number[];
|
|
423
484
|
SetClientSpatialFormat(handle: number, spatialFormat: SpatialFormat): { value: number };
|
|
424
485
|
SetRuntimeSettings(handle: number, settings: RuntimeSettings): { value: number };
|
|
425
486
|
TakeEvictedClientSideAttributeIds(handle: number): EmbindVector<bigint>;
|
|
426
487
|
GetActiveClientSideIdsCheckSum(): number;
|
|
427
488
|
TakeRenderRequired(handle: number): boolean;
|
|
489
|
+
BeginFrame(contextHandle: number, previousFrameTimeMs: number): number;
|
|
428
490
|
modifiedObjectIdsView(sceneChangeIds: SceneChangeIds): Uint32Array;
|
|
429
491
|
setMaxCacheSize(maxSizeBytes: number): void;
|
|
492
|
+
SetPreferSharkEncodingProfiles(prefer: boolean): void;
|
|
430
493
|
}
|
|
431
494
|
|
|
432
495
|
/**
|
|
@@ -463,13 +526,22 @@ export declare class Miris {
|
|
|
463
526
|
* Why 43? Because the AVP throttles down to 45Hz :(
|
|
464
527
|
*/
|
|
465
528
|
static readonly _XR_TARGET_FRAME_RATE = 43;
|
|
529
|
+
/* Excluded from this release type: _XR_SPLAT_COUNT_BUDGET */
|
|
530
|
+
/* Excluded from this release type: _SHARK_SPLAT_CAPACITY_MOBILE */
|
|
531
|
+
static readonly _SHARK_SPLAT_CAPACITY_DESKTOP = 3000000;
|
|
532
|
+
/* Excluded from this release type: _SHARK_SPLAT_BUDGET_CAP_MOBILE */
|
|
533
|
+
static readonly _SHARK_SPLAT_BUDGET_CAP_DESKTOP = 2500000;
|
|
534
|
+
/* Excluded from this release type: _isMobileDevice */
|
|
535
|
+
/* Excluded from this release type: _sharkSplatCapacity */
|
|
536
|
+
/* Excluded from this release type: _limitSharkSplatCapacity */
|
|
537
|
+
/* Excluded from this release type: _sharkSplatBudgetCap */
|
|
466
538
|
/* Excluded from this release type: _setTargetFrameRate */
|
|
467
539
|
/* Excluded from this release type: _setXRModeActive */
|
|
468
540
|
/* Excluded from this release type: _setSplatCountBudgetOverride */
|
|
469
541
|
/* Excluded from this release type: _update */
|
|
470
542
|
getLocalTransform(client: Client, sceneObjectId: number): Float32Array<ArrayBuffer> | undefined;
|
|
471
543
|
getWorldTransform(client: Client, sceneObjectId: number): Float32Array<ArrayBuffer> | undefined;
|
|
472
|
-
|
|
544
|
+
/* Excluded from this release type: _updateForScene */
|
|
473
545
|
applyChanges(_entries: Change[]): void;
|
|
474
546
|
_computeAdditionalRenderNeeded(): boolean;
|
|
475
547
|
onColorSpaceDetected(_isLinear: boolean): void;
|
|
@@ -498,6 +570,31 @@ export declare type ModelRootInit = {
|
|
|
498
570
|
stream: Stream;
|
|
499
571
|
};
|
|
500
572
|
|
|
573
|
+
/**
|
|
574
|
+
* The byte-exact counterpart of getRawUint32Attribute above: same no-padding, no-takeAttribute
|
|
575
|
+
* contract, returning bytes rather than words.
|
|
576
|
+
*
|
|
577
|
+
* Use this rather than that one wherever the stride is not a whole number of words: the
|
|
578
|
+
* reflectance records' 18- and 26-byte strides are not, and an odd record count would lose that
|
|
579
|
+
* record's last field to dataPtrView's truncation.
|
|
580
|
+
*/
|
|
581
|
+
export declare type RawByteAttributeWithBounds = {
|
|
582
|
+
bytes: Uint8Array<ArrayBuffer>;
|
|
583
|
+
minValue: {
|
|
584
|
+
x: number;
|
|
585
|
+
y: number;
|
|
586
|
+
z: number;
|
|
587
|
+
};
|
|
588
|
+
maxValue: {
|
|
589
|
+
x: number;
|
|
590
|
+
y: number;
|
|
591
|
+
z: number;
|
|
592
|
+
};
|
|
593
|
+
};
|
|
594
|
+
|
|
595
|
+
declare type ReadyState_2 = typeof HaveNothing | typeof HaveMetadata | typeof HaveData;
|
|
596
|
+
export { ReadyState_2 as ReadyState }
|
|
597
|
+
|
|
501
598
|
declare type RequestAnimationFrameFn = ((callback: FrameRequestCallback) => number) | ((callback: XRFrameRequestCallback) => void);
|
|
502
599
|
|
|
503
600
|
declare interface RuntimeSettings extends EmbindObject {
|
|
@@ -506,6 +603,7 @@ declare interface RuntimeSettings extends EmbindObject {
|
|
|
506
603
|
targetFramesPerSecond: number;
|
|
507
604
|
xrModeActive: boolean;
|
|
508
605
|
splatCountBudget: number;
|
|
606
|
+
splatCountBudgetCap: number;
|
|
509
607
|
}
|
|
510
608
|
|
|
511
609
|
export declare class Scene extends EventTarget {
|
|
@@ -517,6 +615,7 @@ export declare class Scene extends EventTarget {
|
|
|
517
615
|
readonly id: number;
|
|
518
616
|
get key(): unknown;
|
|
519
617
|
set key(key: unknown);
|
|
618
|
+
/* Excluded from this release type: _assetFormat */
|
|
520
619
|
get viewerKey(): string | null;
|
|
521
620
|
set viewerKey(viewerKey: string | null);
|
|
522
621
|
get streams(): Set<Stream>;
|
|
@@ -526,22 +625,35 @@ export declare class Scene extends EventTarget {
|
|
|
526
625
|
readonly client: Client;
|
|
527
626
|
readonly handle?: number;
|
|
528
627
|
constructor({ miris, viewerKey }: SceneInit);
|
|
628
|
+
/**
|
|
629
|
+
* Drives a frame and answers whether *this* scene's canvas needs repainting. Call it once per
|
|
630
|
+
* displayed frame from the host's animation loop, and render when it returns true.
|
|
631
|
+
*
|
|
632
|
+
* Every scene on the page calls this from its own loop. The first call in a displayed frame
|
|
633
|
+
* drives one engine tick for all of them; the rest recognise the frame and reuse it.
|
|
634
|
+
*
|
|
635
|
+
* @param ts the host's frame timestamp. Optional - the document timeline supplies one, and it
|
|
636
|
+
* reads the same for every scene in a displayed frame. Pass it when the host runs its own
|
|
637
|
+
* clock, as an immersive XR session does, because XRFrame time is not the document timeline.
|
|
638
|
+
*/
|
|
639
|
+
update(ts?: DOMHighResTimeStamp): boolean;
|
|
529
640
|
dispose(): void;
|
|
530
|
-
/* Excluded from this release type: _getViewingVolumeObb */
|
|
531
641
|
fetchAssets(tags?: string | Iterable<string>): Promise<{
|
|
532
642
|
name: string;
|
|
533
643
|
thumbnailUrl: string;
|
|
534
644
|
uuid: string;
|
|
535
645
|
tags: string[];
|
|
536
646
|
}[]>;
|
|
537
|
-
getDefaultCameraTransform(): Float32Array<ArrayBuffer> | null | undefined;
|
|
538
647
|
add(stream: Stream): void;
|
|
539
648
|
getStreamForId(streamObjectId: number): Stream | undefined;
|
|
540
649
|
getStreamForDescendentId(descendentObjectId: number): Stream | null;
|
|
541
650
|
getModelRootForDescendentId(descendentObjectId: number): ModelRoot | null;
|
|
651
|
+
_recordAssetFormat(modelRoot: ModelRoot, formatVersion: number): void;
|
|
542
652
|
/* Excluded from this release type: _getFeatureMesh */
|
|
543
653
|
/* Excluded from this release type: _getDrMap */
|
|
654
|
+
/* Excluded from this release type: _onDrMapLadder */
|
|
544
655
|
/* Excluded from this release type: _onFeatureData */
|
|
656
|
+
/* Excluded from this release type: _updateStreamStatuses */
|
|
545
657
|
/* Excluded from this release type: _onSceneLoaded */
|
|
546
658
|
delete(stream: Stream): void;
|
|
547
659
|
close(): void;
|
|
@@ -631,6 +743,11 @@ export declare class Stream extends EventTarget {
|
|
|
631
743
|
constructor(options: StreamInit);
|
|
632
744
|
_initStream({ uuid }: StreamInit): void;
|
|
633
745
|
/* Excluded from this release type: _onStreamLoaded */
|
|
746
|
+
getDefaultCameraTransform(): Float32Array<ArrayBuffer> | null | undefined;
|
|
747
|
+
/* Excluded from this release type: _getViewingVolumeObb */
|
|
748
|
+
/** How much of the stream has loaded, as of the last frame. */
|
|
749
|
+
get readyState(): ReadyState_2;
|
|
750
|
+
/* Excluded from this release type: _updateStatus */
|
|
634
751
|
/* Excluded from this release type: _onRootLoaded */
|
|
635
752
|
add(modelRoot: ModelRoot): void;
|
|
636
753
|
end(): void;
|