@ifc-lite/renderer 1.17.0 → 1.18.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/edl-pass.d.ts +52 -0
- package/dist/edl-pass.d.ts.map +1 -0
- package/dist/edl-pass.js +204 -0
- package/dist/edl-pass.js.map +1 -0
- package/dist/index.d.ts +77 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +314 -19
- package/dist/index.js.map +1 -1
- package/dist/picker.d.ts +22 -3
- package/dist/picker.d.ts.map +1 -1
- package/dist/picker.js +48 -8
- package/dist/picker.js.map +1 -1
- package/dist/picking-manager.d.ts +14 -1
- package/dist/picking-manager.d.ts.map +1 -1
- package/dist/picking-manager.js +13 -1
- package/dist/picking-manager.js.map +1 -1
- package/dist/point-picker.d.ts +61 -0
- package/dist/point-picker.d.ts.map +1 -0
- package/dist/point-picker.js +223 -0
- package/dist/point-picker.js.map +1 -0
- package/dist/pointcloud/point-cloud-node.d.ts +56 -0
- package/dist/pointcloud/point-cloud-node.d.ts.map +1 -0
- package/dist/pointcloud/point-cloud-node.js +112 -0
- package/dist/pointcloud/point-cloud-node.js.map +1 -0
- package/dist/pointcloud/point-cloud-renderer.d.ts +135 -0
- package/dist/pointcloud/point-cloud-renderer.d.ts.map +1 -0
- package/dist/pointcloud/point-cloud-renderer.js +296 -0
- package/dist/pointcloud/point-cloud-renderer.js.map +1 -0
- package/dist/pointcloud/point-pipeline.d.ts +25 -0
- package/dist/pointcloud/point-pipeline.d.ts.map +1 -0
- package/dist/pointcloud/point-pipeline.js +111 -0
- package/dist/pointcloud/point-pipeline.js.map +1 -0
- package/dist/pointcloud/point-shader.wgsl.d.ts +22 -0
- package/dist/pointcloud/point-shader.wgsl.d.ts.map +1 -0
- package/dist/pointcloud/point-shader.wgsl.js +212 -0
- package/dist/pointcloud/point-shader.wgsl.js.map +1 -0
- package/dist/types.d.ts +15 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Eye-Dome Lighting (EDL) post-pass.
|
|
3
|
+
*
|
|
4
|
+
* Standard Potree-style screen-space depth shading: for each pixel, sample
|
|
5
|
+
* a few neighbouring depths at radius R, compute the mean log-depth-diff,
|
|
6
|
+
* and darken proportionally. The result is a soft black halo at silhouettes
|
|
7
|
+
* and gives un-normaled point clouds (and triangle meshes) a strong sense
|
|
8
|
+
* of depth without needing geometric normals.
|
|
9
|
+
*
|
|
10
|
+
* Costs ~9 texture taps per pixel (1 centre + 8 neighbours) at the high
|
|
11
|
+
* quality setting, ~5 at low. Cheap on any modern GPU.
|
|
12
|
+
*
|
|
13
|
+
* Render order: this should run AFTER the existing PostProcessor (which
|
|
14
|
+
* does contact / separation shading) so EDL also darkens those overlays.
|
|
15
|
+
*
|
|
16
|
+
* Reverse-Z note: the main pipeline uses depthCompare 'greater' with
|
|
17
|
+
* clearValue 0.0. So depth=1 → near plane, depth=0 → far plane. A bigger
|
|
18
|
+
* neighbour depth means the neighbour is closer; a smaller neighbour depth
|
|
19
|
+
* means it's further. We darken pixels whose neighbours are further away —
|
|
20
|
+
* i.e. silhouette edges — by clamping `max(0, log(centre) - log(neighbour))`.
|
|
21
|
+
*/
|
|
22
|
+
import { WebGPUDevice } from './device.js';
|
|
23
|
+
export interface EdlPassOptions {
|
|
24
|
+
/** Multiplier on the final darken alpha. 0..3, default 1. */
|
|
25
|
+
strength?: number;
|
|
26
|
+
/** Sample radius in pixels. 1..4, default 1. */
|
|
27
|
+
radiusPx?: number;
|
|
28
|
+
/** When true, sample 8 neighbours; when false, just 4 cardinal. */
|
|
29
|
+
highQuality?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface EdlPassApplyOptions {
|
|
32
|
+
/** Output target — typically the swap chain texture view. */
|
|
33
|
+
targetView: GPUTextureView;
|
|
34
|
+
/** Depth texture view (must be `aspect: 'depth-only'` for stencil formats). */
|
|
35
|
+
depthView: GPUTextureView;
|
|
36
|
+
}
|
|
37
|
+
export declare class EdlPass {
|
|
38
|
+
private device;
|
|
39
|
+
private colorFormat;
|
|
40
|
+
private isMultisampled;
|
|
41
|
+
private uniformBuffer;
|
|
42
|
+
private uniformStaging;
|
|
43
|
+
private bindGroupLayout;
|
|
44
|
+
private pipeline;
|
|
45
|
+
private cachedBindGroup;
|
|
46
|
+
private cachedDepthView;
|
|
47
|
+
private destroyed;
|
|
48
|
+
constructor(device: WebGPUDevice, sampleCount: number);
|
|
49
|
+
apply(encoder: GPUCommandEncoder, opts: EdlPassApplyOptions, params: Required<EdlPassOptions>): void;
|
|
50
|
+
destroy(): void;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=edl-pass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edl-pass.d.ts","sourceRoot":"","sources":["../src/edl-pass.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,6DAA6D;IAC7D,UAAU,EAAE,cAAc,CAAC;IAC3B,+EAA+E;IAC/E,SAAS,EAAE,cAAc,CAAC;CAC3B;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM;IA4JrD,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,IAAI;IA+BpG,OAAO,IAAI,IAAI;CAOhB"}
|
package/dist/edl-pass.js
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
export class EdlPass {
|
|
5
|
+
device;
|
|
6
|
+
colorFormat;
|
|
7
|
+
isMultisampled;
|
|
8
|
+
uniformBuffer;
|
|
9
|
+
uniformStaging = new Float32Array(4);
|
|
10
|
+
bindGroupLayout;
|
|
11
|
+
pipeline;
|
|
12
|
+
cachedBindGroup = null;
|
|
13
|
+
cachedDepthView = null;
|
|
14
|
+
destroyed = false;
|
|
15
|
+
constructor(device, sampleCount) {
|
|
16
|
+
this.device = device.getDevice();
|
|
17
|
+
this.colorFormat = device.getFormat();
|
|
18
|
+
this.isMultisampled = sampleCount > 1;
|
|
19
|
+
this.uniformBuffer = this.device.createBuffer({
|
|
20
|
+
// strength, radiusPx, highQuality(u32-as-f32 placeholder), pad
|
|
21
|
+
size: 16,
|
|
22
|
+
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
23
|
+
});
|
|
24
|
+
this.bindGroupLayout = this.device.createBindGroupLayout({
|
|
25
|
+
entries: [
|
|
26
|
+
{
|
|
27
|
+
binding: 0,
|
|
28
|
+
visibility: GPUShaderStage.FRAGMENT,
|
|
29
|
+
texture: {
|
|
30
|
+
sampleType: 'depth',
|
|
31
|
+
viewDimension: '2d',
|
|
32
|
+
multisampled: this.isMultisampled,
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
binding: 1,
|
|
37
|
+
visibility: GPUShaderStage.FRAGMENT,
|
|
38
|
+
buffer: { type: 'uniform' },
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
});
|
|
42
|
+
const depthTexDecl = this.isMultisampled
|
|
43
|
+
? '@group(0) @binding(0) var depthTex: texture_depth_multisampled_2d;'
|
|
44
|
+
: '@group(0) @binding(0) var depthTex: texture_depth_2d;';
|
|
45
|
+
const depthLoadExpr = this.isMultisampled
|
|
46
|
+
// sample_index for texture_depth_multisampled_2d must be i32 per
|
|
47
|
+
// the WGSL spec; some browsers accept the unsigned form, but
|
|
48
|
+
// strict validators (Naga) reject it.
|
|
49
|
+
? 'textureLoad(depthTex, c, 0)'
|
|
50
|
+
: 'textureLoad(depthTex, c, 0)';
|
|
51
|
+
const shader = this.device.createShaderModule({
|
|
52
|
+
code: `
|
|
53
|
+
struct Params {
|
|
54
|
+
strength: f32,
|
|
55
|
+
radiusPx: f32,
|
|
56
|
+
highQuality: f32,
|
|
57
|
+
_pad: f32,
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
${depthTexDecl}
|
|
61
|
+
@group(0) @binding(1) var<uniform> params: Params;
|
|
62
|
+
|
|
63
|
+
struct VsOut {
|
|
64
|
+
@builtin(position) pos: vec4<f32>,
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@vertex
|
|
68
|
+
fn vs_main(@builtin(vertex_index) v: u32) -> VsOut {
|
|
69
|
+
// Standard fullscreen triangle (covers viewport, no UVs needed since
|
|
70
|
+
// the fragment shader reads from textureLoad with @builtin(position)).
|
|
71
|
+
var p = array<vec2<f32>, 3>(
|
|
72
|
+
vec2<f32>(-1.0, -3.0),
|
|
73
|
+
vec2<f32>(-1.0, 1.0),
|
|
74
|
+
vec2<f32>( 3.0, 1.0)
|
|
75
|
+
);
|
|
76
|
+
var o: VsOut;
|
|
77
|
+
o.pos = vec4<f32>(p[v], 0.0, 1.0);
|
|
78
|
+
return o;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
fn sampleDepthClamped(ip: vec2<i32>, dims: vec2<i32>) -> f32 {
|
|
82
|
+
let c = vec2<i32>(clamp(ip.x, 0, dims.x - 1), clamp(ip.y, 0, dims.y - 1));
|
|
83
|
+
return ${depthLoadExpr};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
@fragment
|
|
87
|
+
fn fs_main(@builtin(position) fragPos: vec4<f32>) -> @location(0) vec4<f32> {
|
|
88
|
+
let dimsU = textureDimensions(depthTex);
|
|
89
|
+
let dims = vec2<i32>(i32(dimsU.x), i32(dimsU.y));
|
|
90
|
+
let p = vec2<i32>(i32(fragPos.x), i32(fragPos.y));
|
|
91
|
+
|
|
92
|
+
let center = sampleDepthClamped(p, dims);
|
|
93
|
+
// Reverse-Z: 0 = far plane (no geometry written here), so skip.
|
|
94
|
+
if (center <= 1e-5) {
|
|
95
|
+
return vec4<f32>(0.0, 0.0, 0.0, 0.0);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
let r = max(1, i32(params.radiusPx));
|
|
99
|
+
let logCenter = log(center);
|
|
100
|
+
|
|
101
|
+
var accum = 0.0;
|
|
102
|
+
var count = 0.0;
|
|
103
|
+
|
|
104
|
+
// Cardinal taps
|
|
105
|
+
let neighbourOffsets4 = array<vec2<i32>, 4>(
|
|
106
|
+
vec2<i32>( r, 0),
|
|
107
|
+
vec2<i32>(-r, 0),
|
|
108
|
+
vec2<i32>( 0, r),
|
|
109
|
+
vec2<i32>( 0, -r),
|
|
110
|
+
);
|
|
111
|
+
for (var i = 0; i < 4; i = i + 1) {
|
|
112
|
+
let dn = sampleDepthClamped(p + neighbourOffsets4[i], dims);
|
|
113
|
+
if (dn > 1e-5) {
|
|
114
|
+
// log(centre) - log(dn) > 0 when neighbour is further (smaller depth)
|
|
115
|
+
// → darken silhouette edges.
|
|
116
|
+
accum = accum + max(0.0, logCenter - log(dn));
|
|
117
|
+
count = count + 1.0;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if (params.highQuality > 0.5) {
|
|
122
|
+
let neighbourOffsets8 = array<vec2<i32>, 4>(
|
|
123
|
+
vec2<i32>( r, r),
|
|
124
|
+
vec2<i32>(-r, r),
|
|
125
|
+
vec2<i32>( r, -r),
|
|
126
|
+
vec2<i32>(-r, -r),
|
|
127
|
+
);
|
|
128
|
+
for (var i = 0; i < 4; i = i + 1) {
|
|
129
|
+
let dn = sampleDepthClamped(p + neighbourOffsets8[i], dims);
|
|
130
|
+
if (dn > 1e-5) {
|
|
131
|
+
accum = accum + max(0.0, logCenter - log(dn));
|
|
132
|
+
count = count + 1.0;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
let meanLog = accum / max(count, 1.0);
|
|
138
|
+
// exp(-300 * meanLog * strength) — 300 matches Potree's default sensitivity.
|
|
139
|
+
// Output (1 - shade) as alpha; the blend mode multiplies dst by (1 - alpha).
|
|
140
|
+
let shade = exp(-300.0 * meanLog * params.strength);
|
|
141
|
+
let darken = clamp(1.0 - shade, 0.0, 0.85);
|
|
142
|
+
return vec4<f32>(0.0, 0.0, 0.0, darken);
|
|
143
|
+
}
|
|
144
|
+
`,
|
|
145
|
+
});
|
|
146
|
+
this.pipeline = this.device.createRenderPipeline({
|
|
147
|
+
layout: this.device.createPipelineLayout({ bindGroupLayouts: [this.bindGroupLayout] }),
|
|
148
|
+
vertex: { module: shader, entryPoint: 'vs_main' },
|
|
149
|
+
fragment: {
|
|
150
|
+
module: shader,
|
|
151
|
+
entryPoint: 'fs_main',
|
|
152
|
+
targets: [{
|
|
153
|
+
format: this.colorFormat,
|
|
154
|
+
// Same darken-overlay blend as the existing PostProcessor:
|
|
155
|
+
// dst' = dst * (1 - srcAlpha), src colour discarded.
|
|
156
|
+
blend: {
|
|
157
|
+
color: { srcFactor: 'zero', dstFactor: 'one-minus-src-alpha' },
|
|
158
|
+
alpha: { srcFactor: 'zero', dstFactor: 'one' },
|
|
159
|
+
},
|
|
160
|
+
}],
|
|
161
|
+
},
|
|
162
|
+
primitive: { topology: 'triangle-list' },
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
apply(encoder, opts, params) {
|
|
166
|
+
if (this.destroyed)
|
|
167
|
+
return;
|
|
168
|
+
if (this.cachedBindGroup === null || this.cachedDepthView !== opts.depthView) {
|
|
169
|
+
this.cachedBindGroup = this.device.createBindGroup({
|
|
170
|
+
layout: this.bindGroupLayout,
|
|
171
|
+
entries: [
|
|
172
|
+
{ binding: 0, resource: opts.depthView },
|
|
173
|
+
{ binding: 1, resource: { buffer: this.uniformBuffer } },
|
|
174
|
+
],
|
|
175
|
+
});
|
|
176
|
+
this.cachedDepthView = opts.depthView;
|
|
177
|
+
}
|
|
178
|
+
this.uniformStaging[0] = params.strength;
|
|
179
|
+
this.uniformStaging[1] = params.radiusPx;
|
|
180
|
+
this.uniformStaging[2] = params.highQuality ? 1 : 0;
|
|
181
|
+
this.uniformStaging[3] = 0;
|
|
182
|
+
this.device.queue.writeBuffer(this.uniformBuffer, 0, this.uniformStaging);
|
|
183
|
+
const pass = encoder.beginRenderPass({
|
|
184
|
+
colorAttachments: [{
|
|
185
|
+
view: opts.targetView,
|
|
186
|
+
loadOp: 'load',
|
|
187
|
+
storeOp: 'store',
|
|
188
|
+
}],
|
|
189
|
+
});
|
|
190
|
+
pass.setPipeline(this.pipeline);
|
|
191
|
+
pass.setBindGroup(0, this.cachedBindGroup);
|
|
192
|
+
pass.draw(3, 1, 0, 0);
|
|
193
|
+
pass.end();
|
|
194
|
+
}
|
|
195
|
+
destroy() {
|
|
196
|
+
if (this.destroyed)
|
|
197
|
+
return;
|
|
198
|
+
this.destroyed = true;
|
|
199
|
+
this.uniformBuffer.destroy();
|
|
200
|
+
this.cachedBindGroup = null;
|
|
201
|
+
this.cachedDepthView = null;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=edl-pass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edl-pass.js","sourceRoot":"","sources":["../src/edl-pass.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AA0C/D,MAAM,OAAO,OAAO;IACV,MAAM,CAAY;IAClB,WAAW,CAAmB;IAC9B,cAAc,CAAU;IACxB,aAAa,CAAY;IACzB,cAAc,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IACrC,eAAe,CAAqB;IACpC,QAAQ,CAAoB;IAC5B,eAAe,GAAwB,IAAI,CAAC;IAC5C,eAAe,GAA0B,IAAI,CAAC;IAC9C,SAAS,GAAG,KAAK,CAAC;IAE1B,YAAY,MAAoB,EAAE,WAAmB;QACnD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC,cAAc,GAAG,WAAW,GAAG,CAAC,CAAC;QAEtC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;YAC5C,+DAA+D;YAC/D,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;SACxD,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC;YACvD,OAAO,EAAE;gBACP;oBACE,OAAO,EAAE,CAAC;oBACV,UAAU,EAAE,cAAc,CAAC,QAAQ;oBACnC,OAAO,EAAE;wBACP,UAAU,EAAE,OAAO;wBACnB,aAAa,EAAE,IAAI;wBACnB,YAAY,EAAE,IAAI,CAAC,cAAc;qBAClC;iBACF;gBACD;oBACE,OAAO,EAAE,CAAC;oBACV,UAAU,EAAE,cAAc,CAAC,QAAQ;oBACnC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;iBAC5B;aACF;SACF,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc;YACtC,CAAC,CAAC,oEAAoE;YACtE,CAAC,CAAC,uDAAuD,CAAC;QAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc;YACvC,iEAAiE;YACjE,6DAA6D;YAC7D,sCAAsC;YACtC,CAAC,CAAC,6BAA6B;YAC/B,CAAC,CAAC,6BAA6B,CAAC;QAElC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC;YAC5C,IAAI,EAAE;;;;;;;;EAQV,YAAY;;;;;;;;;;;;;;;;;;;;;;;WAuBH,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DvB;SACI,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC;YAC/C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,gBAAgB,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YACtF,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE;YACjD,QAAQ,EAAE;gBACR,MAAM,EAAE,MAAM;gBACd,UAAU,EAAE,SAAS;gBACrB,OAAO,EAAE,CAAC;wBACR,MAAM,EAAE,IAAI,CAAC,WAAW;wBACxB,2DAA2D;wBAC3D,qDAAqD;wBACrD,KAAK,EAAE;4BACL,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,qBAAqB,EAAE;4BAC9D,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE;yBAC/C;qBACF,CAAC;aACH;YACD,SAAS,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE;SACzC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAA0B,EAAE,IAAyB,EAAE,MAAgC;QAC3F,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YAC7E,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;gBACjD,MAAM,EAAE,IAAI,CAAC,eAAe;gBAC5B,OAAO,EAAE;oBACP,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE;oBACxC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE;iBACzD;aACF,CAAC,CAAC;YACH,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAE1E,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC;YACnC,gBAAgB,EAAE,CAAC;oBACjB,IAAI,EAAE,IAAI,CAAC,UAAU;oBACrB,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,OAAO;iBACjB,CAAC;SACH,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -23,7 +23,15 @@ export type { Ray, Vec3, Intersection } from './raycaster.js';
|
|
|
23
23
|
export type { SnapTarget, SnapOptions, EdgeLockInput, MagneticSnapResult } from './snap-detector.js';
|
|
24
24
|
export { ZeroCopyGpuUploader, createZeroCopyUploader, type WasmMemoryHandle, type GpuGeometryData, type GpuInstancedGeometryData, type ZeroCopyMeshMetadata, type ZeroCopyUploadResult, type ZeroCopyInstancedUploadResult, } from './zero-copy-uploader.js';
|
|
25
25
|
export { PickingManager } from './picking-manager.js';
|
|
26
|
+
export type { PointPickProvider } from './picking-manager.js';
|
|
26
27
|
export { RaycastEngine } from './raycast-engine.js';
|
|
28
|
+
export { PointPicker, decodePickSample } from './point-picker.js';
|
|
29
|
+
export type { PointPickNode, DecodedPickSample } from './point-picker.js';
|
|
30
|
+
export type { PointPickSizing } from './picker.js';
|
|
31
|
+
export { PointCloudRenderer } from './pointcloud/point-cloud-renderer.js';
|
|
32
|
+
export type { PointCloudAssetHandle, PointCloudRenderOptions, PointColorMode, PointSizeMode, ResolvedSectionPlane as PointResolvedSectionPlane, } from './pointcloud/point-cloud-renderer.js';
|
|
33
|
+
export { PointRenderPipeline } from './pointcloud/point-pipeline.js';
|
|
34
|
+
export type { PointCloudChunkInput, PointCloudNode, PointCloudNodeMeta, } from './pointcloud/point-cloud-node.js';
|
|
27
35
|
import { RenderPipeline } from './pipeline.js';
|
|
28
36
|
import { Camera } from './camera.js';
|
|
29
37
|
import { Scene } from './scene.js';
|
|
@@ -33,6 +41,7 @@ import { type CutPolygon2D, type DrawingLine2D } from './section-2d-overlay.js';
|
|
|
33
41
|
import type { InstancedGeometry } from '@ifc-lite/wasm';
|
|
34
42
|
import { Raycaster, type Intersection } from './raycaster.js';
|
|
35
43
|
import { SnapDetector, type SnapTarget, type SnapOptions, type EdgeLockInput, type MagneticSnapResult } from './snap-detector.js';
|
|
44
|
+
import type { PointCloudAsset } from '@ifc-lite/geometry';
|
|
36
45
|
/**
|
|
37
46
|
* Main renderer class
|
|
38
47
|
*/
|
|
@@ -47,6 +56,9 @@ export declare class Renderer {
|
|
|
47
56
|
private sectionPlaneRenderer;
|
|
48
57
|
private section2DOverlayRenderer;
|
|
49
58
|
private postProcessor;
|
|
59
|
+
private edlPass;
|
|
60
|
+
private edlOptions;
|
|
61
|
+
private pointCloudRenderer;
|
|
50
62
|
private visualEnhancementState;
|
|
51
63
|
private modelBounds;
|
|
52
64
|
private pickingManager;
|
|
@@ -62,6 +74,71 @@ export declare class Renderer {
|
|
|
62
74
|
* Initialize renderer
|
|
63
75
|
*/
|
|
64
76
|
init(): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Replace all loaded point clouds with `assets`.
|
|
79
|
+
*
|
|
80
|
+
* Phase 0 entry point — single-chunk inline assets from IFCx
|
|
81
|
+
* (`pcd::base64`, `points::array`, `points::base64`). Future phases
|
|
82
|
+
* accept streaming sources via a different overload.
|
|
83
|
+
*/
|
|
84
|
+
setPointClouds(assets: ReadonlyArray<PointCloudAsset>): void;
|
|
85
|
+
/** Append additional point clouds without clearing existing ones. */
|
|
86
|
+
addPointClouds(assets: ReadonlyArray<PointCloudAsset>): void;
|
|
87
|
+
/** Total number of point cloud assets currently uploaded. */
|
|
88
|
+
getPointCloudAssetCount(): number;
|
|
89
|
+
/** Total number of points across all point cloud assets. */
|
|
90
|
+
getPointCloudPointCount(): number;
|
|
91
|
+
/** Drop all point cloud GPU resources. */
|
|
92
|
+
clearPointClouds(): void;
|
|
93
|
+
/**
|
|
94
|
+
* Streaming entry: open an empty asset that will receive chunks via
|
|
95
|
+
* `appendPointCloudChunk`. Call `endPointCloudStream` when no more
|
|
96
|
+
* chunks will arrive (currently a no-op but kept for symmetry).
|
|
97
|
+
*/
|
|
98
|
+
beginPointCloudStream(meta: {
|
|
99
|
+
expressId: number;
|
|
100
|
+
ifcType?: string;
|
|
101
|
+
modelIndex?: number;
|
|
102
|
+
}): import('./pointcloud/point-cloud-renderer.js').PointCloudAssetHandle;
|
|
103
|
+
appendPointCloudChunk(handle: import('./pointcloud/point-cloud-renderer.js').PointCloudAssetHandle, chunk: import('./pointcloud/point-cloud-node.js').PointCloudChunkInput): void;
|
|
104
|
+
endPointCloudStream(handle: import('./pointcloud/point-cloud-renderer.js').PointCloudAssetHandle): void;
|
|
105
|
+
removePointCloudAsset(handle: import('./pointcloud/point-cloud-renderer.js').PointCloudAssetHandle): void;
|
|
106
|
+
/**
|
|
107
|
+
* Reassign a streamed point-cloud's expressId after upload. Use
|
|
108
|
+
* this when the federation registry assigns a new model offset and
|
|
109
|
+
* the renderer needs to emit the post-offset globalId in picking
|
|
110
|
+
* outputs. The change takes effect on the next render — no GPU
|
|
111
|
+
* buffer rewrite needed.
|
|
112
|
+
*/
|
|
113
|
+
relabelPointCloudAsset(handle: import('./pointcloud/point-cloud-renderer.js').PointCloudAssetHandle, newExpressId: number): void;
|
|
114
|
+
/**
|
|
115
|
+
* Compute model bounds from triangle meshes + remaining point clouds.
|
|
116
|
+
* Called from removeAsset / clear paths so bounds shrink correctly.
|
|
117
|
+
* Triangle meshes still drive the bounds when present (existing
|
|
118
|
+
* Scene-driven path), so this only re-folds in the point cloud
|
|
119
|
+
* extents over whatever the mesh path left.
|
|
120
|
+
*/
|
|
121
|
+
private recomputeModelBounds;
|
|
122
|
+
/** Aggregate bounds across all batched + individual meshes. Returns
|
|
123
|
+
* null if the scene has no mesh geometry. */
|
|
124
|
+
private computeMeshBounds;
|
|
125
|
+
/** Apply rendering options (color mode, fixed override, point size). */
|
|
126
|
+
setPointCloudOptions(opts: import('./pointcloud/point-cloud-renderer.js').PointCloudRenderOptions): void;
|
|
127
|
+
/**
|
|
128
|
+
* Toggle Eye-Dome Lighting and tune its strength.
|
|
129
|
+
*
|
|
130
|
+
* EDL adds depth perception to point clouds (and meshes) via screen-
|
|
131
|
+
* space depth gradient — silhouette pixels get a soft black halo.
|
|
132
|
+
* Cheap: ~9 texture taps per pixel. Only runs when point clouds are
|
|
133
|
+
* loaded.
|
|
134
|
+
*/
|
|
135
|
+
setEdlOptions(opts: {
|
|
136
|
+
enabled?: boolean;
|
|
137
|
+
strength?: number;
|
|
138
|
+
radiusPx?: number;
|
|
139
|
+
highQuality?: boolean;
|
|
140
|
+
}): void;
|
|
141
|
+
private expandModelBoundsForPointClouds;
|
|
65
142
|
/**
|
|
66
143
|
* Load geometry from GeometryResult or MeshData array
|
|
67
144
|
* This is the main entry point for loading IFC geometry into the renderer
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAInE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC9E,YAAY,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC9H,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAClF,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC3E,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9D,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGrG,OAAO,EACH,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,6BAA6B,GACrC,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAInE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC9E,YAAY,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC9H,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAClF,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC3E,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9D,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGrG,OAAO,EACH,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,6BAA6B,GACrC,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,YAAY,EACR,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,oBAAoB,IAAI,yBAAyB,GACpD,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,YAAY,EACR,oBAAoB,EACpB,cAAc,EACd,kBAAkB,GACrB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAE,cAAc,EAA2B,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAKnC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EACR,aAAa,EACb,WAAW,EACX,UAAU,EACV,IAAI,EAKP,MAAM,YAAY,CAAC;AAEpB,OAAO,EAA4B,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE1G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAMlI,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAwB1D;;GAEG;AACH,qBAAa,QAAQ;IACjB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,iBAAiB,CAAwC;IACjE,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,oBAAoB,CAAqC;IACjE,OAAO,CAAC,wBAAwB,CAAyC;IACzE,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,UAAU,CAKhB;IACF,OAAO,CAAC,kBAAkB,CAAmC;IAC7D,OAAO,CAAC,sBAAsB,CAK5B;IAGF,OAAO,CAAC,WAAW,CAAuG;IAG1H,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,aAAa,CAAgB;IAGrC,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAQ;IAKjD,OAAO,CAAC,gBAAgB,CAAkB;IAI1C,OAAO,CAAC,oBAAoB,CAAkB;IAI9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAuD;gBAE7E,MAAM,EAAE,iBAAiB;IAWrC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA+D3B;;;;;;OAMG;IACH,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,IAAI;IAc5D,qEAAqE;IACrE,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,IAAI;IAY5D,6DAA6D;IAC7D,uBAAuB,IAAI,MAAM;IAIjC,4DAA4D;IAC5D,uBAAuB,IAAI,MAAM;IAIjC,0CAA0C;IAC1C,gBAAgB,IAAI,IAAI;IAOxB;;;;OAIG;IACH,qBAAqB,CAAC,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,sCAAsC,EAAE,qBAAqB;IAO/J,qBAAqB,CACjB,MAAM,EAAE,OAAO,sCAAsC,EAAE,qBAAqB,EAC5E,KAAK,EAAE,OAAO,kCAAkC,EAAE,oBAAoB,GACvE,IAAI;IAQP,mBAAmB,CAAC,MAAM,EAAE,OAAO,sCAAsC,EAAE,qBAAqB,GAAG,IAAI;IAKvG,qBAAqB,CAAC,MAAM,EAAE,OAAO,sCAAsC,EAAE,qBAAqB,GAAG,IAAI;IASzG;;;;;;OAMG;IACH,sBAAsB,CAClB,MAAM,EAAE,OAAO,sCAAsC,EAAE,qBAAqB,EAC5E,YAAY,EAAE,MAAM,GACrB,IAAI;IAKP;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAuB5B;kDAC8C;IAC9C,OAAO,CAAC,iBAAiB;IAkBzB,wEAAwE;IACxE,oBAAoB,CAAC,IAAI,EAAE,OAAO,sCAAsC,EAAE,uBAAuB,GAAG,IAAI;IAKxG;;;;;;;OAOG;IACH,aAAa,CAAC,IAAI,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAQ7G,OAAO,CAAC,+BAA+B;IAmBvC;;;;;OAKG;IACH,YAAY,CAAC,QAAQ,EAAE,OAAO,oBAAoB,EAAE,cAAc,GAAG,OAAO,oBAAoB,EAAE,QAAQ,EAAE,GAAG,IAAI;IAyBnH;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,oBAAoB,EAAE,QAAQ,EAAE,EAAE,WAAW,GAAE,OAAe,GAAG,IAAI;IAiB9F;;OAEG;IACH,SAAS,IAAI,IAAI;IA+BjB;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IA4BzB;;;OAGG;IACH,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAgFvD;;;;OAIG;IACH,kBAAkB,CAAC,aAAa,EAAE,OAAO,oBAAoB,EAAE,QAAQ,EAAE,GAAG,IAAI;IAwFhF;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAqB3B;;OAEG;IACH,cAAc,IAAI;QAAE,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GAAG,IAAI;IAI/G;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GAAG,IAAI;IAIpH;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA0BzB;;;OAGG;IACH,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAsD5C,OAAO,CAAC,wBAAwB;IA0BhC;;OAEG;IACH,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,IAAI;IAkgCzC;;;;;;;OAOG;IACG,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAInF;;;;;;OAMG;IACH,YAAY,CACR,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,OAAO,CAAC,EAAE,WAAW,GAAG;QAAE,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;KAAE,GAC/D;QAAE,YAAY,EAAE,YAAY,CAAC;QAAC,IAAI,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI;IAI3D;;;;;;OAMG;IACH,oBAAoB,CAChB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,eAAe,EAAE,aAAa,EAC9B,OAAO,CAAC,EAAE,WAAW,GAAG;QAAE,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;KAAE,GAC/D,kBAAkB,GAAG;QAAE,YAAY,EAAE,YAAY,GAAG,IAAI,CAAA;KAAE;IAI7D;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAI1B;;OAEG;IACH,YAAY,IAAI,SAAS;IAIzB;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;OAEG;IACH,WAAW,IAAI,IAAI;IAUnB;;;OAGG;IACH,aAAa,IAAI,IAAI;IAIrB;;;;OAIG;IACH,iBAAiB,IAAI,OAAO;IAI5B;;;;OAIG;IACH,oBAAoB,IAAI,OAAO;IAM/B;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAM3C,SAAS,IAAI,MAAM;IAInB,QAAQ,IAAI,KAAK;IAIjB;;;;OAIG;IACH,sBAAsB,CAClB,QAAQ,EAAE,YAAY,EAAE,EACxB,KAAK,EAAE,aAAa,EAAE,EACtB,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAC/B,QAAQ,EAAE,MAAM,EAAG,mBAAmB;IACtC,YAAY,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,EAAG,2CAA2C;IAC3F,OAAO,GAAE,OAAe,GACzB,IAAI;IAqBP;;OAEG;IACH,qBAAqB,IAAI,IAAI;IAM7B;;OAEG;IACH,mBAAmB,IAAI,OAAO;IAI9B;;OAEG;IACH,WAAW,IAAI,cAAc,GAAG,IAAI;IAIpC;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,YAAY,IAAI,SAAS,GAAG,IAAI;IAOhC;;;;OAIG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAqBjD;;;;;;;OAOG;IACH,OAAO,IAAI,IAAI;IAoCf;;OAEG;IACH,SAAS,IAAI,iBAAiB;CAGjC"}
|