@ifc-lite/drawing-2d 1.21.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/drawing-generator.d.ts +5 -0
  2. package/dist/drawing-generator.d.ts.map +1 -1
  3. package/dist/drawing-generator.js +20 -3
  4. package/dist/drawing-generator.js.map +1 -1
  5. package/dist/dxf/parser.d.ts.map +1 -1
  6. package/dist/dxf/parser.js +1 -0
  7. package/dist/dxf/parser.js.map +1 -1
  8. package/dist/edge-extractor.d.ts.map +1 -1
  9. package/dist/edge-extractor.js +21 -10
  10. package/dist/edge-extractor.js.map +1 -1
  11. package/dist/hidden-line-raster.d.ts +41 -0
  12. package/dist/hidden-line-raster.d.ts.map +1 -0
  13. package/dist/hidden-line-raster.js +154 -0
  14. package/dist/hidden-line-raster.js.map +1 -0
  15. package/dist/hidden-line.d.ts +34 -21
  16. package/dist/hidden-line.d.ts.map +1 -1
  17. package/dist/hidden-line.js +107 -211
  18. package/dist/hidden-line.js.map +1 -1
  19. package/dist/line-merger.d.ts.map +1 -1
  20. package/dist/line-merger.js +88 -44
  21. package/dist/line-merger.js.map +1 -1
  22. package/dist/polygon-builder.d.ts +31 -0
  23. package/dist/polygon-builder.d.ts.map +1 -1
  24. package/dist/polygon-builder.js +60 -3
  25. package/dist/polygon-builder.js.map +1 -1
  26. package/dist/profile-projector.js +17 -9
  27. package/dist/profile-projector.js.map +1 -1
  28. package/dist/projection-bands.d.ts +13 -6
  29. package/dist/projection-bands.d.ts.map +1 -1
  30. package/dist/projection-bands.js +15 -3
  31. package/dist/projection-bands.js.map +1 -1
  32. package/dist/section-cutter.d.ts +8 -0
  33. package/dist/section-cutter.d.ts.map +1 -1
  34. package/dist/section-cutter.js +59 -11
  35. package/dist/section-cutter.js.map +1 -1
  36. package/dist/types.d.ts +26 -1
  37. package/dist/types.d.ts.map +1 -1
  38. package/dist/types.js.map +1 -1
  39. package/package.json +3 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hidden-line-raster.js","sourceRoot":"","sources":["../src/hidden-line-raster.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,31 @@
1
1
  /**
2
2
  * Hidden Line Classifier - Determine visibility of lines via depth testing
3
3
  *
4
- * Uses software rasterization to build a depth buffer, then classifies
5
- * each line segment as visible, hidden, or partially visible.
4
+ * Uses software rasterization (hidden-line-raster.ts) to build a min-depth
5
+ * buffer of the KEPT half of the section, then classifies each line segment
6
+ * as visible, hidden, or partially visible.
7
+ *
8
+ * # Depth convention (issue #2639, see projection-bands.ts)
9
+ * Both the buffer and `DrawingLine.depth` / `depthEnd` carry the VIEW DEPTH
10
+ * `-d` (the negated flip-adjusted signed depth): 0 at the cut plane,
11
+ * increasing into the kept half, smaller means nearer the viewer. A line
12
+ * sample is visible where `lineDepth <= bufferDepth + depthBias`.
6
13
  */
7
14
  import type { MeshData } from '@ifc-lite/geometry';
8
- import type { Point2D, DrawingLine, Bounds2D, VisibilityState } from './types.js';
15
+ import type { Point2D, DrawingLine, Bounds2D, VisibilityState, SectionPlaneConfig } from './types.js';
9
16
  export interface VisibilitySegment {
10
17
  start: Point2D;
11
18
  end: Point2D;
12
19
  visible: boolean;
20
+ /**
21
+ * Affine parameters of `start`/`end` along the parent line (0..1), the
22
+ * same parameterisation the classifier sampled visibility with. Callers
23
+ * carrying per-endpoint metadata (view depth) over onto split segments
24
+ * must lerp with these so the metadata and the visibility decision
25
+ * cannot disagree.
26
+ */
27
+ tStart: number;
28
+ tEnd: number;
13
29
  }
14
30
  export interface VisibilityResult {
15
31
  line: DrawingLine;
@@ -26,22 +42,26 @@ export interface HiddenLineOptions {
26
42
  }
27
43
  export declare class HiddenLineClassifier {
28
44
  private options;
29
- private depthBuffer;
30
- private width;
31
- private height;
32
- private bounds;
45
+ /** Null after build when no occluder rasterized: everything is visible. */
46
+ private raster;
47
+ private built;
33
48
  constructor(options?: Partial<HiddenLineOptions>);
34
49
  /**
35
- * Build depth buffer from projected triangles
50
+ * Build the occluder depth buffer for the KEPT half of the section
51
+ * (flip-adjusted depth in `[-occluderDepth, 0]`), storing view depths.
52
+ *
53
+ * Takes the FULL plane config (issue #2639): a custom (face-picked) plane
54
+ * is honoured via the same `signedDepth` / `projectPointForPlane` helpers
55
+ * the line producers use, so buffer and lines agree by construction. For
56
+ * cardinal planes the projection is numerically identical to the old
57
+ * axis/position/flipped path (same axis mapping, same `flipped ? -u : u`).
36
58
  *
37
- * @param meshes Source meshes
38
- * @param axis Section axis
39
- * @param sectionPosition Position along axis
40
- * @param maxDepth Maximum depth to render
41
- * @param flipped Whether view is flipped
59
+ * @param meshes Source meshes (world = per-mesh origin + local positions)
60
+ * @param plane Section plane (cardinal fields, plus optional customPlane)
61
+ * @param occluderDepth How far into the kept half occluders rasterize
42
62
  * @param bounds Optional pre-computed 2D bounds
43
63
  */
44
- buildDepthBuffer(meshes: MeshData[], axis: 'x' | 'y' | 'z', sectionPosition: number, maxDepth: number, flipped: boolean, bounds?: Bounds2D): void;
64
+ buildDepthBuffer(meshes: MeshData[], plane: SectionPlaneConfig, occluderDepth: number, bounds?: Bounds2D): void;
45
65
  /**
46
66
  * Classify lines as visible or hidden based on depth buffer
47
67
  */
@@ -51,13 +71,6 @@ export declare class HiddenLineClassifier {
51
71
  * Returns new array with visibility set
52
72
  */
53
73
  applyVisibility(lines: DrawingLine[]): DrawingLine[];
54
- private computeBounds;
55
- private getProjectionAxes;
56
- private rasterizeMesh;
57
- private getVertex;
58
- private projectVertex;
59
- private rasterizeTriangle;
60
- private barycentricCoords;
61
74
  private classifySingleLine;
62
75
  private sampleVisibility;
63
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hidden-line.d.ts","sourceRoot":"","sources":["../src/hidden-line.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAQ,OAAO,EAAU,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAchG,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,iBAAiB,EAAE,eAAe,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,cAAc,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;CACnB;AAYD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAoB;IAEnC,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,MAAM,CAAyB;gBAE3B,OAAO,GAAE,OAAO,CAAC,iBAAiB,CAAM;IAIpD;;;;;;;;;OASG;IACH,gBAAgB,CACd,MAAM,EAAE,QAAQ,EAAE,EAClB,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EACrB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,QAAQ,GAChB,IAAI;IAqCP;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,gBAAgB,EAAE;IAevD;;;OAGG;IACH,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE;IA6BpD,OAAO,CAAC,aAAa;IA6CrB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,aAAa;IA4CrB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,iBAAiB;IAyCzB,OAAO,CAAC,iBAAiB;IAiCzB,OAAO,CAAC,kBAAkB;IAgE1B,OAAO,CAAC,gBAAgB;CAoBzB"}
1
+ {"version":3,"file":"hidden-line.d.ts","sourceRoot":"","sources":["../src/hidden-line.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAQtG,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;;OAMG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,iBAAiB,EAAE,eAAe,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,cAAc,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;CACnB;AAyBD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAoB;IAEnC,2EAA2E;IAC3E,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,GAAE,OAAO,CAAC,iBAAiB,CAAM;IAIpD;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CACd,MAAM,EAAE,QAAQ,EAAE,EAClB,KAAK,EAAE,kBAAkB,EACzB,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,QAAQ,GAChB,IAAI;IAYP;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,gBAAgB,EAAE;IAevD;;;OAGG;IACH,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE;IA+CpD,OAAO,CAAC,kBAAkB;IA8E1B,OAAO,CAAC,gBAAgB;CAuCzB"}
@@ -1,71 +1,60 @@
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
- import { vec3, point2DLerp, point2DDistance, boundsEmpty, boundsExtendPoint, EPSILON, } from './math.js';
4
+ import { point2DLerp, point2DDistance, EPSILON } from './math.js';
5
+ import { buildDepthRaster } from './hidden-line-raster.js';
5
6
  const DEFAULT_OPTIONS = {
6
7
  resolution: 1024,
7
8
  samplesPerLine: 10,
8
9
  depthBias: 0.001,
9
10
  };
11
+ /**
12
+ * View depth along a line as an affine function of the line parameter t
13
+ * (0 = start, 1 = end). An absent `depthEnd` means constant depth - `??`,
14
+ * never `||`: `depthEnd: 0` is a real value, an endpoint exactly ON the cut
15
+ * plane. Single source for sampling (classifySingleLine) and for re-deriving
16
+ * split-segment depths (applyVisibility), so the two cannot disagree.
17
+ */
18
+ function lineDepthAt(line) {
19
+ const depthStart = line.depth;
20
+ const depthEnd = line.depthEnd ?? line.depth;
21
+ return (t) => depthStart + (depthEnd - depthStart) * t;
22
+ }
10
23
  // ═══════════════════════════════════════════════════════════════════════════
11
24
  // HIDDEN LINE CLASSIFIER
12
25
  // ═══════════════════════════════════════════════════════════════════════════
13
26
  export class HiddenLineClassifier {
14
27
  options;
15
- depthBuffer = null;
16
- width = 0;
17
- height = 0;
18
- bounds = null;
28
+ /** Null after build when no occluder rasterized: everything is visible. */
29
+ raster = null;
30
+ built = false;
19
31
  constructor(options = {}) {
20
32
  this.options = { ...DEFAULT_OPTIONS, ...options };
21
33
  }
22
34
  /**
23
- * Build depth buffer from projected triangles
35
+ * Build the occluder depth buffer for the KEPT half of the section
36
+ * (flip-adjusted depth in `[-occluderDepth, 0]`), storing view depths.
37
+ *
38
+ * Takes the FULL plane config (issue #2639): a custom (face-picked) plane
39
+ * is honoured via the same `signedDepth` / `projectPointForPlane` helpers
40
+ * the line producers use, so buffer and lines agree by construction. For
41
+ * cardinal planes the projection is numerically identical to the old
42
+ * axis/position/flipped path (same axis mapping, same `flipped ? -u : u`).
24
43
  *
25
- * @param meshes Source meshes
26
- * @param axis Section axis
27
- * @param sectionPosition Position along axis
28
- * @param maxDepth Maximum depth to render
29
- * @param flipped Whether view is flipped
44
+ * @param meshes Source meshes (world = per-mesh origin + local positions)
45
+ * @param plane Section plane (cardinal fields, plus optional customPlane)
46
+ * @param occluderDepth How far into the kept half occluders rasterize
30
47
  * @param bounds Optional pre-computed 2D bounds
31
48
  */
32
- buildDepthBuffer(meshes, axis, sectionPosition, maxDepth, flipped, bounds) {
33
- // Compute bounds if not provided
34
- if (!bounds) {
35
- bounds = this.computeBounds(meshes, axis, sectionPosition, maxDepth, flipped);
36
- }
37
- this.bounds = bounds;
38
- // Calculate buffer dimensions
39
- const boundsWidth = bounds.max.x - bounds.min.x;
40
- const boundsHeight = bounds.max.y - bounds.min.y;
41
- if (boundsWidth < EPSILON || boundsHeight < EPSILON) {
42
- this.width = 1;
43
- this.height = 1;
44
- this.depthBuffer = new Float32Array([Infinity]);
45
- return;
46
- }
47
- const aspect = boundsWidth / boundsHeight;
48
- if (aspect > 1) {
49
- this.width = this.options.resolution;
50
- this.height = Math.max(1, Math.floor(this.options.resolution / aspect));
51
- }
52
- else {
53
- this.height = this.options.resolution;
54
- this.width = Math.max(1, Math.floor(this.options.resolution * aspect));
55
- }
56
- // Initialize depth buffer with infinity (far)
57
- this.depthBuffer = new Float32Array(this.width * this.height);
58
- this.depthBuffer.fill(Infinity);
59
- // Rasterize all triangles
60
- for (const mesh of meshes) {
61
- this.rasterizeMesh(mesh, axis, sectionPosition, maxDepth, flipped);
62
- }
49
+ buildDepthBuffer(meshes, plane, occluderDepth, bounds) {
50
+ this.raster = buildDepthRaster(meshes, plane, occluderDepth, this.options.resolution, this.options.depthBias, bounds);
51
+ this.built = true;
63
52
  }
64
53
  /**
65
54
  * Classify lines as visible or hidden based on depth buffer
66
55
  */
67
56
  classifyLines(lines) {
68
- if (!this.depthBuffer || !this.bounds) {
57
+ if (!this.built) {
69
58
  throw new Error('Depth buffer not built. Call buildDepthBuffer first.');
70
59
  }
71
60
  const results = [];
@@ -90,13 +79,32 @@ export class HiddenLineClassifier {
90
79
  output.push({ ...result.line, visibility: 'hidden' });
91
80
  }
92
81
  else {
93
- // Partial visibility - split into segments
82
+ // Partial visibility - split into segments, re-deriving each split
83
+ // segment's depth/depthEnd AT ITS OWN ENDPOINTS via the same affine
84
+ // parameterisation the classifier sampled with. Spreading the parent
85
+ // line's original pair onto every split (the pre-fix behaviour)
86
+ // attached depths describing the PARENT's endpoints to segments that
87
+ // start or end elsewhere, and line-merger then faithfully propagated
88
+ // those stale values into merged output (PR #2644 review).
89
+ const depthAt = lineDepthAt(result.line);
94
90
  for (const seg of result.segments) {
95
- output.push({
91
+ const depth = depthAt(seg.tStart);
92
+ const depthEnd = depthAt(seg.tEnd);
93
+ const split = {
96
94
  ...result.line,
97
95
  line: { start: seg.start, end: seg.end },
98
96
  visibility: seg.visible ? 'visible' : 'hidden',
99
- });
97
+ depth,
98
+ };
99
+ if (depthEnd !== depth) {
100
+ split.depthEnd = depthEnd;
101
+ }
102
+ else {
103
+ // "Omitted means constant depth" - don't leak the parent's
104
+ // depthEnd onto a constant-depth split.
105
+ delete split.depthEnd;
106
+ }
107
+ output.push(split);
100
108
  }
101
109
  }
102
110
  }
@@ -105,173 +113,35 @@ export class HiddenLineClassifier {
105
113
  // ═══════════════════════════════════════════════════════════════════════════
106
114
  // PRIVATE METHODS
107
115
  // ═══════════════════════════════════════════════════════════════════════════
108
- computeBounds(meshes, axis, sectionPosition, maxDepth, flipped) {
109
- let bounds = boundsEmpty();
110
- const axes = this.getProjectionAxes(axis);
111
- for (const mesh of meshes) {
112
- const { positions } = mesh;
113
- const vertexCount = positions.length / 3;
114
- for (let i = 0; i < vertexCount; i++) {
115
- const x = positions[i * 3];
116
- const y = positions[i * 3 + 1];
117
- const z = positions[i * 3 + 2];
118
- const v = { x, y, z };
119
- // Check if vertex is in depth range
120
- const depth = v[axis] - sectionPosition;
121
- const inRange = flipped
122
- ? depth <= 0 && depth >= -maxDepth
123
- : depth >= 0 && depth <= maxDepth;
124
- if (inRange) {
125
- const u = v[axes.u];
126
- const vCoord = v[axes.v];
127
- const point2d = { x: flipped ? -u : u, y: vCoord };
128
- bounds = boundsExtendPoint(bounds, point2d);
129
- }
130
- }
131
- }
132
- // Add small margin
133
- const margin = Math.max(bounds.max.x - bounds.min.x, bounds.max.y - bounds.min.y) * 0.01;
134
- bounds.min.x -= margin;
135
- bounds.min.y -= margin;
136
- bounds.max.x += margin;
137
- bounds.max.y += margin;
138
- return bounds;
139
- }
140
- getProjectionAxes(axis) {
141
- switch (axis) {
142
- case 'x':
143
- return { u: 'z', v: 'y' };
144
- case 'y':
145
- return { u: 'x', v: 'z' };
146
- case 'z':
147
- return { u: 'x', v: 'y' };
148
- }
149
- }
150
- rasterizeMesh(mesh, axis, sectionPosition, maxDepth, flipped) {
151
- const { positions, indices } = mesh;
152
- const axes = this.getProjectionAxes(axis);
153
- const triangleCount = indices.length / 3;
154
- for (let t = 0; t < triangleCount; t++) {
155
- const i0 = indices[t * 3];
156
- const i1 = indices[t * 3 + 1];
157
- const i2 = indices[t * 3 + 2];
158
- // Get 3D vertices
159
- const v0 = this.getVertex(positions, i0);
160
- const v1 = this.getVertex(positions, i1);
161
- const v2 = this.getVertex(positions, i2);
162
- // Check if triangle is in depth range
163
- const d0 = v0[axis] - sectionPosition;
164
- const d1 = v1[axis] - sectionPosition;
165
- const d2 = v2[axis] - sectionPosition;
166
- const inRange = (d) => flipped ? d <= 0 && d >= -maxDepth : d >= 0 && d <= maxDepth;
167
- // Skip triangles entirely outside depth range
168
- if (!inRange(d0) && !inRange(d1) && !inRange(d2)) {
169
- continue;
170
- }
171
- // Project to 2D + depth
172
- const p0 = this.projectVertex(v0, axes, flipped, sectionPosition);
173
- const p1 = this.projectVertex(v1, axes, flipped, sectionPosition);
174
- const p2 = this.projectVertex(v2, axes, flipped, sectionPosition);
175
- // Rasterize triangle
176
- this.rasterizeTriangle(p0, p1, p2);
177
- }
178
- }
179
- getVertex(positions, index) {
180
- const base = index * 3;
181
- return vec3(positions[base], positions[base + 1], positions[base + 2]);
182
- }
183
- projectVertex(v, axes, flipped, sectionPosition) {
184
- const u = v[axes.u];
185
- const vCoord = v[axes.v];
186
- // Find depth axis: the one not used for u or v projection
187
- const allAxes = ['x', 'y', 'z'];
188
- const depthAxis = allAxes.find(a => a !== axes.u && a !== axes.v) ?? 'z';
189
- // Signed distance from the section plane along the viewing direction.
190
- // Negate when flipped so that smaller depth always means nearer the viewer,
191
- // matching the line depths produced by edge-extractor / profile-projector.
192
- const signed = v[depthAxis] - sectionPosition;
193
- return {
194
- x: flipped ? -u : u,
195
- y: vCoord,
196
- depth: flipped ? -signed : signed,
197
- };
198
- }
199
- rasterizeTriangle(p0, p1, p2) {
200
- if (!this.bounds || !this.depthBuffer)
201
- return;
202
- // Convert to pixel coordinates
203
- const toPixelX = (x) => ((x - this.bounds.min.x) / (this.bounds.max.x - this.bounds.min.x)) * (this.width - 1);
204
- const toPixelY = (y) => ((y - this.bounds.min.y) / (this.bounds.max.y - this.bounds.min.y)) * (this.height - 1);
205
- const px0 = { x: toPixelX(p0.x), y: toPixelY(p0.y), depth: p0.depth };
206
- const px1 = { x: toPixelX(p1.x), y: toPixelY(p1.y), depth: p1.depth };
207
- const px2 = { x: toPixelX(p2.x), y: toPixelY(p2.y), depth: p2.depth };
208
- // Compute bounding box
209
- const minX = Math.max(0, Math.floor(Math.min(px0.x, px1.x, px2.x)));
210
- const maxX = Math.min(this.width - 1, Math.ceil(Math.max(px0.x, px1.x, px2.x)));
211
- const minY = Math.max(0, Math.floor(Math.min(px0.y, px1.y, px2.y)));
212
- const maxY = Math.min(this.height - 1, Math.ceil(Math.max(px0.y, px1.y, px2.y)));
213
- // Rasterize using barycentric coordinates
214
- for (let py = minY; py <= maxY; py++) {
215
- for (let px = minX; px <= maxX; px++) {
216
- const bary = this.barycentricCoords(px + 0.5, py + 0.5, px0, px1, px2);
217
- if (bary.u >= 0 && bary.v >= 0 && bary.w >= 0) {
218
- // Interpolate depth
219
- const depth = bary.u * px0.depth + bary.v * px1.depth + bary.w * px2.depth;
220
- const idx = py * this.width + px;
221
- if (depth < this.depthBuffer[idx]) {
222
- this.depthBuffer[idx] = depth;
223
- }
224
- }
225
- }
226
- }
227
- }
228
- barycentricCoords(px, py, p0, p1, p2) {
229
- const v0x = p1.x - p0.x;
230
- const v0y = p1.y - p0.y;
231
- const v1x = p2.x - p0.x;
232
- const v1y = p2.y - p0.y;
233
- const v2x = px - p0.x;
234
- const v2y = py - p0.y;
235
- const dot00 = v0x * v0x + v0y * v0y;
236
- const dot01 = v0x * v1x + v0y * v1y;
237
- const dot02 = v0x * v2x + v0y * v2y;
238
- const dot11 = v1x * v1x + v1y * v1y;
239
- const dot12 = v1x * v2x + v1y * v2y;
240
- const denom = dot00 * dot11 - dot01 * dot01;
241
- // Handle degenerate triangles (zero area) by returning invalid coordinates
242
- if (Math.abs(denom) < 1e-10) {
243
- return { u: -1, v: -1, w: -1 };
244
- }
245
- const invDenom = 1 / denom;
246
- const v = (dot11 * dot02 - dot01 * dot12) * invDenom;
247
- const w = (dot00 * dot12 - dot01 * dot02) * invDenom;
248
- const u = 1 - v - w;
249
- return { u, v, w };
250
- }
251
116
  classifySingleLine(line) {
252
- if (!this.bounds || !this.depthBuffer) {
253
- return {
254
- line,
255
- segments: [{ start: line.line.start, end: line.line.end, visible: true }],
256
- overallVisibility: 'visible',
257
- };
258
- }
259
117
  const { samplesPerLine, depthBias } = this.options;
260
118
  const lineLength = point2DDistance(line.line.start, line.line.end);
119
+ // View depth varies along the line when the producer supplied a
120
+ // per-endpoint `depthEnd` (e.g. a sloped edge); lerp it per sample.
121
+ const depthAt = lineDepthAt(line);
261
122
  // For very short lines, just test the midpoint
262
123
  const numSamples = lineLength < EPSILON ? 1 : Math.max(2, samplesPerLine);
263
124
  const segments = [];
264
125
  let currentStart = line.line.start;
265
- let currentVisible = this.sampleVisibility(line.line.start, line.depth, depthBias);
126
+ let currentT = 0;
127
+ let currentVisible = this.sampleVisibility(line.line.start, depthAt(0), depthBias);
266
128
  let visibleCount = currentVisible ? 1 : 0;
267
129
  for (let i = 1; i <= numSamples; i++) {
268
130
  const t = i / numSamples;
269
- const point = point2DLerp(line.line.start, line.line.end, t);
270
- const isVisible = this.sampleVisibility(point, line.depth, depthBias);
131
+ // The final sample is the EXACT endpoint: a lerp at t = 1 can
132
+ // overshoot it by one ulp on sign-straddling coordinates (e.g.
133
+ // -0.3 + (0.1 - -0.3) > 0.1) and land outside the raster bounds,
134
+ // misreading a fully occluded endpoint as visible (PR #2644 review).
135
+ const point = i === numSamples ? line.line.end : point2DLerp(line.line.start, line.line.end, t);
136
+ const isVisible = this.sampleVisibility(point, depthAt(t), depthBias);
271
137
  if (isVisible)
272
138
  visibleCount++;
273
- // Check for visibility change
274
- if (isVisible !== currentVisible && i < numSamples) {
139
+ // Open a transition on any visibility change - INCLUDING one at the
140
+ // final sample. The previous `i < numSamples` guard swallowed a flip
141
+ // there, so `overallVisibility` (counted over ALL samples) could say
142
+ // 'partial' while the emitted segments were one uniform run; now the
143
+ // two derive from the same transitions and cannot disagree.
144
+ if (isVisible !== currentVisible) {
275
145
  // Find transition point (approximate)
276
146
  const transitionT = (i - 0.5) / numSamples;
277
147
  const transitionPoint = point2DLerp(line.line.start, line.line.end, transitionT);
@@ -279,8 +149,11 @@ export class HiddenLineClassifier {
279
149
  start: currentStart,
280
150
  end: transitionPoint,
281
151
  visible: currentVisible,
152
+ tStart: currentT,
153
+ tEnd: transitionT,
282
154
  });
283
155
  currentStart = transitionPoint;
156
+ currentT = transitionT;
284
157
  currentVisible = isVisible;
285
158
  }
286
159
  }
@@ -289,8 +162,13 @@ export class HiddenLineClassifier {
289
162
  start: currentStart,
290
163
  end: line.line.end,
291
164
  visible: currentVisible,
165
+ tStart: currentT,
166
+ tEnd: 1,
292
167
  });
293
- // Determine overall visibility
168
+ // Determine overall visibility. With transitions opened on every flip
169
+ // this is equivalent to deriving it from the segments: all samples
170
+ // visible = one visible segment, none visible = one hidden segment,
171
+ // anything else opened at least one transition.
294
172
  let overallVisibility;
295
173
  if (visibleCount === numSamples + 1) {
296
174
  overallVisibility = 'visible';
@@ -304,17 +182,35 @@ export class HiddenLineClassifier {
304
182
  return { line, segments, overallVisibility };
305
183
  }
306
184
  sampleVisibility(point, lineDepth, depthBias) {
307
- if (!this.bounds || !this.depthBuffer)
185
+ const raster = this.raster;
186
+ // No raster means no occluder rasterized into the kept half: nothing can
187
+ // hide the line (issue #2639 - the previous code indexed the buffer with
188
+ // NaN here and classified everything hidden).
189
+ if (!raster)
190
+ return true;
191
+ const { bounds, width, height, buffer } = raster;
192
+ // A sample outside the raster bounds has no occluder information: the
193
+ // raster only covers where occluders rasterized (plus margin), so had it
194
+ // extended here the pixels would read Infinity (visible). Clamping onto
195
+ // a border pixel instead can wrongly HIDE a line far from any occluder,
196
+ // e.g. when a straddling occluder's self-computed bounds collapse to a
197
+ // sliver of in-window vertices. Visible is the only safe default: it can
198
+ // at worst under-hide, never erase real geometry.
199
+ if (point.x < bounds.min.x ||
200
+ point.x > bounds.max.x ||
201
+ point.y < bounds.min.y ||
202
+ point.y > bounds.max.y) {
308
203
  return true;
204
+ }
309
205
  // Convert to pixel coordinates
310
- const px = ((point.x - this.bounds.min.x) / (this.bounds.max.x - this.bounds.min.x)) *
311
- (this.width - 1);
312
- const py = ((point.y - this.bounds.min.y) / (this.bounds.max.y - this.bounds.min.y)) *
313
- (this.height - 1);
314
- // Clamp to buffer bounds
315
- const ix = Math.max(0, Math.min(this.width - 1, Math.floor(px)));
316
- const iy = Math.max(0, Math.min(this.height - 1, Math.floor(py)));
317
- const bufferDepth = this.depthBuffer[iy * this.width + ix];
206
+ const px = ((point.x - bounds.min.x) / (bounds.max.x - bounds.min.x)) * (width - 1);
207
+ const py = ((point.y - bounds.min.y) / (bounds.max.y - bounds.min.y)) * (height - 1);
208
+ if (!Number.isFinite(px) || !Number.isFinite(py))
209
+ return true;
210
+ // Clamp to guard the floating-point edge at bounds.max.
211
+ const ix = Math.max(0, Math.min(width - 1, Math.floor(px)));
212
+ const iy = Math.max(0, Math.min(height - 1, Math.floor(py)));
213
+ const bufferDepth = buffer[iy * width + ix];
318
214
  // Line is visible if it's at or in front of the depth buffer
319
215
  return lineDepth <= bufferDepth + depthBias;
320
216
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hidden-line.js","sourceRoot":"","sources":["../src/hidden-line.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hidden-line.js","sourceRoot":"","sources":["../src/hidden-line.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"line-merger.d.ts","sourceRoot":"","sources":["../src/line-merger.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,KAAK,EAAW,MAAM,EAAE,WAAW,EAAa,MAAM,YAAY,CAAC;AAiB1E,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,cAAc,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAC;CACtB;AAQD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,WAAW,EAAE,EACpB,OAAO,GAAE,OAAO,CAAC,iBAAiB,CAAM,GACvC,WAAW,EAAE,CAuBf;AAsBD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE,OAAO,CAAC,iBAAiB,CAAM,GACvC,MAAM,EAAE,CAuBV;AAyJD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,GAAE,MAAc,GACxB,MAAM,EAAE,CAmBV;AA6BD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAiC1E"}
1
+ {"version":3,"file":"line-merger.d.ts","sourceRoot":"","sources":["../src/line-merger.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,KAAK,EAAW,MAAM,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAc/D,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,cAAc,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAC;CACtB;AAQD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,WAAW,EAAE,EACpB,OAAO,GAAE,OAAO,CAAC,iBAAiB,CAAM,GACvC,WAAW,EAAE,CAuBf;AAyCD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE,OAAO,CAAC,iBAAiB,CAAM,GACvC,MAAM,EAAE,CAIV;AA8ND;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,GAAE,MAAc,GACxB,MAAM,EAAE,CAmBV;AA6BD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAiC1E"}