@ifc-lite/drawing-2d 1.21.2 → 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/edge-extractor.d.ts.map +1 -1
- package/dist/edge-extractor.js +9 -1
- 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 -214
- 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 +2 -2
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,176 +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, origin } = mesh;
|
|
113
|
-
const vertexCount = positions.length / 3;
|
|
114
|
-
for (let i = 0; i < vertexCount; i++) {
|
|
115
|
-
const v = this.getVertex(positions, i, origin);
|
|
116
|
-
// Check if vertex is in depth range
|
|
117
|
-
const depth = v[axis] - sectionPosition;
|
|
118
|
-
const inRange = flipped
|
|
119
|
-
? depth <= 0 && depth >= -maxDepth
|
|
120
|
-
: depth >= 0 && depth <= maxDepth;
|
|
121
|
-
if (inRange) {
|
|
122
|
-
const u = v[axes.u];
|
|
123
|
-
const vCoord = v[axes.v];
|
|
124
|
-
const point2d = { x: flipped ? -u : u, y: vCoord };
|
|
125
|
-
bounds = boundsExtendPoint(bounds, point2d);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
// Add small margin
|
|
130
|
-
const margin = Math.max(bounds.max.x - bounds.min.x, bounds.max.y - bounds.min.y) * 0.01;
|
|
131
|
-
bounds.min.x -= margin;
|
|
132
|
-
bounds.min.y -= margin;
|
|
133
|
-
bounds.max.x += margin;
|
|
134
|
-
bounds.max.y += margin;
|
|
135
|
-
return bounds;
|
|
136
|
-
}
|
|
137
|
-
getProjectionAxes(axis) {
|
|
138
|
-
switch (axis) {
|
|
139
|
-
case 'x':
|
|
140
|
-
return { u: 'z', v: 'y' };
|
|
141
|
-
case 'y':
|
|
142
|
-
return { u: 'x', v: 'z' };
|
|
143
|
-
case 'z':
|
|
144
|
-
return { u: 'x', v: 'y' };
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
rasterizeMesh(mesh, axis, sectionPosition, maxDepth, flipped) {
|
|
148
|
-
const { positions, indices, origin } = mesh;
|
|
149
|
-
const axes = this.getProjectionAxes(axis);
|
|
150
|
-
const triangleCount = indices.length / 3;
|
|
151
|
-
for (let t = 0; t < triangleCount; t++) {
|
|
152
|
-
const i0 = indices[t * 3];
|
|
153
|
-
const i1 = indices[t * 3 + 1];
|
|
154
|
-
const i2 = indices[t * 3 + 2];
|
|
155
|
-
// Get 3D vertices in WORLD space (positions are stored in the
|
|
156
|
-
// element's local frame; world = origin + local) — see
|
|
157
|
-
// section-cutter.ts / edge-extractor.ts. The depth buffer must be
|
|
158
|
-
// rasterized in the same frame as the lines sampled against it
|
|
159
|
-
// (drawing-generator.ts passes world-space lines from edge-extractor).
|
|
160
|
-
const v0 = this.getVertex(positions, i0, origin);
|
|
161
|
-
const v1 = this.getVertex(positions, i1, origin);
|
|
162
|
-
const v2 = this.getVertex(positions, i2, origin);
|
|
163
|
-
// Check if triangle is in depth range
|
|
164
|
-
const d0 = v0[axis] - sectionPosition;
|
|
165
|
-
const d1 = v1[axis] - sectionPosition;
|
|
166
|
-
const d2 = v2[axis] - sectionPosition;
|
|
167
|
-
const inRange = (d) => flipped ? d <= 0 && d >= -maxDepth : d >= 0 && d <= maxDepth;
|
|
168
|
-
// Skip triangles entirely outside depth range
|
|
169
|
-
if (!inRange(d0) && !inRange(d1) && !inRange(d2)) {
|
|
170
|
-
continue;
|
|
171
|
-
}
|
|
172
|
-
// Project to 2D + depth
|
|
173
|
-
const p0 = this.projectVertex(v0, axes, flipped, sectionPosition);
|
|
174
|
-
const p1 = this.projectVertex(v1, axes, flipped, sectionPosition);
|
|
175
|
-
const p2 = this.projectVertex(v2, axes, flipped, sectionPosition);
|
|
176
|
-
// Rasterize triangle
|
|
177
|
-
this.rasterizeTriangle(p0, p1, p2);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
getVertex(positions, index, origin) {
|
|
181
|
-
const base = index * 3;
|
|
182
|
-
return origin
|
|
183
|
-
? vec3(positions[base] + origin[0], positions[base + 1] + origin[1], positions[base + 2] + origin[2])
|
|
184
|
-
: vec3(positions[base], positions[base + 1], positions[base + 2]);
|
|
185
|
-
}
|
|
186
|
-
projectVertex(v, axes, flipped, sectionPosition) {
|
|
187
|
-
const u = v[axes.u];
|
|
188
|
-
const vCoord = v[axes.v];
|
|
189
|
-
// Find depth axis: the one not used for u or v projection
|
|
190
|
-
const allAxes = ['x', 'y', 'z'];
|
|
191
|
-
const depthAxis = allAxes.find(a => a !== axes.u && a !== axes.v) ?? 'z';
|
|
192
|
-
// Signed distance from the section plane along the viewing direction.
|
|
193
|
-
// Negate when flipped so that smaller depth always means nearer the viewer,
|
|
194
|
-
// matching the line depths produced by edge-extractor / profile-projector.
|
|
195
|
-
const signed = v[depthAxis] - sectionPosition;
|
|
196
|
-
return {
|
|
197
|
-
x: flipped ? -u : u,
|
|
198
|
-
y: vCoord,
|
|
199
|
-
depth: flipped ? -signed : signed,
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
rasterizeTriangle(p0, p1, p2) {
|
|
203
|
-
if (!this.bounds || !this.depthBuffer)
|
|
204
|
-
return;
|
|
205
|
-
// Convert to pixel coordinates
|
|
206
|
-
const toPixelX = (x) => ((x - this.bounds.min.x) / (this.bounds.max.x - this.bounds.min.x)) * (this.width - 1);
|
|
207
|
-
const toPixelY = (y) => ((y - this.bounds.min.y) / (this.bounds.max.y - this.bounds.min.y)) * (this.height - 1);
|
|
208
|
-
const px0 = { x: toPixelX(p0.x), y: toPixelY(p0.y), depth: p0.depth };
|
|
209
|
-
const px1 = { x: toPixelX(p1.x), y: toPixelY(p1.y), depth: p1.depth };
|
|
210
|
-
const px2 = { x: toPixelX(p2.x), y: toPixelY(p2.y), depth: p2.depth };
|
|
211
|
-
// Compute bounding box
|
|
212
|
-
const minX = Math.max(0, Math.floor(Math.min(px0.x, px1.x, px2.x)));
|
|
213
|
-
const maxX = Math.min(this.width - 1, Math.ceil(Math.max(px0.x, px1.x, px2.x)));
|
|
214
|
-
const minY = Math.max(0, Math.floor(Math.min(px0.y, px1.y, px2.y)));
|
|
215
|
-
const maxY = Math.min(this.height - 1, Math.ceil(Math.max(px0.y, px1.y, px2.y)));
|
|
216
|
-
// Rasterize using barycentric coordinates
|
|
217
|
-
for (let py = minY; py <= maxY; py++) {
|
|
218
|
-
for (let px = minX; px <= maxX; px++) {
|
|
219
|
-
const bary = this.barycentricCoords(px + 0.5, py + 0.5, px0, px1, px2);
|
|
220
|
-
if (bary.u >= 0 && bary.v >= 0 && bary.w >= 0) {
|
|
221
|
-
// Interpolate depth
|
|
222
|
-
const depth = bary.u * px0.depth + bary.v * px1.depth + bary.w * px2.depth;
|
|
223
|
-
const idx = py * this.width + px;
|
|
224
|
-
if (depth < this.depthBuffer[idx]) {
|
|
225
|
-
this.depthBuffer[idx] = depth;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
barycentricCoords(px, py, p0, p1, p2) {
|
|
232
|
-
const v0x = p1.x - p0.x;
|
|
233
|
-
const v0y = p1.y - p0.y;
|
|
234
|
-
const v1x = p2.x - p0.x;
|
|
235
|
-
const v1y = p2.y - p0.y;
|
|
236
|
-
const v2x = px - p0.x;
|
|
237
|
-
const v2y = py - p0.y;
|
|
238
|
-
const dot00 = v0x * v0x + v0y * v0y;
|
|
239
|
-
const dot01 = v0x * v1x + v0y * v1y;
|
|
240
|
-
const dot02 = v0x * v2x + v0y * v2y;
|
|
241
|
-
const dot11 = v1x * v1x + v1y * v1y;
|
|
242
|
-
const dot12 = v1x * v2x + v1y * v2y;
|
|
243
|
-
const denom = dot00 * dot11 - dot01 * dot01;
|
|
244
|
-
// Handle degenerate triangles (zero area) by returning invalid coordinates
|
|
245
|
-
if (Math.abs(denom) < 1e-10) {
|
|
246
|
-
return { u: -1, v: -1, w: -1 };
|
|
247
|
-
}
|
|
248
|
-
const invDenom = 1 / denom;
|
|
249
|
-
const v = (dot11 * dot02 - dot01 * dot12) * invDenom;
|
|
250
|
-
const w = (dot00 * dot12 - dot01 * dot02) * invDenom;
|
|
251
|
-
const u = 1 - v - w;
|
|
252
|
-
return { u, v, w };
|
|
253
|
-
}
|
|
254
116
|
classifySingleLine(line) {
|
|
255
|
-
if (!this.bounds || !this.depthBuffer) {
|
|
256
|
-
return {
|
|
257
|
-
line,
|
|
258
|
-
segments: [{ start: line.line.start, end: line.line.end, visible: true }],
|
|
259
|
-
overallVisibility: 'visible',
|
|
260
|
-
};
|
|
261
|
-
}
|
|
262
117
|
const { samplesPerLine, depthBias } = this.options;
|
|
263
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);
|
|
264
122
|
// For very short lines, just test the midpoint
|
|
265
123
|
const numSamples = lineLength < EPSILON ? 1 : Math.max(2, samplesPerLine);
|
|
266
124
|
const segments = [];
|
|
267
125
|
let currentStart = line.line.start;
|
|
268
|
-
let
|
|
126
|
+
let currentT = 0;
|
|
127
|
+
let currentVisible = this.sampleVisibility(line.line.start, depthAt(0), depthBias);
|
|
269
128
|
let visibleCount = currentVisible ? 1 : 0;
|
|
270
129
|
for (let i = 1; i <= numSamples; i++) {
|
|
271
130
|
const t = i / numSamples;
|
|
272
|
-
|
|
273
|
-
|
|
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);
|
|
274
137
|
if (isVisible)
|
|
275
138
|
visibleCount++;
|
|
276
|
-
//
|
|
277
|
-
|
|
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) {
|
|
278
145
|
// Find transition point (approximate)
|
|
279
146
|
const transitionT = (i - 0.5) / numSamples;
|
|
280
147
|
const transitionPoint = point2DLerp(line.line.start, line.line.end, transitionT);
|
|
@@ -282,8 +149,11 @@ export class HiddenLineClassifier {
|
|
|
282
149
|
start: currentStart,
|
|
283
150
|
end: transitionPoint,
|
|
284
151
|
visible: currentVisible,
|
|
152
|
+
tStart: currentT,
|
|
153
|
+
tEnd: transitionT,
|
|
285
154
|
});
|
|
286
155
|
currentStart = transitionPoint;
|
|
156
|
+
currentT = transitionT;
|
|
287
157
|
currentVisible = isVisible;
|
|
288
158
|
}
|
|
289
159
|
}
|
|
@@ -292,8 +162,13 @@ export class HiddenLineClassifier {
|
|
|
292
162
|
start: currentStart,
|
|
293
163
|
end: line.line.end,
|
|
294
164
|
visible: currentVisible,
|
|
165
|
+
tStart: currentT,
|
|
166
|
+
tEnd: 1,
|
|
295
167
|
});
|
|
296
|
-
// 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.
|
|
297
172
|
let overallVisibility;
|
|
298
173
|
if (visibleCount === numSamples + 1) {
|
|
299
174
|
overallVisibility = 'visible';
|
|
@@ -307,17 +182,35 @@ export class HiddenLineClassifier {
|
|
|
307
182
|
return { line, segments, overallVisibility };
|
|
308
183
|
}
|
|
309
184
|
sampleVisibility(point, lineDepth, depthBias) {
|
|
310
|
-
|
|
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) {
|
|
311
203
|
return true;
|
|
204
|
+
}
|
|
312
205
|
// Convert to pixel coordinates
|
|
313
|
-
const px = ((point.x -
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
// Clamp to
|
|
318
|
-
const ix = Math.max(0, Math.min(
|
|
319
|
-
const iy = Math.max(0, Math.min(
|
|
320
|
-
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];
|
|
321
214
|
// Line is visible if it's at or in front of the depth buffer
|
|
322
215
|
return lineDepth <= bufferDepth + depthBias;
|
|
323
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":"AAAA;;+DAE+D;AAW/D,OAAO,EACL,IAAI,EACJ,WAAW,EACX,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,OAAO,GACR,MAAM,WAAW,CAAC;AA2BnB,MAAM,eAAe,GAAsB;IACzC,UAAU,EAAE,IAAI;IAChB,cAAc,EAAE,EAAE;IAClB,SAAS,EAAE,KAAK;CACjB,CAAC;AAEF,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E,MAAM,OAAO,oBAAoB;IACvB,OAAO,CAAoB;IAE3B,WAAW,GAAwB,IAAI,CAAC;IACxC,KAAK,GAAW,CAAC,CAAC;IAClB,MAAM,GAAW,CAAC,CAAC;IACnB,MAAM,GAAoB,IAAI,CAAC;IAEvC,YAAY,UAAsC,EAAE;QAClD,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO,EAAE,CAAC;IACpD,CAAC;IAED;;;;;;;;;OASG;IACH,gBAAgB,CACd,MAAkB,EAClB,IAAqB,EACrB,eAAuB,EACvB,QAAgB,EAChB,OAAgB,EAChB,MAAiB;QAEjB,iCAAiC;QACjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,8BAA8B;QAC9B,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAEjD,IAAI,WAAW,GAAG,OAAO,IAAI,YAAY,GAAG,OAAO,EAAE,CAAC;YACpD,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACf,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAChB,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,WAAW,GAAG,YAAY,CAAC;QAC1C,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YACrC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC;QAC1E,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YACtC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC;QACzE,CAAC;QAED,8CAA8C;QAC9C,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEhC,0BAA0B;QAC1B,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,KAAoB;QAChC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,OAAO,GAAuB,EAAE,CAAC;QAEvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,KAAoB;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAE1C,MAAM,MAAM,GAAkB,EAAE,CAAC;QAEjC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBAC3C,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;YACzD,CAAC;iBAAM,IAAI,MAAM,CAAC,iBAAiB,KAAK,QAAQ,EAAE,CAAC;gBACjD,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,2CAA2C;gBAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBAClC,MAAM,CAAC,IAAI,CAAC;wBACV,GAAG,MAAM,CAAC,IAAI;wBACd,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE;wBACxC,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;qBAC/C,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,8EAA8E;IAC9E,kBAAkB;IAClB,8EAA8E;IAEtE,aAAa,CACnB,MAAkB,EAClB,IAAqB,EACrB,eAAuB,EACvB,QAAgB,EAChB,OAAgB;QAEhB,IAAI,MAAM,GAAG,WAAW,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAE1C,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YACnC,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;gBAE/C,oCAAoC;gBACpC,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC;gBACxC,MAAM,OAAO,GAAG,OAAO;oBACrB,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ;oBAClC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,QAAQ,CAAC;gBAEpC,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACpB,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACzB,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;oBACnD,MAAM,GAAG,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACzF,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC;QAEvB,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,iBAAiB,CAAC,IAAqB;QAC7C,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,GAAG;gBACN,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;YAC5B,KAAK,GAAG;gBACN,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;YAC5B,KAAK,GAAG;gBACN,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,aAAa,CACnB,IAAc,EACd,IAAqB,EACrB,eAAuB,EACvB,QAAgB,EAChB,OAAgB;QAEhB,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9B,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAE9B,8DAA8D;YAC9D,uDAAuD;YACvD,kEAAkE;YAClE,+DAA+D;YAC/D,uEAAuE;YACvE,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YACjD,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YACjD,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YAEjD,sCAAsC;YACtC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC;YACtC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC;YACtC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC;YAEtC,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAC5B,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC;YAE/D,8CAA8C;YAC9C,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;gBACjD,SAAS;YACX,CAAC;YAED,wBAAwB;YACxB,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;YAClE,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;YAClE,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;YAElE,qBAAqB;YACrB,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAEO,SAAS,CACf,SAAuB,EACvB,KAAa,EACb,MAAiC;QAEjC,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC;QACvB,OAAO,MAAM;YACX,CAAC,CAAC,IAAI,CACF,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAC3B,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAC/B,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAChC;YACH,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;IAEO,aAAa,CACnB,CAAO,EACP,IAAgD,EAChD,OAAgB,EAChB,eAAuB;QAEvB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,0DAA0D;QAC1D,MAAM,OAAO,GAAwB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QACzE,sEAAsE;QACtE,4EAA4E;QAC5E,2EAA2E;QAC3E,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC;QAC9C,OAAO;YACL,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC,EAAE,MAAM;YACT,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;SAClC,CAAC;IACJ,CAAC;IAEO,iBAAiB,CACvB,EAA2C,EAC3C,EAA2C,EAC3C,EAA2C;QAE3C,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAE9C,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAC7B,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC5F,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAC7B,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE7F,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC;QACtE,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC;QACtE,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC;QAEtE,uBAAuB;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjF,0CAA0C;QAC1C,KAAK,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;YACrC,KAAK,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;gBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBAEvE,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC9C,oBAAoB;oBACpB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;oBAE3E,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;oBACjC,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;wBAClC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;oBAChC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,iBAAiB,CACvB,EAAU,EACV,EAAU,EACV,EAA4B,EAC5B,EAA4B,EAC5B,EAA4B;QAE5B,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACxB,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACxB,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACxB,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACxB,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAEtB,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACpC,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACpC,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACpC,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACpC,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QAEpC,MAAM,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;QAC5C,2EAA2E;QAC3E,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,CAAC;YAC5B,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACjC,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,QAAQ,CAAC;QACrD,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,QAAQ,CAAC;QACrD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEpB,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACrB,CAAC;IAEO,kBAAkB,CAAC,IAAiB;QAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtC,OAAO;gBACL,IAAI;gBACJ,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBACzE,iBAAiB,EAAE,SAAS;aAC7B,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACnD,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEnE,+CAA+C;QAC/C,MAAM,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QAE1E,MAAM,QAAQ,GAAwB,EAAE,CAAC;QACzC,IAAI,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QACnC,IAAI,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACnF,IAAI,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;YACzB,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAEtE,IAAI,SAAS;gBAAE,YAAY,EAAE,CAAC;YAE9B,8BAA8B;YAC9B,IAAI,SAAS,KAAK,cAAc,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC;gBACnD,sCAAsC;gBACtC,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC;gBAC3C,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;gBAEjF,QAAQ,CAAC,IAAI,CAAC;oBACZ,KAAK,EAAE,YAAY;oBACnB,GAAG,EAAE,eAAe;oBACpB,OAAO,EAAE,cAAc;iBACxB,CAAC,CAAC;gBAEH,YAAY,GAAG,eAAe,CAAC;gBAC/B,cAAc,GAAG,SAAS,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,QAAQ,CAAC,IAAI,CAAC;YACZ,KAAK,EAAE,YAAY;YACnB,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG;YAClB,OAAO,EAAE,cAAc;SACxB,CAAC,CAAC;QAEH,+BAA+B;QAC/B,IAAI,iBAAkC,CAAC;QACvC,IAAI,YAAY,KAAK,UAAU,GAAG,CAAC,EAAE,CAAC;YACpC,iBAAiB,GAAG,SAAS,CAAC;QAChC,CAAC;aAAM,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YAC9B,iBAAiB,GAAG,QAAQ,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,iBAAiB,GAAG,SAAS,CAAC;QAChC,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC/C,CAAC;IAEO,gBAAgB,CAAC,KAAc,EAAE,SAAiB,EAAE,SAAiB;QAC3E,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAEnD,+BAA+B;QAC/B,MAAM,EAAE,GACN,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzE,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACnB,MAAM,EAAE,GACN,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEpB,yBAAyB;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAElE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QAE3D,6DAA6D;QAC7D,OAAO,SAAS,IAAI,WAAW,GAAG,SAAS,CAAC;IAC9C,CAAC;CACF"}
|
|
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"}
|