@ifc-lite/renderer 1.15.3 → 1.16.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/constants.d.ts +8 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +8 -2
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +153 -30
- package/dist/index.js.map +1 -1
- package/dist/pipeline.d.ts +11 -1
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +49 -12
- package/dist/pipeline.js.map +1 -1
- package/dist/section-2d-overlay.d.ts +22 -7
- package/dist/section-2d-overlay.d.ts.map +1 -1
- package/dist/section-2d-overlay.js +219 -42
- package/dist/section-2d-overlay.js.map +1 -1
- package/dist/section-cap-style.d.ts +37 -0
- package/dist/section-cap-style.d.ts.map +1 -0
- package/dist/section-cap-style.js +38 -0
- package/dist/section-cap-style.js.map +1 -0
- package/dist/section-plane.d.ts +0 -3
- package/dist/section-plane.d.ts.map +1 -1
- package/dist/section-plane.js +33 -6
- package/dist/section-plane.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 +7 -4
- package/dist/shaders/main.wgsl.js.map +1 -1
- package/dist/types.d.ts +26 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* Section 2D Overlay Renderer
|
|
6
|
+
*
|
|
7
|
+
* Renders 2D section drawings (cut polygons, outlines, hatching) as a 3D overlay
|
|
8
|
+
* on the section plane in the WebGPU viewport. This provides an integrated view
|
|
9
|
+
* where the architectural drawing appears directly on the section cut surface.
|
|
10
|
+
*/
|
|
11
|
+
import { PIPELINE_CONSTANTS } from './constants.js';
|
|
4
12
|
// Fill colors by IFC type (architectural convention)
|
|
5
13
|
const IFC_TYPE_FILL_COLORS = {
|
|
6
14
|
IfcWall: [0.69, 0.69, 0.69, 0.95],
|
|
@@ -62,23 +70,35 @@ export class Section2DOverlayRenderer {
|
|
|
62
70
|
const pipelineLayout = this.device.createPipelineLayout({
|
|
63
71
|
bindGroupLayouts: [this.bindGroupLayout],
|
|
64
72
|
});
|
|
65
|
-
// Shader for filled polygons
|
|
73
|
+
// Shader for filled polygons. Applies the user-defined cap style
|
|
74
|
+
// (single fill colour + screen-space hatch) on top of the EXACT
|
|
75
|
+
// 2D section polygons produced by SectionCutter. Per-vertex colour
|
|
76
|
+
// is still supplied by the vertex buffer (unused here, kept for
|
|
77
|
+
// future multi-material support) but ignored — all fills render
|
|
78
|
+
// with the uniform cap style so the cut surface reads as a single
|
|
79
|
+
// architectural section rather than a rainbow of per-IFC-type tints.
|
|
66
80
|
const fillShader = this.device.createShaderModule({
|
|
67
81
|
code: `
|
|
68
82
|
struct Uniforms {
|
|
69
|
-
viewProj:
|
|
70
|
-
planeOffset:
|
|
83
|
+
viewProj: mat4x4<f32>,
|
|
84
|
+
planeOffset: vec4<f32>, // Small offset to render slightly in front of section plane
|
|
85
|
+
capFillColor: vec4<f32>,
|
|
86
|
+
capStrokeColor: vec4<f32>,
|
|
87
|
+
// x=patternId, y=spacingPx, z=angleRad, w=widthPx
|
|
88
|
+
params: vec4<f32>,
|
|
89
|
+
// x=secondaryAngleRad, y,z,w reserved
|
|
90
|
+
params2: vec4<f32>,
|
|
71
91
|
}
|
|
72
92
|
@binding(0) @group(0) var<uniform> uniforms: Uniforms;
|
|
73
93
|
|
|
74
94
|
struct VertexInput {
|
|
75
95
|
@location(0) position: vec3<f32>,
|
|
76
|
-
@location(1) color:
|
|
96
|
+
@location(1) color: vec4<f32>,
|
|
77
97
|
}
|
|
78
98
|
|
|
79
99
|
struct VertexOutput {
|
|
80
100
|
@builtin(position) position: vec4<f32>,
|
|
81
|
-
@location(0)
|
|
101
|
+
@location(0) color: vec4<f32>,
|
|
82
102
|
}
|
|
83
103
|
|
|
84
104
|
@vertex
|
|
@@ -90,9 +110,79 @@ export class Section2DOverlayRenderer {
|
|
|
90
110
|
return output;
|
|
91
111
|
}
|
|
92
112
|
|
|
113
|
+
// Screen-space hatch pattern helpers (ported from section-cap.wgsl).
|
|
114
|
+
fn lineMask(u: f32, s: f32, w: f32) -> f32 {
|
|
115
|
+
let f = fract(u / s) * s;
|
|
116
|
+
let d = min(f, s - f);
|
|
117
|
+
return 1.0 - smoothstep(w * 0.5, w * 0.5 + 1.0, d);
|
|
118
|
+
}
|
|
119
|
+
fn rotate(p: vec2<f32>, a: f32) -> vec2<f32> {
|
|
120
|
+
let c = cos(a);
|
|
121
|
+
let s = sin(a);
|
|
122
|
+
return vec2<f32>(c * p.x - s * p.y, s * p.x + c * p.y);
|
|
123
|
+
}
|
|
124
|
+
fn hatchIntensity(fragCoord: vec2<f32>, patternId: u32, spacing: f32, angle: f32, width: f32, angle2: f32) -> f32 {
|
|
125
|
+
let p = fragCoord;
|
|
126
|
+
if (patternId == 0u) { return 0.0; } // solid
|
|
127
|
+
if (patternId == 1u) { // diagonal
|
|
128
|
+
let r = rotate(p, angle);
|
|
129
|
+
return lineMask(r.x, spacing, width);
|
|
130
|
+
}
|
|
131
|
+
if (patternId == 2u) { // cross-hatch
|
|
132
|
+
let r = rotate(p, angle);
|
|
133
|
+
let r2 = rotate(p, angle2);
|
|
134
|
+
return max(lineMask(r.x, spacing, width), lineMask(r2.x, spacing, width));
|
|
135
|
+
}
|
|
136
|
+
if (patternId == 3u) { return lineMask(p.y, spacing, width); } // horizontal
|
|
137
|
+
if (patternId == 4u) { return lineMask(p.x, spacing, width); } // vertical
|
|
138
|
+
if (patternId == 5u) {
|
|
139
|
+
// Concrete (ISO 128-50): clean regular dot grid. The previous
|
|
140
|
+
// version layered dashes on top which looked noisy and broken.
|
|
141
|
+
// Dots sit at every grid intersection; radius scales with
|
|
142
|
+
// stroke width so the user's width slider works consistently.
|
|
143
|
+
let gx = p.x - round(p.x / spacing) * spacing;
|
|
144
|
+
let gy = p.y - round(p.y / spacing) * spacing;
|
|
145
|
+
let d = sqrt(gx * gx + gy * gy);
|
|
146
|
+
let radius = max(1.0, width * 1.2);
|
|
147
|
+
return 1.0 - smoothstep(radius, radius + 1.0, d);
|
|
148
|
+
}
|
|
149
|
+
if (patternId == 6u) { // brick
|
|
150
|
+
let bandH = spacing;
|
|
151
|
+
let band = floor(p.y / bandH);
|
|
152
|
+
let offset = select(0.0, bandH, (u32(band) & 1u) == 1u);
|
|
153
|
+
let horiz = lineMask(p.y, bandH, width);
|
|
154
|
+
let vertPos = p.x + offset * 0.5;
|
|
155
|
+
let vert = step(fract(vertPos / (bandH * 2.0)), 0.02);
|
|
156
|
+
return max(horiz, vert);
|
|
157
|
+
}
|
|
158
|
+
if (patternId == 7u) { // insulation
|
|
159
|
+
let y = spacing * 0.5 * sin(p.x * 6.2831853 / spacing) + p.y;
|
|
160
|
+
return lineMask(y, spacing, width);
|
|
161
|
+
}
|
|
162
|
+
return 0.0;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
struct FragOut {
|
|
166
|
+
@location(0) color: vec4<f32>,
|
|
167
|
+
@location(1) objectId: vec4<f32>,
|
|
168
|
+
}
|
|
169
|
+
|
|
93
170
|
@fragment
|
|
94
|
-
fn fs_main(input: VertexOutput) ->
|
|
95
|
-
|
|
171
|
+
fn fs_main(input: VertexOutput) -> FragOut {
|
|
172
|
+
let patternId = u32(uniforms.params.x + 0.5);
|
|
173
|
+
let spacing = max(2.0, uniforms.params.y);
|
|
174
|
+
let angle = uniforms.params.z;
|
|
175
|
+
let width = max(1.0, uniforms.params.w);
|
|
176
|
+
let angle2 = uniforms.params2.x;
|
|
177
|
+
|
|
178
|
+
let h = hatchIntensity(input.position.xy, patternId, spacing, angle, width, angle2);
|
|
179
|
+
let rgb = mix(uniforms.capFillColor.rgb, uniforms.capStrokeColor.rgb, h * uniforms.capStrokeColor.a);
|
|
180
|
+
let a = max(uniforms.capFillColor.a, h * uniforms.capStrokeColor.a);
|
|
181
|
+
|
|
182
|
+
var out: FragOut;
|
|
183
|
+
out.color = vec4<f32>(rgb, a);
|
|
184
|
+
out.objectId = vec4<f32>(0.0, 0.0, 0.0, 0.0);
|
|
185
|
+
return out;
|
|
96
186
|
}
|
|
97
187
|
`,
|
|
98
188
|
});
|
|
@@ -121,9 +211,17 @@ export class Section2DOverlayRenderer {
|
|
|
121
211
|
return output;
|
|
122
212
|
}
|
|
123
213
|
|
|
214
|
+
struct FragOutLine {
|
|
215
|
+
@location(0) color: vec4<f32>,
|
|
216
|
+
@location(1) objectId: vec4<f32>,
|
|
217
|
+
}
|
|
218
|
+
|
|
124
219
|
@fragment
|
|
125
|
-
fn fs_main(input: VertexOutput) ->
|
|
126
|
-
|
|
220
|
+
fn fs_main(input: VertexOutput) -> FragOutLine {
|
|
221
|
+
var out: FragOutLine;
|
|
222
|
+
out.color = vec4<f32>(0.0, 0.0, 0.0, 1.0); // Black lines
|
|
223
|
+
out.objectId = vec4<f32>(0.0, 0.0, 0.0, 0.0);
|
|
224
|
+
return out;
|
|
127
225
|
}
|
|
128
226
|
`,
|
|
129
227
|
});
|
|
@@ -146,7 +244,12 @@ export class Section2DOverlayRenderer {
|
|
|
146
244
|
fragment: {
|
|
147
245
|
module: fillShader,
|
|
148
246
|
entryPoint: 'fs_main',
|
|
149
|
-
|
|
247
|
+
// The main render pass has two colour attachments (main colour +
|
|
248
|
+
// picker objectId). Pipelines used inside that pass must declare
|
|
249
|
+
// matching targets — the objectId slot writes nothing so the pass's
|
|
250
|
+
// picking IDs underneath are preserved.
|
|
251
|
+
targets: [
|
|
252
|
+
{
|
|
150
253
|
format: this.format,
|
|
151
254
|
blend: {
|
|
152
255
|
color: {
|
|
@@ -160,16 +263,26 @@ export class Section2DOverlayRenderer {
|
|
|
160
263
|
operation: 'add',
|
|
161
264
|
},
|
|
162
265
|
},
|
|
163
|
-
}
|
|
266
|
+
},
|
|
267
|
+
{ format: 'rgba8unorm', writeMask: 0 },
|
|
268
|
+
],
|
|
164
269
|
},
|
|
165
270
|
primitive: {
|
|
166
271
|
topology: 'triangle-list',
|
|
167
272
|
cullMode: 'none',
|
|
168
273
|
},
|
|
169
274
|
depthStencil: {
|
|
170
|
-
format:
|
|
275
|
+
format: PIPELINE_CONSTANTS.DEPTH_FORMAT,
|
|
171
276
|
depthWriteEnabled: false,
|
|
172
|
-
|
|
277
|
+
// 'greater-equal' (reverse-Z): draw the cap fill when its depth is at
|
|
278
|
+
// least as close as whatever the main opaque pass already wrote. The
|
|
279
|
+
// cap polygons live exactly on the section plane, which coincides
|
|
280
|
+
// with below-plane top faces — 'greater-equal' lets them tie cleanly
|
|
281
|
+
// there. Where nearer model geometry (e.g. a wall in front of the
|
|
282
|
+
// cut, viewed at an angle) wrote a closer depth, the cap fails the
|
|
283
|
+
// test and is occluded — the user no longer sees cap hatch painted
|
|
284
|
+
// through model elements that ought to be in front of it.
|
|
285
|
+
depthCompare: 'greater-equal',
|
|
173
286
|
},
|
|
174
287
|
multisample: {
|
|
175
288
|
count: this.sampleCount,
|
|
@@ -193,26 +306,39 @@ export class Section2DOverlayRenderer {
|
|
|
193
306
|
fragment: {
|
|
194
307
|
module: lineShader,
|
|
195
308
|
entryPoint: 'fs_main',
|
|
196
|
-
targets: [
|
|
197
|
-
|
|
198
|
-
}
|
|
309
|
+
targets: [
|
|
310
|
+
{ format: this.format },
|
|
311
|
+
{ format: 'rgba8unorm', writeMask: 0 },
|
|
312
|
+
],
|
|
199
313
|
},
|
|
200
314
|
primitive: {
|
|
201
315
|
topology: 'line-list',
|
|
202
316
|
cullMode: 'none',
|
|
203
317
|
},
|
|
204
318
|
depthStencil: {
|
|
205
|
-
format:
|
|
319
|
+
format: PIPELINE_CONSTANTS.DEPTH_FORMAT,
|
|
206
320
|
depthWriteEnabled: false,
|
|
207
|
-
|
|
321
|
+
// Same z-respect logic as the fill pipeline above — outline lines
|
|
322
|
+
// are drawn on the cut plane, so closer model geometry should hide
|
|
323
|
+
// them when the camera looks through it.
|
|
324
|
+
depthCompare: 'greater-equal',
|
|
208
325
|
},
|
|
209
326
|
multisample: {
|
|
210
327
|
count: this.sampleCount,
|
|
211
328
|
},
|
|
212
329
|
});
|
|
213
|
-
// Create uniform buffer
|
|
330
|
+
// Create uniform buffer.
|
|
331
|
+
// viewProj — mat4x4 64 B
|
|
332
|
+
// planeOffset — vec4 16 B
|
|
333
|
+
// capFillColor — vec4 16 B
|
|
334
|
+
// capStrokeColor — vec4 16 B
|
|
335
|
+
// params — vec4 16 B x=patternId, y=spacingPx, z=angleRad, w=widthPx
|
|
336
|
+
// params2 — vec4 16 B x=secondaryAngleRad
|
|
337
|
+
// Total: 144 B. The extended layout lets the fill fragment shader
|
|
338
|
+
// apply the user's cap style (screen-space hatch + colour) directly
|
|
339
|
+
// over the exact polygon silhouette the 2D section cutter produced.
|
|
214
340
|
this.uniformBuffer = this.device.createBuffer({
|
|
215
|
-
size:
|
|
341
|
+
size: 144,
|
|
216
342
|
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
217
343
|
});
|
|
218
344
|
// Create bind group
|
|
@@ -390,33 +516,84 @@ export class Section2DOverlayRenderer {
|
|
|
390
516
|
return;
|
|
391
517
|
}
|
|
392
518
|
const { axis, viewProj } = options;
|
|
393
|
-
//
|
|
394
|
-
//
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
const uniforms = new Float32Array(20);
|
|
519
|
+
// No offset — cap renders exactly on the section plane. The previous
|
|
520
|
+
// 0.3m bias was there to keep the outline lines clear of below-plane
|
|
521
|
+
// geometry, but it made the cap visually drift off the slider plane
|
|
522
|
+
// (users could see a 0.3m gap between the plane preview and the cap).
|
|
523
|
+
// The fill pipeline uses depthCompare 'always' so z-fighting with
|
|
524
|
+
// coincident below-plane top faces is not an issue; the stencil gate
|
|
525
|
+
// keeps the fill restricted to the actual cap polygons.
|
|
526
|
+
const offset = [0, 0, 0];
|
|
527
|
+
// Update uniforms. Layout mirrors the WGSL struct above:
|
|
528
|
+
// 0..15 viewProj
|
|
529
|
+
// 16..19 planeOffset
|
|
530
|
+
// 20..23 capFillColor
|
|
531
|
+
// 24..27 capStrokeColor
|
|
532
|
+
// 28..31 params (patternId, spacingPx, angleRad, widthPx)
|
|
533
|
+
// 32..35 params2 (secondaryAngleRad, _, _, _)
|
|
534
|
+
const uniforms = new Float32Array(36);
|
|
410
535
|
uniforms.set(viewProj, 0);
|
|
411
536
|
uniforms[16] = offset[0];
|
|
412
537
|
uniforms[17] = offset[1];
|
|
413
538
|
uniforms[18] = offset[2];
|
|
414
|
-
uniforms[19] = 0;
|
|
539
|
+
uniforms[19] = 0;
|
|
540
|
+
const cs = options.capStyle;
|
|
541
|
+
if (cs) {
|
|
542
|
+
uniforms[20] = cs.fillColor[0];
|
|
543
|
+
uniforms[21] = cs.fillColor[1];
|
|
544
|
+
uniforms[22] = cs.fillColor[2];
|
|
545
|
+
uniforms[23] = cs.fillColor[3];
|
|
546
|
+
uniforms[24] = cs.strokeColor[0];
|
|
547
|
+
uniforms[25] = cs.strokeColor[1];
|
|
548
|
+
uniforms[26] = cs.strokeColor[2];
|
|
549
|
+
uniforms[27] = cs.strokeColor[3];
|
|
550
|
+
uniforms[28] = cs.patternId;
|
|
551
|
+
uniforms[29] = cs.spacingPx;
|
|
552
|
+
uniforms[30] = cs.angleRad;
|
|
553
|
+
uniforms[31] = cs.widthPx;
|
|
554
|
+
uniforms[32] = cs.secondaryAngleRad;
|
|
555
|
+
}
|
|
556
|
+
else {
|
|
557
|
+
// Sensible defaults when caller omits style (e.g. legacy lines-only
|
|
558
|
+
// use): solid fill using a warm-paper colour, no hatch.
|
|
559
|
+
uniforms[20] = 0.92;
|
|
560
|
+
uniforms[21] = 0.88;
|
|
561
|
+
uniforms[22] = 0.78;
|
|
562
|
+
uniforms[23] = 1;
|
|
563
|
+
uniforms[24] = 0.10;
|
|
564
|
+
uniforms[25] = 0.10;
|
|
565
|
+
uniforms[26] = 0.10;
|
|
566
|
+
uniforms[27] = 1;
|
|
567
|
+
uniforms[28] = 0; // solid pattern
|
|
568
|
+
uniforms[29] = 8;
|
|
569
|
+
uniforms[30] = Math.PI / 4;
|
|
570
|
+
uniforms[31] = 1;
|
|
571
|
+
uniforms[32] = -Math.PI / 4;
|
|
572
|
+
}
|
|
415
573
|
this.device.queue.writeBuffer(this.uniformBuffer, 0, uniforms);
|
|
416
|
-
//
|
|
417
|
-
//
|
|
418
|
-
//
|
|
419
|
-
|
|
574
|
+
// Filled polygons = the 3D section cap. Render them ONLY when the
|
|
575
|
+
// caller opts in (`showFills: true` + a capStyle). This replaces the
|
|
576
|
+
// old stencil-parity cap, which leaked hatch into empty sky on non-
|
|
577
|
+
// manifold IFC geometry. The polygons here come from exact triangle-
|
|
578
|
+
// plane intersection in `SectionCutter`, so the silhouette is
|
|
579
|
+
// mathematically correct.
|
|
580
|
+
if (options.showFills === true &&
|
|
581
|
+
options.capStyle &&
|
|
582
|
+
this.fillVertexBuffer &&
|
|
583
|
+
this.fillIndexBuffer &&
|
|
584
|
+
this.fillIndexCount > 0) {
|
|
585
|
+
pass.setPipeline(this.fillPipeline);
|
|
586
|
+
pass.setBindGroup(0, this.bindGroup);
|
|
587
|
+
pass.setVertexBuffer(0, this.fillVertexBuffer);
|
|
588
|
+
pass.setIndexBuffer(this.fillIndexBuffer, 'uint32');
|
|
589
|
+
pass.drawIndexed(this.fillIndexCount);
|
|
590
|
+
}
|
|
591
|
+
// Outline lines on top of the fill. Gated by `showOutlines` so the
|
|
592
|
+
// user can toggle surfaces and outlines independently from the UI.
|
|
593
|
+
// Defaults to true when the caller omits the flag.
|
|
594
|
+
if (options.showOutlines !== false &&
|
|
595
|
+
this.lineVertexBuffer &&
|
|
596
|
+
this.lineVertexCount > 0) {
|
|
420
597
|
pass.setPipeline(this.linePipeline);
|
|
421
598
|
pass.setBindGroup(0, this.bindGroup);
|
|
422
599
|
pass.setVertexBuffer(0, this.lineVertexBuffer);
|
|
@@ -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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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section cap styling — shared between the renderer and its consumers.
|
|
3
|
+
*
|
|
4
|
+
* The 3D cut surface is rendered by `Section2DOverlayRenderer` using the exact
|
|
5
|
+
* polygons `SectionCutter` produces from triangle-plane intersection. This
|
|
6
|
+
* module carries only the styling primitives that flow through it:
|
|
7
|
+
* - `HATCH_PATTERN_IDS`: name → numeric id, kept in lockstep with the
|
|
8
|
+
* `patternId` switch in the 2D-overlay fill fragment shader.
|
|
9
|
+
* - `SectionCapStyle` / `DEFAULT_CAP_STYLE`: the shape + defaults the store
|
|
10
|
+
* persists to localStorage and the renderer consumes per-frame.
|
|
11
|
+
*
|
|
12
|
+
* Kept as a separate file (rather than folded into `types.ts`) so the hatch
|
|
13
|
+
* id mapping has a single source of truth that both shader authors and UI
|
|
14
|
+
* authors can grep for.
|
|
15
|
+
*/
|
|
16
|
+
export declare const HATCH_PATTERN_IDS: {
|
|
17
|
+
readonly solid: 0;
|
|
18
|
+
readonly diagonal: 1;
|
|
19
|
+
readonly crossHatch: 2;
|
|
20
|
+
readonly horizontal: 3;
|
|
21
|
+
readonly vertical: 4;
|
|
22
|
+
readonly concrete: 5;
|
|
23
|
+
readonly brick: 6;
|
|
24
|
+
readonly insulation: 7;
|
|
25
|
+
};
|
|
26
|
+
export type HatchPatternId = keyof typeof HATCH_PATTERN_IDS;
|
|
27
|
+
export interface SectionCapStyle {
|
|
28
|
+
fillColor: [number, number, number, number];
|
|
29
|
+
strokeColor: [number, number, number, number];
|
|
30
|
+
pattern: HatchPatternId;
|
|
31
|
+
spacingPx: number;
|
|
32
|
+
angleRad: number;
|
|
33
|
+
widthPx: number;
|
|
34
|
+
secondaryAngleRad: number;
|
|
35
|
+
}
|
|
36
|
+
export declare const DEFAULT_CAP_STYLE: SectionCapStyle;
|
|
37
|
+
//# sourceMappingURL=section-cap-style.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section-cap-style.d.ts","sourceRoot":"","sources":["../src/section-cap-style.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;CASpB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,iBAAiB,CAAC;AAE5D,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpD,WAAW,EAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpD,OAAO,EAAY,cAAc,CAAC;IAClC,SAAS,EAAU,MAAM,CAAC;IAC1B,QAAQ,EAAW,MAAM,CAAC;IAC1B,OAAO,EAAY,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,iBAAiB,EAAE,eAQ/B,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
+
/**
|
|
5
|
+
* Section cap styling — shared between the renderer and its consumers.
|
|
6
|
+
*
|
|
7
|
+
* The 3D cut surface is rendered by `Section2DOverlayRenderer` using the exact
|
|
8
|
+
* polygons `SectionCutter` produces from triangle-plane intersection. This
|
|
9
|
+
* module carries only the styling primitives that flow through it:
|
|
10
|
+
* - `HATCH_PATTERN_IDS`: name → numeric id, kept in lockstep with the
|
|
11
|
+
* `patternId` switch in the 2D-overlay fill fragment shader.
|
|
12
|
+
* - `SectionCapStyle` / `DEFAULT_CAP_STYLE`: the shape + defaults the store
|
|
13
|
+
* persists to localStorage and the renderer consumes per-frame.
|
|
14
|
+
*
|
|
15
|
+
* Kept as a separate file (rather than folded into `types.ts`) so the hatch
|
|
16
|
+
* id mapping has a single source of truth that both shader authors and UI
|
|
17
|
+
* authors can grep for.
|
|
18
|
+
*/
|
|
19
|
+
export const HATCH_PATTERN_IDS = {
|
|
20
|
+
solid: 0,
|
|
21
|
+
diagonal: 1,
|
|
22
|
+
crossHatch: 2,
|
|
23
|
+
horizontal: 3,
|
|
24
|
+
vertical: 4,
|
|
25
|
+
concrete: 5,
|
|
26
|
+
brick: 6,
|
|
27
|
+
insulation: 7,
|
|
28
|
+
};
|
|
29
|
+
export const DEFAULT_CAP_STYLE = {
|
|
30
|
+
fillColor: [0.92, 0.88, 0.78, 1.0], // warm paper
|
|
31
|
+
strokeColor: [0.10, 0.10, 0.10, 1.0], // ink
|
|
32
|
+
pattern: 'diagonal',
|
|
33
|
+
spacingPx: 8,
|
|
34
|
+
angleRad: Math.PI / 4, // 45°
|
|
35
|
+
widthPx: 1.0,
|
|
36
|
+
secondaryAngleRad: -Math.PI / 4,
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=section-cap-style.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section-cap-style.js","sourceRoot":"","sources":["../src/section-cap-style.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;GAcG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,KAAK,EAAQ,CAAC;IACd,QAAQ,EAAK,CAAC;IACd,UAAU,EAAG,CAAC;IACd,UAAU,EAAG,CAAC;IACd,QAAQ,EAAK,CAAC;IACd,QAAQ,EAAK,CAAC;IACd,KAAK,EAAQ,CAAC;IACd,UAAU,EAAG,CAAC;CACN,CAAC;AAcX,MAAM,CAAC,MAAM,iBAAiB,GAAoB;IAChD,SAAS,EAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAG,aAAa;IAC1D,WAAW,EAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAG,MAAM;IACnD,OAAO,EAAY,UAAU;IAC7B,SAAS,EAAU,CAAC;IACpB,QAAQ,EAAW,IAAI,CAAC,EAAE,GAAG,CAAC,EAAe,MAAM;IACnD,OAAO,EAAY,GAAG;IACtB,iBAAiB,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;CAChC,CAAC"}
|
package/dist/section-plane.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"section-plane.d.ts","sourceRoot":"","sources":["../src/section-plane.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"section-plane.d.ts","sourceRoot":"","sources":["../src/section-plane.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QACN,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACzC,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC1C,CAAC;IACF,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,GAAE,MAAU;IAMhF,OAAO,CAAC,IAAI;IA4MZ;;OAEG;IACH,IAAI,CACF,IAAI,EAAE,oBAAoB,EAC1B,OAAO,EAAE,yBAAyB,GACjC,IAAI;IAgDP,OAAO,CAAC,sBAAsB;IAiF9B;;;;OAIG;IACH,OAAO,IAAI,IAAI;CAOhB"}
|
package/dist/section-plane.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* Section plane renderer - renders a visible plane at the section cut location
|
|
6
|
+
*/
|
|
7
|
+
import { PIPELINE_CONSTANTS } from './constants.js';
|
|
4
8
|
export class SectionPlaneRenderer {
|
|
5
9
|
device;
|
|
6
10
|
bindGroupLayout = null; // Shared layout for both pipelines
|
|
@@ -56,8 +60,15 @@ export class SectionPlaneRenderer {
|
|
|
56
60
|
return output;
|
|
57
61
|
}
|
|
58
62
|
|
|
63
|
+
// Two outputs so the pipeline matches the main pass's two colour
|
|
64
|
+
// attachments. objectId is masked off at the pipeline level.
|
|
65
|
+
struct FragOut {
|
|
66
|
+
@location(0) color: vec4<f32>,
|
|
67
|
+
@location(1) objectId: vec4<f32>,
|
|
68
|
+
}
|
|
69
|
+
|
|
59
70
|
@fragment
|
|
60
|
-
fn fs_main(input: VertexOutput) ->
|
|
71
|
+
fn fs_main(input: VertexOutput) -> FragOut {
|
|
61
72
|
// Create fine grid pattern
|
|
62
73
|
let gridSize = 0.01; // Fine grid cells (100 divisions)
|
|
63
74
|
let lineWidth = 0.001; // Very thin lines
|
|
@@ -104,7 +115,10 @@ export class SectionPlaneRenderer {
|
|
|
104
115
|
// Clamp alpha
|
|
105
116
|
color.a = min(color.a, 0.5);
|
|
106
117
|
|
|
107
|
-
|
|
118
|
+
var out: FragOut;
|
|
119
|
+
out.color = color;
|
|
120
|
+
out.objectId = vec4<f32>(0.0, 0.0, 0.0, 0.0);
|
|
121
|
+
return out;
|
|
108
122
|
}
|
|
109
123
|
`,
|
|
110
124
|
});
|
|
@@ -127,7 +141,18 @@ export class SectionPlaneRenderer {
|
|
|
127
141
|
fragment: {
|
|
128
142
|
module: shaderModule,
|
|
129
143
|
entryPoint: 'fs_main',
|
|
130
|
-
|
|
144
|
+
// The main render pass has two colour attachments (main colour +
|
|
145
|
+
// the picker's objectId texture). WebGPU requires every pipeline
|
|
146
|
+
// used inside a pass to declare exactly the same target count and
|
|
147
|
+
// formats. The preview plane only paints into the main colour
|
|
148
|
+
// target — the objectId target is declared with writeMask 0 so
|
|
149
|
+
// cap-less picking IDs underneath are preserved. Without this,
|
|
150
|
+
// `setPipeline` raises "Incompatible color attachments at
|
|
151
|
+
// indices []: RenderPass uses formats [Bgra8Unorm, Rgba8Unorm]
|
|
152
|
+
// but RenderPipeline uses formats [Bgra8Unorm]" and the whole
|
|
153
|
+
// frame is dropped.
|
|
154
|
+
targets: [
|
|
155
|
+
{
|
|
131
156
|
format: this.format,
|
|
132
157
|
blend: {
|
|
133
158
|
color: {
|
|
@@ -141,7 +166,9 @@ export class SectionPlaneRenderer {
|
|
|
141
166
|
operation: 'add',
|
|
142
167
|
},
|
|
143
168
|
},
|
|
144
|
-
}
|
|
169
|
+
},
|
|
170
|
+
{ format: 'rgba8unorm', writeMask: 0 },
|
|
171
|
+
],
|
|
145
172
|
},
|
|
146
173
|
primitive: {
|
|
147
174
|
topology: 'triangle-list',
|
|
@@ -155,7 +182,7 @@ export class SectionPlaneRenderer {
|
|
|
155
182
|
this.previewPipeline = this.device.createRenderPipeline({
|
|
156
183
|
...pipelineBase,
|
|
157
184
|
depthStencil: {
|
|
158
|
-
format:
|
|
185
|
+
format: PIPELINE_CONSTANTS.DEPTH_FORMAT,
|
|
159
186
|
depthWriteEnabled: false,
|
|
160
187
|
depthCompare: 'greater', // Only draw where plane is behind geometry (empty space)
|
|
161
188
|
},
|
|
@@ -164,7 +191,7 @@ export class SectionPlaneRenderer {
|
|
|
164
191
|
this.cutPipeline = this.device.createRenderPipeline({
|
|
165
192
|
...pipelineBase,
|
|
166
193
|
depthStencil: {
|
|
167
|
-
format:
|
|
194
|
+
format: PIPELINE_CONSTANTS.DEPTH_FORMAT,
|
|
168
195
|
depthWriteEnabled: false,
|
|
169
196
|
depthCompare: 'always', // Always draw on top
|
|
170
197
|
},
|