@ifc-lite/drawing-2d 1.17.0 → 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.
@@ -1 +1 @@
1
- {"version":3,"file":"drawing-generator.d.ts","sourceRoot":"","sources":["../src/drawing-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"drawing-generator.d.ts","sourceRoot":"","sources":["../src/drawing-generator.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ import { SVGExporter } from './svg-exporter.js';
12
12
  import { GPUSectionCutter } from './gpu-section-cutter.js';
13
13
  import { projectProfiles } from './profile-projector.js';
14
14
  import { getViewDirectionForPlane, outlineToProjectionLines, } from './projection-bands.js';
15
+ import { isFeatureElementType } from './feature-elements.js';
15
16
  import { boundsEmpty, boundsExtendLine, lineLength, } from './math.js';
16
17
  const DEFAULT_OPTIONS = {
17
18
  useGPU: true,
@@ -114,15 +115,25 @@ export class Drawing2DGenerator {
114
115
  below: config.projectionBelowDepth ?? config.projectionDepth,
115
116
  above: config.projectionAboveDepth ?? config.projectionDepth,
116
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));
117
128
  // Per-element dedup: elements with an extracted profile take their
118
129
  // projection from the clean profile path only; the silhouette fallback
119
130
  // skips them.
120
131
  const coveredKeys = new Set();
121
- if (profiles && profiles.length > 0) {
122
- for (const profile of profiles) {
132
+ if (projectionProfiles && projectionProfiles.length > 0) {
133
+ for (const profile of projectionProfiles) {
123
134
  coveredKeys.add(makeEntityKey(profile.modelIndex, profile.expressId));
124
135
  }
125
- projectionLines.push(...projectProfiles(profiles, config.plane, bands));
136
+ projectionLines.push(...projectProfiles(projectionProfiles, config.plane, bands));
126
137
  }
127
138
  if (opts.includeEdges) {
128
139
  // Outline for non-extruded geometry (roofs, stairs, site, BReps) with
@@ -130,9 +141,8 @@ export class Drawing2DGenerator {
130
141
  // out. Prefer the winding-robust Rust `meshOutline2d` footprint when an
131
142
  // outlineProvider is supplied; fall back per-mesh to the normal-based
132
143
  // silhouette (which can break on ifc-lite's unreliable winding).
133
- const meshesForSilhouette = coveredKeys.size > 0
134
- ? meshes.filter((m) => !coveredKeys.has(makeEntityKey(m.modelIndex ?? 0, m.expressId)))
135
- : meshes;
144
+ const meshesForSilhouette = meshes.filter((m) => !isFeatureElementType(m.ifcType) &&
145
+ !coveredKeys.has(makeEntityKey(m.modelIndex ?? 0, m.expressId)));
136
146
  const viewDir = getViewDirectionForPlane(config.plane);
137
147
  for (const mesh of meshesForSilhouette) {
138
148
  const outline = opts.outlineProvider
@@ -177,7 +187,13 @@ export class Drawing2DGenerator {
177
187
  // beyond projectionDepth would be classified against an incomplete buffer
178
188
  // and wrongly stay visible because their occluders were never rasterized.
179
189
  const occluderDepth = Math.max(config.projectionDepth, config.projectionBelowDepth ?? config.projectionDepth, config.projectionAboveDepth ?? config.projectionDepth);
180
- // Build depth buffer and classify lines
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.
181
197
  this.hiddenLineClassifier.buildDepthBuffer(meshes, config.plane.axis, config.plane.position, occluderDepth, config.plane.flipped, bounds);
182
198
  // Occlusion only DOWNGRADES visible → hidden; it can never reveal an
183
199
  // already-dashed OVERHEAD line. So classify the visible (below-cut)
@@ -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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"}
@@ -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"}
@@ -0,0 +1,54 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /**
5
+ * Feature-element classification for 2D drawing projection (issue #979).
6
+ *
7
+ * `IfcFeatureElement` descendants — openings, voids, earthworks cuts,
8
+ * projection/surface features — are boolean subtraction/addition operands, NOT
9
+ * building structure. They must never participate in the construction
10
+ * projection: their void cross-sections would draw spurious rectangles inside
11
+ * walls and clutter the plan.
12
+ *
13
+ * The Rust profile extractor (`rust/geometry/src/profile_extractor.rs`) already
14
+ * skips these at the source via `IfcType::is_subtype_of(IfcFeatureElement)`,
15
+ * but that only covers the clean-profile path. The mesh-silhouette fallback in
16
+ * `Drawing2DGenerator` consumes raw `MeshData` (which still contains
17
+ * `IfcOpeningElement` meshes), and a stale/CI-lagged WASM bundle can still emit
18
+ * opening profiles — so the projection stage filters BOTH paths with this same
19
+ * canonical type set, keeping the TS and Rust families from drifting.
20
+ *
21
+ * Caveat: `MeshData.ifcType` is optional ("backward compatibility with old
22
+ * caches"). A cache-restored mesh that lacks `ifcType` reads as a non-feature
23
+ * element here and could still silhouette — the same exposure as before this
24
+ * fix (such meshes were always silhouetted). Populating `ifcType` on the
25
+ * cache-restore path would close that residual gap.
26
+ *
27
+ * The set is the concrete (instantiable) `IfcFeatureElement` leaf types plus
28
+ * the abstract roots, matched case-insensitively. `IfcDoor`/`IfcWindow` are
29
+ * deliberately absent — they descend from `IfcBuiltElement`, not
30
+ * `IfcFeatureElement`, and are real structure that must keep projecting.
31
+ */
32
+ /** Canonical IFC feature-element type names (lower-cased for O(1) lookup). */
33
+ const FEATURE_ELEMENT_TYPES = new Set([
34
+ 'ifcfeatureelement',
35
+ 'ifcfeatureelementsubtraction',
36
+ 'ifcfeatureelementaddition',
37
+ 'ifcopeningelement',
38
+ 'ifcopeningstandardcase',
39
+ 'ifcvoidingfeature',
40
+ 'ifcearthworkscut',
41
+ 'ifcprojectionelement',
42
+ 'ifcsurfacefeature',
43
+ ]);
44
+ /**
45
+ * Whether `ifcType` is an `IfcFeatureElement` subtype (an opening/void/feature
46
+ * operand) that must be excluded from construction projection. `undefined`/
47
+ * unknown types are treated as real geometry (not a feature element).
48
+ */
49
+ export function isFeatureElementType(ifcType) {
50
+ if (!ifcType)
51
+ return false;
52
+ return FEATURE_ELEMENT_TYPES.has(ifcType.toLowerCase());
53
+ }
54
+ //# sourceMappingURL=feature-elements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-elements.js","sourceRoot":"","sources":["../src/feature-elements.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,8EAA8E;AAC9E,MAAM,qBAAqB,GAAwB,IAAI,GAAG,CAAC;IACzD,mBAAmB;IACnB,8BAA8B;IAC9B,2BAA2B;IAC3B,mBAAmB;IACnB,wBAAwB;IACxB,mBAAmB;IACnB,kBAAkB;IAClB,sBAAsB;IACtB,mBAAmB;CACpB,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAkC;IACrE,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,OAAO,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AAC1D,CAAC"}
package/dist/index.d.ts CHANGED
@@ -21,6 +21,9 @@ export { EdgeExtractor } from './edge-extractor.js';
21
21
  export { projectProfiles } from './profile-projector.js';
22
22
  export { classifyDepthRange, classifySegmentBand, signedDepth, signedAxisDepth, bandVisibility, projectPointForPlane, getViewDirectionForPlane, outlineToProjectionLines, } from './projection-bands.js';
23
23
  export type { ProjectionBand, ProjectionBandDepths } from './projection-bands.js';
24
+ export { currentFloorBands, storeyFloorsFromMeshes } from './storey-bands.js';
25
+ export type { StoreyFloorMesh } from './storey-bands.js';
26
+ export { isFeatureElementType } from './feature-elements.js';
24
27
  export { HiddenLineClassifier } from './hidden-line.js';
25
28
  export type { VisibilitySegment, VisibilityResult, HiddenLineOptions } from './hidden-line.js';
26
29
  export { HATCH_PATTERNS, getHatchPattern, LINE_STYLES, TYPE_LINE_WEIGHTS, getLineStyle, COMMON_SCALES, getRecommendedScale, PAPER_SIZES, } from './styles.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAMH,YAAY,EAEV,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,MAAM,EACN,UAAU,EACV,SAAS,EACT,QAAQ,EAGR,WAAW,EACX,kBAAkB,EAClB,aAAa,EAGb,YAAY,EACZ,eAAe,EAGf,WAAW,EACX,cAAc,EAGd,UAAU,EACV,aAAa,EACb,gBAAgB,EAGhB,SAAS,EAGT,QAAQ,EAGR,YAAY,EAGZ,aAAa,EAGb,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMnF,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACxE,YAAY,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AAMzE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAMtF,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAM1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMpD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAMzD,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAMlF,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAM/F,OAAO,EAEL,cAAc,EACd,eAAe,EAGf,WAAW,EACX,iBAAiB,EACjB,YAAY,EAGZ,aAAa,EACb,mBAAmB,EAGnB,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,SAAS,GACV,MAAM,aAAa,CAAC;AAMrB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAMxF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7D,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAM1D,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAMlF,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAMlF,OAAO,EAEL,OAAO,EAGP,IAAI,EACJ,OAAO,EACP,OAAO,EACP,SAAS,EACT,OAAO,EACP,SAAS,EACT,UAAU,EACV,aAAa,EACb,QAAQ,EACR,UAAU,EACV,YAAY,EAGZ,OAAO,EACP,UAAU,EACV,UAAU,EACV,YAAY,EACZ,UAAU,EACV,aAAa,EACb,eAAe,EACf,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,YAAY,EAGZ,UAAU,EACV,YAAY,EACZ,aAAa,EACb,cAAc,EACd,kBAAkB,EAGlB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,WAAW,EAGX,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,WAAW,EAGX,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,SAAS,EACT,QAAQ,GACT,MAAM,WAAW,CAAC;AAMnB,OAAO,EACL,0BAA0B,EAC1B,aAAa,EACb,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EAEV,WAAW,EACX,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,cAAc,GACf,MAAM,YAAY,CAAC;AAMpB,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EAEV,mBAAmB,EACnB,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAMpB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,WAAW,EACX,cAAc,EACd,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EAEV,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,SAAS,IAAI,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAMtE,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EAEL,qBAAqB,EACrB,oBAAoB,EAGpB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,UAAU,EAGV,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AAEtC,YAAY,EAEV,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,EACX,oBAAoB,EACpB,cAAc,GACf,MAAM,8BAA8B,CAAC;AAMtC,OAAO,EAEL,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EAGnB,aAAa,EACb,WAAW,EACX,eAAe,EAGf,0BAA0B,EAC1B,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EAGrB,iBAAiB,EACjB,mBAAmB,EACnB,8BAA8B,EAC9B,yBAAyB,EAGzB,uBAAuB,EACvB,yBAAyB,EAGzB,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EAEV,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EAGnB,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,YAAY,EAGZ,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,aAAa,EACb,gBAAgB,EAGhB,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,eAAe,EACf,gBAAgB,EAGhB,cAAc,EACd,YAAY,EACZ,oBAAoB,EAGpB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,UAAU,GACX,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -26,6 +26,9 @@ export { projectProfiles } from './profile-projector.js';
26
26
  // CONSTRUCTION PROJECTION BANDS (issue #979)
27
27
  // ═══════════════════════════════════════════════════════════════════════════
28
28
  export { classifyDepthRange, classifySegmentBand, signedDepth, signedAxisDepth, bandVisibility, projectPointForPlane, getViewDirectionForPlane, outlineToProjectionLines, } from './projection-bands.js';
29
+ // Current-floor scoping + feature-element exclusion (issue #979 follow-up)
30
+ export { currentFloorBands, storeyFloorsFromMeshes } from './storey-bands.js';
31
+ export { isFeatureElementType } from './feature-elements.js';
29
32
  // ═══════════════════════════════════════════════════════════════════════════
30
33
  // HIDDEN LINE REMOVAL
31
34
  // ═══════════════════════════════════════════════════════════════════════════
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Current-floor projection scoping for 2D floor plans (issue #979 follow-up).
3
+ *
4
+ * The construction projection (issue #979) originally projected the FULL model
5
+ * height on each side of the cut, so every storey's geometry bled onto every
6
+ * plan — a roof two floors up would draw (dashed) on the ground-floor plan.
7
+ * This module scopes the projection bands to the storey the cut sits in.
8
+ *
9
+ * # Coordinate frame (critical)
10
+ * The storey floor levels passed here MUST be derived from MESH geometry in the
11
+ * render frame (the same RTC-shifted, Y-up, metric frame as the section `cut`
12
+ * position) — never from the `IfcBuildingStorey.Elevation` attribute, which
13
+ * omits the building/site placement Z and is wrong for georeferenced models.
14
+ * This module is pure scalar arithmetic and is agnostic to how the levels were
15
+ * obtained; the viewer hook (`useDrawingGeneration`) does the derivation.
16
+ */
17
+ import type { ProjectionBandDepths } from './projection-bands.js';
18
+ /** Minimal mesh shape needed to derive storey floor levels (structural — avoids
19
+ * a hard dependency on `@ifc-lite/geometry`'s `MeshData`). */
20
+ export interface StoreyFloorMesh {
21
+ readonly expressId: number;
22
+ readonly positions: Float32Array;
23
+ }
24
+ /**
25
+ * Per-storey floor levels (ascending) derived from mesh geometry, for
26
+ * current-floor projection scoping (issue #979 follow-up).
27
+ *
28
+ * Each storey's level is the MINIMUM world-Y over its member meshes, read from
29
+ * `positions` in the RTC-shifted render frame — the SAME frame as the section
30
+ * cut position. This deliberately avoids `IfcBuildingStorey.Elevation`, which
31
+ * omits the building/site placement Z and is wrong for georeferenced models.
32
+ *
33
+ * `elementToStorey` keys are LOCAL express ids, so callers must restrict this to
34
+ * single-model use (mesh `expressId` then equals the local id). Storeys whose
35
+ * members produced no mesh contribute no level and are dropped.
36
+ *
37
+ * # Known limitations (bounded; documented intentionally)
38
+ * - The min-Y is the underside of the storey's lowest member, typically the
39
+ * floor SLAB which conventionally extrudes a little BELOW the level datum — so
40
+ * the returned level sits ~one slab thickness below the architectural floor.
41
+ * The effect is a small (~slab-thickness) over-projection at storey
42
+ * boundaries, not a whole-floor bleed.
43
+ * - An element assigned to an upper storey but geometrically descending into a
44
+ * lower one (a stair flight, a double-height shaft) pulls that storey's level
45
+ * down, which can collapse two levels together; the scoping then degrades
46
+ * toward the unscoped full-extent behavior for that cut — never worse than the
47
+ * pre-#979-follow-up baseline. A placement-Z / percentile derivation is a
48
+ * possible future hardening.
49
+ */
50
+ export declare function storeyFloorsFromMeshes(meshes: ReadonlyArray<StoreyFloorMesh>, elementToStorey: ReadonlyMap<number, number>): number[];
51
+ /**
52
+ * Compute the construction-projection band depths for the storey containing the
53
+ * cut, given the per-storey floor levels (ascending) and the model's axis
54
+ * extent — all along the cut axis, in the same render-frame metric space as
55
+ * `position`.
56
+ *
57
+ * The current storey `k` is the highest storey whose floor is at or below the
58
+ * cut. Its vertical slab is `[floor_k, ceil_k)`:
59
+ * - the bottom storey extends DOWN to the model bottom (`axisMin`) so site /
60
+ * foundation / terrain below the ground floor still projects (solid);
61
+ * - the top storey extends UP to the model top (`axisMax`) so the roof / eaves
62
+ * above the top storey still projects (dashed);
63
+ * - an intermediate storey is clamped to the next storey's floor (its ceiling),
64
+ * so the floor above is culled.
65
+ *
66
+ * The returned depths feed `ProjectionBandDepths` unchanged: `below` becomes the
67
+ * VISIBLE/solid band (toward the floor) and `above` the OVERHEAD/dashed band.
68
+ * Every depth is floored at `minDepth` so a cut sitting exactly on a storey
69
+ * boundary never yields a zero-width band that culls everything on the plane.
70
+ *
71
+ * @param storeyFloors Per-storey floor levels along the cut axis, ASCENDING,
72
+ * length ≥ 1 (caller should fall back to full-extent bands
73
+ * when fewer than 2 storeys exist).
74
+ * @param position Cut position along the axis (render-frame).
75
+ * @param axisMin Model minimum along the axis (render-frame).
76
+ * @param axisMax Model maximum along the axis (render-frame).
77
+ * @param minDepth Lower clamp for each band depth (default 1 mm).
78
+ */
79
+ export declare function currentFloorBands(storeyFloors: number[], position: number, axisMin: number, axisMax: number, minDepth?: number): ProjectionBandDepths;
80
+ //# sourceMappingURL=storey-bands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storey-bands.d.ts","sourceRoot":"","sources":["../src/storey-bands.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElE;+DAC+D;AAC/D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;CAClC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,EACtC,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3C,MAAM,EAAE,CAeV;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EAAE,EACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,SAAO,GACd,oBAAoB,CAmBtB"}
@@ -0,0 +1,96 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /**
5
+ * Per-storey floor levels (ascending) derived from mesh geometry, for
6
+ * current-floor projection scoping (issue #979 follow-up).
7
+ *
8
+ * Each storey's level is the MINIMUM world-Y over its member meshes, read from
9
+ * `positions` in the RTC-shifted render frame — the SAME frame as the section
10
+ * cut position. This deliberately avoids `IfcBuildingStorey.Elevation`, which
11
+ * omits the building/site placement Z and is wrong for georeferenced models.
12
+ *
13
+ * `elementToStorey` keys are LOCAL express ids, so callers must restrict this to
14
+ * single-model use (mesh `expressId` then equals the local id). Storeys whose
15
+ * members produced no mesh contribute no level and are dropped.
16
+ *
17
+ * # Known limitations (bounded; documented intentionally)
18
+ * - The min-Y is the underside of the storey's lowest member, typically the
19
+ * floor SLAB which conventionally extrudes a little BELOW the level datum — so
20
+ * the returned level sits ~one slab thickness below the architectural floor.
21
+ * The effect is a small (~slab-thickness) over-projection at storey
22
+ * boundaries, not a whole-floor bleed.
23
+ * - An element assigned to an upper storey but geometrically descending into a
24
+ * lower one (a stair flight, a double-height shaft) pulls that storey's level
25
+ * down, which can collapse two levels together; the scoping then degrades
26
+ * toward the unscoped full-extent behavior for that cut — never worse than the
27
+ * pre-#979-follow-up baseline. A placement-Z / percentile derivation is a
28
+ * possible future hardening.
29
+ */
30
+ export function storeyFloorsFromMeshes(meshes, elementToStorey) {
31
+ const storeyMinY = new Map();
32
+ for (const mesh of meshes) {
33
+ const storeyId = elementToStorey.get(mesh.expressId);
34
+ if (storeyId === undefined)
35
+ continue;
36
+ const pos = mesh.positions;
37
+ let minY = Infinity;
38
+ for (let i = 1; i < pos.length; i += 3) {
39
+ if (pos[i] < minY)
40
+ minY = pos[i];
41
+ }
42
+ if (!Number.isFinite(minY))
43
+ continue;
44
+ const cur = storeyMinY.get(storeyId);
45
+ if (cur === undefined || minY < cur)
46
+ storeyMinY.set(storeyId, minY);
47
+ }
48
+ return [...storeyMinY.values()].sort((a, b) => a - b);
49
+ }
50
+ /**
51
+ * Compute the construction-projection band depths for the storey containing the
52
+ * cut, given the per-storey floor levels (ascending) and the model's axis
53
+ * extent — all along the cut axis, in the same render-frame metric space as
54
+ * `position`.
55
+ *
56
+ * The current storey `k` is the highest storey whose floor is at or below the
57
+ * cut. Its vertical slab is `[floor_k, ceil_k)`:
58
+ * - the bottom storey extends DOWN to the model bottom (`axisMin`) so site /
59
+ * foundation / terrain below the ground floor still projects (solid);
60
+ * - the top storey extends UP to the model top (`axisMax`) so the roof / eaves
61
+ * above the top storey still projects (dashed);
62
+ * - an intermediate storey is clamped to the next storey's floor (its ceiling),
63
+ * so the floor above is culled.
64
+ *
65
+ * The returned depths feed `ProjectionBandDepths` unchanged: `below` becomes the
66
+ * VISIBLE/solid band (toward the floor) and `above` the OVERHEAD/dashed band.
67
+ * Every depth is floored at `minDepth` so a cut sitting exactly on a storey
68
+ * boundary never yields a zero-width band that culls everything on the plane.
69
+ *
70
+ * @param storeyFloors Per-storey floor levels along the cut axis, ASCENDING,
71
+ * length ≥ 1 (caller should fall back to full-extent bands
72
+ * when fewer than 2 storeys exist).
73
+ * @param position Cut position along the axis (render-frame).
74
+ * @param axisMin Model minimum along the axis (render-frame).
75
+ * @param axisMax Model maximum along the axis (render-frame).
76
+ * @param minDepth Lower clamp for each band depth (default 1 mm).
77
+ */
78
+ export function currentFloorBands(storeyFloors, position, axisMin, axisMax, minDepth = 1e-3) {
79
+ const n = storeyFloors.length;
80
+ // Current storey = highest floor at or below the cut (storeyFloors ascending).
81
+ // A cut below the lowest floor still belongs to the bottom storey (k = 0).
82
+ let k = 0;
83
+ for (let i = 0; i < n; i++) {
84
+ if (storeyFloors[i] <= position)
85
+ k = i;
86
+ else
87
+ break;
88
+ }
89
+ const floor = k === 0 ? Math.min(axisMin, storeyFloors[0]) : storeyFloors[k];
90
+ const ceil = k === n - 1 ? Math.max(axisMax, storeyFloors[n - 1]) : storeyFloors[k + 1];
91
+ return {
92
+ below: Math.max(position - floor, minDepth),
93
+ above: Math.max(ceil - position, minDepth),
94
+ };
95
+ }
96
+ //# sourceMappingURL=storey-bands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storey-bands.js","sourceRoot":"","sources":["../src/storey-bands.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AA4B/D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAsC,EACtC,eAA4C;IAE5C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,QAAQ,KAAK,SAAS;YAAE,SAAS;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,IAAI,IAAI,GAAG,QAAQ,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;gBAAE,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAS;QACrC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,GAAG,KAAK,SAAS,IAAI,IAAI,GAAG,GAAG;YAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,iBAAiB,CAC/B,YAAsB,EACtB,QAAgB,EAChB,OAAe,EACf,OAAe,EACf,QAAQ,GAAG,IAAI;IAEf,MAAM,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;IAE9B,+EAA+E;IAC/E,2EAA2E;IAC3E,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,QAAQ;YAAE,CAAC,GAAG,CAAC,CAAC;;YAClC,MAAM;IACb,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,IAAI,GACR,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAE7E,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,EAAE,QAAQ,CAAC;QAC3C,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,QAAQ,EAAE,QAAQ,CAAC;KAC3C,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ifc-lite/drawing-2d",
3
- "version": "1.17.0",
3
+ "version": "1.18.0",
4
4
  "description": "2D architectural drawing generation from IFC models - section cuts, floor plans, and elevations",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",