@ifc-lite/drawing-2d 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/LICENSE +373 -0
  2. package/dist/drawing-generator.d.ts +80 -0
  3. package/dist/drawing-generator.d.ts.map +1 -0
  4. package/dist/drawing-generator.js +281 -0
  5. package/dist/drawing-generator.js.map +1 -0
  6. package/dist/edge-extractor.d.ts +47 -0
  7. package/dist/edge-extractor.d.ts.map +1 -0
  8. package/dist/edge-extractor.js +204 -0
  9. package/dist/edge-extractor.js.map +1 -0
  10. package/dist/gpu-section-cutter.d.ts +42 -0
  11. package/dist/gpu-section-cutter.d.ts.map +1 -0
  12. package/dist/gpu-section-cutter.js +405 -0
  13. package/dist/gpu-section-cutter.js.map +1 -0
  14. package/dist/graphic-overrides/index.d.ts +10 -0
  15. package/dist/graphic-overrides/index.d.ts.map +1 -0
  16. package/dist/graphic-overrides/index.js +8 -0
  17. package/dist/graphic-overrides/index.js.map +1 -0
  18. package/dist/graphic-overrides/presets.d.ts +22 -0
  19. package/dist/graphic-overrides/presets.d.ts.map +1 -0
  20. package/dist/graphic-overrides/presets.js +283 -0
  21. package/dist/graphic-overrides/presets.js.map +1 -0
  22. package/dist/graphic-overrides/rule-engine.d.ts +64 -0
  23. package/dist/graphic-overrides/rule-engine.d.ts.map +1 -0
  24. package/dist/graphic-overrides/rule-engine.js +438 -0
  25. package/dist/graphic-overrides/rule-engine.js.map +1 -0
  26. package/dist/graphic-overrides/types.d.ts +200 -0
  27. package/dist/graphic-overrides/types.d.ts.map +1 -0
  28. package/dist/graphic-overrides/types.js +5 -0
  29. package/dist/graphic-overrides/types.js.map +1 -0
  30. package/dist/hatch-generator.d.ts +76 -0
  31. package/dist/hatch-generator.d.ts.map +1 -0
  32. package/dist/hatch-generator.js +282 -0
  33. package/dist/hatch-generator.js.map +1 -0
  34. package/dist/hidden-line.d.ts +64 -0
  35. package/dist/hidden-line.d.ts.map +1 -0
  36. package/dist/hidden-line.js +318 -0
  37. package/dist/hidden-line.js.map +1 -0
  38. package/dist/index.d.ts +44 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +109 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/line-merger.d.ts +35 -0
  43. package/dist/line-merger.d.ts.map +1 -0
  44. package/dist/line-merger.js +265 -0
  45. package/dist/line-merger.js.map +1 -0
  46. package/dist/math.d.ts +90 -0
  47. package/dist/math.d.ts.map +1 -0
  48. package/dist/math.js +284 -0
  49. package/dist/math.js.map +1 -0
  50. package/dist/openings/index.d.ts +7 -0
  51. package/dist/openings/index.d.ts.map +1 -0
  52. package/dist/openings/index.js +10 -0
  53. package/dist/openings/index.js.map +1 -0
  54. package/dist/openings/opening-filter.d.ts +61 -0
  55. package/dist/openings/opening-filter.d.ts.map +1 -0
  56. package/dist/openings/opening-filter.js +244 -0
  57. package/dist/openings/opening-filter.js.map +1 -0
  58. package/dist/openings/opening-relationship-builder.d.ts +35 -0
  59. package/dist/openings/opening-relationship-builder.d.ts.map +1 -0
  60. package/dist/openings/opening-relationship-builder.js +121 -0
  61. package/dist/openings/opening-relationship-builder.js.map +1 -0
  62. package/dist/openings/opening-utils.d.ts +55 -0
  63. package/dist/openings/opening-utils.d.ts.map +1 -0
  64. package/dist/openings/opening-utils.js +128 -0
  65. package/dist/openings/opening-utils.js.map +1 -0
  66. package/dist/polygon-builder.d.ts +62 -0
  67. package/dist/polygon-builder.d.ts.map +1 -0
  68. package/dist/polygon-builder.js +261 -0
  69. package/dist/polygon-builder.js.map +1 -0
  70. package/dist/section-cutter.d.ts +49 -0
  71. package/dist/section-cutter.d.ts.map +1 -0
  72. package/dist/section-cutter.js +220 -0
  73. package/dist/section-cutter.js.map +1 -0
  74. package/dist/sheet/frame-renderer.d.ts +28 -0
  75. package/dist/sheet/frame-renderer.d.ts.map +1 -0
  76. package/dist/sheet/frame-renderer.js +199 -0
  77. package/dist/sheet/frame-renderer.js.map +1 -0
  78. package/dist/sheet/frame-types.d.ts +57 -0
  79. package/dist/sheet/frame-types.d.ts.map +1 -0
  80. package/dist/sheet/frame-types.js +88 -0
  81. package/dist/sheet/frame-types.js.map +1 -0
  82. package/dist/sheet/index.d.ts +26 -0
  83. package/dist/sheet/index.d.ts.map +1 -0
  84. package/dist/sheet/index.js +12 -0
  85. package/dist/sheet/index.js.map +1 -0
  86. package/dist/sheet/paper-sizes.d.ts +36 -0
  87. package/dist/sheet/paper-sizes.d.ts.map +1 -0
  88. package/dist/sheet/paper-sizes.js +252 -0
  89. package/dist/sheet/paper-sizes.js.map +1 -0
  90. package/dist/sheet/scale-bar-renderer.d.ts +29 -0
  91. package/dist/sheet/scale-bar-renderer.d.ts.map +1 -0
  92. package/dist/sheet/scale-bar-renderer.js +287 -0
  93. package/dist/sheet/scale-bar-renderer.js.map +1 -0
  94. package/dist/sheet/scale-bar-types.d.ts +82 -0
  95. package/dist/sheet/scale-bar-types.d.ts.map +1 -0
  96. package/dist/sheet/scale-bar-types.js +66 -0
  97. package/dist/sheet/scale-bar-types.js.map +1 -0
  98. package/dist/sheet/sheet-types.d.ts +84 -0
  99. package/dist/sheet/sheet-types.d.ts.map +1 -0
  100. package/dist/sheet/sheet-types.js +77 -0
  101. package/dist/sheet/sheet-types.js.map +1 -0
  102. package/dist/sheet/title-block-renderer.d.ts +44 -0
  103. package/dist/sheet/title-block-renderer.d.ts.map +1 -0
  104. package/dist/sheet/title-block-renderer.js +335 -0
  105. package/dist/sheet/title-block-renderer.js.map +1 -0
  106. package/dist/sheet/title-block-types.d.ts +100 -0
  107. package/dist/sheet/title-block-types.d.ts.map +1 -0
  108. package/dist/sheet/title-block-types.js +174 -0
  109. package/dist/sheet/title-block-types.js.map +1 -0
  110. package/dist/styles.d.ts +77 -0
  111. package/dist/styles.d.ts.map +1 -0
  112. package/dist/styles.js +347 -0
  113. package/dist/styles.js.map +1 -0
  114. package/dist/styling/index.d.ts +7 -0
  115. package/dist/styling/index.d.ts.map +1 -0
  116. package/dist/styling/index.js +10 -0
  117. package/dist/styling/index.js.map +1 -0
  118. package/dist/styling/layer-mapping.d.ts +57 -0
  119. package/dist/styling/layer-mapping.d.ts.map +1 -0
  120. package/dist/styling/layer-mapping.js +303 -0
  121. package/dist/styling/layer-mapping.js.map +1 -0
  122. package/dist/styling/line-styles.d.ts +49 -0
  123. package/dist/styling/line-styles.d.ts.map +1 -0
  124. package/dist/styling/line-styles.js +123 -0
  125. package/dist/styling/line-styles.js.map +1 -0
  126. package/dist/styling/line-weights.d.ts +61 -0
  127. package/dist/styling/line-weights.d.ts.map +1 -0
  128. package/dist/styling/line-weights.js +183 -0
  129. package/dist/styling/line-weights.js.map +1 -0
  130. package/dist/svg-exporter.d.ts +63 -0
  131. package/dist/svg-exporter.d.ts.map +1 -0
  132. package/dist/svg-exporter.js +278 -0
  133. package/dist/svg-exporter.js.map +1 -0
  134. package/dist/symbols/door-symbol.d.ts +82 -0
  135. package/dist/symbols/door-symbol.d.ts.map +1 -0
  136. package/dist/symbols/door-symbol.js +390 -0
  137. package/dist/symbols/door-symbol.js.map +1 -0
  138. package/dist/symbols/index.d.ts +8 -0
  139. package/dist/symbols/index.d.ts.map +1 -0
  140. package/dist/symbols/index.js +11 -0
  141. package/dist/symbols/index.js.map +1 -0
  142. package/dist/symbols/symbol-renderer.d.ts +29 -0
  143. package/dist/symbols/symbol-renderer.d.ts.map +1 -0
  144. package/dist/symbols/symbol-renderer.js +173 -0
  145. package/dist/symbols/symbol-renderer.js.map +1 -0
  146. package/dist/symbols/symbol-utils.d.ts +48 -0
  147. package/dist/symbols/symbol-utils.d.ts.map +1 -0
  148. package/dist/symbols/symbol-utils.js +129 -0
  149. package/dist/symbols/symbol-utils.js.map +1 -0
  150. package/dist/symbols/window-symbol.d.ts +57 -0
  151. package/dist/symbols/window-symbol.d.ts.map +1 -0
  152. package/dist/symbols/window-symbol.js +209 -0
  153. package/dist/symbols/window-symbol.js.map +1 -0
  154. package/dist/types.d.ts +443 -0
  155. package/dist/types.d.ts.map +1 -0
  156. package/dist/types.js +31 -0
  157. package/dist/types.js.map +1 -0
  158. package/package.json +53 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Opening handling for architectural 2D drawings
3
+ */
4
+ export { OpeningRelationshipBuilder } from './opening-relationship-builder';
5
+ export { OpeningFilter } from './opening-filter';
6
+ export { buildOpeningRelationships, getOpeningsForHost, getFillingElement, isOpeningElement, isDoorOrWindow, } from './opening-utils';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/openings/index.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,GACf,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,10 @@
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
+ * Opening handling for architectural 2D drawings
6
+ */
7
+ export { OpeningRelationshipBuilder } from './opening-relationship-builder';
8
+ export { OpeningFilter } from './opening-filter';
9
+ export { buildOpeningRelationships, getOpeningsForHost, getFillingElement, isOpeningElement, isDoorOrWindow, } from './opening-utils';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/openings/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;GAEG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,GACf,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Filters cut segments based on opening locations
3
+ * Removes wall segments that fall within opening voids
4
+ */
5
+ import type { CutSegment, OpeningRelationships, SectionPlaneConfig, Bounds2D } from '../types';
6
+ /**
7
+ * Filter options for opening handling
8
+ */
9
+ export interface OpeningFilterOptions {
10
+ /** Tolerance for point-in-bounds testing (world units) */
11
+ tolerance: number;
12
+ /** Whether to keep segments at opening boundaries */
13
+ keepBoundarySegments: boolean;
14
+ }
15
+ /**
16
+ * Filters cut segments to remove those falling within openings
17
+ */
18
+ export declare class OpeningFilter {
19
+ private relationships;
20
+ private options;
21
+ private openingBounds2D;
22
+ constructor(relationships: OpeningRelationships, options?: Partial<OpeningFilterOptions>);
23
+ /**
24
+ * Project opening bounds to 2D for the given section configuration
25
+ */
26
+ projectOpenings(config: SectionPlaneConfig): void;
27
+ /**
28
+ * Filter segments for a wall/slab element, removing those in openings
29
+ */
30
+ filterSegmentsForHost(segments: CutSegment[], hostEntityId: number): CutSegment[];
31
+ /**
32
+ * Filter a single segment against multiple opening bounds
33
+ * Returns array of segments (may split or return empty)
34
+ */
35
+ private filterSegment;
36
+ /**
37
+ * Split a segment where it intersects an opening
38
+ */
39
+ private splitSegmentAtOpening;
40
+ /**
41
+ * Create a sub-segment from t0 to t1 along the original segment
42
+ */
43
+ private createSubSegment;
44
+ /**
45
+ * Find where a 2D segment intersects a bounding box (returns t parameters)
46
+ */
47
+ private segmentBoundsIntersections;
48
+ private pointInBounds;
49
+ private lerp2D;
50
+ private lerp3D;
51
+ private projectBoundsTo2D;
52
+ /**
53
+ * Get the 2D bounds of an opening
54
+ */
55
+ getOpeningBounds2D(openingId: number): Bounds2D | undefined;
56
+ /**
57
+ * Get all opening bounds for a host element
58
+ */
59
+ getHostOpeningBounds(hostEntityId: number): Bounds2D[];
60
+ }
61
+ //# sourceMappingURL=opening-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opening-filter.d.ts","sourceRoot":"","sources":["../../src/openings/opening-filter.ts"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,oBAAoB,EAIpB,kBAAkB,EAClB,QAAQ,EACT,MAAM,UAAU,CAAC;AAGlB;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAOD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,eAAe,CAAoC;gBAGzD,aAAa,EAAE,oBAAoB,EACnC,OAAO,GAAE,OAAO,CAAC,oBAAoB,CAAM;IAM7C;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAUjD;;OAEG;IACH,qBAAqB,CACnB,QAAQ,EAAE,UAAU,EAAE,EACtB,YAAY,EAAE,MAAM,GACnB,UAAU,EAAE;IA8Bf;;;OAGG;IACH,OAAO,CAAC,aAAa;IA+BrB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuC7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA0DlC,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,iBAAiB;IA4BzB;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAI3D;;OAEG;IACH,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,EAAE;CAavD"}
@@ -0,0 +1,244 @@
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
+ import { projectTo2D } from '../math';
5
+ const DEFAULT_OPTIONS = {
6
+ tolerance: 0.001,
7
+ keepBoundarySegments: true,
8
+ };
9
+ /**
10
+ * Filters cut segments to remove those falling within openings
11
+ */
12
+ export class OpeningFilter {
13
+ relationships;
14
+ options;
15
+ openingBounds2D = new Map();
16
+ constructor(relationships, options = {}) {
17
+ this.relationships = relationships;
18
+ this.options = { ...DEFAULT_OPTIONS, ...options };
19
+ }
20
+ /**
21
+ * Project opening bounds to 2D for the given section configuration
22
+ */
23
+ projectOpenings(config) {
24
+ this.openingBounds2D.clear();
25
+ const { axis, flipped } = config;
26
+ for (const [id, info] of this.relationships.openingInfo) {
27
+ const bounds2D = this.projectBoundsTo2D(info.bounds3D, axis, flipped);
28
+ this.openingBounds2D.set(id, bounds2D);
29
+ }
30
+ }
31
+ /**
32
+ * Filter segments for a wall/slab element, removing those in openings
33
+ */
34
+ filterSegmentsForHost(segments, hostEntityId) {
35
+ const openingIds = this.relationships.voidedBy.get(hostEntityId);
36
+ if (!openingIds || openingIds.length === 0) {
37
+ // No openings in this host, return all segments
38
+ return segments;
39
+ }
40
+ // Get 2D bounds of all openings for this host
41
+ const openingBoundsList = [];
42
+ for (const openingId of openingIds) {
43
+ const bounds = this.openingBounds2D.get(openingId);
44
+ if (bounds) {
45
+ openingBoundsList.push(bounds);
46
+ }
47
+ }
48
+ if (openingBoundsList.length === 0) {
49
+ return segments;
50
+ }
51
+ // Filter segments
52
+ const result = [];
53
+ for (const segment of segments) {
54
+ const filtered = this.filterSegment(segment, openingBoundsList);
55
+ result.push(...filtered);
56
+ }
57
+ return result;
58
+ }
59
+ /**
60
+ * Filter a single segment against multiple opening bounds
61
+ * Returns array of segments (may split or return empty)
62
+ */
63
+ filterSegment(segment, openingBounds) {
64
+ const { p0_2d, p1_2d } = segment;
65
+ // Check if segment is completely inside any opening
66
+ for (const bounds of openingBounds) {
67
+ if (this.pointInBounds(p0_2d, bounds) &&
68
+ this.pointInBounds(p1_2d, bounds)) {
69
+ // Entire segment is inside opening, remove it
70
+ return [];
71
+ }
72
+ }
73
+ // Check if segment crosses any opening
74
+ for (const bounds of openingBounds) {
75
+ const intersections = this.segmentBoundsIntersections(p0_2d, p1_2d, bounds);
76
+ if (intersections.length > 0) {
77
+ // Segment crosses opening boundary - split it
78
+ return this.splitSegmentAtOpening(segment, bounds, intersections);
79
+ }
80
+ }
81
+ // Segment doesn't intersect any opening
82
+ return [segment];
83
+ }
84
+ /**
85
+ * Split a segment where it intersects an opening
86
+ */
87
+ splitSegmentAtOpening(segment, bounds, intersections) {
88
+ const result = [];
89
+ const { p0_2d, p1_2d } = segment;
90
+ // Sort intersection parameters
91
+ const tValues = [...intersections].sort((a, b) => a - b);
92
+ // Determine which parts are outside the opening
93
+ let lastT = 0;
94
+ for (const t of tValues) {
95
+ // Check if the midpoint of this segment piece is inside the opening
96
+ const midT = (lastT + t) / 2;
97
+ const midPoint = this.lerp2D(p0_2d, p1_2d, midT);
98
+ if (!this.pointInBounds(midPoint, bounds)) {
99
+ // This piece is outside - keep it
100
+ if (t - lastT > this.options.tolerance) {
101
+ result.push(this.createSubSegment(segment, lastT, t));
102
+ }
103
+ }
104
+ lastT = t;
105
+ }
106
+ // Handle final piece (from last intersection to end)
107
+ if (1 - lastT > this.options.tolerance) {
108
+ const midT = (lastT + 1) / 2;
109
+ const midPoint = this.lerp2D(p0_2d, p1_2d, midT);
110
+ if (!this.pointInBounds(midPoint, bounds)) {
111
+ result.push(this.createSubSegment(segment, lastT, 1));
112
+ }
113
+ }
114
+ return result;
115
+ }
116
+ /**
117
+ * Create a sub-segment from t0 to t1 along the original segment
118
+ */
119
+ createSubSegment(segment, t0, t1) {
120
+ return {
121
+ p0: this.lerp3D(segment.p0, segment.p1, t0),
122
+ p1: this.lerp3D(segment.p0, segment.p1, t1),
123
+ p0_2d: this.lerp2D(segment.p0_2d, segment.p1_2d, t0),
124
+ p1_2d: this.lerp2D(segment.p0_2d, segment.p1_2d, t1),
125
+ entityId: segment.entityId,
126
+ ifcType: segment.ifcType,
127
+ modelIndex: segment.modelIndex,
128
+ };
129
+ }
130
+ /**
131
+ * Find where a 2D segment intersects a bounding box (returns t parameters)
132
+ */
133
+ segmentBoundsIntersections(p0, p1, bounds) {
134
+ const tValues = [];
135
+ const dx = p1.x - p0.x;
136
+ const dy = p1.y - p0.y;
137
+ const tol = this.options.tolerance;
138
+ // Check intersection with each edge
139
+ // Left edge (x = bounds.min.x)
140
+ if (Math.abs(dx) > tol) {
141
+ const t = (bounds.min.x - p0.x) / dx;
142
+ if (t > tol && t < 1 - tol) {
143
+ const y = p0.y + t * dy;
144
+ if (y >= bounds.min.y - tol && y <= bounds.max.y + tol) {
145
+ tValues.push(t);
146
+ }
147
+ }
148
+ }
149
+ // Right edge (x = bounds.max.x)
150
+ if (Math.abs(dx) > tol) {
151
+ const t = (bounds.max.x - p0.x) / dx;
152
+ if (t > tol && t < 1 - tol) {
153
+ const y = p0.y + t * dy;
154
+ if (y >= bounds.min.y - tol && y <= bounds.max.y + tol) {
155
+ tValues.push(t);
156
+ }
157
+ }
158
+ }
159
+ // Bottom edge (y = bounds.min.y)
160
+ if (Math.abs(dy) > tol) {
161
+ const t = (bounds.min.y - p0.y) / dy;
162
+ if (t > tol && t < 1 - tol) {
163
+ const x = p0.x + t * dx;
164
+ if (x >= bounds.min.x - tol && x <= bounds.max.x + tol) {
165
+ tValues.push(t);
166
+ }
167
+ }
168
+ }
169
+ // Top edge (y = bounds.max.y)
170
+ if (Math.abs(dy) > tol) {
171
+ const t = (bounds.max.y - p0.y) / dy;
172
+ if (t > tol && t < 1 - tol) {
173
+ const x = p0.x + t * dx;
174
+ if (x >= bounds.min.x - tol && x <= bounds.max.x + tol) {
175
+ tValues.push(t);
176
+ }
177
+ }
178
+ }
179
+ return tValues;
180
+ }
181
+ pointInBounds(p, bounds) {
182
+ const tol = this.options.tolerance;
183
+ return (p.x >= bounds.min.x - tol &&
184
+ p.x <= bounds.max.x + tol &&
185
+ p.y >= bounds.min.y - tol &&
186
+ p.y <= bounds.max.y + tol);
187
+ }
188
+ lerp2D(a, b, t) {
189
+ return {
190
+ x: a.x + t * (b.x - a.x),
191
+ y: a.y + t * (b.y - a.y),
192
+ };
193
+ }
194
+ lerp3D(a, b, t) {
195
+ return {
196
+ x: a.x + t * (b.x - a.x),
197
+ y: a.y + t * (b.y - a.y),
198
+ z: a.z + t * (b.z - a.z),
199
+ };
200
+ }
201
+ projectBoundsTo2D(bounds3D, axis, flipped) {
202
+ // Project all 8 corners and find min/max
203
+ const corners3D = [
204
+ { x: bounds3D.min.x, y: bounds3D.min.y, z: bounds3D.min.z },
205
+ { x: bounds3D.max.x, y: bounds3D.min.y, z: bounds3D.min.z },
206
+ { x: bounds3D.min.x, y: bounds3D.max.y, z: bounds3D.min.z },
207
+ { x: bounds3D.max.x, y: bounds3D.max.y, z: bounds3D.min.z },
208
+ { x: bounds3D.min.x, y: bounds3D.min.y, z: bounds3D.max.z },
209
+ { x: bounds3D.max.x, y: bounds3D.min.y, z: bounds3D.max.z },
210
+ { x: bounds3D.min.x, y: bounds3D.max.y, z: bounds3D.max.z },
211
+ { x: bounds3D.max.x, y: bounds3D.max.y, z: bounds3D.max.z },
212
+ ];
213
+ const corners2D = corners3D.map((p) => projectTo2D(p, axis, flipped));
214
+ const xs = corners2D.map((p) => p.x);
215
+ const ys = corners2D.map((p) => p.y);
216
+ return {
217
+ min: { x: Math.min(...xs), y: Math.min(...ys) },
218
+ max: { x: Math.max(...xs), y: Math.max(...ys) },
219
+ };
220
+ }
221
+ /**
222
+ * Get the 2D bounds of an opening
223
+ */
224
+ getOpeningBounds2D(openingId) {
225
+ return this.openingBounds2D.get(openingId);
226
+ }
227
+ /**
228
+ * Get all opening bounds for a host element
229
+ */
230
+ getHostOpeningBounds(hostEntityId) {
231
+ const openingIds = this.relationships.voidedBy.get(hostEntityId);
232
+ if (!openingIds)
233
+ return [];
234
+ const result = [];
235
+ for (const id of openingIds) {
236
+ const bounds = this.openingBounds2D.get(id);
237
+ if (bounds) {
238
+ result.push(bounds);
239
+ }
240
+ }
241
+ return result;
242
+ }
243
+ }
244
+ //# sourceMappingURL=opening-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opening-filter.js","sourceRoot":"","sources":["../../src/openings/opening-filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Builds opening relationship data from IFC void/fill relationships
3
+ */
4
+ import type { OpeningRelationships, VoidRelationship, FillRelationship, EntityMetadata } from '../types';
5
+ /**
6
+ * Builder for creating OpeningRelationships from raw relationship data
7
+ */
8
+ export declare class OpeningRelationshipBuilder {
9
+ private voidedBy;
10
+ private filledBy;
11
+ private openingInfo;
12
+ private entityMetadata;
13
+ constructor(entityMetadata?: Map<number, EntityMetadata>);
14
+ /**
15
+ * Add void relationships (IfcRelVoidsElement)
16
+ * hostId is the wall/slab, openingId is the IfcOpeningElement
17
+ */
18
+ addVoidRelationships(voids: VoidRelationship[]): this;
19
+ /**
20
+ * Add fill relationships (IfcRelFillsElement)
21
+ * openingId is the IfcOpeningElement, elementId is the door/window
22
+ */
23
+ addFillRelationships(fills: FillRelationship[]): this;
24
+ /**
25
+ * Build complete OpeningInfo for all openings
26
+ */
27
+ build(modelIndex?: number): OpeningRelationships;
28
+ private determineOpeningType;
29
+ private extractDoorOperation;
30
+ }
31
+ /**
32
+ * Create OpeningRelationships from raw data
33
+ */
34
+ export declare function buildOpeningRelationshipsFromData(voids: VoidRelationship[], fills: FillRelationship[], entityMetadata?: Map<number, EntityMetadata>, modelIndex?: number): OpeningRelationships;
35
+ //# sourceMappingURL=opening-relationship-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opening-relationship-builder.d.ts","sourceRoot":"","sources":["../../src/openings/opening-relationship-builder.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EACV,oBAAoB,EAEpB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EAGf,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,cAAc,CAA8B;gBAExC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAIxD;;;OAGG;IACH,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAYrD;;;OAGG;IACH,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAOrD;;OAEG;IACH,KAAK,CAAC,UAAU,GAAE,MAAU,GAAG,oBAAoB;IAoDnD,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,oBAAoB;CAe7B;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,gBAAgB,EAAE,EACzB,KAAK,EAAE,gBAAgB,EAAE,EACzB,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EAC5C,UAAU,GAAE,MAAU,GACrB,oBAAoB,CAKtB"}
@@ -0,0 +1,121 @@
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
+ * Builder for creating OpeningRelationships from raw relationship data
6
+ */
7
+ export class OpeningRelationshipBuilder {
8
+ voidedBy = new Map();
9
+ filledBy = new Map();
10
+ openingInfo = new Map();
11
+ entityMetadata;
12
+ constructor(entityMetadata) {
13
+ this.entityMetadata = entityMetadata ?? new Map();
14
+ }
15
+ /**
16
+ * Add void relationships (IfcRelVoidsElement)
17
+ * hostId is the wall/slab, openingId is the IfcOpeningElement
18
+ */
19
+ addVoidRelationships(voids) {
20
+ for (const { hostId, openingId } of voids) {
21
+ const existing = this.voidedBy.get(hostId);
22
+ if (existing) {
23
+ existing.push(openingId);
24
+ }
25
+ else {
26
+ this.voidedBy.set(hostId, [openingId]);
27
+ }
28
+ }
29
+ return this;
30
+ }
31
+ /**
32
+ * Add fill relationships (IfcRelFillsElement)
33
+ * openingId is the IfcOpeningElement, elementId is the door/window
34
+ */
35
+ addFillRelationships(fills) {
36
+ for (const { openingId, elementId } of fills) {
37
+ this.filledBy.set(openingId, elementId);
38
+ }
39
+ return this;
40
+ }
41
+ /**
42
+ * Build complete OpeningInfo for all openings
43
+ */
44
+ build(modelIndex = 0) {
45
+ // Build OpeningInfo for each opening
46
+ for (const [hostId, openingIds] of this.voidedBy) {
47
+ for (const openingId of openingIds) {
48
+ const fillingElementId = this.filledBy.get(openingId);
49
+ const openingMeta = this.entityMetadata.get(openingId);
50
+ const fillingMeta = fillingElementId
51
+ ? this.entityMetadata.get(fillingElementId)
52
+ : undefined;
53
+ // Determine opening type from filling element
54
+ const type = this.determineOpeningType(fillingMeta?.ifcType);
55
+ // Get bounds from metadata or use defaults
56
+ const bounds = openingMeta?.bounds ?? fillingMeta?.bounds ?? {
57
+ min: { x: 0, y: 0, z: 0 },
58
+ max: { x: 1, y: 1, z: 2.1 },
59
+ };
60
+ const info = {
61
+ type,
62
+ openingId,
63
+ hostElementId: hostId,
64
+ fillingElementId,
65
+ fillingType: fillingMeta?.ifcType,
66
+ width: bounds.max.x - bounds.min.x,
67
+ height: bounds.max.z - bounds.min.z,
68
+ bounds3D: bounds,
69
+ modelIndex,
70
+ };
71
+ // Add door operation type if available
72
+ if (type === 'door' && fillingMeta?.properties) {
73
+ info.doorOperation = this.extractDoorOperation(fillingMeta.properties);
74
+ }
75
+ this.openingInfo.set(openingId, info);
76
+ // Also map filling element to same info for easy lookup
77
+ if (fillingElementId) {
78
+ this.openingInfo.set(fillingElementId, info);
79
+ }
80
+ }
81
+ }
82
+ return {
83
+ voidedBy: this.voidedBy,
84
+ filledBy: this.filledBy,
85
+ openingInfo: this.openingInfo,
86
+ };
87
+ }
88
+ determineOpeningType(ifcType) {
89
+ if (!ifcType)
90
+ return 'opening';
91
+ const upper = ifcType.toUpperCase();
92
+ if (upper.includes('DOOR'))
93
+ return 'door';
94
+ if (upper.includes('WINDOW'))
95
+ return 'window';
96
+ return 'opening';
97
+ }
98
+ extractDoorOperation(properties) {
99
+ // Look for OperationType in properties
100
+ const operationType = properties['OperationType'];
101
+ if (operationType) {
102
+ return operationType;
103
+ }
104
+ // Look in nested property sets
105
+ const psets = properties['Pset_DoorCommon'];
106
+ if (psets?.['OperationType']) {
107
+ return psets['OperationType'];
108
+ }
109
+ return 'SINGLE_SWING_LEFT'; // Default
110
+ }
111
+ }
112
+ /**
113
+ * Create OpeningRelationships from raw data
114
+ */
115
+ export function buildOpeningRelationshipsFromData(voids, fills, entityMetadata, modelIndex = 0) {
116
+ return new OpeningRelationshipBuilder(entityMetadata)
117
+ .addVoidRelationships(voids)
118
+ .addFillRelationships(fills)
119
+ .build(modelIndex);
120
+ }
121
+ //# sourceMappingURL=opening-relationship-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opening-relationship-builder.js","sourceRoot":"","sources":["../../src/openings/opening-relationship-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Utility functions for opening handling
3
+ */
4
+ import type { OpeningRelationships, OpeningInfo, VoidRelationship, FillRelationship, EntityMetadata } from '../types';
5
+ /**
6
+ * Build opening relationships from void and fill relationship arrays
7
+ */
8
+ export declare function buildOpeningRelationships(voids: VoidRelationship[], fills: FillRelationship[], entityMetadata?: Map<number, EntityMetadata>, modelIndex?: number): OpeningRelationships;
9
+ /**
10
+ * Get all opening IDs for a host element (wall, slab, etc.)
11
+ */
12
+ export declare function getOpeningsForHost(relationships: OpeningRelationships, hostId: number): number[];
13
+ /**
14
+ * Get the filling element (door/window) for an opening
15
+ */
16
+ export declare function getFillingElement(relationships: OpeningRelationships, openingId: number): number | undefined;
17
+ /**
18
+ * Get opening info by entity ID (works for both opening and filling elements)
19
+ */
20
+ export declare function getOpeningInfo(relationships: OpeningRelationships, entityId: number): OpeningInfo | undefined;
21
+ /**
22
+ * Check if an IFC type represents an opening element
23
+ */
24
+ export declare function isOpeningElement(ifcType: string): boolean;
25
+ /**
26
+ * Check if an IFC type represents a door or window
27
+ */
28
+ export declare function isDoorOrWindow(ifcType: string): boolean;
29
+ /**
30
+ * Check if an IFC type is a host element that can have openings
31
+ */
32
+ export declare function isHostElement(ifcType: string): boolean;
33
+ /**
34
+ * Get all host element IDs that have openings
35
+ */
36
+ export declare function getHostsWithOpenings(relationships: OpeningRelationships): number[];
37
+ /**
38
+ * Get all door opening infos
39
+ */
40
+ export declare function getDoorOpenings(relationships: OpeningRelationships): OpeningInfo[];
41
+ /**
42
+ * Get all window opening infos
43
+ */
44
+ export declare function getWindowOpenings(relationships: OpeningRelationships): OpeningInfo[];
45
+ /**
46
+ * Filter entity IDs to exclude opening elements
47
+ * Useful for filtering meshes before section cutting
48
+ */
49
+ export declare function filterOutOpeningElements(entityIds: number[], relationships: OpeningRelationships): number[];
50
+ /**
51
+ * Get the entity IDs that should be included in cut lines (hosts only)
52
+ * Excludes opening elements and their filling elements
53
+ */
54
+ export declare function getHostEntityIds(allEntityIds: number[], relationships: OpeningRelationships, ifcTypes: Map<number, string>): number[];
55
+ //# sourceMappingURL=opening-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opening-utils.d.ts","sourceRoot":"","sources":["../../src/openings/opening-utils.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EACV,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACf,MAAM,UAAU,CAAC;AAGlB;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,gBAAgB,EAAE,EACzB,KAAK,EAAE,gBAAgB,EAAE,EACzB,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EAC5C,UAAU,GAAE,MAAU,GACrB,oBAAoB,CAKtB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,oBAAoB,EACnC,MAAM,EAAE,MAAM,GACb,MAAM,EAAE,CAEV;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,oBAAoB,EACnC,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,SAAS,CAEpB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,aAAa,EAAE,oBAAoB,EACnC,QAAQ,EAAE,MAAM,GACf,WAAW,GAAG,SAAS,CAEzB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAOzD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAMvD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAQtD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,oBAAoB,GAClC,MAAM,EAAE,CAEV;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,aAAa,EAAE,oBAAoB,GAClC,WAAW,EAAE,CAWf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,oBAAoB,GAClC,WAAW,EAAE,CAWf;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EAAE,EACnB,aAAa,EAAE,oBAAoB,GAClC,MAAM,EAAE,CAcV;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EAAE,EACtB,aAAa,EAAE,oBAAoB,EACnC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,MAAM,EAAE,CAgBV"}