@ifc-lite/renderer 6.4.0 → 6.5.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/camera-animation.d.ts +7 -1
- package/dist/camera-animation.d.ts.map +1 -1
- package/dist/camera-animation.js +19 -3
- package/dist/camera-animation.js.map +1 -1
- package/dist/camera-fit-geometry.d.ts +47 -0
- package/dist/camera-fit-geometry.d.ts.map +1 -0
- package/dist/camera-fit-geometry.js +44 -0
- package/dist/camera-fit-geometry.js.map +1 -0
- package/dist/camera-framing.d.ts +27 -21
- package/dist/camera-framing.d.ts.map +1 -1
- package/dist/camera-framing.js +47 -44
- package/dist/camera-framing.js.map +1 -1
- package/dist/camera-preset-view.d.ts +18 -0
- package/dist/camera-preset-view.d.ts.map +1 -1
- package/dist/camera-preset-view.js +42 -0
- package/dist/camera-preset-view.js.map +1 -1
- package/dist/camera.d.ts +14 -1
- package/dist/camera.d.ts.map +1 -1
- package/dist/camera.js +14 -2
- package/dist/camera.js.map +1 -1
- package/dist/clip-types.d.ts +35 -0
- package/dist/clip-types.d.ts.map +1 -0
- package/dist/clip-types.js +5 -0
- package/dist/clip-types.js.map +1 -0
- package/dist/device-recovery.js +11 -1
- package/dist/device-recovery.js.map +1 -1
- package/dist/device.d.ts +4 -4
- package/dist/device.js +9 -9
- package/dist/device.js.map +1 -1
- package/dist/extra-clip-planes.d.ts +57 -0
- package/dist/extra-clip-planes.d.ts.map +1 -0
- package/dist/extra-clip-planes.js +161 -0
- package/dist/extra-clip-planes.js.map +1 -0
- package/dist/gpu-counters.d.ts +4 -2
- package/dist/gpu-counters.d.ts.map +1 -1
- package/dist/gpu-counters.js +9 -6
- package/dist/gpu-counters.js.map +1 -1
- package/dist/index.d.ts +18 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +68 -90
- package/dist/index.js.map +1 -1
- package/dist/mesh-rte-uniforms.d.ts +7 -3
- package/dist/mesh-rte-uniforms.d.ts.map +1 -1
- package/dist/mesh-rte-uniforms.js +16 -2
- package/dist/mesh-rte-uniforms.js.map +1 -1
- package/dist/opaque-visibility-commands.d.ts +3 -0
- package/dist/opaque-visibility-commands.d.ts.map +1 -0
- package/dist/opaque-visibility-commands.js +11 -0
- package/dist/opaque-visibility-commands.js.map +1 -0
- package/dist/opaque-visibility-pass.d.ts +37 -0
- package/dist/opaque-visibility-pass.d.ts.map +1 -0
- package/dist/opaque-visibility-pass.js +230 -0
- package/dist/opaque-visibility-pass.js.map +1 -0
- package/dist/pick-types.d.ts +5 -1
- package/dist/pick-types.d.ts.map +1 -1
- package/dist/picker-rte-uniforms.d.ts +1 -1
- package/dist/picker-rte-uniforms.d.ts.map +1 -1
- package/dist/picker-rte-uniforms.js +4 -2
- package/dist/picker-rte-uniforms.js.map +1 -1
- package/dist/picker-shaders.d.ts +5 -0
- package/dist/picker-shaders.d.ts.map +1 -0
- package/dist/picker-shaders.js +157 -0
- package/dist/picker-shaders.js.map +1 -0
- package/dist/picker.d.ts +3 -0
- package/dist/picker.d.ts.map +1 -1
- package/dist/picker.js +43 -133
- package/dist/picker.js.map +1 -1
- package/dist/pipeline.d.ts +5 -9
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +34 -29
- package/dist/pipeline.js.map +1 -1
- package/dist/point-picker.d.ts +2 -1
- package/dist/point-picker.d.ts.map +1 -1
- package/dist/point-picker.js +12 -4
- package/dist/point-picker.js.map +1 -1
- package/dist/pointcloud/point-cloud-renderer.d.ts +4 -4
- package/dist/pointcloud/point-cloud-renderer.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-renderer.js +1 -1
- package/dist/pointcloud/point-cloud-renderer.js.map +1 -1
- package/dist/pointcloud/point-cloud-uniforms.d.ts +3 -1
- package/dist/pointcloud/point-cloud-uniforms.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-uniforms.js +3 -1
- package/dist/pointcloud/point-cloud-uniforms.js.map +1 -1
- package/dist/pointcloud/point-pipeline.d.ts +3 -1
- package/dist/pointcloud/point-pipeline.d.ts.map +1 -1
- package/dist/pointcloud/point-pipeline.js +4 -1
- package/dist/pointcloud/point-pipeline.js.map +1 -1
- package/dist/pointcloud/point-shader.wgsl.d.ts +1 -1
- package/dist/pointcloud/point-shader.wgsl.d.ts.map +1 -1
- package/dist/pointcloud/point-shader.wgsl.js +8 -0
- package/dist/pointcloud/point-shader.wgsl.js.map +1 -1
- package/dist/post-pass-chain.d.ts +1 -0
- package/dist/post-pass-chain.d.ts.map +1 -1
- package/dist/post-pass-chain.js +1 -0
- package/dist/post-pass-chain.js.map +1 -1
- package/dist/quantized-lifecycle.d.ts +6 -0
- package/dist/quantized-lifecycle.d.ts.map +1 -0
- package/dist/quantized-lifecycle.js +19 -0
- package/dist/quantized-lifecycle.js.map +1 -0
- package/dist/raycast-engine.d.ts.map +1 -1
- package/dist/raycast-engine.js +3 -2
- package/dist/raycast-engine.js.map +1 -1
- package/dist/render-section-draw.d.ts +5 -0
- package/dist/render-section-draw.d.ts.map +1 -1
- package/dist/render-section-draw.js +59 -25
- package/dist/render-section-draw.js.map +1 -1
- package/dist/render-section-plane.d.ts +5 -33
- package/dist/render-section-plane.d.ts.map +1 -1
- package/dist/render-section-plane.js +8 -175
- package/dist/render-section-plane.js.map +1 -1
- package/dist/renderer-frame-timing.d.ts +1 -0
- package/dist/renderer-frame-timing.d.ts.map +1 -1
- package/dist/renderer-frame-timing.js +8 -1
- package/dist/renderer-frame-timing.js.map +1 -1
- package/dist/renderer-overlays.d.ts +8 -2
- package/dist/renderer-overlays.d.ts.map +1 -1
- package/dist/renderer-overlays.js +22 -45
- package/dist/renderer-overlays.js.map +1 -1
- package/dist/scene-raycaster.d.ts +1 -1
- package/dist/scene-raycaster.d.ts.map +1 -1
- package/dist/scene-raycaster.js +18 -44
- package/dist/scene-raycaster.js.map +1 -1
- package/dist/scene-rect-select.d.ts.map +1 -1
- package/dist/scene-rect-select.js +2 -1
- package/dist/scene-rect-select.js.map +1 -1
- package/dist/section-2d-lift.d.ts +25 -0
- package/dist/section-2d-lift.d.ts.map +1 -1
- package/dist/section-2d-lift.js +35 -0
- package/dist/section-2d-lift.js.map +1 -1
- package/dist/section-2d-overlay.d.ts +41 -12
- package/dist/section-2d-overlay.d.ts.map +1 -1
- package/dist/section-2d-overlay.js +121 -179
- package/dist/section-2d-overlay.js.map +1 -1
- package/dist/section-2d-types.d.ts +2 -0
- package/dist/section-2d-types.d.ts.map +1 -1
- package/dist/section-cap-geometry.d.ts +33 -0
- package/dist/section-cap-geometry.d.ts.map +1 -0
- package/dist/section-cap-geometry.js +137 -0
- package/dist/section-cap-geometry.js.map +1 -0
- package/dist/section-cap-set.d.ts +60 -0
- package/dist/section-cap-set.d.ts.map +1 -0
- package/dist/section-cap-set.js +212 -0
- package/dist/section-cap-set.js.map +1 -0
- package/dist/section-cap-style.d.ts +3 -0
- package/dist/section-cap-style.d.ts.map +1 -1
- package/dist/section-cap-style.js.map +1 -1
- package/dist/section-cap-upload.d.ts +16 -0
- package/dist/section-cap-upload.d.ts.map +1 -0
- package/dist/section-cap-upload.js +52 -0
- package/dist/section-cap-upload.js.map +1 -0
- package/dist/section-exclusions.d.ts +26 -0
- package/dist/section-exclusions.d.ts.map +1 -0
- package/dist/section-exclusions.js +95 -0
- package/dist/section-exclusions.js.map +1 -0
- package/dist/section-plane-frames.d.ts +48 -0
- package/dist/section-plane-frames.d.ts.map +1 -0
- package/dist/section-plane-frames.js +49 -0
- package/dist/section-plane-frames.js.map +1 -0
- package/dist/section-plane-resolve.d.ts +63 -0
- package/dist/section-plane-resolve.d.ts.map +1 -0
- package/dist/section-plane-resolve.js +200 -0
- package/dist/section-plane-resolve.js.map +1 -0
- package/dist/selection-mask-pass.d.ts +2 -0
- package/dist/selection-mask-pass.d.ts.map +1 -1
- package/dist/selection-mask-pass.js +16 -4
- package/dist/selection-mask-pass.js.map +1 -1
- package/dist/selection-mask-pipelines.d.ts +5 -1
- package/dist/selection-mask-pipelines.d.ts.map +1 -1
- package/dist/selection-mask-pipelines.js +27 -3
- package/dist/selection-mask-pipelines.js.map +1 -1
- package/dist/selection-outline-frame.d.ts +3 -1
- package/dist/selection-outline-frame.d.ts.map +1 -1
- package/dist/selection-outline-frame.js +2 -1
- package/dist/selection-outline-frame.js.map +1 -1
- package/dist/shaders/depth-nudge.wgsl.d.ts +2 -2
- package/dist/shaders/depth-nudge.wgsl.d.ts.map +1 -1
- package/dist/shaders/depth-nudge.wgsl.js +1 -18
- package/dist/shaders/depth-nudge.wgsl.js.map +1 -1
- package/dist/shaders/main.wgsl.d.ts +1 -1
- package/dist/shaders/main.wgsl.d.ts.map +1 -1
- package/dist/shaders/main.wgsl.js +9 -1
- package/dist/shaders/main.wgsl.js.map +1 -1
- package/dist/shaders/mesh-uniforms.wgsl.d.ts +1 -1
- package/dist/shaders/mesh-uniforms.wgsl.d.ts.map +1 -1
- package/dist/shaders/mesh-uniforms.wgsl.js +11 -3
- package/dist/shaders/mesh-uniforms.wgsl.js.map +1 -1
- package/dist/shaders/opaque-visibility.wgsl.d.ts +11 -0
- package/dist/shaders/opaque-visibility.wgsl.d.ts.map +1 -0
- package/dist/shaders/opaque-visibility.wgsl.js +55 -0
- package/dist/shaders/opaque-visibility.wgsl.js.map +1 -0
- package/dist/shaders/section-2d-overlay.wgsl.d.ts +11 -5
- package/dist/shaders/section-2d-overlay.wgsl.d.ts.map +1 -1
- package/dist/shaders/section-2d-overlay.wgsl.js +31 -5
- package/dist/shaders/section-2d-overlay.wgsl.js.map +1 -1
- package/dist/shaders/selection-mask.wgsl.d.ts +1 -1
- package/dist/shaders/selection-mask.wgsl.d.ts.map +1 -1
- package/dist/shaders/selection-mask.wgsl.js +10 -4
- package/dist/shaders/selection-mask.wgsl.js.map +1 -1
- package/dist/shaders/shadow.wgsl.d.ts +1 -1
- package/dist/shaders/shadow.wgsl.d.ts.map +1 -1
- package/dist/shaders/shadow.wgsl.js +22 -7
- package/dist/shaders/shadow.wgsl.js.map +1 -1
- package/dist/shaders/symbolic-overlay.wgsl.d.ts +1 -1
- package/dist/shaders/symbolic-overlay.wgsl.d.ts.map +1 -1
- package/dist/shadow-occluders.d.ts.map +1 -1
- package/dist/shadow-occluders.js +4 -0
- package/dist/shadow-occluders.js.map +1 -1
- package/dist/shadow-pass.d.ts +2 -5
- package/dist/shadow-pass.d.ts.map +1 -1
- package/dist/shadow-pass.js +17 -17
- package/dist/shadow-pass.js.map +1 -1
- package/dist/shadow-types.d.ts +7 -0
- package/dist/shadow-types.d.ts.map +1 -1
- package/dist/shadow-types.js.map +1 -1
- package/dist/source-curve-clipping.d.ts.map +1 -1
- package/dist/source-curve-clipping.js +7 -1
- package/dist/source-curve-clipping.js.map +1 -1
- package/dist/source-curve-snap.d.ts.map +1 -1
- package/dist/source-curve-snap.js +2 -1
- package/dist/source-curve-snap.js.map +1 -1
- package/dist/types.d.ts +12 -16
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -23,11 +23,12 @@
|
|
|
23
23
|
*/
|
|
24
24
|
import { PIPELINE_CONSTANTS } from './constants.js';
|
|
25
25
|
import { createSectionCapPipelines } from './section-cap-pipelines.js';
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
26
|
+
import { SectionCapSet } from './section-cap-set.js';
|
|
27
|
+
import { EXTRA_CLIP_BYTES } from './extra-clip-planes.js';
|
|
28
|
+
import { SECTION_2D_CAP_FILL_WGSL, SECTION_2D_CAP_LINE_WGSL, SECTION_2D_MAX_EXTRA_CAPS, SECTION_2D_OVERLAY_LINE_WGSL, SECTION_2D_UNIFORM_BYTES, SECTION_2D_UNIFORM_SLOT_COUNT, SECTION_2D_UNIFORM_SLOT_INDEX, sectionUniformSlotStride, } from './shaders/section-2d-overlay.wgsl.js';
|
|
29
29
|
import { WorldLineBuffer, } from './section-2d-line-buffer.js';
|
|
30
30
|
import { LINE_OVERLAY_CHANNELS, } from './section-2d-types.js';
|
|
31
|
+
export { capHighlightKey } from './section-2d-lift.js';
|
|
31
32
|
export { LINE_OVERLAY_CHANNELS } from './section-2d-types.js';
|
|
32
33
|
export class Section2DOverlayRenderer {
|
|
33
34
|
device;
|
|
@@ -39,6 +40,12 @@ export class Section2DOverlayRenderer {
|
|
|
39
40
|
bindGroupLayout = null;
|
|
40
41
|
uniformBuffer = null;
|
|
41
42
|
bindGroup = null;
|
|
43
|
+
/** The cap's outline pipeline: the line pipeline plus the clip against the other cutting planes (#7545). */
|
|
44
|
+
capLinePipeline = null;
|
|
45
|
+
/** Group 1 of the cap pipelines: the planes that clip each cap, one block per cap. */
|
|
46
|
+
clipBindGroup = null;
|
|
47
|
+
clipBuffer = null;
|
|
48
|
+
clipStride = 0;
|
|
42
49
|
/** Byte stride between the uniform slots in {@link uniformBuffer}. Set by `init()`. */
|
|
43
50
|
uniformStride = 0;
|
|
44
51
|
format;
|
|
@@ -49,16 +56,10 @@ export class Section2DOverlayRenderer {
|
|
|
49
56
|
// opaque black for backwards compatibility; a consumer can theme it (e.g. light
|
|
50
57
|
// lines on a dark canvas) via setOverlayLineColor().
|
|
51
58
|
overlayLineColor = [0, 0, 0, 1];
|
|
52
|
-
//
|
|
53
|
-
// these ride
|
|
54
|
-
// WorldLineBuffers.
|
|
55
|
-
|
|
56
|
-
fillIndexBuffer = null;
|
|
57
|
-
fillIndexCount = 0;
|
|
58
|
-
lineVertexBuffer = null;
|
|
59
|
-
lineVertexCount = 0;
|
|
60
|
-
/** f64 cap anchor retained separately from the local cap vertices. */
|
|
61
|
-
capAnchor = null;
|
|
59
|
+
// The section-cut cap geometry, one per cutting plane (#7545). Unlike the
|
|
60
|
+
// world-space overlays below these ride their plane and the fill half is
|
|
61
|
+
// indexed, so they are not WorldLineBuffers.
|
|
62
|
+
caps = new SectionCapSet();
|
|
62
63
|
/**
|
|
63
64
|
* One world-space vertex buffer per {@link LineOverlayChannel}, each on its
|
|
64
65
|
* own uniform slot.
|
|
@@ -113,10 +114,22 @@ export class Section2DOverlayRenderer {
|
|
|
113
114
|
const pipelineLayout = this.device.createPipelineLayout({
|
|
114
115
|
bindGroupLayouts: [this.bindGroupLayout],
|
|
115
116
|
});
|
|
117
|
+
// The cap pipelines add group 1: the planes that clip this cap, one block per cap
|
|
118
|
+
// addressed by a dynamic offset (the primary cap and up to seven more, #7545).
|
|
119
|
+
const clipLayout = this.device.createBindGroupLayout({
|
|
120
|
+
entries: [{
|
|
121
|
+
binding: 0,
|
|
122
|
+
visibility: GPUShaderStage.FRAGMENT,
|
|
123
|
+
buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: EXTRA_CLIP_BYTES },
|
|
124
|
+
}],
|
|
125
|
+
});
|
|
126
|
+
const capPipelineLayout = this.device.createPipelineLayout({
|
|
127
|
+
bindGroupLayouts: [this.bindGroupLayout, clipLayout],
|
|
128
|
+
});
|
|
116
129
|
const fillShader = this.device.createShaderModule({ code: SECTION_2D_CAP_FILL_WGSL });
|
|
117
130
|
const lineShader = this.device.createShaderModule({ code: SECTION_2D_OVERLAY_LINE_WGSL });
|
|
118
131
|
// Pipelines for filled polygons: the cap colour, and its depth (#5384).
|
|
119
|
-
const cap = createSectionCapPipelines(this.device,
|
|
132
|
+
const cap = createSectionCapPipelines(this.device, capPipelineLayout, fillShader, this.format, this.sampleCount);
|
|
120
133
|
this.fillPipeline = cap.fill;
|
|
121
134
|
this.fillDepthPipeline = cap.depth;
|
|
122
135
|
// The descriptor is retained so the selected-centreline depth variant can
|
|
@@ -159,6 +172,13 @@ export class Section2DOverlayRenderer {
|
|
|
159
172
|
},
|
|
160
173
|
};
|
|
161
174
|
this.linePipeline = this.device.createRenderPipeline(this.linePipelineDescriptor);
|
|
175
|
+
const capLineShader = this.device.createShaderModule({ code: SECTION_2D_CAP_LINE_WGSL });
|
|
176
|
+
this.capLinePipeline = this.device.createRenderPipeline({
|
|
177
|
+
...this.linePipelineDescriptor,
|
|
178
|
+
layout: capPipelineLayout,
|
|
179
|
+
vertex: { ...this.linePipelineDescriptor.vertex, module: capLineShader },
|
|
180
|
+
fragment: { ...this.linePipelineDescriptor.fragment, module: capLineShader },
|
|
181
|
+
});
|
|
162
182
|
// One 160-byte uniform buffer shared by BOTH pipelines: the fill fragment
|
|
163
183
|
// shader reads up to params2 (144 B), the line shader reads
|
|
164
184
|
// viewProj/planeOffset plus the appended lineColor at byte offset 144, so
|
|
@@ -184,8 +204,39 @@ export class Section2DOverlayRenderer {
|
|
|
184
204
|
},
|
|
185
205
|
],
|
|
186
206
|
});
|
|
207
|
+
// One clip block per cap: the primary plane's and each extra plane's.
|
|
208
|
+
const align = this.device.limits?.minUniformBufferOffsetAlignment ?? 256;
|
|
209
|
+
this.clipStride = Math.ceil(EXTRA_CLIP_BYTES / (Number.isFinite(align) && align > 0 ? align : 256))
|
|
210
|
+
* (Number.isFinite(align) && align > 0 ? align : 256);
|
|
211
|
+
this.clipBuffer = this.device.createBuffer({
|
|
212
|
+
size: this.clipStride * (1 + SECTION_2D_MAX_EXTRA_CAPS),
|
|
213
|
+
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
214
|
+
});
|
|
215
|
+
this.clipBindGroup = this.device.createBindGroup({
|
|
216
|
+
layout: clipLayout,
|
|
217
|
+
entries: [{ binding: 0, resource: { buffer: this.clipBuffer, offset: 0, size: EXTRA_CLIP_BYTES } }],
|
|
218
|
+
});
|
|
187
219
|
this.initialized = true;
|
|
188
220
|
}
|
|
221
|
+
/** Everything a cap draw borrows, or null before `init()` produced it (or after `dispose()`). */
|
|
222
|
+
capResources() {
|
|
223
|
+
if (!this.fillPipeline || !this.fillDepthPipeline || !this.capLinePipeline || !this.uniformBuffer
|
|
224
|
+
|| !this.bindGroup || !this.clipBindGroup || !this.clipBuffer)
|
|
225
|
+
return null;
|
|
226
|
+
return {
|
|
227
|
+
device: this.device,
|
|
228
|
+
fillPipeline: this.fillPipeline,
|
|
229
|
+
fillDepthPipeline: this.fillDepthPipeline,
|
|
230
|
+
outlinePipeline: this.capLinePipeline,
|
|
231
|
+
bindGroup: this.bindGroup,
|
|
232
|
+
uniformBuffer: this.uniformBuffer,
|
|
233
|
+
uniformStride: this.uniformStride,
|
|
234
|
+
clipBindGroup: this.clipBindGroup,
|
|
235
|
+
clipBuffer: this.clipBuffer,
|
|
236
|
+
clipStride: this.clipStride,
|
|
237
|
+
lineColor: this.overlayLineColor,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
189
240
|
/**
|
|
190
241
|
* The shared line-pipeline resources a WorldLineBuffer borrows for a draw.
|
|
191
242
|
* Returns null before `init()` has produced them (or after `dispose()`), so
|
|
@@ -217,68 +268,30 @@ export class Section2DOverlayRenderer {
|
|
|
217
268
|
*/
|
|
218
269
|
uploadDrawing(polygons, lines, axis, planePosition, flipped = false, customPlane) {
|
|
219
270
|
this.init();
|
|
220
|
-
this.
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
const fill = buildCapFillGeometry(polygons, lift, anchor);
|
|
239
|
-
if (fill) {
|
|
240
|
-
this.fillVertexBuffer = this.device.createBuffer({
|
|
241
|
-
size: fill.vertices.byteLength,
|
|
242
|
-
usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
|
|
243
|
-
});
|
|
244
|
-
this.device.queue.writeBuffer(this.fillVertexBuffer, 0, fill.vertices);
|
|
245
|
-
this.fillIndexBuffer = this.device.createBuffer({
|
|
246
|
-
size: fill.indices.byteLength,
|
|
247
|
-
usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,
|
|
248
|
-
});
|
|
249
|
-
this.device.queue.writeBuffer(this.fillIndexBuffer, 0, fill.indices);
|
|
250
|
-
this.fillIndexCount = fill.indices.length;
|
|
251
|
-
}
|
|
252
|
-
const outline = buildDrawingOutlineVertices(polygons, lines, lift, anchor);
|
|
253
|
-
if (outline) {
|
|
254
|
-
this.lineVertexBuffer = this.device.createBuffer({
|
|
255
|
-
size: outline.byteLength,
|
|
256
|
-
usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
|
|
257
|
-
});
|
|
258
|
-
this.device.queue.writeBuffer(this.lineVertexBuffer, 0, outline);
|
|
259
|
-
this.lineVertexCount = outline.length / 3; // Each vertex is 3 floats
|
|
260
|
-
}
|
|
261
|
-
this.capAnchor = anchor;
|
|
271
|
+
this.caps.upload(this.device, null, polygons, lines, axis, planePosition, flipped, customPlane);
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Upload the cap of a cutting plane beyond the first (#7545), under `key` (the
|
|
275
|
+
* plane's id). Same arguments as {@link uploadDrawing}; each key holds its own
|
|
276
|
+
* cap, so planes never overwrite one another.
|
|
277
|
+
*/
|
|
278
|
+
uploadExtraDrawing(key, polygons, lines, axis, planePosition, flipped = false, customPlane) {
|
|
279
|
+
this.init();
|
|
280
|
+
this.caps.upload(this.device, key, polygons, lines, axis, planePosition, flipped, customPlane);
|
|
281
|
+
}
|
|
282
|
+
/** Release the caps of every extra plane not in `keep` (a plane removed or turned off). */
|
|
283
|
+
clearExtraGeometry(keep = new Set()) {
|
|
284
|
+
this.caps.clearExtrasExcept(keep);
|
|
285
|
+
}
|
|
286
|
+
/** The keys of the extra caps held now. */
|
|
287
|
+
extraGeometryKeys() {
|
|
288
|
+
return this.caps.extraKeys();
|
|
262
289
|
}
|
|
263
290
|
/**
|
|
264
291
|
* Clear uploaded geometry
|
|
265
292
|
*/
|
|
266
293
|
clearGeometry() {
|
|
267
|
-
|
|
268
|
-
this.fillVertexBuffer.destroy();
|
|
269
|
-
this.fillVertexBuffer = null;
|
|
270
|
-
}
|
|
271
|
-
if (this.fillIndexBuffer) {
|
|
272
|
-
this.fillIndexBuffer.destroy();
|
|
273
|
-
this.fillIndexBuffer = null;
|
|
274
|
-
}
|
|
275
|
-
if (this.lineVertexBuffer) {
|
|
276
|
-
this.lineVertexBuffer.destroy();
|
|
277
|
-
this.lineVertexBuffer = null;
|
|
278
|
-
}
|
|
279
|
-
this.fillIndexCount = 0;
|
|
280
|
-
this.lineVertexCount = 0;
|
|
281
|
-
this.capAnchor = null;
|
|
294
|
+
this.caps.clear(null);
|
|
282
295
|
}
|
|
283
296
|
/**
|
|
284
297
|
* Set the colour of the overlay lines (annotation / alignment / grid) and the
|
|
@@ -364,121 +377,44 @@ export class Section2DOverlayRenderer {
|
|
|
364
377
|
this.clashBoxLines.draw(pass, resources, viewProj, this.clashBoxLineColor, rteViewProj, camera);
|
|
365
378
|
}
|
|
366
379
|
/**
|
|
367
|
-
*
|
|
380
|
+
* Whether primary cap source is cached, even when exclusions currently hide it.
|
|
381
|
+
* Keep scheduling draws so a change to the exclusions can restore the cap.
|
|
368
382
|
*/
|
|
369
383
|
hasGeometry() {
|
|
370
|
-
return this.
|
|
384
|
+
return this.caps.has();
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Paint the given elements' cap polygons in their colour on every cutting
|
|
388
|
+
* plane's cap (the selection / hover highlight); `null` restores the caps. A
|
|
389
|
+
* no-op when it matches what is already drawn, so the render loop can call it
|
|
390
|
+
* every frame.
|
|
391
|
+
*/
|
|
392
|
+
setCapHighlight(highlight) {
|
|
393
|
+
this.caps.setHighlight(this.device, highlight);
|
|
394
|
+
}
|
|
395
|
+
/** Whether an extra plane has cached cap source, including currently excluded caps (#7545). */
|
|
396
|
+
hasExtraGeometry() {
|
|
397
|
+
return this.caps.hasExtras();
|
|
371
398
|
}
|
|
372
399
|
/**
|
|
373
|
-
* Draw the
|
|
400
|
+
* Draw the primary plane's cap and outline on the section plane.
|
|
401
|
+
* `clippedBy` is every OTHER cutting plane (#7545): the cap's fragments those
|
|
402
|
+
* planes remove are discarded, so a cap never draws where its model is cut away.
|
|
374
403
|
*/
|
|
375
|
-
draw(pass, options) {
|
|
404
|
+
draw(pass, options, clippedBy = []) {
|
|
376
405
|
this.init();
|
|
377
|
-
|
|
406
|
+
const resources = this.capResources();
|
|
407
|
+
if (!resources || !this.caps.has())
|
|
378
408
|
return;
|
|
379
|
-
|
|
380
|
-
|
|
409
|
+
this.caps.draw(pass, resources, options, clippedBy);
|
|
410
|
+
}
|
|
411
|
+
/** Draw the caps of the cutting planes beyond the first, each clipped by its own `clippedBy`. */
|
|
412
|
+
drawExtras(pass, options, caps) {
|
|
413
|
+
this.init();
|
|
414
|
+
const resources = this.capResources();
|
|
415
|
+
if (!resources || !this.caps.hasExtras())
|
|
381
416
|
return;
|
|
382
|
-
|
|
383
|
-
const { viewProj } = options;
|
|
384
|
-
// No offset — cap renders exactly on the section plane. The previous
|
|
385
|
-
// 0.3m bias was there to keep the outline lines clear of below-plane
|
|
386
|
-
// geometry, but it made the cap visually drift off the slider plane
|
|
387
|
-
// (users could see a 0.3m gap between the plane preview and the cap).
|
|
388
|
-
// The fill pipeline uses depthCompare 'greater-equal' (reverse-Z) so the
|
|
389
|
-
// cap ties cleanly with coincident below-plane top faces and is occluded
|
|
390
|
-
// by nearer model geometry — see the depthStencil comment in
|
|
391
|
-
// `section-cap-pipelines.ts`. There is no stencil test; the fill is restricted
|
|
392
|
-
// to the actual cap polygons by the triangle-plane intersection geometry
|
|
393
|
-
// `SectionCutter` produces, not by a stencil gate.
|
|
394
|
-
// Cap vertices are stored relative to capAnchor so that the RTE path can
|
|
395
|
-
// retain their small in-plane residuals. The legacy view-projection path
|
|
396
|
-
// still transforms world coordinates, however, so it must add that anchor
|
|
397
|
-
// back through planeOffset. Leaving it zero placed every rebased legacy
|
|
398
|
-
// cap around the world origin. Do not combine the two: RTE adds this same
|
|
399
|
-
// anchor as an f64 split drawable delta below.
|
|
400
|
-
const capAnchor = this.capAnchor;
|
|
401
|
-
const rteViewProj = options.rteViewProj;
|
|
402
|
-
const rteCamera = options.rteCamera;
|
|
403
|
-
const offset = capAnchor === null || (rteViewProj !== undefined && rteCamera !== undefined)
|
|
404
|
-
? [0, 0, 0]
|
|
405
|
-
: capAnchor;
|
|
406
|
-
// Update uniforms. Field offsets come from SECTION_2D_UNIFORM_SLOTS, which
|
|
407
|
-
// sits next to the WGSL struct it describes.
|
|
408
|
-
const S = SECTION_2D_UNIFORM_SLOTS;
|
|
409
|
-
const uniforms = new Float32Array(SECTION_2D_UNIFORM_FLOATS);
|
|
410
|
-
uniforms.set(viewProj, S.viewProj);
|
|
411
|
-
if (capAnchor !== null && rteViewProj !== undefined && rteCamera !== undefined) {
|
|
412
|
-
uniforms.set(rteViewProj, S.rteViewProj);
|
|
413
|
-
// Outside this camera's RTE envelope: the cap and its outline, the only
|
|
414
|
-
// draws below, are not rasterisable this frame (#6128).
|
|
415
|
-
if (!tryPackRteDrawableDelta(capAnchor, rteCamera, uniforms, S.originDeltaHigh))
|
|
416
|
-
return;
|
|
417
|
-
uniforms[S.originDeltaHigh + 3] = 1;
|
|
418
|
-
}
|
|
419
|
-
uniforms.set(this.overlayLineColor, S.lineColor); // section-cut outline colour
|
|
420
|
-
uniforms[S.planeOffset + 0] = offset[0];
|
|
421
|
-
uniforms[S.planeOffset + 1] = offset[1];
|
|
422
|
-
uniforms[S.planeOffset + 2] = offset[2];
|
|
423
|
-
uniforms[S.planeOffset + 3] = 0;
|
|
424
|
-
const cs = options.capStyle;
|
|
425
|
-
if (cs) {
|
|
426
|
-
uniforms.set(cs.fillColor, S.capFillColor);
|
|
427
|
-
uniforms.set(cs.strokeColor, S.capStrokeColor);
|
|
428
|
-
uniforms[S.params + 0] = cs.patternId;
|
|
429
|
-
uniforms[S.params + 1] = cs.spacingPx;
|
|
430
|
-
uniforms[S.params + 2] = cs.angleRad;
|
|
431
|
-
uniforms[S.params + 3] = cs.widthPx;
|
|
432
|
-
uniforms[S.params2 + 0] = cs.secondaryAngleRad;
|
|
433
|
-
}
|
|
434
|
-
else {
|
|
435
|
-
// Sensible defaults when caller omits style (e.g. legacy lines-only
|
|
436
|
-
// use): solid fill using a warm-paper colour, no hatch.
|
|
437
|
-
uniforms.set([0.92, 0.88, 0.78, 1], S.capFillColor);
|
|
438
|
-
uniforms.set([0.10, 0.10, 0.10, 1], S.capStrokeColor);
|
|
439
|
-
uniforms[S.params + 0] = 0; // solid pattern
|
|
440
|
-
uniforms[S.params + 1] = 8;
|
|
441
|
-
uniforms[S.params + 2] = Math.PI / 4;
|
|
442
|
-
uniforms[S.params + 3] = 1;
|
|
443
|
-
uniforms[S.params2 + 0] = -Math.PI / 4;
|
|
444
|
-
}
|
|
445
|
-
// The section cut owns slot 0. Both draws below read it, which is correct:
|
|
446
|
-
// the fill and the outline are one drawing with one plane offset and one
|
|
447
|
-
// style. What they must NOT share is the record the world-space line
|
|
448
|
-
// families write, whose zeroed cap-style tail would otherwise arrive here.
|
|
449
|
-
const capOffset = SECTION_2D_UNIFORM_SLOT_INDEX.sectionCut * this.uniformStride;
|
|
450
|
-
this.device.queue.writeBuffer(this.uniformBuffer, capOffset, uniforms);
|
|
451
|
-
// Filled polygons = the 3D section cap. Render them ONLY when the
|
|
452
|
-
// caller opts in (`showFills: true` + a capStyle). This replaces the
|
|
453
|
-
// old stencil-parity cap, which leaked hatch into empty sky on non-
|
|
454
|
-
// manifold IFC geometry. The polygons here come from exact triangle-
|
|
455
|
-
// plane intersection in `SectionCutter`, so the silhouette is
|
|
456
|
-
// mathematically correct.
|
|
457
|
-
if (options.showFills === true &&
|
|
458
|
-
options.capStyle &&
|
|
459
|
-
this.fillVertexBuffer &&
|
|
460
|
-
this.fillIndexBuffer &&
|
|
461
|
-
this.fillIndexCount > 0) {
|
|
462
|
-
pass.setPipeline(this.fillPipeline);
|
|
463
|
-
pass.setBindGroup(0, this.bindGroup, [capOffset]);
|
|
464
|
-
pass.setVertexBuffer(0, this.fillVertexBuffer);
|
|
465
|
-
pass.setIndexBuffer(this.fillIndexBuffer, 'uint32');
|
|
466
|
-
pass.drawIndexed(this.fillIndexCount);
|
|
467
|
-
// Then its depth, colour-masked, for the post passes (section-cap-pipelines.ts).
|
|
468
|
-
pass.setPipeline(this.fillDepthPipeline);
|
|
469
|
-
pass.drawIndexed(this.fillIndexCount);
|
|
470
|
-
}
|
|
471
|
-
// Outline lines on top of the fill. Gated by `showOutlines` so the
|
|
472
|
-
// user can toggle surfaces and outlines independently from the UI.
|
|
473
|
-
// Defaults to true when the caller omits the flag.
|
|
474
|
-
if (options.showOutlines !== false &&
|
|
475
|
-
this.lineVertexBuffer &&
|
|
476
|
-
this.lineVertexCount > 0) {
|
|
477
|
-
pass.setPipeline(this.linePipeline);
|
|
478
|
-
pass.setBindGroup(0, this.bindGroup, [capOffset]);
|
|
479
|
-
pass.setVertexBuffer(0, this.lineVertexBuffer);
|
|
480
|
-
pass.draw(this.lineVertexCount);
|
|
481
|
-
}
|
|
417
|
+
this.caps.drawExtras(pass, resources, options, caps);
|
|
482
418
|
}
|
|
483
419
|
/**
|
|
484
420
|
* Dispose of GPU resources.
|
|
@@ -492,7 +428,7 @@ export class Section2DOverlayRenderer {
|
|
|
492
428
|
* is named separately because it is not a channel.
|
|
493
429
|
*/
|
|
494
430
|
dispose() {
|
|
495
|
-
this.
|
|
431
|
+
this.caps.dispose();
|
|
496
432
|
for (const channel of LINE_OVERLAY_CHANNELS)
|
|
497
433
|
this.lineOverlays[channel].clear();
|
|
498
434
|
this.clearClashBoxLines3D();
|
|
@@ -502,6 +438,12 @@ export class Section2DOverlayRenderer {
|
|
|
502
438
|
}
|
|
503
439
|
// Pipeline and bind-group objects belong to this initialization epoch.
|
|
504
440
|
// A later upload on the same instance must rebuild all of them together.
|
|
441
|
+
if (this.clipBuffer) {
|
|
442
|
+
this.clipBuffer.destroy();
|
|
443
|
+
this.clipBuffer = null;
|
|
444
|
+
}
|
|
445
|
+
this.clipBindGroup = null;
|
|
446
|
+
this.capLinePipeline = null;
|
|
505
447
|
this.fillPipeline = null;
|
|
506
448
|
this.fillDepthPipeline = null;
|
|
507
449
|
this.linePipeline = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"section-2d-overlay.js","sourceRoot":"","sources":["../src/section-2d-overlay.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"section-2d-overlay.js","sourceRoot":"","sources":["../src/section-2d-overlay.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,8 @@ export interface Section2DOverlayCapStyle {
|
|
|
11
11
|
secondaryAngleRad: number;
|
|
12
12
|
}
|
|
13
13
|
export interface Section2DOverlayOptions {
|
|
14
|
+
/** Scene ids whose pre-uploaded cut polygons and owned outlines must not draw. */
|
|
15
|
+
sectionExcludedIds?: ReadonlySet<number>;
|
|
14
16
|
axis: 'down' | 'front' | 'side';
|
|
15
17
|
position: number;
|
|
16
18
|
bounds: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"section-2d-types.d.ts","sourceRoot":"","sources":["../src/section-2d-types.ts"],"names":[],"mappings":"AAIA,6EAA6E;AAE7E,eAAO,MAAM,qBAAqB,8EAA+E,CAAC;AAClH,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,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,CAAC;IAC/F,QAAQ,EAAE,YAAY,CAAC;IACvB,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB"}
|
|
1
|
+
{"version":3,"file":"section-2d-types.d.ts","sourceRoot":"","sources":["../src/section-2d-types.ts"],"names":[],"mappings":"AAIA,6EAA6E;AAE7E,eAAO,MAAM,qBAAqB,8EAA+E,CAAC;AAClH,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,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,CAAC;IAC/F,QAAQ,EAAE,YAAY,CAAC;IACvB,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type CapHighlight, type CutPolygon2D, type DrawingLine2D, type SectionAxis, type SectionCustomPlane } from './section-2d-lift.js';
|
|
2
|
+
/** One cap's GPU geometry: the filled polygons and their outline. */
|
|
3
|
+
export declare class CapGeometry {
|
|
4
|
+
private source;
|
|
5
|
+
private sourceHasGeometry;
|
|
6
|
+
private excluded;
|
|
7
|
+
fillVertexBuffer: GPUBuffer | null;
|
|
8
|
+
fillIndexBuffer: GPUBuffer | null;
|
|
9
|
+
fillIndexCount: number;
|
|
10
|
+
lineVertexBuffer: GPUBuffer | null;
|
|
11
|
+
lineVertexCount: number;
|
|
12
|
+
/** f64 cap anchor retained separately from the local cap vertices. */
|
|
13
|
+
anchor: [number, number, number] | null;
|
|
14
|
+
/** The fill vertices as built (before any highlight) and each polygon's slice of them. */
|
|
15
|
+
private fillSource;
|
|
16
|
+
private fillRanges;
|
|
17
|
+
/** The highlight last written to {@link fillVertexBuffer}; compared by content. */
|
|
18
|
+
private appliedHighlight;
|
|
19
|
+
setExclusions(device: GPUDevice, highlight: CapHighlight | null, ids?: ReadonlySet<number>): void;
|
|
20
|
+
/** Cached source can be redrawn when exclusions change, even if currently fully excluded. */
|
|
21
|
+
has(): boolean;
|
|
22
|
+
/** Whether the current filtered buffers contain a fill or outline to submit. */
|
|
23
|
+
hasDrawable(): boolean;
|
|
24
|
+
clear(): void;
|
|
25
|
+
/**
|
|
26
|
+
* Paint the highlighted elements' polygons in their colour (`null` restores the
|
|
27
|
+
* cap as built). Rewrites the vertex buffer only when the highlight actually
|
|
28
|
+
* differs from what is already there.
|
|
29
|
+
*/
|
|
30
|
+
setHighlight(device: GPUDevice, highlight: CapHighlight | null): void;
|
|
31
|
+
upload(device: GPUDevice, highlight: CapHighlight | null, polygons: CutPolygon2D[], lines: DrawingLine2D[], axis: SectionAxis, planePosition: number, flipped: boolean, customPlane?: SectionCustomPlane): void;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=section-cap-geometry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section-cap-geometry.d.ts","sourceRoot":"","sources":["../src/section-cap-geometry.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,YAAY,EAAwB,KAAK,YAAY,EAAE,KAAK,aAAa,EAC9E,KAAK,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1E,qEAAqE;AACrE,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAqB;IACrC,gBAAgB,EAAE,SAAS,GAAG,IAAI,CAAQ;IAC1C,eAAe,EAAE,SAAS,GAAG,IAAI,CAAQ;IACzC,cAAc,SAAK;IACnB,gBAAgB,EAAE,SAAS,GAAG,IAAI,CAAQ;IAC1C,eAAe,SAAK;IACpB,sEAAsE;IACtE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAQ;IAC/C,0FAA0F;IAC1F,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,UAAU,CAAyB;IAC3C,mFAAmF;IACnF,OAAO,CAAC,gBAAgB,CAA6B;IAErD,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI;IAYjG,6FAA6F;IAC7F,GAAG,IAAI,OAAO;IAId,gFAAgF;IAChF,WAAW,IAAI,OAAO;IAItB,KAAK,IAAI,IAAI;IAkBb;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI;IASrE,MAAM,CACJ,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,YAAY,GAAG,IAAI,EAC9B,QAAQ,EAAE,YAAY,EAAE,EACxB,KAAK,EAAE,aAAa,EAAE,EACtB,IAAI,EAAE,WAAW,EACjB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,OAAO,EAChB,WAAW,CAAC,EAAE,kBAAkB,GAC/B,IAAI;CAsDR"}
|
|
@@ -0,0 +1,137 @@
|
|
|
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
|
+
import { buildCapFillGeometry, buildDrawingOutlineVertices, createSectionLift, recolorCapVertices } from './section-2d-lift.js';
|
|
5
|
+
/** One cap's GPU geometry: the filled polygons and their outline. */
|
|
6
|
+
export class CapGeometry {
|
|
7
|
+
source = null;
|
|
8
|
+
sourceHasGeometry = false;
|
|
9
|
+
excluded = new Set();
|
|
10
|
+
fillVertexBuffer = null;
|
|
11
|
+
fillIndexBuffer = null;
|
|
12
|
+
fillIndexCount = 0;
|
|
13
|
+
lineVertexBuffer = null;
|
|
14
|
+
lineVertexCount = 0;
|
|
15
|
+
/** f64 cap anchor retained separately from the local cap vertices. */
|
|
16
|
+
anchor = null;
|
|
17
|
+
/** The fill vertices as built (before any highlight) and each polygon's slice of them. */
|
|
18
|
+
fillSource = null;
|
|
19
|
+
fillRanges = [];
|
|
20
|
+
/** The highlight last written to {@link fillVertexBuffer}; compared by content. */
|
|
21
|
+
appliedHighlight = null;
|
|
22
|
+
setExclusions(device, highlight, ids) {
|
|
23
|
+
if (!this.source || (this.excluded.size === (ids?.size ?? 0) && [...this.excluded].every(id => ids?.has(id))))
|
|
24
|
+
return;
|
|
25
|
+
const source = this.source;
|
|
26
|
+
const sourceHasGeometry = this.sourceHasGeometry;
|
|
27
|
+
const [polygons, lines, ...plane] = source;
|
|
28
|
+
this.upload(device, highlight, polygons.filter(p => !ids?.has(p.expressId)), lines.filter(l => l.ownerId === undefined || !ids?.has(l.ownerId)), ...plane);
|
|
29
|
+
this.source = source;
|
|
30
|
+
this.sourceHasGeometry = sourceHasGeometry;
|
|
31
|
+
this.excluded = new Set(ids);
|
|
32
|
+
}
|
|
33
|
+
/** Cached source can be redrawn when exclusions change, even if currently fully excluded. */
|
|
34
|
+
has() {
|
|
35
|
+
return this.sourceHasGeometry;
|
|
36
|
+
}
|
|
37
|
+
/** Whether the current filtered buffers contain a fill or outline to submit. */
|
|
38
|
+
hasDrawable() {
|
|
39
|
+
return this.fillIndexCount > 0 || this.lineVertexCount > 0;
|
|
40
|
+
}
|
|
41
|
+
clear() {
|
|
42
|
+
this.source = null;
|
|
43
|
+
this.sourceHasGeometry = false;
|
|
44
|
+
this.excluded.clear();
|
|
45
|
+
this.fillVertexBuffer?.destroy();
|
|
46
|
+
this.fillIndexBuffer?.destroy();
|
|
47
|
+
this.lineVertexBuffer?.destroy();
|
|
48
|
+
this.fillVertexBuffer = null;
|
|
49
|
+
this.fillIndexBuffer = null;
|
|
50
|
+
this.lineVertexBuffer = null;
|
|
51
|
+
this.fillIndexCount = 0;
|
|
52
|
+
this.lineVertexCount = 0;
|
|
53
|
+
this.anchor = null;
|
|
54
|
+
this.fillSource = null;
|
|
55
|
+
this.fillRanges = [];
|
|
56
|
+
this.appliedHighlight = null;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Paint the highlighted elements' polygons in their colour (`null` restores the
|
|
60
|
+
* cap as built). Rewrites the vertex buffer only when the highlight actually
|
|
61
|
+
* differs from what is already there.
|
|
62
|
+
*/
|
|
63
|
+
setHighlight(device, highlight) {
|
|
64
|
+
if (!this.fillVertexBuffer || !this.fillSource)
|
|
65
|
+
return;
|
|
66
|
+
const next = highlight && highlight.size > 0 ? highlight : null;
|
|
67
|
+
if (sameHighlight(this.appliedHighlight, next))
|
|
68
|
+
return;
|
|
69
|
+
// A copy: the caller may mutate and re-pass the same Map, which must still read as a change.
|
|
70
|
+
this.appliedHighlight = next && new Map(next);
|
|
71
|
+
device.queue.writeBuffer(this.fillVertexBuffer, 0, recolorCapVertices(this.fillSource, this.fillRanges, next) ?? this.fillSource);
|
|
72
|
+
}
|
|
73
|
+
upload(device, highlight, polygons, lines, axis, planePosition, flipped, customPlane) {
|
|
74
|
+
this.clear();
|
|
75
|
+
this.source = [polygons, lines, axis, planePosition, flipped, customPlane];
|
|
76
|
+
const lift = createSectionLift(axis, planePosition, flipped, customPlane);
|
|
77
|
+
const planeAnchor = customPlane
|
|
78
|
+
? [...customPlane.origin]
|
|
79
|
+
: axis === 'side' ? [planePosition, 0, 0]
|
|
80
|
+
: axis === 'down' ? [0, planePosition, 0] : [0, 0, planePosition];
|
|
81
|
+
// The plane-coordinate anchor was enough when every model was near the
|
|
82
|
+
// origin. At a survey offset it leaves both in-plane coordinates absolute
|
|
83
|
+
// in the f32 vertex buffer, collapsing centimetre cap edges. Anchor at an
|
|
84
|
+
// actual lifted point instead, while retaining the old plane point for an
|
|
85
|
+
// empty upload that produces no vertex buffer to draw.
|
|
86
|
+
const firstPoint = polygons.find((polygon) => polygon.polygon.outer.length > 0)?.polygon.outer[0]
|
|
87
|
+
?? lines[0]?.line.start;
|
|
88
|
+
const anchor = firstPoint ? lift(firstPoint.x, firstPoint.y) : planeAnchor;
|
|
89
|
+
// Lift/subtract while the coordinates are JS f64. Building a world-space
|
|
90
|
+
// Float32Array first then subtracting the cap anchor loses centimetre
|
|
91
|
+
// detail in both the plane normal and its in-plane axes at national-grid
|
|
92
|
+
// offsets.
|
|
93
|
+
const fill = buildCapFillGeometry(polygons, lift, anchor);
|
|
94
|
+
if (fill) {
|
|
95
|
+
this.fillVertexBuffer = device.createBuffer({
|
|
96
|
+
size: fill.vertices.byteLength,
|
|
97
|
+
usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
|
|
98
|
+
});
|
|
99
|
+
this.fillSource = fill.vertices;
|
|
100
|
+
this.fillRanges = fill.ranges;
|
|
101
|
+
const painted = recolorCapVertices(fill.vertices, fill.ranges, highlight);
|
|
102
|
+
// Cached even when nothing here matched, so the next frame's identical highlight is a no-op.
|
|
103
|
+
this.appliedHighlight = highlight && highlight.size > 0 ? new Map(highlight) : null;
|
|
104
|
+
device.queue.writeBuffer(this.fillVertexBuffer, 0, painted ?? fill.vertices);
|
|
105
|
+
this.fillIndexBuffer = device.createBuffer({
|
|
106
|
+
size: fill.indices.byteLength,
|
|
107
|
+
usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,
|
|
108
|
+
});
|
|
109
|
+
device.queue.writeBuffer(this.fillIndexBuffer, 0, fill.indices);
|
|
110
|
+
this.fillIndexCount = fill.indices.length;
|
|
111
|
+
}
|
|
112
|
+
const outline = buildDrawingOutlineVertices(polygons, lines, lift, anchor);
|
|
113
|
+
if (outline) {
|
|
114
|
+
this.lineVertexBuffer = device.createBuffer({
|
|
115
|
+
size: outline.byteLength,
|
|
116
|
+
usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
|
|
117
|
+
});
|
|
118
|
+
device.queue.writeBuffer(this.lineVertexBuffer, 0, outline);
|
|
119
|
+
this.lineVertexCount = outline.length / 3; // Each vertex is 3 floats
|
|
120
|
+
}
|
|
121
|
+
this.anchor = anchor;
|
|
122
|
+
this.sourceHasGeometry = this.hasDrawable();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function sameHighlight(a, b) {
|
|
126
|
+
if (a === null && b === null)
|
|
127
|
+
return true;
|
|
128
|
+
if (!a || !b || a.size !== b.size)
|
|
129
|
+
return false;
|
|
130
|
+
for (const [id, color] of a) {
|
|
131
|
+
const other = b.get(id);
|
|
132
|
+
if (!other || other[0] !== color[0] || other[1] !== color[1] || other[2] !== color[2] || other[3] !== color[3])
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=section-cap-geometry.js.map
|