@idetik/core 0.1.1 → 0.2.0

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/index.d.ts CHANGED
@@ -70,14 +70,16 @@ declare class PromiseScheduler {
70
70
  declare const chunkDataTypes: readonly [Int8ArrayConstructor, Int16ArrayConstructor, Int32ArrayConstructor, Uint8ArrayConstructor, Uint16ArrayConstructor, Uint32ArrayConstructor, Float32ArrayConstructor];
71
71
  type ChunkDataConstructor = (typeof chunkDataTypes)[number];
72
72
  type ChunkData = InstanceType<ChunkDataConstructor>;
73
- type Chunk = {
74
- data?: ChunkData;
75
- state: "unloaded" | "queued" | "loading" | "loaded";
76
- lod: number;
73
+ type ChunkViewState = {
77
74
  visible: boolean;
78
75
  prefetch: boolean;
79
76
  priority: number | null;
80
77
  orderKey: number | null;
78
+ };
79
+ type Chunk = {
80
+ data?: ChunkData;
81
+ state: "unloaded" | "queued" | "loading" | "loaded";
82
+ lod: number;
81
83
  shape: {
82
84
  x: number;
83
85
  y: number;
@@ -102,7 +104,7 @@ type Chunk = {
102
104
  y: number;
103
105
  z: number;
104
106
  };
105
- };
107
+ } & ChunkViewState;
106
108
  type SourceDimensionMap = {
107
109
  x: SourceDimension;
108
110
  y: SourceDimension;
@@ -146,6 +148,23 @@ type ChunkLoader = {
146
148
  getAttributes(): ReadonlyArray<LoaderAttributes>;
147
149
  };
148
150
 
151
+ declare class ChunkStore {
152
+ private readonly chunks_;
153
+ private readonly loader_;
154
+ private readonly lowestResLOD_;
155
+ private readonly dimensions_;
156
+ constructor(loader: ChunkLoader);
157
+ getChunksAtTime(timeIndex: number): Chunk[];
158
+ getTimeIndex(sliceCoords: SliceCoordinates): number;
159
+ get lodCount(): number;
160
+ get dimensions(): SourceDimensionMap;
161
+ getLowestResLOD(): number;
162
+ loadChunkData(chunk: Chunk, signal: AbortSignal): Promise<void>;
163
+ private validateXYScaleRatios;
164
+ private getAndValidateTimeDimension;
165
+ private getAndValidateChannelDimension;
166
+ }
167
+
149
168
  declare class Box3 {
150
169
  min: vec3;
151
170
  max: vec3;
@@ -324,112 +343,6 @@ declare abstract class Camera extends RenderableObject {
324
343
  clipToWorld(position: vec3): vec3;
325
344
  }
326
345
 
327
- declare class OrthographicCamera extends Camera {
328
- private width_;
329
- private height_;
330
- private viewportAspectRatio_;
331
- private viewportSize_;
332
- constructor(left: number, right: number, top: number, bottom: number, near?: number, far?: number);
333
- get viewportSize(): [number, number];
334
- setAspectRatio(aspectRatio: number): void;
335
- setFrame(left: number, right: number, bottom: number, top: number): void;
336
- get type(): CameraType;
337
- zoom(factor: number): void;
338
- getWorldViewRect(): Box2;
339
- protected updateProjectionMatrix(): void;
340
- }
341
-
342
- declare const ALL_CATEGORIES: readonly ["fallbackVisible", "prefetchTime", "visibleCurrent", "fallbackBackground", "prefetchSpace"];
343
- type PriorityCategory = (typeof ALL_CATEGORIES)[number];
344
- type ImageSourcePolicyConfig = {
345
- profile?: string;
346
- prefetch: {
347
- x: number;
348
- y: number;
349
- z?: number;
350
- t?: number;
351
- };
352
- priorityOrder: PriorityCategory[];
353
- lod?: {
354
- min?: number;
355
- max?: number;
356
- bias?: number;
357
- };
358
- };
359
- type ImageSourcePolicy = Readonly<{
360
- profile: string;
361
- prefetch: {
362
- x: number;
363
- y: number;
364
- z: number;
365
- t: number;
366
- };
367
- priorityOrder: readonly PriorityCategory[];
368
- priorityMap: Readonly<Record<PriorityCategory, number>>;
369
- lod: {
370
- min: number;
371
- max: number;
372
- bias: number;
373
- };
374
- }>;
375
- declare function createImageSourcePolicy(config: ImageSourcePolicyConfig): ImageSourcePolicy;
376
- declare function createExplorationPolicy(overrides?: Partial<ImageSourcePolicyConfig>): ImageSourcePolicy;
377
- declare function createPlaybackPolicy(overrides?: Partial<ImageSourcePolicyConfig>): ImageSourcePolicy;
378
- declare function createNoPrefetchPolicy(overrides?: Partial<ImageSourcePolicyConfig>): ImageSourcePolicy;
379
-
380
- declare class ChunkManagerSource {
381
- private readonly chunks_;
382
- private readonly loader_;
383
- private readonly lowestResLOD_;
384
- private readonly sliceCoords_;
385
- private readonly dimensions_;
386
- private readonly tIndicesWithQueuedChunks_;
387
- private readonly sourceMaxSquareDistance2D_;
388
- private policy_;
389
- private policyChanged_;
390
- private currentLOD_;
391
- private lastViewBounds2D_;
392
- private lastZBounds_?;
393
- private lastTCoord_?;
394
- constructor(loader: ChunkLoader, sliceCoords: SliceCoordinates, policy: ImageSourcePolicy);
395
- getChunks(): Chunk[];
396
- getChunksAtCurrentTime(): Chunk[];
397
- private getCurrentTimeIndex;
398
- allVisibleLowestLODLoaded(): boolean;
399
- updateAndCollectChunkChanges(lodFactor: number, viewBounds2D: Box2): Chunk[];
400
- get lodCount(): number;
401
- get dimensions(): SourceDimensionMap;
402
- get currentLOD(): number;
403
- setImageSourcePolicy(newPolicy: ImageSourcePolicy, key: symbol): void;
404
- loadChunkData(chunk: Chunk, signal: AbortSignal): Promise<void>;
405
- private setLOD;
406
- private updateAndCollectChunkChangesForCurrentLod;
407
- private disposeStaleTimeChunks;
408
- private updateChunksAtTimeIndex;
409
- private markTimeChunksForPrefetch;
410
- private isChunkChannelInSlice;
411
- private shouldDispose;
412
- private disposeChunk;
413
- private computePriority;
414
- private validateXYScaleRatios;
415
- private getAndValidateTimeDimension;
416
- private getAndValidateChannelDimension;
417
- private isChunkWithinBounds;
418
- private getZBounds;
419
- private viewBounds2DChanged;
420
- private zBoundsChanged;
421
- private getPaddedBounds;
422
- private squareDistance2D;
423
- }
424
-
425
- declare class ChunkManager {
426
- private readonly sources_;
427
- private readonly pendingSources_;
428
- private readonly queue_;
429
- addSource(source: ChunkSource, sliceCoords: SliceCoordinates, policy: ImageSourcePolicy): Promise<ChunkManagerSource>;
430
- update(camera: OrthographicCamera, bufferWidth: number): void;
431
- }
432
-
433
346
  declare const eventTypes: readonly ["pointerdown", "pointermove", "pointerup", "pointercancel", "wheel"];
434
347
  type EventType = (typeof eventTypes)[number];
435
348
  declare class EventContext {
@@ -462,6 +375,9 @@ interface LayerOptions {
462
375
  opacity?: number;
463
376
  blendMode?: blendMode;
464
377
  }
378
+ type RenderContext = {
379
+ viewport: Viewport;
380
+ };
465
381
  declare abstract class Layer {
466
382
  abstract readonly type: string;
467
383
  private objects_;
@@ -473,10 +389,10 @@ declare abstract class Layer {
473
389
  constructor({ transparent, opacity, blendMode, }?: LayerOptions);
474
390
  get opacity(): number;
475
391
  set opacity(value: number);
476
- abstract update(): void;
392
+ abstract update(context?: RenderContext): void;
477
393
  onEvent(_: EventContext): void;
478
394
  onAttached(_context: IdetikContext): Promise<void>;
479
- onDetached(): void;
395
+ onDetached(_context: IdetikContext): void;
480
396
  get objects(): RenderableObject[];
481
397
  get state(): LayerState;
482
398
  addStateChangeCallback(callback: StateChangeCallback): void;
@@ -506,6 +422,21 @@ declare class LayerManager {
506
422
  removeLayersChangeCallback(callback: () => void): void;
507
423
  }
508
424
 
425
+ declare class OrthographicCamera extends Camera {
426
+ private width_;
427
+ private height_;
428
+ private viewportAspectRatio_;
429
+ private viewportSize_;
430
+ constructor(left: number, right: number, top: number, bottom: number, near?: number, far?: number);
431
+ get viewportSize(): [number, number];
432
+ setAspectRatio(aspectRatio: number): void;
433
+ setFrame(left: number, right: number, bottom: number, top: number): void;
434
+ get type(): CameraType;
435
+ zoom(factor: number): void;
436
+ getWorldViewRect(): Box2;
437
+ protected updateProjectionMatrix(): void;
438
+ }
439
+
509
440
  interface CameraControls {
510
441
  onEvent(event: EventContext): void;
511
442
  }
@@ -550,6 +481,91 @@ declare class Viewport {
550
481
  }
551
482
  declare function parseViewportConfigs(viewportConfigs: ViewportConfig[], canvas: HTMLCanvasElement, context: IdetikContext): Viewport[];
552
483
 
484
+ declare const ALL_CATEGORIES: readonly ["fallbackVisible", "prefetchTime", "visibleCurrent", "fallbackBackground", "prefetchSpace"];
485
+ type PriorityCategory = (typeof ALL_CATEGORIES)[number];
486
+ type ImageSourcePolicyConfig = {
487
+ profile?: string;
488
+ prefetch: {
489
+ x: number;
490
+ y: number;
491
+ z?: number;
492
+ t?: number;
493
+ };
494
+ priorityOrder: PriorityCategory[];
495
+ lod?: {
496
+ min?: number;
497
+ max?: number;
498
+ bias?: number;
499
+ };
500
+ };
501
+ type ImageSourcePolicy = Readonly<{
502
+ profile: string;
503
+ prefetch: {
504
+ x: number;
505
+ y: number;
506
+ z: number;
507
+ t: number;
508
+ };
509
+ priorityOrder: readonly PriorityCategory[];
510
+ priorityMap: Readonly<Record<PriorityCategory, number>>;
511
+ lod: {
512
+ min: number;
513
+ max: number;
514
+ bias: number;
515
+ };
516
+ }>;
517
+ declare function createImageSourcePolicy(config: ImageSourcePolicyConfig): ImageSourcePolicy;
518
+ declare function createExplorationPolicy(overrides?: Partial<ImageSourcePolicyConfig>): ImageSourcePolicy;
519
+ declare function createPlaybackPolicy(overrides?: Partial<ImageSourcePolicyConfig>): ImageSourcePolicy;
520
+ declare function createNoPrefetchPolicy(overrides?: Partial<ImageSourcePolicyConfig>): ImageSourcePolicy;
521
+
522
+ declare class ChunkStoreView {
523
+ private readonly store_;
524
+ private policy_;
525
+ private policyChanged_;
526
+ private currentLOD_;
527
+ private lastViewBounds2D_;
528
+ private lastZBounds_?;
529
+ private lastTCoord_?;
530
+ private sourceMaxSquareDistance2D_;
531
+ private readonly chunkViewStates_;
532
+ constructor(store: ChunkStore, policy: ImageSourcePolicy);
533
+ get store(): ChunkStore;
534
+ get chunkViewStates(): ReadonlyMap<Chunk, ChunkViewState>;
535
+ getChunksToRender(sliceCoords: SliceCoordinates): Chunk[];
536
+ updateChunkStates(sliceCoords: SliceCoordinates, viewport: Viewport): void;
537
+ allVisibleLowestLODLoaded(sliceCoords: SliceCoordinates): boolean;
538
+ get currentLOD(): number;
539
+ maybeForgetChunk(chunk: Chunk): void;
540
+ setImageSourcePolicy(newPolicy: ImageSourcePolicy, key: symbol): void;
541
+ private setLOD;
542
+ private updateChunkViewStates;
543
+ private isChunkChannelInSlice;
544
+ private updateChunksAtTimeIndex;
545
+ private markTimeChunksForPrefetch;
546
+ private computePriority;
547
+ private isChunkWithinBounds;
548
+ private getZBounds;
549
+ private viewBounds2DChanged;
550
+ private zBoundsChanged;
551
+ private getPaddedBounds;
552
+ private squareDistance2D;
553
+ }
554
+
555
+ declare class ChunkManager {
556
+ private readonly stores_;
557
+ private readonly pendingStores_;
558
+ private readonly views_;
559
+ private readonly queue_;
560
+ addView(source: ChunkSource, policy: ImageSourcePolicy): Promise<ChunkStoreView>;
561
+ removeView(view: ChunkStoreView): void;
562
+ private addSource;
563
+ private getSourceForStore;
564
+ update(): void;
565
+ private updateAndCollectChunkChanges;
566
+ private aggregateChunkViewStates;
567
+ }
568
+
553
569
  type Overlay = {
554
570
  update(idetik: Idetik, timestamp?: DOMHighResTimeStamp): void;
555
571
  };
@@ -793,7 +809,7 @@ declare class ChunkedImageLayer extends Layer implements ChannelsEnabled {
793
809
  private readonly channelChangeCallbacks_;
794
810
  private policy_;
795
811
  private channelProps_?;
796
- private chunkManagerSource_?;
812
+ private chunkStoreView_?;
797
813
  private pointerDownPos_;
798
814
  private zPrevPointWorld_?;
799
815
  private debugMode_;
@@ -803,14 +819,15 @@ declare class ChunkedImageLayer extends Layer implements ChannelsEnabled {
803
819
  private readonly wireframeColors_;
804
820
  constructor({ source, sliceCoords, policy, channelProps, onPickValue, ...layerOptions }: ChunkedImageLayerProps);
805
821
  onAttached(context: IdetikContext): Promise<void>;
806
- onDetached(): void;
807
- update(): void;
822
+ onDetached(context: IdetikContext): void;
823
+ update(context?: RenderContext): void;
808
824
  private updateChunks;
809
825
  get lastPresentationTimeCoord(): number | undefined;
810
826
  private isPresentationStale;
811
827
  private resliceIfZChanged;
812
828
  onEvent(event: EventContext): void;
813
- get chunkManagerSource(): ChunkManagerSource | undefined;
829
+ get chunkStoreView(): ChunkStoreView | undefined;
830
+ get sliceCoords(): SliceCoordinates;
814
831
  get source(): ChunkSource;
815
832
  get imageSourcePolicy(): Readonly<ImageSourcePolicy>;
816
833
  set imageSourcePolicy(newPolicy: ImageSourcePolicy);