hyper-scatter 0.1.0 → 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/README.md +37 -47
- package/dist-lib/core/types.d.ts +20 -1
- package/dist-lib/core/types.d.ts.map +1 -1
- package/dist-lib/core/types.js.map +1 -1
- package/dist-lib/core/types3d.d.ts +84 -0
- package/dist-lib/core/types3d.d.ts.map +1 -0
- package/dist-lib/core/types3d.js +21 -0
- package/dist-lib/core/types3d.js.map +1 -0
- package/dist-lib/impl_candidate/webgl_candidate.d.ts +11 -1
- package/dist-lib/impl_candidate/webgl_candidate.d.ts.map +1 -1
- package/dist-lib/impl_candidate/webgl_candidate.js +250 -50
- package/dist-lib/impl_candidate/webgl_candidate.js.map +1 -1
- package/dist-lib/impl_candidate/webgl_candidate_3d.d.ts +147 -0
- package/dist-lib/impl_candidate/webgl_candidate_3d.d.ts.map +1 -0
- package/dist-lib/impl_candidate/webgl_candidate_3d.js +1404 -0
- package/dist-lib/impl_candidate/webgl_candidate_3d.js.map +1 -0
- package/dist-lib/index.d.ts +6 -1
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +29 -0
- package/dist-lib/index.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -6,10 +6,20 @@
|
|
|
6
6
|
|
|
7
7
|
**Hyperbolic (Poincaré) embeddings at 60 FPS. 20,000,000 points. Pure WebGL2 (no `regl`, no `three.js`).**
|
|
8
8
|
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="https://hackerroomai.github.io/hyper-scatter/"><strong>🚀 Try the Interactive Demo & Benchmark Playground →</strong></a>
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
<p align="center">
|
|
14
|
+
<img src="docs/poincare_demo.gif" alt="Poincaré Disk Demo" width="480">
|
|
15
|
+
<br>
|
|
16
|
+
<em>Hyperbolic pan & zoom in the Poincaré disk — points follow geodesics</em>
|
|
17
|
+
</p>
|
|
18
|
+
|
|
9
19
|
A specialized scatterplot engine for [HyperView](https://github.com/HackerRoomAI/HyperView).
|
|
10
20
|
|
|
11
|
-
- Geometries: **Poincaré (hyperbolic)** + **Euclidean**
|
|
12
|
-
- Correctness: a slow CPU **Reference** defines semantics; the fast GPU **Candidate** must match.
|
|
21
|
+
- Geometries: **Poincaré (hyperbolic)** + **Euclidean** in 2D, plus WebGL candidates for **Euclidean 3D** and **Sphere**.
|
|
22
|
+
- Correctness: a slow CPU **Reference** defines 2D semantics; the fast GPU **Candidate** must match.
|
|
13
23
|
- Implementation: **pure WebGL2** (no `regl`, no `three.js`, no runtime deps).
|
|
14
24
|
|
|
15
25
|
---
|
|
@@ -30,52 +40,26 @@ For the full invariants + how the harness selects candidate code paths, see [AGE
|
|
|
30
40
|
## Usage (copy/paste agent prompt)
|
|
31
41
|
|
|
32
42
|
```text
|
|
33
|
-
You are a coding agent
|
|
34
|
-
|
|
35
|
-
Use these imports:
|
|
36
|
-
|
|
37
|
-
import {
|
|
38
|
-
EuclideanWebGLCandidate,
|
|
39
|
-
HyperbolicWebGLCandidate,
|
|
40
|
-
createDataset,
|
|
41
|
-
createInteractionController,
|
|
42
|
-
type SelectionResult,
|
|
43
|
-
} from 'hyper-scatter';
|
|
44
|
-
|
|
45
|
-
Goal:
|
|
46
|
-
- Integrate `hyper-scatter` to render my embedding scatterplot.
|
|
47
|
-
|
|
48
|
-
Requirements:
|
|
49
|
-
1) Install:
|
|
50
|
-
- npm: `npm install hyper-scatter`
|
|
51
|
-
|
|
52
|
-
2) Implement a small integration wrapper:
|
|
53
|
-
- Create `mountHyperScatter(canvas, params)` (or an idiomatic React hook).
|
|
54
|
-
- Pick renderer:
|
|
55
|
-
- if params.geometry === 'poincare' use `new HyperbolicWebGLCandidate()`
|
|
56
|
-
- else use `new EuclideanWebGLCandidate()`
|
|
57
|
-
- Ensure the canvas has a real CSS size (non-zero width/height).
|
|
58
|
-
- Init using CSS pixels:
|
|
59
|
-
- `const rect = canvas.getBoundingClientRect()`
|
|
60
|
-
- `renderer.init(canvas, { width: Math.max(1, Math.floor(rect.width)), height: Math.max(1, Math.floor(rect.height)), devicePixelRatio: window.devicePixelRatio })`
|
|
61
|
-
- Dataset:
|
|
62
|
-
- `renderer.setDataset(createDataset(params.geometry, params.positions, params.labels))`
|
|
63
|
-
- First frame:
|
|
64
|
-
- `renderer.render()`
|
|
65
|
-
|
|
66
|
-
3) Wire interactions:
|
|
67
|
-
- Use `createInteractionController(canvas, renderer, { onHover, onLassoComplete })`.
|
|
68
|
-
- On lasso completion, keep the returned `SelectionResult` and (optionally) call:
|
|
69
|
-
- `await renderer.countSelection(result, { yieldEveryMs: 0 })` if you need an exact count without UI yielding.
|
|
70
|
-
|
|
71
|
-
4) Cleanup:
|
|
72
|
-
- On unmount/destroy: `controller.destroy(); renderer.destroy();`
|
|
73
|
-
|
|
74
|
-
Deliverables:
|
|
75
|
-
- The concrete code changes + file paths.
|
|
76
|
-
- A minimal example showing how to pass `Float32Array positions` (flat [x,y,x,y,...]) and optional `Uint16Array labels`.
|
|
43
|
+
You are a coding agent; integrate `hyper-scatter` in my repo: install `npm install hyper-scatter`; create `mountHyperScatter(canvas, params)` (or React hook) using `EuclideanWebGLCandidate`, `HyperbolicWebGLCandidate`, `Euclidean3DWebGLCandidate`, `Spherical3DWebGLCandidate`, `createDataset`, `createDataset3D`, and `createInteractionController`; choose renderer by `params.geometry` (`euclidean`, `poincare`, `euclidean3d`, `sphere`); ensure non-zero CSS size, then `const rect = canvas.getBoundingClientRect()` and `renderer.init(canvas, { width: Math.max(1, Math.floor(rect.width)), height: Math.max(1, Math.floor(rect.height)), devicePixelRatio: window.devicePixelRatio })`; set dataset with `createDataset` for 2D or `createDataset3D` for 3D, then `renderer.render()`; wire `createInteractionController(canvas, renderer, { onHover, onLassoComplete })` only for 2D and optionally call `await renderer.countSelection(result, { yieldEveryMs: 0 })` for exact lasso counts; cleanup with `controller?.destroy(); renderer.destroy();`; return concrete code changes + file paths + a minimal example passing `Float32Array` positions (`[x,y,...]` or `[x,y,z,...]`) and optional `Uint16Array` labels.
|
|
77
44
|
```
|
|
78
45
|
|
|
46
|
+
## API Highlights
|
|
47
|
+
|
|
48
|
+
Runtime updates (no renderer re-creation): `setPalette`, `setCategoryVisibility`, `setCategoryAlpha`, `setInteractionStyle`.
|
|
49
|
+
|
|
50
|
+
| Dimension | Geometry token | Geometry | Candidate class | Dataset helper |
|
|
51
|
+
|---|---|---|---|---|
|
|
52
|
+
| 2D | `euclidean` | Euclidean | `EuclideanWebGLCandidate` | `createDataset` |
|
|
53
|
+
| 2D | `poincare` | Poincare (hyperbolic disk) | `HyperbolicWebGLCandidate` | `createDataset` |
|
|
54
|
+
| 3D | `euclidean3d` | Euclidean 3D | `Euclidean3DWebGLCandidate` | `createDataset3D` |
|
|
55
|
+
| 3D | `sphere` | Hypersphere (unit sphere) | `Spherical3DWebGLCandidate` | `createDataset3D` |
|
|
56
|
+
|
|
57
|
+
Notes:
|
|
58
|
+
- Hidden categories are excluded from `render`, `hitTest`, and `lassoSelect`.
|
|
59
|
+
- `createInteractionController()` targets the 2D `Renderer` interface.
|
|
60
|
+
- 2D `SelectionResult` supports `kind: 'indices' | 'geometry'`; `SelectionResult3D` is index-based.
|
|
61
|
+
- 3D helper exports include `packPositionsXYZ`.
|
|
62
|
+
|
|
79
63
|
## Benchmarks
|
|
80
64
|
|
|
81
65
|
Main claim, measured via the browser harness (headed):
|
|
@@ -95,6 +79,11 @@ npm run bench -- --points=20000000
|
|
|
95
79
|
|
|
96
80
|
Default sweep (smaller point counts): `npm run bench`
|
|
97
81
|
|
|
82
|
+
Additional benchmark options:
|
|
83
|
+
|
|
84
|
+
- `npm run bench -- --geometries=euclidean,poincare,euclidean3d,sphere` runs the WebGL candidate benchmark across 2D and 3D geometries.
|
|
85
|
+
- `npm run bench -- --renderer=reference` and `npm run bench:accuracy` remain 2D-only.
|
|
86
|
+
|
|
98
87
|
Note: for performance numbers, run headed (default). Headless runs can skew GPU timing.
|
|
99
88
|
|
|
100
89
|
## How we built it
|
|
@@ -135,7 +124,8 @@ The harness tries to reduce these paths (example: lasso timing is end-to-end and
|
|
|
135
124
|
|
|
136
125
|
- [x] Euclidean Geometry
|
|
137
126
|
- [x] Poincaré Disk (Hyperbolic) Geometry
|
|
138
|
-
- [
|
|
127
|
+
- [x] 3D WebGL candidates (`euclidean3d`, `sphere`)
|
|
128
|
+
- [ ] 3D reference renderer + accuracy harness
|
|
139
129
|
|
|
140
130
|
## License
|
|
141
131
|
|
package/dist-lib/core/types.d.ts
CHANGED
|
@@ -92,6 +92,25 @@ export interface SelectionResult {
|
|
|
92
92
|
has(index: number): boolean;
|
|
93
93
|
}
|
|
94
94
|
export type InteractionMode = 'pan' | 'lasso';
|
|
95
|
+
export type CategoryVisibilityMask = ArrayLike<number | boolean>;
|
|
96
|
+
export interface InteractionStyle {
|
|
97
|
+
/** Color for the selected ring/halo. */
|
|
98
|
+
selectionColor?: string;
|
|
99
|
+
/** Color for the hovered ring/outline. */
|
|
100
|
+
hoverColor?: string;
|
|
101
|
+
/** Optional fill override for hovered, non-selected points. */
|
|
102
|
+
hoverFillColor?: string | null;
|
|
103
|
+
}
|
|
104
|
+
export interface DisplayStateRenderer {
|
|
105
|
+
/** Update the categorical palette without replacing the dataset. */
|
|
106
|
+
setPalette(colors: string[]): void;
|
|
107
|
+
/** Set a per-category visibility mask (truthy = visible). */
|
|
108
|
+
setCategoryVisibility(mask: CategoryVisibilityMask | null): void;
|
|
109
|
+
/** Apply a global alpha multiplier to visible categories only. */
|
|
110
|
+
setCategoryAlpha(alpha: number): void;
|
|
111
|
+
/** Update hover/selection interaction colors at runtime. */
|
|
112
|
+
setInteractionStyle(style: InteractionStyle): void;
|
|
113
|
+
}
|
|
95
114
|
export interface InitOptions {
|
|
96
115
|
width: number;
|
|
97
116
|
height: number;
|
|
@@ -106,7 +125,7 @@ export interface InitOptions {
|
|
|
106
125
|
poincareDiskBorderWidthPx?: number;
|
|
107
126
|
poincareGridWidthPx?: number;
|
|
108
127
|
}
|
|
109
|
-
export interface Renderer {
|
|
128
|
+
export interface Renderer extends DisplayStateRenderer {
|
|
110
129
|
/** Initialize the renderer with a canvas */
|
|
111
130
|
init(canvas: HTMLCanvasElement, opts: InitOptions): void;
|
|
112
131
|
/** Set the dataset to render */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,OAAO;IACtB,uBAAuB;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,sEAAsE;IACtE,SAAS,EAAE,YAAY,CAAC;IACxB,0CAA0C;IAC1C,MAAM,EAAE,WAAW,CAAC;IACpB,oBAAoB;IACpB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,UAAU,CAAC;AAMpD,8CAA8C;AAC9C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,WAAW,CAAC;IAClB,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,iEAAiE;IACjE,EAAE,EAAE,MAAM,CAAC;IACX,qCAAqC;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,SAAS,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAMjE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,kDAAkD;AAClD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,SAAS,CAAC;IAChB,kEAAkE;IAClE,MAAM,EAAE,YAAY,CAAC;IACrB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,QAAQ,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,IAAI,EAAE,SAAS,GAAG,UAAU,CAAC;IAE7B,yDAAyD;IACzD,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAEtB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAE7B,oCAAoC;IACpC,aAAa,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC7B;AAED,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiPH,+EAA+E;AAC/E,uCAAuC;AACvC,+EAA+E;AAE/E,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,SAAS,EAAE,OAAO;IAClB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,MAAM;IACjB,SAAS,EAAE,OAAO;IAClB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,OAAO;IAClB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,OAAO;CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;AACzC,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC;AAErC,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAC1C,OAAoB,EACpB,aAAqB;IAErB,OAAO;QACL,IAAI,EAAE,SAAS;QACf,OAAO;QACP,aAAa;QACb,GAAG,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAC3C,QAA2B,EAC3B,SAAuB,EACvB,aAAqB,EACrB,gBAA4E;IAE5E,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,QAAQ;QACR,aAAa;QACb,GAAG,EAAE,CAAC,KAAa,EAAE,EAAE;YACrB,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,OAAO,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { CountSelectionOptions, DisplayStateRenderer } from "./types.js";
|
|
2
|
+
export interface Dataset3D {
|
|
3
|
+
/** Number of points */
|
|
4
|
+
n: number;
|
|
5
|
+
/** Interleaved x,y,z coordinates: [x0, y0, z0, x1, y1, z1, ...] length = 3*n */
|
|
6
|
+
positions: Float32Array;
|
|
7
|
+
/** Label for each point (for coloring) */
|
|
8
|
+
labels: Uint16Array;
|
|
9
|
+
/** Geometry mode */
|
|
10
|
+
geometry: GeometryMode3D;
|
|
11
|
+
}
|
|
12
|
+
export type GeometryMode3D = "euclidean3d" | "sphere";
|
|
13
|
+
export interface OrbitViewState3D {
|
|
14
|
+
type: "orbit3d";
|
|
15
|
+
/** Yaw in radians around world-up (Y axis). */
|
|
16
|
+
yaw: number;
|
|
17
|
+
/** Pitch in radians. */
|
|
18
|
+
pitch: number;
|
|
19
|
+
/** Camera distance from target. */
|
|
20
|
+
distance: number;
|
|
21
|
+
/** Camera target point in data coordinates. */
|
|
22
|
+
targetX: number;
|
|
23
|
+
targetY: number;
|
|
24
|
+
targetZ: number;
|
|
25
|
+
/** Orthographic half-height in data coordinates. */
|
|
26
|
+
orthoScale: number;
|
|
27
|
+
}
|
|
28
|
+
export interface Modifiers3D {
|
|
29
|
+
shift: boolean;
|
|
30
|
+
ctrl: boolean;
|
|
31
|
+
alt: boolean;
|
|
32
|
+
meta: boolean;
|
|
33
|
+
}
|
|
34
|
+
export interface HitResult3D {
|
|
35
|
+
index: number;
|
|
36
|
+
screenX: number;
|
|
37
|
+
screenY: number;
|
|
38
|
+
distance: number;
|
|
39
|
+
/** Smaller depth means closer to the camera. */
|
|
40
|
+
depth: number;
|
|
41
|
+
}
|
|
42
|
+
export interface SelectionResult3D {
|
|
43
|
+
kind: "indices";
|
|
44
|
+
indices?: Set<number>;
|
|
45
|
+
computeTimeMs: number;
|
|
46
|
+
has(index: number): boolean;
|
|
47
|
+
}
|
|
48
|
+
export interface ProjectedPoint3D {
|
|
49
|
+
x: number;
|
|
50
|
+
y: number;
|
|
51
|
+
depth: number;
|
|
52
|
+
visible: boolean;
|
|
53
|
+
}
|
|
54
|
+
export interface InitOptions3D {
|
|
55
|
+
width: number;
|
|
56
|
+
height: number;
|
|
57
|
+
devicePixelRatio?: number;
|
|
58
|
+
backgroundColor?: string;
|
|
59
|
+
pointRadius?: number;
|
|
60
|
+
colors?: string[];
|
|
61
|
+
sphereGuideColor?: string;
|
|
62
|
+
sphereGuideOpacity?: number;
|
|
63
|
+
}
|
|
64
|
+
export interface Renderer3D extends DisplayStateRenderer {
|
|
65
|
+
init(canvas: HTMLCanvasElement, opts: InitOptions3D): void;
|
|
66
|
+
setDataset(dataset: Dataset3D): void;
|
|
67
|
+
setView(view: OrbitViewState3D): void;
|
|
68
|
+
getView(): OrbitViewState3D;
|
|
69
|
+
render(): void;
|
|
70
|
+
resize(width: number, height: number): void;
|
|
71
|
+
setSelection(indices: Set<number>): void;
|
|
72
|
+
getSelection(): Set<number>;
|
|
73
|
+
setHovered(index: number): void;
|
|
74
|
+
destroy(): void;
|
|
75
|
+
pan(deltaX: number, deltaY: number, modifiers: Modifiers3D): void;
|
|
76
|
+
zoom(anchorX: number, anchorY: number, delta: number, modifiers: Modifiers3D): void;
|
|
77
|
+
hitTest(screenX: number, screenY: number): HitResult3D | null;
|
|
78
|
+
lassoSelect(polyline: Float32Array): SelectionResult3D;
|
|
79
|
+
countSelection(result: SelectionResult3D, opts?: CountSelectionOptions): Promise<number>;
|
|
80
|
+
projectToScreen(dataX: number, dataY: number, dataZ: number): ProjectedPoint3D;
|
|
81
|
+
}
|
|
82
|
+
export declare function createIndicesSelectionResult3D(indices: Set<number>, computeTimeMs: number): SelectionResult3D;
|
|
83
|
+
export declare function createDefaultOrbitView3D(): OrbitViewState3D;
|
|
84
|
+
//# sourceMappingURL=types3d.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types3d.d.ts","sourceRoot":"","sources":["../../src/core/types3d.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export function createIndicesSelectionResult3D(indices, computeTimeMs) {
|
|
2
|
+
return {
|
|
3
|
+
kind: "indices",
|
|
4
|
+
indices,
|
|
5
|
+
computeTimeMs,
|
|
6
|
+
has: (index) => indices.has(index),
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export function createDefaultOrbitView3D() {
|
|
10
|
+
return {
|
|
11
|
+
type: "orbit3d",
|
|
12
|
+
yaw: 0,
|
|
13
|
+
pitch: 0,
|
|
14
|
+
distance: 3,
|
|
15
|
+
targetX: 0,
|
|
16
|
+
targetY: 0,
|
|
17
|
+
targetZ: 0,
|
|
18
|
+
orthoScale: 1.25,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=types3d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types3d.js","sourceRoot":"","sources":["../../src/core/types3d.ts"],"names":[],"mappings":"AA8FA,MAAM,UAAU,8BAA8B,CAC5C,OAAoB,EACpB,aAAqB;IAErB,OAAO;QACL,IAAI,EAAE,SAAS;QACf,OAAO;QACP,aAAa;QACb,GAAG,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,IAAI,EAAE,SAAS;QACf,GAAG,EAAE,CAAC;QACN,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,IAAI;KACjB,CAAC;AACJ,CAAC"}
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
* is called, because the demo/harness may re-initialize renderers and we
|
|
40
40
|
* want `init()` to remain side-effect-light.
|
|
41
41
|
*/
|
|
42
|
-
import { Dataset, Renderer, InitOptions, ViewState, Modifiers, HitResult, SelectionResult, CountSelectionOptions } from '../core/types.js';
|
|
42
|
+
import { Dataset, Renderer, InitOptions, ViewState, Modifiers, HitResult, SelectionResult, CategoryVisibilityMask, InteractionStyle, CountSelectionOptions } from '../core/types.js';
|
|
43
43
|
import { UniformGridIndex } from './spatial_index.js';
|
|
44
44
|
type GeometryKind = 'euclidean' | 'poincare';
|
|
45
45
|
declare abstract class WebGLRendererBase implements Renderer {
|
|
@@ -55,6 +55,10 @@ declare abstract class WebGLRendererBase implements Renderer {
|
|
|
55
55
|
protected pointRadiusCss: number;
|
|
56
56
|
protected colors: string[];
|
|
57
57
|
protected backgroundColor: string;
|
|
58
|
+
protected categoryVisibilityMask: Uint8Array<ArrayBuffer>;
|
|
59
|
+
protected hasCategoryVisibilityMask: boolean;
|
|
60
|
+
protected categoryAlpha: number;
|
|
61
|
+
protected interactionStyle: Required<InteractionStyle>;
|
|
58
62
|
protected poincareDiskFillColor: string;
|
|
59
63
|
protected poincareDiskBorderColor: string;
|
|
60
64
|
protected poincareGridColor: string;
|
|
@@ -175,6 +179,12 @@ declare abstract class WebGLRendererBase implements Renderer {
|
|
|
175
179
|
protected estimatePointFragments(drawCount: number, pointsDpr: number): number;
|
|
176
180
|
protected updateSquarePointPolicy(estimatedFragments: number): void;
|
|
177
181
|
setDataset(dataset: Dataset): void;
|
|
182
|
+
setPalette(colors: string[]): void;
|
|
183
|
+
setCategoryVisibility(mask: CategoryVisibilityMask | null): void;
|
|
184
|
+
setCategoryAlpha(alpha: number): void;
|
|
185
|
+
setInteractionStyle(style: InteractionStyle): void;
|
|
186
|
+
protected isCategoryVisible(category: number): boolean;
|
|
187
|
+
protected isPointVisibleByCategory(index: number): boolean;
|
|
178
188
|
abstract setView(view: ViewState): void;
|
|
179
189
|
abstract getView(): ViewState;
|
|
180
190
|
resize(width: number, height: number): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgl_candidate.d.ts","sourceRoot":"","sources":["../../src/impl_candidate/webgl_candidate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,EACL,OAAO,EACP,QAAQ,EACR,WAAW,EACX,SAAS,EAGT,SAAS,EACT,SAAS,EACT,eAAe,EAEf,qBAAqB,
|
|
1
|
+
{"version":3,"file":"webgl_candidate.d.ts","sourceRoot":"","sources":["../../src/impl_candidate/webgl_candidate.ts"],"names":[],"mappings":"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"}
|