@ifc-lite/drawing-2d 1.16.2 → 1.18.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.
@@ -9,7 +9,7 @@
9
9
  * - SVG export
10
10
  */
11
11
  import type { MeshData } from '@ifc-lite/geometry';
12
- import type { SectionConfig, Drawing2D, DrawingLine, ProfileEntry } from './types.js';
12
+ import type { SectionConfig, SectionAxis, Drawing2D, DrawingLine, ProfileEntry, MeshOutline2D } from './types.js';
13
13
  import type { SVGExportOptions } from './svg-exporter.js';
14
14
  export interface GeneratorOptions {
15
15
  /** Use GPU acceleration if available */
@@ -22,6 +22,14 @@ export interface GeneratorOptions {
22
22
  includeEdges: boolean;
23
23
  /** Merge collinear line segments */
24
24
  mergeLines: boolean;
25
+ /**
26
+ * Optional winding-robust outline provider (the Rust `meshOutline2d` WASM
27
+ * binding, issue #979). When supplied, non-extruded geometry projects via
28
+ * this footprint outline instead of the normal-based mesh silhouette (which
29
+ * ifc-lite's unreliable winding can break). Return `null` to fall back to
30
+ * silhouette extraction for that mesh.
31
+ */
32
+ outlineProvider?: (mesh: MeshData, axis: SectionAxis, flipped: boolean) => MeshOutline2D | null;
25
33
  /** Progress callback */
26
34
  onProgress?: (stage: string, progress: number) => void;
27
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"drawing-generator.d.ts","sourceRoot":"","sources":["../src/drawing-generator.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EACV,aAAa,EAEb,SAAS,EACT,WAAW,EAKX,YAAY,EACb,MAAM,YAAY,CAAC;AASpB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAe1D,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,MAAM,EAAE,OAAO,CAAC;IAChB,qCAAqC;IACrC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,6DAA6D;IAC7D,iBAAiB,EAAE,OAAO,CAAC;IAC3B,4CAA4C;IAC5C,YAAY,EAAE,OAAO,CAAC;IACtB,oCAAoC;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,wBAAwB;IACxB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACxD;AAUD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;IAC5E,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,oBAAoB,CAAkD;IAC9E,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,WAAW,CAAqB;IAExC,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,WAAW,CAAS;IAE5B;;OAEG;IACG,UAAU,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAStD;;OAEG;IACG,QAAQ,CACZ,MAAM,EAAE,QAAQ,EAAE,EAClB,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,OAAO,CAAC,gBAAgB,CAAM,EACvC,QAAQ,CAAC,EAAE,YAAY,EAAE,GACxB,OAAO,CAAC,SAAS,CAAC;IAoPrB;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,MAAM;IAIjE;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,SAAS,GAAG,WAAW,EAAE;IAwBnD;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACH,OAAO,IAAI,IAAI;CAQhB;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EACrB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAM,GAClD,aAAa,CAUf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,QAAQ,EAAE,EAClB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAClC,OAAO,CAAC,SAAS,CAAC,CAcpB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,QAAQ,EAAE,EAClB,IAAI,EAAE,GAAG,GAAG,GAAG,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAClC,OAAO,CAAC,SAAS,CAAC,CAcpB"}
1
+ {"version":3,"file":"drawing-generator.d.ts","sourceRoot":"","sources":["../src/drawing-generator.ts"],"names":[],"mappings":"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"}
@@ -4,13 +4,15 @@
4
4
  import { DEFAULT_SECTION_CONFIG, makeEntityKey } from './types.js';
5
5
  import { SectionCutter } from './section-cutter.js';
6
6
  import { PolygonBuilder } from './polygon-builder.js';
7
- import { EdgeExtractor, getViewDirection } from './edge-extractor.js';
7
+ import { EdgeExtractor } from './edge-extractor.js';
8
8
  import { HiddenLineClassifier } from './hidden-line.js';
9
9
  import { mergeDrawingLines } from './line-merger.js';
10
10
  import { HatchGenerator } from './hatch-generator.js';
11
11
  import { SVGExporter } from './svg-exporter.js';
12
12
  import { GPUSectionCutter } from './gpu-section-cutter.js';
13
13
  import { projectProfiles } from './profile-projector.js';
14
+ import { getViewDirectionForPlane, outlineToProjectionLines, } from './projection-bands.js';
15
+ import { isFeatureElementType } from './feature-elements.js';
14
16
  import { boundsEmpty, boundsExtendLine, lineLength, } from './math.js';
15
17
  const DEFAULT_OPTIONS = {
16
18
  useGPU: true,
@@ -95,64 +97,72 @@ export class Drawing2DGenerator {
95
97
  depth: 0,
96
98
  }));
97
99
  // ─────────────────────────────────────────────────────────────────────────
98
- // STAGE 4: Edge Extraction (Projection Lines)
100
+ // STAGE 4: Construction Projection Lines (issue #979)
101
+ //
102
+ // Project geometry BEYOND the cut into two architectural bands:
103
+ // • below the cut → VISIBLE (thin solid)
104
+ // • above the cut → OVERHEAD (dashed, carried as `visibility:'hidden'`)
105
+ //
106
+ // Sources, picked per element to avoid double-drawing the same wall:
107
+ // • extruded-area solids → clean profile boundaries (`projectProfiles`)
108
+ // • everything else → mesh SILHOUETTE outline (NOT crease edges,
109
+ // which draw every tessellation facet). Runs only when `includeEdges`.
99
110
  // ─────────────────────────────────────────────────────────────────────────
100
111
  let projectionLines = [];
101
- let silhouetteLines = [];
102
- if (opts.includeProjection || opts.includeEdges) {
112
+ if (opts.includeProjection) {
103
113
  report('edges', 0);
104
- if (profiles && profiles.length > 0 && opts.includeProjection) {
105
- // ── Clean path: profile-based projection (no tessellation artifacts) ──
106
- projectionLines = projectProfiles(profiles, config.plane, config.projectionDepth);
114
+ const bands = {
115
+ below: config.projectionBelowDepth ?? config.projectionDepth,
116
+ above: config.projectionAboveDepth ?? config.projectionDepth,
117
+ };
118
+ // Feature elements (IfcOpeningElement & the void/feature family) are
119
+ // boolean operands, not building structure — they must never project
120
+ // (issue #979 follow-up). Filter them from BOTH the profile path and the
121
+ // silhouette path: dropping them only from profiles would push them onto
122
+ // the silhouette path (they'd fall out of `coveredKeys` and their raw
123
+ // mesh would then be silhouetted), so the two must be filtered together.
124
+ // The Rust extractor already skips them at the source, but a CI-lagged
125
+ // WASM bundle can still emit opening profiles, and opening MESHES always
126
+ // reach `meshes` — so this TS filter is the load-bearing guard.
127
+ const projectionProfiles = profiles?.filter((p) => !isFeatureElementType(p.ifcType));
128
+ // Per-element dedup: elements with an extracted profile take their
129
+ // projection from the clean profile path only; the silhouette fallback
130
+ // skips them.
131
+ const coveredKeys = new Set();
132
+ if (projectionProfiles && projectionProfiles.length > 0) {
133
+ for (const profile of projectionProfiles) {
134
+ coveredKeys.add(makeEntityKey(profile.modelIndex, profile.expressId));
135
+ }
136
+ projectionLines.push(...projectProfiles(projectionProfiles, config.plane, bands));
107
137
  }
108
138
  if (opts.includeEdges) {
109
- // Feature edges and silhouettes always come from the mesh edge extractor
110
- // Extract feature edges from all meshes
111
- const allEdges = this.edgeExtractor.extractEdgesFromMeshes(meshes);
112
- // Filter edges in projection range
113
- const projectionEdges = this.edgeExtractor.filterEdgesByDepth(allEdges, config.plane.axis, config.plane.position, config.projectionDepth, config.plane.flipped);
114
- // Get view direction for silhouette detection
115
- const viewDir = getViewDirection(config.plane.axis, config.plane.flipped);
116
- // Extract silhouettes
117
- const silhouettes = this.edgeExtractor.extractSilhouettes(projectionEdges, viewDir);
118
- silhouetteLines = this.edgeExtractor.edgesToDrawingLines(silhouettes, config.plane.axis, config.plane.flipped, 'silhouette', config.plane.position);
119
- if (opts.includeProjection) {
120
- const profileKeys = new Set((profiles ?? []).map((profile) => makeEntityKey(profile.modelIndex, profile.expressId)));
121
- const creaseEdges = projectionEdges.filter((edge) => {
122
- if (edge.type !== 'crease' || silhouettes.includes(edge)) {
123
- return false;
124
- }
125
- if (profileKeys.size === 0) {
126
- return true;
127
- }
128
- return !profileKeys.has(makeEntityKey(edge.modelIndex, edge.entityId));
129
- });
130
- projectionLines = [
131
- ...projectionLines,
132
- ...this.edgeExtractor.edgesToDrawingLines(creaseEdges, config.plane.axis, config.plane.flipped, 'projection', config.plane.position),
133
- ];
139
+ // Outline for non-extruded geometry (roofs, stairs, site, BReps) with
140
+ // no extracted profile the elements issue #979 specifically calls
141
+ // out. Prefer the winding-robust Rust `meshOutline2d` footprint when an
142
+ // outlineProvider is supplied; fall back per-mesh to the normal-based
143
+ // silhouette (which can break on ifc-lite's unreliable winding).
144
+ const meshesForSilhouette = meshes.filter((m) => !isFeatureElementType(m.ifcType) &&
145
+ !coveredKeys.has(makeEntityKey(m.modelIndex ?? 0, m.expressId)));
146
+ const viewDir = getViewDirectionForPlane(config.plane);
147
+ for (const mesh of meshesForSilhouette) {
148
+ const outline = opts.outlineProvider
149
+ ? opts.outlineProvider(mesh, config.plane.axis, config.plane.flipped)
150
+ : null;
151
+ if (outline && outline.contours.length > 0) {
152
+ projectionLines.push(...outlineToProjectionLines(outline, {
153
+ entityId: mesh.expressId,
154
+ ifcType: mesh.ifcType ?? 'Unknown',
155
+ modelIndex: mesh.modelIndex ?? 0,
156
+ }, config.plane, bands));
157
+ }
158
+ else {
159
+ const edges = this.edgeExtractor.extractEdges(mesh);
160
+ const silhouettes = this.edgeExtractor.extractSilhouettes(edges, viewDir);
161
+ projectionLines.push(...this.edgeExtractor.edgesToProjectionLines(silhouettes, config.plane, bands));
162
+ }
134
163
  }
135
164
  }
136
- else if (opts.includeProjection) {
137
- // No edge extraction requested, but projection is enabled.
138
- // Use crease-edge fallback for entities not covered by profile extraction.
139
- const profileKeys = new Set((profiles ?? []).map((profile) => makeEntityKey(profile.modelIndex, profile.expressId)));
140
- const allEdges = this.edgeExtractor.extractEdgesFromMeshes(meshes);
141
- const projectionEdges = this.edgeExtractor.filterEdgesByDepth(allEdges, config.plane.axis, config.plane.position, config.projectionDepth, config.plane.flipped);
142
- const creaseEdges = projectionEdges.filter((e) => {
143
- if (e.type !== 'crease')
144
- return false;
145
- if (profileKeys.size === 0)
146
- return true;
147
- return !profileKeys.has(makeEntityKey(e.modelIndex, e.entityId));
148
- });
149
- projectionLines = [
150
- ...projectionLines,
151
- ...this.edgeExtractor.edgesToDrawingLines(creaseEdges, config.plane.axis, config.plane.flipped, 'projection', config.plane.position),
152
- ];
153
- }
154
- // Filter out outlier lines that are abnormally long (likely artifacts)
155
- // Use cut polygon bounds to determine reasonable max line length
165
+ // Drop outlier lines abnormally longer than the cut area (artifacts).
156
166
  const cutBounds = this.computeBounds(cutLines);
157
167
  if (cutBounds.min.x < cutBounds.max.x && cutBounds.min.y < cutBounds.max.y) {
158
168
  const boundsWidth = cutBounds.max.x - cutBounds.min.x;
@@ -160,7 +170,6 @@ export class Drawing2DGenerator {
160
170
  const boundsDiagonal = Math.sqrt(boundsWidth * boundsWidth + boundsHeight * boundsHeight);
161
171
  // Allow lines up to 1.5x the diagonal of the cut area
162
172
  const maxLineLength = boundsDiagonal * 1.5;
163
- silhouetteLines = silhouetteLines.filter((line) => lineLength(line.line) <= maxLineLength);
164
173
  projectionLines = projectionLines.filter((line) => lineLength(line.line) <= maxLineLength);
165
174
  }
166
175
  report('edges', 1);
@@ -168,18 +177,33 @@ export class Drawing2DGenerator {
168
177
  // ─────────────────────────────────────────────────────────────────────────
169
178
  // STAGE 5: Hidden Line Removal
170
179
  // ─────────────────────────────────────────────────────────────────────────
171
- let allLines = [...cutLines, ...projectionLines, ...silhouetteLines];
172
- if (opts.includeHiddenLines && (projectionLines.length > 0 || silhouetteLines.length > 0)) {
180
+ let allLines = [...cutLines, ...projectionLines];
181
+ if (opts.includeHiddenLines && projectionLines.length > 0) {
173
182
  report('hidden', 0);
174
183
  // Compute bounds for depth buffer
175
184
  const bounds = this.computeBounds(allLines);
176
- // Build depth buffer and classify lines
177
- this.hiddenLineClassifier.buildDepthBuffer(meshes, config.plane.axis, config.plane.position, config.projectionDepth, config.plane.flipped, bounds);
178
- // Only classify non-cut lines
179
- const linesToClassify = allLines.filter((l) => l.category !== 'cut');
180
- const classifiedLines = this.hiddenLineClassifier.applyVisibility(linesToClassify);
181
- // Recombine with cut lines (always visible)
182
- allLines = [...cutLines, ...classifiedLines];
185
+ // The depth buffer must cover everything projection can emit — including
186
+ // the (possibly wider) construction-projection bands or in-band lines
187
+ // beyond projectionDepth would be classified against an incomplete buffer
188
+ // and wrongly stay visible because their occluders were never rasterized.
189
+ const occluderDepth = Math.max(config.projectionDepth, config.projectionBelowDepth ?? config.projectionDepth, config.projectionAboveDepth ?? config.projectionDepth);
190
+ // Build depth buffer and classify lines. The occluder set deliberately
191
+ // keeps the FULL `meshes` (incl. feature-element/opening meshes that are
192
+ // filtered out of projection above): an opening mesh is coincident with
193
+ // the void in its host wall, which writes the same depth, so it never
194
+ // changes occlusion — and dropping it could only ever REVEAL a
195
+ // through-wall line that should stay hidden. Don't "tidy" this to the
196
+ // filtered set.
197
+ this.hiddenLineClassifier.buildDepthBuffer(meshes, config.plane.axis, config.plane.position, occluderDepth, config.plane.flipped, bounds);
198
+ // Occlusion only DOWNGRADES visible → hidden; it can never reveal an
199
+ // already-dashed OVERHEAD line. So classify the visible (below-cut)
200
+ // projection lines and pass overhead lines through unchanged — otherwise
201
+ // an unoccluded overhead beam would be re-marked 'visible' (solid).
202
+ const toClassify = allLines.filter((l) => l.category !== 'cut' && l.visibility === 'visible');
203
+ const passthrough = allLines.filter((l) => l.category !== 'cut' && l.visibility !== 'visible');
204
+ const classifiedLines = this.hiddenLineClassifier.applyVisibility(toClassify);
205
+ // Recombine with cut lines (always visible) + overhead pass-through.
206
+ allLines = [...cutLines, ...classifiedLines, ...passthrough];
183
207
  report('hidden', 1);
184
208
  }
185
209
  // ─────────────────────────────────────────────────────────────────────────
@@ -1 +1 @@
1
- {"version":3,"file":"drawing-generator.js","sourceRoot":"","sources":["../src/drawing-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"drawing-generator.js","sourceRoot":"","sources":["../src/drawing-generator.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,8 @@
7
7
  * - Silhouette edges (contour edges for a given view direction)
8
8
  */
9
9
  import type { MeshData } from '@ifc-lite/geometry';
10
- import type { Vec3, EdgeData, DrawingLine, LineCategory } from './types.js';
10
+ import type { Vec3, EdgeData, DrawingLine, SectionPlaneConfig } from './types.js';
11
+ import { type ProjectionBandDepths } from './projection-bands.js';
11
12
  export declare class EdgeExtractor {
12
13
  /** Crease angle threshold in radians */
13
14
  private creaseAngle;
@@ -16,32 +17,26 @@ export declare class EdgeExtractor {
16
17
  * Extract all feature edges from a mesh
17
18
  */
18
19
  extractEdges(mesh: MeshData): EdgeData[];
19
- /**
20
- * Extract edges from multiple meshes
21
- */
22
- extractEdgesFromMeshes(meshes: MeshData[]): EdgeData[];
23
20
  /**
24
21
  * Extract silhouette edges for a given view direction
25
22
  * Silhouette edges are where one adjacent face is front-facing and the other is back-facing
26
23
  */
27
24
  extractSilhouettes(edges: EdgeData[], viewDirection: Vec3): EdgeData[];
28
25
  /**
29
- * Convert edges to 2D drawing lines
30
- */
31
- edgesToDrawingLines(edges: EdgeData[], axis: 'x' | 'y' | 'z', flipped: boolean, category: LineCategory, sectionPosition: number): DrawingLine[];
32
- /**
33
- * Filter edges that are within a depth range from the section plane.
34
- * Includes edges where:
35
- * - Either endpoint is within range
36
- * - The edge crosses through the depth band (one endpoint before, one after)
26
+ * Convert silhouette edges into band-classified construction-projection
27
+ * lines (issue #979). Each edge is classified by its own endpoints:
28
+ * - below the cut `visibility: 'visible'` (thin solid)
29
+ * - above the cut → `visibility: 'hidden'` (dashed)
30
+ * - outside both bands dropped
31
+ *
32
+ * Projection uses the SAME basis as the section cutter
33
+ * (`projectPointForPlane`), so silhouette lines coincide with cut polygons.
34
+ * Emitted as `category: 'projection'` (the issue's "thin solid projected
35
+ * edge"), not the heavier `silhouette` weight.
37
36
  */
38
- filterEdgesByDepth(edges: EdgeData[], axis: 'x' | 'y' | 'z', sectionPosition: number, maxDepth: number, flipped: boolean): EdgeData[];
37
+ edgesToProjectionLines(edges: EdgeData[], plane: SectionPlaneConfig, depths: ProjectionBandDepths): DrawingLine[];
39
38
  private getVertex;
40
39
  private computeFaceNormal;
41
40
  private registerEdge;
42
41
  }
43
- /**
44
- * Get view direction from section axis
45
- */
46
- export declare function getViewDirection(axis: 'x' | 'y' | 'z', flipped: boolean): Vec3;
47
42
  //# sourceMappingURL=edge-extractor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"edge-extractor.d.ts","sourceRoot":"","sources":["../src/edge-extractor.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAW,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA+BrF,qBAAa,aAAa;IACxB,wCAAwC;IACxC,OAAO,CAAC,WAAW,CAAS;gBAEhB,kBAAkB,GAAE,MAAW;IAI3C;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,EAAE;IA+ExC;;OAEG;IACH,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE;IAStD;;;OAGG;IACH,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,GAAG,QAAQ,EAAE;IAsBtE;;OAEG;IACH,mBAAmB,CACjB,KAAK,EAAE,QAAQ,EAAE,EACjB,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EACrB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,YAAY,EACtB,eAAe,EAAE,MAAM,GACtB,WAAW,EAAE;IA4BhB;;;;;OAKG;IACH,kBAAkB,CAChB,KAAK,EAAE,QAAQ,EAAE,EACjB,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EACrB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf,QAAQ,EAAE;IA2Bb,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,YAAY;CAoBrB;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAU9E"}
1
+ {"version":3,"file":"edge-extractor.d.ts","sourceRoot":"","sources":["../src/edge-extractor.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA4BlF,OAAO,EACL,KAAK,oBAAoB,EAK1B,MAAM,uBAAuB,CAAC;AAuC/B,qBAAa,aAAa;IACxB,wCAAwC;IACxC,OAAO,CAAC,WAAW,CAAS;gBAEhB,kBAAkB,GAAE,MAAW;IAI3C;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,EAAE;IA+ExC;;;OAGG;IACH,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,GAAG,QAAQ,EAAE;IA6BtE;;;;;;;;;;;OAWG;IACH,sBAAsB,CACpB,KAAK,EAAE,QAAQ,EAAE,EACjB,KAAK,EAAE,kBAAkB,EACzB,MAAM,EAAE,oBAAoB,GAC3B,WAAW,EAAE;IAgDhB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,YAAY;CAoBrB"}
@@ -1,7 +1,42 @@
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, vec3Sub, vec3Cross, vec3Normalize, vec3Dot, projectTo2D, } from './math.js';
4
+ import { vec3, vec3Sub, vec3Cross, vec3Normalize, vec3Dot, vec3Lerp, EPSILON, } from './math.js';
5
+ /**
6
+ * Clip a segment to the depth window `[lo, hi]` in flip-adjusted depth.
7
+ * `d0`/`d1` are the endpoint depths; returns the `[t0, t1]` parameter range
8
+ * (0 = start, 1 = end) inside the window, or `null` if the segment is entirely
9
+ * outside it. A segment parallel to the plane is in-or-out as a whole.
10
+ */
11
+ function clipSegmentDepth(d0, d1, lo, hi) {
12
+ const dd = d1 - d0;
13
+ if (Math.abs(dd) < 1e-12) {
14
+ return d0 >= lo && d0 <= hi ? [0, 1] : null;
15
+ }
16
+ const ta = (lo - d0) / dd;
17
+ const tb = (hi - d0) / dd;
18
+ const t0 = Math.max(0, Math.min(ta, tb));
19
+ const t1 = Math.min(1, Math.max(ta, tb));
20
+ return t0 <= t1 ? [t0, t1] : null;
21
+ }
22
+ import { classifySegmentBand, bandVisibility, projectPointForPlane, signedDepth, } from './projection-bands.js';
23
+ /**
24
+ * Dot-product deadband for the silhouette test (issue #979).
25
+ *
26
+ * A silhouette edge separates a face that is front-facing (normal points
27
+ * toward the viewer, `dot < -ε`) from one that is NOT front-facing. For an
28
+ * axis-aligned box viewed straight down — the common floor-plan case — the top
29
+ * face is front-facing while the four side faces are exactly perpendicular
30
+ * (`dot ≈ 0`); the footprint outline is precisely the top-vs-side edges, so
31
+ * "not front-facing" must include the perpendicular (deadband) faces, not just
32
+ * strictly-back ones.
33
+ *
34
+ * The deadband must be larger than f32 normal noise so two perpendicular side
35
+ * faces (`dot ≈ 0`) are classified identically and their shared vertical edge
36
+ * doesn't flicker as a spurious silhouette. 1e-4 (~0.006°) absorbs the noise
37
+ * without excluding any genuinely tilted face (e.g. a pitched roof).
38
+ */
39
+ const SILHOUETTE_EPSILON = 1e-4;
5
40
  // ═══════════════════════════════════════════════════════════════════════════
6
41
  // EDGE EXTRACTOR CLASS
7
42
  // ═══════════════════════════════════════════════════════════════════════════
@@ -79,17 +114,6 @@ export class EdgeExtractor {
79
114
  }
80
115
  return edges;
81
116
  }
82
- /**
83
- * Extract edges from multiple meshes
84
- */
85
- extractEdgesFromMeshes(meshes) {
86
- const allEdges = [];
87
- for (const mesh of meshes) {
88
- const edges = this.extractEdges(mesh);
89
- allEdges.push(...edges);
90
- }
91
- return allEdges;
92
- }
93
117
  /**
94
118
  * Extract silhouette edges for a given view direction
95
119
  * Silhouette edges are where one adjacent face is front-facing and the other is back-facing
@@ -107,58 +131,65 @@ export class EdgeExtractor {
107
131
  }
108
132
  const dot0 = vec3Dot(edge.face0Normal, normalizedView);
109
133
  const dot1 = vec3Dot(edge.face1Normal, normalizedView);
110
- // Silhouette: one face toward viewer (dot < 0), one away (dot > 0)
111
- return (dot0 < 0) !== (dot1 < 0);
134
+ // Silhouette: exactly one adjacent face is front-facing (normal toward
135
+ // the viewer). "Not front-facing" deliberately includes perpendicular
136
+ // (deadband) faces so the top-vs-side outline edges of an axis-aligned
137
+ // box survive, while two perpendicular side faces (both not-front) don't
138
+ // flicker into a spurious silhouette under f32 noise. See
139
+ // SILHOUETTE_EPSILON.
140
+ const front0 = dot0 < -SILHOUETTE_EPSILON;
141
+ const front1 = dot1 < -SILHOUETTE_EPSILON;
142
+ return front0 !== front1;
112
143
  });
113
144
  }
114
145
  /**
115
- * Convert edges to 2D drawing lines
146
+ * Convert silhouette edges into band-classified construction-projection
147
+ * lines (issue #979). Each edge is classified by its own endpoints:
148
+ * - below the cut → `visibility: 'visible'` (thin solid)
149
+ * - above the cut → `visibility: 'hidden'` (dashed)
150
+ * - outside both bands → dropped
151
+ *
152
+ * Projection uses the SAME basis as the section cutter
153
+ * (`projectPointForPlane`), so silhouette lines coincide with cut polygons.
154
+ * Emitted as `category: 'projection'` (the issue's "thin solid projected
155
+ * edge"), not the heavier `silhouette` weight.
116
156
  */
117
- edgesToDrawingLines(edges, axis, flipped, category, sectionPosition) {
118
- return edges.map((edge) => {
119
- const start = projectTo2D(edge.v0, axis, flipped);
120
- const end = projectTo2D(edge.v1, axis, flipped);
121
- // Signed distance from the section plane along the viewing direction.
122
- // Negate when flipped so that smaller depth means nearer the viewer,
123
- // matching the depth-buffer convention in HiddenLineClassifier.
124
- const depthAxis = axis;
125
- const signed0 = edge.v0[depthAxis] - sectionPosition;
126
- const signed1 = edge.v1[depthAxis] - sectionPosition;
127
- const depth = Math.min(flipped ? -signed0 : signed0, flipped ? -signed1 : signed1);
128
- return {
157
+ edgesToProjectionLines(edges, plane, depths) {
158
+ const lines = [];
159
+ // Band window in flip-adjusted depth: visible [-below, 0] ∪ overhead [0, above].
160
+ const windowLo = -depths.below;
161
+ const windowHi = depths.above;
162
+ for (const edge of edges) {
163
+ const d0 = signedDepth(edge.v0, plane);
164
+ const d1 = signedDepth(edge.v1, plane);
165
+ // Clip the 3D segment to the band window first, so a long sloped roof /
166
+ // stair / ramp edge with only a small in-band overlap doesn't get
167
+ // projected full-length outside the configured projection window.
168
+ const clip = clipSegmentDepth(d0, d1, windowLo, windowHi);
169
+ if (!clip)
170
+ continue;
171
+ const a = vec3Lerp(edge.v0, edge.v1, clip[0]);
172
+ const b = vec3Lerp(edge.v0, edge.v1, clip[1]);
173
+ const visibility = bandVisibility(classifySegmentBand(a, b, plane, depths));
174
+ if (visibility === null)
175
+ continue;
176
+ const start = projectPointForPlane(a, plane);
177
+ const end = projectPointForPlane(b, plane);
178
+ // Skip degenerate (zero-length) projected segments.
179
+ if (Math.abs(start.x - end.x) < EPSILON && Math.abs(start.y - end.y) < EPSILON) {
180
+ continue;
181
+ }
182
+ lines.push({
129
183
  line: { start, end },
130
- category,
131
- visibility: 'visible',
184
+ category: 'projection',
185
+ visibility,
132
186
  entityId: edge.entityId,
133
187
  ifcType: edge.ifcType,
134
188
  modelIndex: edge.modelIndex,
135
- depth,
136
- };
137
- });
138
- }
139
- /**
140
- * Filter edges that are within a depth range from the section plane.
141
- * Includes edges where:
142
- * - Either endpoint is within range
143
- * - The edge crosses through the depth band (one endpoint before, one after)
144
- */
145
- filterEdgesByDepth(edges, axis, sectionPosition, maxDepth, flipped) {
146
- return edges.filter((edge) => {
147
- const d0 = edge.v0[axis] - sectionPosition;
148
- const d1 = edge.v1[axis] - sectionPosition;
149
- // Define the valid depth range
150
- // When not flipped: [0, maxDepth] (positive direction from plane)
151
- // When flipped: [-maxDepth, 0] (negative direction from plane)
152
- const rangeMin = flipped ? -maxDepth : 0;
153
- const rangeMax = flipped ? 0 : maxDepth;
154
- // Check if endpoints are within range
155
- const inRange0 = d0 >= rangeMin && d0 <= rangeMax;
156
- const inRange1 = d1 >= rangeMin && d1 <= rangeMax;
157
- // Check if edge crosses the depth band
158
- // This happens when one endpoint is before rangeMin and the other is after rangeMax
159
- const crossesBand = (d0 < rangeMin && d1 > rangeMax) || (d1 < rangeMin && d0 > rangeMax);
160
- return inRange0 || inRange1 || crossesBand;
161
- });
189
+ depth: 0,
190
+ });
191
+ }
192
+ return lines;
162
193
  }
163
194
  // ═══════════════════════════════════════════════════════════════════════════
164
195
  // PRIVATE HELPERS
@@ -188,21 +219,4 @@ export class EdgeExtractor {
188
219
  edgeMap.get(key).faceIndices.push(faceIndex);
189
220
  }
190
221
  }
191
- // ═══════════════════════════════════════════════════════════════════════════
192
- // UTILITY FUNCTIONS
193
- // ═══════════════════════════════════════════════════════════════════════════
194
- /**
195
- * Get view direction from section axis
196
- */
197
- export function getViewDirection(axis, flipped) {
198
- const sign = flipped ? 1 : -1;
199
- switch (axis) {
200
- case 'x':
201
- return { x: sign, y: 0, z: 0 };
202
- case 'y':
203
- return { x: 0, y: sign, z: 0 };
204
- case 'z':
205
- return { x: 0, y: 0, z: sign };
206
- }
207
- }
208
222
  //# sourceMappingURL=edge-extractor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"edge-extractor.js","sourceRoot":"","sources":["../src/edge-extractor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edge-extractor.js","sourceRoot":"","sources":["../src/edge-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Whether `ifcType` is an `IfcFeatureElement` subtype (an opening/void/feature
3
+ * operand) that must be excluded from construction projection. `undefined`/
4
+ * unknown types are treated as real geometry (not a feature element).
5
+ */
6
+ export declare function isFeatureElementType(ifcType: string | undefined | null): boolean;
7
+ //# sourceMappingURL=feature-elements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-elements.d.ts","sourceRoot":"","sources":["../src/feature-elements.ts"],"names":[],"mappings":"AA8CA;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAGhF"}