@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.
- package/dist/drawing-generator.d.ts +5 -0
- package/dist/drawing-generator.d.ts.map +1 -1
- package/dist/drawing-generator.js +20 -3
- package/dist/drawing-generator.js.map +1 -1
- package/dist/dxf/parser.d.ts.map +1 -1
- package/dist/dxf/parser.js +1 -0
- package/dist/dxf/parser.js.map +1 -1
- package/dist/edge-extractor.d.ts.map +1 -1
- package/dist/edge-extractor.js +21 -10
- package/dist/edge-extractor.js.map +1 -1
- package/dist/hidden-line-raster.d.ts +41 -0
- package/dist/hidden-line-raster.d.ts.map +1 -0
- package/dist/hidden-line-raster.js +154 -0
- package/dist/hidden-line-raster.js.map +1 -0
- package/dist/hidden-line.d.ts +34 -21
- package/dist/hidden-line.d.ts.map +1 -1
- package/dist/hidden-line.js +107 -211
- package/dist/hidden-line.js.map +1 -1
- package/dist/line-merger.d.ts.map +1 -1
- package/dist/line-merger.js +88 -44
- package/dist/line-merger.js.map +1 -1
- package/dist/polygon-builder.d.ts +31 -0
- package/dist/polygon-builder.d.ts.map +1 -1
- package/dist/polygon-builder.js +60 -3
- package/dist/polygon-builder.js.map +1 -1
- package/dist/profile-projector.js +17 -9
- package/dist/profile-projector.js.map +1 -1
- package/dist/projection-bands.d.ts +13 -6
- package/dist/projection-bands.d.ts.map +1 -1
- package/dist/projection-bands.js +15 -3
- package/dist/projection-bands.js.map +1 -1
- package/dist/section-cutter.d.ts +8 -0
- package/dist/section-cutter.d.ts.map +1 -1
- package/dist/section-cutter.js +59 -11
- package/dist/section-cutter.js.map +1 -1
- package/dist/types.d.ts +26 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- 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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"}
|
package/dist/hidden-line.d.ts
CHANGED
|
@@ -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
|
|
5
|
-
*
|
|
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
|
-
|
|
30
|
-
private
|
|
31
|
-
private
|
|
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
|
|
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
|
|
39
|
-
* @param
|
|
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[],
|
|
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
|
|
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"}
|
package/dist/hidden-line.js
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
|
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
|
|
27
|
-
* @param
|
|
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,
|
|
33
|
-
|
|
34
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
270
|
-
|
|
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
|
-
//
|
|
274
|
-
|
|
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
|
-
|
|
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 -
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
// Clamp to
|
|
315
|
-
const ix = Math.max(0, Math.min(
|
|
316
|
-
const iy = Math.max(0, Math.min(
|
|
317
|
-
const bufferDepth =
|
|
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
|
}
|
package/dist/hidden-line.js.map
CHANGED
|
@@ -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,
|
|
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"}
|