@aura3d/addons 0.0.0-stage → 5.0.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 +11 -2
- package/dist/effects/AsciiOutput.d.ts +60 -0
- package/dist/effects/AsciiOutput.d.ts.map +1 -0
- package/dist/effects/AsciiOutput.js +187 -0
- package/dist/effects/AsciiOutput.js.map +1 -0
- package/dist/effects/OutlineOutput.d.ts +58 -0
- package/dist/effects/OutlineOutput.d.ts.map +1 -0
- package/dist/effects/OutlineOutput.js +274 -0
- package/dist/effects/OutlineOutput.js.map +1 -0
- package/dist/effects/StereoOutputs.d.ts +106 -0
- package/dist/effects/StereoOutputs.d.ts.map +1 -0
- package/dist/effects/StereoOutputs.js +315 -0
- package/dist/effects/StereoOutputs.js.map +1 -0
- package/dist/generators/EnvironmentGenerators.d.ts +100 -0
- package/dist/generators/EnvironmentGenerators.d.ts.map +1 -0
- package/dist/generators/EnvironmentGenerators.js +477 -0
- package/dist/generators/EnvironmentGenerators.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/objects/MarchingCubes.d.ts +80 -0
- package/dist/objects/MarchingCubes.d.ts.map +1 -0
- package/dist/objects/MarchingCubes.js +289 -0
- package/dist/objects/MarchingCubes.js.map +1 -0
- package/dist/objects/SpecializedObjects.d.ts +150 -0
- package/dist/objects/SpecializedObjects.d.ts.map +1 -0
- package/dist/objects/SpecializedObjects.js +544 -0
- package/dist/objects/SpecializedObjects.js.map +1 -0
- package/dist/renderers/SpatialDOMRenderer.d.ts +76 -0
- package/dist/renderers/SpatialDOMRenderer.d.ts.map +1 -0
- package/dist/renderers/SpatialDOMRenderer.js +279 -0
- package/dist/renderers/SpatialDOMRenderer.js.map +1 -0
- package/dist/renderers/VectorRenderer.d.ts +98 -0
- package/dist/renderers/VectorRenderer.d.ts.map +1 -0
- package/dist/renderers/VectorRenderer.js +253 -0
- package/dist/renderers/VectorRenderer.js.map +1 -0
- package/dist/tools/Fracture.d.ts +87 -0
- package/dist/tools/Fracture.d.ts.map +1 -0
- package/dist/tools/Fracture.js +422 -0
- package/dist/tools/Fracture.js.map +1 -0
- package/dist/tools/Sculptor.d.ts +84 -0
- package/dist/tools/Sculptor.d.ts.map +1 -0
- package/dist/tools/Sculptor.js +207 -0
- package/dist/tools/Sculptor.js.map +1 -0
- package/dist/tools/TubePainter.d.ts +47 -0
- package/dist/tools/TubePainter.d.ts.map +1 -0
- package/dist/tools/TubePainter.js +170 -0
- package/dist/tools/TubePainter.js.map +1 -0
- package/dist/utils/WorkerPool.d.ts +93 -0
- package/dist/utils/WorkerPool.d.ts.map +1 -0
- package/dist/utils/WorkerPool.js +360 -0
- package/dist/utils/WorkerPool.js.map +1 -0
- package/package.json +114 -3
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/** A top-left-origin rectangle in CSS pixels. */
|
|
2
|
+
export interface SpatialDOMViewport {
|
|
3
|
+
readonly x: number;
|
|
4
|
+
readonly y: number;
|
|
5
|
+
readonly width: number;
|
|
6
|
+
readonly height: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* A world-anchored DOM element. Matrix values are column-major and use the
|
|
10
|
+
* same world coordinates as the view-projection matrix. A function allows an
|
|
11
|
+
* animated scene transform to be sampled anew on each render.
|
|
12
|
+
*/
|
|
13
|
+
export interface SpatialDOMLabel {
|
|
14
|
+
readonly id: string;
|
|
15
|
+
readonly element: HTMLElement;
|
|
16
|
+
readonly worldMatrix: ArrayLike<number> | (() => ArrayLike<number>);
|
|
17
|
+
/** Screen-aligned pixels, or an oriented world-space plane. Default `screen`. */
|
|
18
|
+
readonly mode?: "screen" | "perspective";
|
|
19
|
+
readonly visible?: boolean;
|
|
20
|
+
/** Receive DOM pointer events instead of passing them through to the canvas. */
|
|
21
|
+
readonly interactive?: boolean;
|
|
22
|
+
readonly ariaLabel?: string;
|
|
23
|
+
/** Explicit layering overrides the normal far-to-near ordering. */
|
|
24
|
+
readonly renderOrder?: number;
|
|
25
|
+
/** World units represented by one CSS pixel on a perspective label; default 0.01. */
|
|
26
|
+
readonly worldUnitsPerPixel?: number;
|
|
27
|
+
}
|
|
28
|
+
export interface SpatialDOMView {
|
|
29
|
+
readonly viewProjectionMatrix: ArrayLike<number>;
|
|
30
|
+
/** Rectangle within the renderer's dimensions; default is the whole surface. */
|
|
31
|
+
readonly viewport?: SpatialDOMViewport;
|
|
32
|
+
/** NDC depth convention. Defaults to `minus-one-to-one`. */
|
|
33
|
+
readonly depthRange?: "minus-one-to-one" | "zero-to-one";
|
|
34
|
+
/** Reverse the depth sort when the projection maps the near plane to larger NDC values. */
|
|
35
|
+
readonly depthOrder?: "standard" | "reversed";
|
|
36
|
+
}
|
|
37
|
+
export type SpatialDOMOcclusionTest = (label: SpatialDOMLabel, worldAnchor: readonly [number, number, number]) => boolean;
|
|
38
|
+
export interface SpatialDOMRendererOptions {
|
|
39
|
+
readonly container: HTMLElement;
|
|
40
|
+
readonly width: number;
|
|
41
|
+
readonly height: number;
|
|
42
|
+
/** Optional caller-owned anchor test. No depth-buffer query is performed. */
|
|
43
|
+
readonly isOccluded?: SpatialDOMOcclusionTest;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Opt-in DOM output. Mount the container over the canvas (its positioning is
|
|
47
|
+
* owned by the caller), then render once per view/frame. The overlay itself
|
|
48
|
+
* clips to the supplied viewport. Its labels preserve their DOM semantics;
|
|
49
|
+
* off-frustum, occluded and explicitly hidden labels leave the accessibility
|
|
50
|
+
* tree. No GPU depth buffer is sampled: the optional callback tests the world
|
|
51
|
+
* anchor only, and does not imply per-pixel occlusion of a label. Frustum
|
|
52
|
+
* visibility is also determined from the anchor; viewport overflow clips the
|
|
53
|
+
* element rectangle but geometry and near/far planes do not clip it per pixel.
|
|
54
|
+
* Perspective planes that collapse or face exactly edge-on are hidden.
|
|
55
|
+
*
|
|
56
|
+
* Pointer events pass through by default. An interactive element receives
|
|
57
|
+
* normal DOM events and those events are not forwarded to the canvas. Remove
|
|
58
|
+
* or dispose restores each element's original parent, styles and ARIA fields.
|
|
59
|
+
* A borrowed element cannot be managed by another renderer until it is removed
|
|
60
|
+
* from this renderer or this renderer is disposed.
|
|
61
|
+
*/
|
|
62
|
+
export declare class SpatialDOMRenderer {
|
|
63
|
+
readonly element: HTMLDivElement;
|
|
64
|
+
private readonly managed;
|
|
65
|
+
private readonly occlusionTest?;
|
|
66
|
+
private width;
|
|
67
|
+
private height;
|
|
68
|
+
private disposed;
|
|
69
|
+
constructor(options: SpatialDOMRendererOptions);
|
|
70
|
+
setSize(width: number, height: number): void;
|
|
71
|
+
render(labels: readonly SpatialDOMLabel[], view: SpatialDOMView): void;
|
|
72
|
+
dispose(): void;
|
|
73
|
+
private assertAlive;
|
|
74
|
+
private setViewport;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=SpatialDOMRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpatialDOMRenderer.d.ts","sourceRoot":"","sources":["../../src/renderers/SpatialDOMRenderer.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACpE,iFAAiF;IACjF,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,mEAAmE;IACnE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,qFAAqF;IACrF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,oBAAoB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACjD,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IACvC,4DAA4D;IAC5D,QAAQ,CAAC,UAAU,CAAC,EAAE,kBAAkB,GAAG,aAAa,CAAC;IACzD,2FAA2F;IAC3F,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;CAC/C;AAED,MAAM,MAAM,uBAAuB,GAAG,CACpC,KAAK,EAAE,eAAe,EACtB,WAAW,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,KAC3C,OAAO,CAAC;AAEb,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,CAAC,EAAE,uBAAuB,CAAC;CAC/C;AA6BD;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAA0B;IACzD,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,yBAAyB;IAa9C,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAS5C,MAAM,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI;IAiFtE,OAAO,IAAI,IAAI;IAYf,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,WAAW;CAGpB"}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
const OWNED_STYLES = ["position", "left", "top", "transform", "transform-origin", "z-index", "display", "pointer-events"];
|
|
2
|
+
// A borrowed element must have exactly one renderer owner. Otherwise a second
|
|
3
|
+
// renderer can capture the first renderer's temporary state as its "original"
|
|
4
|
+
// state and each renderer will steal the element back from the other on dispose.
|
|
5
|
+
const LABEL_OWNERS = new WeakMap();
|
|
6
|
+
const OUTPUT_LAYERS = new WeakSet();
|
|
7
|
+
/**
|
|
8
|
+
* Opt-in DOM output. Mount the container over the canvas (its positioning is
|
|
9
|
+
* owned by the caller), then render once per view/frame. The overlay itself
|
|
10
|
+
* clips to the supplied viewport. Its labels preserve their DOM semantics;
|
|
11
|
+
* off-frustum, occluded and explicitly hidden labels leave the accessibility
|
|
12
|
+
* tree. No GPU depth buffer is sampled: the optional callback tests the world
|
|
13
|
+
* anchor only, and does not imply per-pixel occlusion of a label. Frustum
|
|
14
|
+
* visibility is also determined from the anchor; viewport overflow clips the
|
|
15
|
+
* element rectangle but geometry and near/far planes do not clip it per pixel.
|
|
16
|
+
* Perspective planes that collapse or face exactly edge-on are hidden.
|
|
17
|
+
*
|
|
18
|
+
* Pointer events pass through by default. An interactive element receives
|
|
19
|
+
* normal DOM events and those events are not forwarded to the canvas. Remove
|
|
20
|
+
* or dispose restores each element's original parent, styles and ARIA fields.
|
|
21
|
+
* A borrowed element cannot be managed by another renderer until it is removed
|
|
22
|
+
* from this renderer or this renderer is disposed.
|
|
23
|
+
*/
|
|
24
|
+
export class SpatialDOMRenderer {
|
|
25
|
+
element;
|
|
26
|
+
managed = new Map();
|
|
27
|
+
occlusionTest;
|
|
28
|
+
width;
|
|
29
|
+
height;
|
|
30
|
+
disposed = false;
|
|
31
|
+
constructor(options) {
|
|
32
|
+
this.width = positive(options.width, "width");
|
|
33
|
+
this.height = positive(options.height, "height");
|
|
34
|
+
this.occlusionTest = options.isOccluded;
|
|
35
|
+
this.element = options.container.ownerDocument.createElement("div");
|
|
36
|
+
this.element.setAttribute("data-aura-spatial-labels", "");
|
|
37
|
+
this.element.setAttribute("aria-live", "off");
|
|
38
|
+
Object.assign(this.element.style, { position: "absolute", overflow: "hidden", pointerEvents: "none" });
|
|
39
|
+
options.container.appendChild(this.element);
|
|
40
|
+
OUTPUT_LAYERS.add(this.element);
|
|
41
|
+
this.setViewport({ x: 0, y: 0, width: this.width, height: this.height });
|
|
42
|
+
}
|
|
43
|
+
setSize(width, height) {
|
|
44
|
+
this.assertAlive();
|
|
45
|
+
const nextWidth = positive(width, "width");
|
|
46
|
+
const nextHeight = positive(height, "height");
|
|
47
|
+
this.width = nextWidth;
|
|
48
|
+
this.height = nextHeight;
|
|
49
|
+
this.setViewport({ x: 0, y: 0, width: this.width, height: this.height });
|
|
50
|
+
}
|
|
51
|
+
render(labels, view) {
|
|
52
|
+
this.assertAlive();
|
|
53
|
+
const projection = matrix(view.viewProjectionMatrix, "viewProjectionMatrix");
|
|
54
|
+
const viewport = view.viewport ?? { x: 0, y: 0, width: this.width, height: this.height };
|
|
55
|
+
validateViewport(viewport, this.width, this.height);
|
|
56
|
+
const depthRange = view.depthRange ?? "minus-one-to-one";
|
|
57
|
+
if (depthRange !== "minus-one-to-one" && depthRange !== "zero-to-one")
|
|
58
|
+
throw new RangeError("Unknown spatial DOM depth range.");
|
|
59
|
+
const depthOrder = view.depthOrder ?? "standard";
|
|
60
|
+
if (depthOrder !== "standard" && depthOrder !== "reversed")
|
|
61
|
+
throw new RangeError("Unknown spatial DOM depth order.");
|
|
62
|
+
const elementsById = new Map();
|
|
63
|
+
const elements = new Set();
|
|
64
|
+
const prepared = labels.map((label) => {
|
|
65
|
+
if (!label.id || elementsById.has(label.id))
|
|
66
|
+
throw new Error(`Spatial DOM label id must be nonempty and unique: ${label.id}`);
|
|
67
|
+
if (elements.has(label.element))
|
|
68
|
+
throw new Error("A DOM element cannot belong to multiple spatial labels.");
|
|
69
|
+
if (OUTPUT_LAYERS.has(label.element) || label.element.contains(this.element))
|
|
70
|
+
throw new Error("A spatial label cannot be or contain its output layer.");
|
|
71
|
+
const owner = LABEL_OWNERS.get(label.element);
|
|
72
|
+
if (owner && owner !== this)
|
|
73
|
+
throw new Error("A DOM element is already managed by another SpatialDOMRenderer.");
|
|
74
|
+
elementsById.set(label.id, label.element);
|
|
75
|
+
elements.add(label.element);
|
|
76
|
+
if (label.mode !== undefined && label.mode !== "screen" && label.mode !== "perspective")
|
|
77
|
+
throw new RangeError("Unknown spatial DOM label mode.");
|
|
78
|
+
if (label.renderOrder !== undefined && !Number.isFinite(label.renderOrder))
|
|
79
|
+
throw new RangeError("Label renderOrder must be finite.");
|
|
80
|
+
const scale = positive(label.worldUnitsPerPixel ?? 0.01, "worldUnitsPerPixel");
|
|
81
|
+
const world = matrix(typeof label.worldMatrix === "function" ? label.worldMatrix() : label.worldMatrix, "worldMatrix");
|
|
82
|
+
if (world[3] !== 0 || world[7] !== 0 || world[11] !== 0 || world[15] !== 1)
|
|
83
|
+
throw new RangeError("A label worldMatrix must be affine.");
|
|
84
|
+
const combined = multiply(projection, world);
|
|
85
|
+
if (!combined.every(Number.isFinite))
|
|
86
|
+
throw new RangeError("Spatial label transformation overflowed.");
|
|
87
|
+
const x = combined[12], y = combined[13], z = combined[14], w = combined[15];
|
|
88
|
+
const inFrustum = w > 0 && Math.abs(x) <= w && Math.abs(y) <= w && z <= w && z >= (depthRange === "zero-to-one" ? 0 : -w);
|
|
89
|
+
let shown = label.visible !== false && inFrustum && !(this.occlusionTest?.(label, [world[12], world[13], world[14]]) ?? false);
|
|
90
|
+
const depth = w > 0 ? z / w : Number.POSITIVE_INFINITY;
|
|
91
|
+
let transform = "none";
|
|
92
|
+
if (shown && label.mode === "perspective") {
|
|
93
|
+
const perspective = perspectiveTransform(combined, viewport.width, viewport.height, scale);
|
|
94
|
+
if (perspective === null)
|
|
95
|
+
shown = false;
|
|
96
|
+
else
|
|
97
|
+
transform = perspective;
|
|
98
|
+
}
|
|
99
|
+
else if (shown) {
|
|
100
|
+
transform = `translate3d(${(x / w * 0.5 + 0.5) * viewport.width}px, ${(0.5 - y / w * 0.5) * viewport.height}px, 0) translate(-50%, -50%)`;
|
|
101
|
+
}
|
|
102
|
+
return { label, depth, shown, transform };
|
|
103
|
+
});
|
|
104
|
+
// Validate the full input before moving elements or changing the layer.
|
|
105
|
+
// Callbacks above are caller code and may have disposed this renderer or
|
|
106
|
+
// synchronously lent an element to another renderer while being sampled.
|
|
107
|
+
this.assertAlive();
|
|
108
|
+
for (const { label } of prepared) {
|
|
109
|
+
const owner = LABEL_OWNERS.get(label.element);
|
|
110
|
+
if (owner && owner !== this)
|
|
111
|
+
throw new Error("A DOM element is already managed by another SpatialDOMRenderer.");
|
|
112
|
+
}
|
|
113
|
+
for (const [id, current] of this.managed) {
|
|
114
|
+
if (elementsById.get(id) !== current.element) {
|
|
115
|
+
restore(current);
|
|
116
|
+
LABEL_OWNERS.delete(current.element);
|
|
117
|
+
this.managed.delete(id);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
this.setViewport(viewport);
|
|
121
|
+
const ordered = [...prepared].sort((a, b) => (a.label.renderOrder ?? 0) - (b.label.renderOrder ?? 0) || (depthOrder === "reversed" ? a.depth - b.depth : b.depth - a.depth) || (a.label.id < b.label.id ? -1 : a.label.id > b.label.id ? 1 : 0));
|
|
122
|
+
ordered.forEach(({ label, depth: _depth, shown, transform }, index) => {
|
|
123
|
+
let current = this.managed.get(label.id);
|
|
124
|
+
if (!current) {
|
|
125
|
+
current = capture(label.element);
|
|
126
|
+
this.managed.set(label.id, current);
|
|
127
|
+
LABEL_OWNERS.set(label.element, this);
|
|
128
|
+
}
|
|
129
|
+
if (label.element.parentNode !== this.element)
|
|
130
|
+
this.element.appendChild(label.element);
|
|
131
|
+
const style = label.element.style;
|
|
132
|
+
style.position = "absolute";
|
|
133
|
+
style.left = "0";
|
|
134
|
+
style.top = "0";
|
|
135
|
+
style.transformOrigin = "0 0";
|
|
136
|
+
style.transform = transform;
|
|
137
|
+
style.zIndex = String(index + 1);
|
|
138
|
+
style.pointerEvents = label.interactive === true ? "auto" : "none";
|
|
139
|
+
style.display = shown ? current.styles.get("display")[0] : "none";
|
|
140
|
+
setAttribute(label.element, "aria-hidden", shown ? current.ariaHidden : "true");
|
|
141
|
+
setAttribute(label.element, "aria-label", label.ariaLabel ?? current.ariaLabel);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
dispose() {
|
|
145
|
+
if (this.disposed)
|
|
146
|
+
return;
|
|
147
|
+
this.disposed = true;
|
|
148
|
+
for (const label of this.managed.values()) {
|
|
149
|
+
restore(label);
|
|
150
|
+
LABEL_OWNERS.delete(label.element);
|
|
151
|
+
}
|
|
152
|
+
this.managed.clear();
|
|
153
|
+
this.element.remove();
|
|
154
|
+
OUTPUT_LAYERS.delete(this.element);
|
|
155
|
+
}
|
|
156
|
+
assertAlive() {
|
|
157
|
+
if (this.disposed)
|
|
158
|
+
throw new Error("SpatialDOMRenderer is disposed.");
|
|
159
|
+
}
|
|
160
|
+
setViewport(viewport) {
|
|
161
|
+
Object.assign(this.element.style, { left: `${viewport.x}px`, top: `${viewport.y}px`, width: `${viewport.width}px`, height: `${viewport.height}px` });
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
function capture(element) {
|
|
165
|
+
const parent = element.parentNode;
|
|
166
|
+
const nextSibling = element.nextSibling;
|
|
167
|
+
const marker = parent ? element.ownerDocument.createComment("aura-spatial-label") : null;
|
|
168
|
+
if (parent && marker)
|
|
169
|
+
parent.insertBefore(marker, element);
|
|
170
|
+
return {
|
|
171
|
+
element,
|
|
172
|
+
parent,
|
|
173
|
+
nextSibling,
|
|
174
|
+
marker,
|
|
175
|
+
styles: new Map(OWNED_STYLES.map((property) => [property, [element.style.getPropertyValue(property), element.style.getPropertyPriority(property)]])),
|
|
176
|
+
ariaHidden: element.getAttribute("aria-hidden"),
|
|
177
|
+
ariaLabel: element.getAttribute("aria-label")
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
function restore(label) {
|
|
181
|
+
for (const [property, [value, priority]] of label.styles) {
|
|
182
|
+
if (value)
|
|
183
|
+
label.element.style.setProperty(property, value, priority);
|
|
184
|
+
else
|
|
185
|
+
label.element.style.removeProperty(property);
|
|
186
|
+
}
|
|
187
|
+
setAttribute(label.element, "aria-hidden", label.ariaHidden);
|
|
188
|
+
setAttribute(label.element, "aria-label", label.ariaLabel);
|
|
189
|
+
if (label.marker?.parentNode) {
|
|
190
|
+
label.marker.parentNode.insertBefore(label.element, label.marker);
|
|
191
|
+
label.marker.parentNode.removeChild(label.marker);
|
|
192
|
+
}
|
|
193
|
+
else if (label.parent) {
|
|
194
|
+
label.parent.insertBefore(label.element, label.nextSibling?.parentNode === label.parent ? label.nextSibling : null);
|
|
195
|
+
}
|
|
196
|
+
else
|
|
197
|
+
label.element.remove();
|
|
198
|
+
}
|
|
199
|
+
function setAttribute(element, name, value) {
|
|
200
|
+
if (value === null)
|
|
201
|
+
element.removeAttribute(name);
|
|
202
|
+
else
|
|
203
|
+
element.setAttribute(name, value);
|
|
204
|
+
}
|
|
205
|
+
function positive(value, name) {
|
|
206
|
+
if (!Number.isFinite(value) || value <= 0)
|
|
207
|
+
throw new RangeError(`${name} must be positive and finite.`);
|
|
208
|
+
return value;
|
|
209
|
+
}
|
|
210
|
+
function validateViewport(viewport, width, height) {
|
|
211
|
+
if (![viewport.x, viewport.y, viewport.width, viewport.height].every(Number.isFinite) || viewport.x < 0 || viewport.y < 0 || viewport.width <= 0 || viewport.height <= 0 || viewport.x + viewport.width > width || viewport.y + viewport.height > height) {
|
|
212
|
+
throw new RangeError("Spatial DOM viewport must fit within the renderer size.");
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
function matrix(value, name) {
|
|
216
|
+
if (value.length !== 16)
|
|
217
|
+
throw new RangeError(`${name} must contain 16 column-major values.`);
|
|
218
|
+
const result = Array.from(value);
|
|
219
|
+
if (!result.every(Number.isFinite))
|
|
220
|
+
throw new RangeError(`${name} must contain finite values.`);
|
|
221
|
+
return result;
|
|
222
|
+
}
|
|
223
|
+
function multiply(a, b) {
|
|
224
|
+
const result = new Array(16).fill(0);
|
|
225
|
+
for (let c = 0; c < 4; c++)
|
|
226
|
+
for (let r = 0; r < 4; r++)
|
|
227
|
+
for (let k = 0; k < 4; k++)
|
|
228
|
+
result[c * 4 + r] += a[k * 4 + r] * b[c * 4 + k];
|
|
229
|
+
return result;
|
|
230
|
+
}
|
|
231
|
+
function perspectiveTransform(clip, width, height, scale) {
|
|
232
|
+
const css = new Array(16).fill(0);
|
|
233
|
+
for (let col = 0; col < 4; col++) {
|
|
234
|
+
// DOM's downward Y axis is the opposite of the label plane's upward Y.
|
|
235
|
+
const factor = col === 0 || col === 2 ? scale : col === 1 ? -scale : 1;
|
|
236
|
+
const x = clip[col * 4] * factor, y = clip[col * 4 + 1] * factor, w = clip[col * 4 + 3] * factor;
|
|
237
|
+
css[col * 4] = (x + w) * width / 2;
|
|
238
|
+
css[col * 4 + 1] = (w - y) * height / 2;
|
|
239
|
+
css[col * 4 + 2] = clip[col * 4 + 2] * factor;
|
|
240
|
+
css[col * 4 + 3] = w;
|
|
241
|
+
}
|
|
242
|
+
if (!css.every(Number.isFinite))
|
|
243
|
+
throw new RangeError("Spatial label CSS transform overflowed.");
|
|
244
|
+
if (!invertible(css)) {
|
|
245
|
+
// HTML content lies in the local XY plane, so replacing only the Z input
|
|
246
|
+
// column leaves every point on that plane unchanged. This preserves flat
|
|
247
|
+
// labels under a zero-depth world scale; CSS otherwise discards the entire
|
|
248
|
+
// element for a singular 4x4 matrix even when its plane can be projected.
|
|
249
|
+
css[8] = 0;
|
|
250
|
+
css[9] = 0;
|
|
251
|
+
css[10] = 1;
|
|
252
|
+
css[11] = 0;
|
|
253
|
+
if (!invertible(css))
|
|
254
|
+
return null; // The plane itself is edge-on or collapsed.
|
|
255
|
+
}
|
|
256
|
+
return `matrix3d(${css.join(",")}) translate(-50%, -50%)`;
|
|
257
|
+
}
|
|
258
|
+
function invertible(value) {
|
|
259
|
+
const scale = Math.max(...value.map(Math.abs));
|
|
260
|
+
if (scale === 0)
|
|
261
|
+
return false;
|
|
262
|
+
const rows = Array.from({ length: 4 }, (_, row) => Array.from({ length: 4 }, (_, col) => value[col * 4 + row] / scale));
|
|
263
|
+
for (let col = 0; col < 4; col++) {
|
|
264
|
+
let pivot = col;
|
|
265
|
+
for (let row = col + 1; row < 4; row++)
|
|
266
|
+
if (Math.abs(rows[row][col]) > Math.abs(rows[pivot][col]))
|
|
267
|
+
pivot = row;
|
|
268
|
+
if (rows[pivot][col] === 0)
|
|
269
|
+
return false;
|
|
270
|
+
[rows[pivot], rows[col]] = [rows[col], rows[pivot]];
|
|
271
|
+
for (let row = col + 1; row < 4; row++) {
|
|
272
|
+
const factor = rows[row][col] / rows[col][col];
|
|
273
|
+
for (let next = col + 1; next < 4; next++)
|
|
274
|
+
rows[row][next] -= factor * rows[col][next];
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=SpatialDOMRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpatialDOMRenderer.js","sourceRoot":"","sources":["../../src/renderers/SpatialDOMRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/** Flat vector styles; lighting, textures and shader effects are not reproduced. */
|
|
2
|
+
export interface VectorStyle {
|
|
3
|
+
readonly fill?: string;
|
|
4
|
+
readonly stroke?: string;
|
|
5
|
+
readonly strokeWidth?: number;
|
|
6
|
+
readonly opacity?: number;
|
|
7
|
+
readonly pointSize?: number;
|
|
8
|
+
readonly lineCap?: "butt" | "round" | "square";
|
|
9
|
+
readonly lineJoin?: "miter" | "round" | "bevel";
|
|
10
|
+
}
|
|
11
|
+
interface VectorPositionBuffer {
|
|
12
|
+
readonly vertexCount: number;
|
|
13
|
+
getAttribute(index: number, semantic: "position"): readonly number[];
|
|
14
|
+
getDecodedAttribute?(index: number, semantic: "position"): readonly number[];
|
|
15
|
+
}
|
|
16
|
+
/** Structurally compatible with Aura3D Geometry's readable CPU buffers. */
|
|
17
|
+
export interface VectorGeometry {
|
|
18
|
+
readonly vertexBuffer: VectorPositionBuffer;
|
|
19
|
+
getAttributeBuffer?(semantic: "position"): VectorPositionBuffer;
|
|
20
|
+
readonly indexBuffer?: {
|
|
21
|
+
readonly data: ArrayLike<number>;
|
|
22
|
+
} | null;
|
|
23
|
+
readonly topology: "triangles" | "lines" | "points";
|
|
24
|
+
readonly drawRange?: {
|
|
25
|
+
readonly start: number;
|
|
26
|
+
readonly count: number;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export interface VectorRenderItem {
|
|
30
|
+
readonly geometry: VectorGeometry;
|
|
31
|
+
/** Passed through to `resolveStyle`; GPU material behavior is not inferred. */
|
|
32
|
+
readonly material?: unknown;
|
|
33
|
+
readonly label?: string;
|
|
34
|
+
readonly modelMatrix?: ArrayLike<number>;
|
|
35
|
+
readonly geometryMatrix?: ArrayLike<number>;
|
|
36
|
+
/** If supplied, this replaces viewProjectionMatrix × modelMatrix. */
|
|
37
|
+
readonly modelViewProjectionMatrix?: ArrayLike<number>;
|
|
38
|
+
/** Intersected with the geometry's draw range; offsets address indices when present. */
|
|
39
|
+
readonly drawRange?: {
|
|
40
|
+
readonly start: number;
|
|
41
|
+
readonly count: number;
|
|
42
|
+
};
|
|
43
|
+
readonly renderOrder?: number;
|
|
44
|
+
/** Per-item fields override the defaults returned by `resolveStyle`. */
|
|
45
|
+
readonly style?: VectorStyle;
|
|
46
|
+
readonly skinning?: unknown;
|
|
47
|
+
readonly morphTargets?: unknown;
|
|
48
|
+
readonly morphWeights?: unknown;
|
|
49
|
+
readonly instanceTransforms?: unknown;
|
|
50
|
+
}
|
|
51
|
+
export interface VectorViewport {
|
|
52
|
+
readonly x: number;
|
|
53
|
+
readonly y: number;
|
|
54
|
+
readonly width: number;
|
|
55
|
+
readonly height: number;
|
|
56
|
+
}
|
|
57
|
+
export interface VectorView {
|
|
58
|
+
/** Column-major world-to-clip matrix. */
|
|
59
|
+
readonly viewProjectionMatrix: ArrayLike<number>;
|
|
60
|
+
/** Top-left-origin viewport in output pixels; defaults to the whole output. */
|
|
61
|
+
readonly viewport?: VectorViewport;
|
|
62
|
+
readonly depthRange?: "minus-one-to-one" | "zero-to-one";
|
|
63
|
+
/** Set for projections that map the near plane to larger NDC depth. */
|
|
64
|
+
readonly depthOrder?: "standard" | "reversed";
|
|
65
|
+
}
|
|
66
|
+
export interface VectorRendererOptions {
|
|
67
|
+
readonly width: number;
|
|
68
|
+
readonly height: number;
|
|
69
|
+
readonly background?: string;
|
|
70
|
+
/** Upper bound on submitted primitives, before clipping; default 100,000. */
|
|
71
|
+
readonly maxPrimitives?: number;
|
|
72
|
+
/** Convert an item's material to the supported flat vector styles if desired. */
|
|
73
|
+
readonly resolveStyle?: (item: VectorRenderItem) => VectorStyle;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Produce a standalone SVG from CPU-readable, static Aura3D render geometry.
|
|
77
|
+
* Triangles, lines and points are clipped in homogeneous space before the
|
|
78
|
+
* perspective divide. `renderOrder` then far-to-near painter ordering is used;
|
|
79
|
+
* intersecting polygons cannot be depth-tested per pixel. Vector styles are
|
|
80
|
+
* flat and explicit; textures, lighting, shadows and post effects are not
|
|
81
|
+
* exported. Skinned, morphed and instanced draws throw instead of silently
|
|
82
|
+
* exporting an undeformed or partial scene. The renderer owns no geometry.
|
|
83
|
+
*/
|
|
84
|
+
export declare class VectorRenderer {
|
|
85
|
+
private width;
|
|
86
|
+
private height;
|
|
87
|
+
private readonly background?;
|
|
88
|
+
private readonly maxPrimitives;
|
|
89
|
+
private readonly resolveStyle?;
|
|
90
|
+
private disposed;
|
|
91
|
+
constructor(options: VectorRendererOptions);
|
|
92
|
+
setSize(width: number, height: number): void;
|
|
93
|
+
render(items: readonly VectorRenderItem[], view: VectorView): string;
|
|
94
|
+
dispose(): void;
|
|
95
|
+
private assertAlive;
|
|
96
|
+
}
|
|
97
|
+
export {};
|
|
98
|
+
//# sourceMappingURL=VectorRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VectorRenderer.d.ts","sourceRoot":"","sources":["../../src/renderers/VectorRenderer.ts"],"names":[],"mappings":"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"}
|