@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.
- package/LICENSE +373 -0
- package/dist/drawing-generator.d.ts +80 -0
- package/dist/drawing-generator.d.ts.map +1 -0
- package/dist/drawing-generator.js +281 -0
- package/dist/drawing-generator.js.map +1 -0
- package/dist/edge-extractor.d.ts +47 -0
- package/dist/edge-extractor.d.ts.map +1 -0
- package/dist/edge-extractor.js +204 -0
- package/dist/edge-extractor.js.map +1 -0
- package/dist/gpu-section-cutter.d.ts +42 -0
- package/dist/gpu-section-cutter.d.ts.map +1 -0
- package/dist/gpu-section-cutter.js +405 -0
- package/dist/gpu-section-cutter.js.map +1 -0
- package/dist/graphic-overrides/index.d.ts +10 -0
- package/dist/graphic-overrides/index.d.ts.map +1 -0
- package/dist/graphic-overrides/index.js +8 -0
- package/dist/graphic-overrides/index.js.map +1 -0
- package/dist/graphic-overrides/presets.d.ts +22 -0
- package/dist/graphic-overrides/presets.d.ts.map +1 -0
- package/dist/graphic-overrides/presets.js +283 -0
- package/dist/graphic-overrides/presets.js.map +1 -0
- package/dist/graphic-overrides/rule-engine.d.ts +64 -0
- package/dist/graphic-overrides/rule-engine.d.ts.map +1 -0
- package/dist/graphic-overrides/rule-engine.js +438 -0
- package/dist/graphic-overrides/rule-engine.js.map +1 -0
- package/dist/graphic-overrides/types.d.ts +200 -0
- package/dist/graphic-overrides/types.d.ts.map +1 -0
- package/dist/graphic-overrides/types.js +5 -0
- package/dist/graphic-overrides/types.js.map +1 -0
- package/dist/hatch-generator.d.ts +76 -0
- package/dist/hatch-generator.d.ts.map +1 -0
- package/dist/hatch-generator.js +282 -0
- package/dist/hatch-generator.js.map +1 -0
- package/dist/hidden-line.d.ts +64 -0
- package/dist/hidden-line.d.ts.map +1 -0
- package/dist/hidden-line.js +318 -0
- package/dist/hidden-line.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +109 -0
- package/dist/index.js.map +1 -0
- package/dist/line-merger.d.ts +35 -0
- package/dist/line-merger.d.ts.map +1 -0
- package/dist/line-merger.js +265 -0
- package/dist/line-merger.js.map +1 -0
- package/dist/math.d.ts +90 -0
- package/dist/math.d.ts.map +1 -0
- package/dist/math.js +284 -0
- package/dist/math.js.map +1 -0
- package/dist/openings/index.d.ts +7 -0
- package/dist/openings/index.d.ts.map +1 -0
- package/dist/openings/index.js +10 -0
- package/dist/openings/index.js.map +1 -0
- package/dist/openings/opening-filter.d.ts +61 -0
- package/dist/openings/opening-filter.d.ts.map +1 -0
- package/dist/openings/opening-filter.js +244 -0
- package/dist/openings/opening-filter.js.map +1 -0
- package/dist/openings/opening-relationship-builder.d.ts +35 -0
- package/dist/openings/opening-relationship-builder.d.ts.map +1 -0
- package/dist/openings/opening-relationship-builder.js +121 -0
- package/dist/openings/opening-relationship-builder.js.map +1 -0
- package/dist/openings/opening-utils.d.ts +55 -0
- package/dist/openings/opening-utils.d.ts.map +1 -0
- package/dist/openings/opening-utils.js +128 -0
- package/dist/openings/opening-utils.js.map +1 -0
- package/dist/polygon-builder.d.ts +62 -0
- package/dist/polygon-builder.d.ts.map +1 -0
- package/dist/polygon-builder.js +261 -0
- package/dist/polygon-builder.js.map +1 -0
- package/dist/section-cutter.d.ts +49 -0
- package/dist/section-cutter.d.ts.map +1 -0
- package/dist/section-cutter.js +220 -0
- package/dist/section-cutter.js.map +1 -0
- package/dist/sheet/frame-renderer.d.ts +28 -0
- package/dist/sheet/frame-renderer.d.ts.map +1 -0
- package/dist/sheet/frame-renderer.js +199 -0
- package/dist/sheet/frame-renderer.js.map +1 -0
- package/dist/sheet/frame-types.d.ts +57 -0
- package/dist/sheet/frame-types.d.ts.map +1 -0
- package/dist/sheet/frame-types.js +88 -0
- package/dist/sheet/frame-types.js.map +1 -0
- package/dist/sheet/index.d.ts +26 -0
- package/dist/sheet/index.d.ts.map +1 -0
- package/dist/sheet/index.js +12 -0
- package/dist/sheet/index.js.map +1 -0
- package/dist/sheet/paper-sizes.d.ts +36 -0
- package/dist/sheet/paper-sizes.d.ts.map +1 -0
- package/dist/sheet/paper-sizes.js +252 -0
- package/dist/sheet/paper-sizes.js.map +1 -0
- package/dist/sheet/scale-bar-renderer.d.ts +29 -0
- package/dist/sheet/scale-bar-renderer.d.ts.map +1 -0
- package/dist/sheet/scale-bar-renderer.js +287 -0
- package/dist/sheet/scale-bar-renderer.js.map +1 -0
- package/dist/sheet/scale-bar-types.d.ts +82 -0
- package/dist/sheet/scale-bar-types.d.ts.map +1 -0
- package/dist/sheet/scale-bar-types.js +66 -0
- package/dist/sheet/scale-bar-types.js.map +1 -0
- package/dist/sheet/sheet-types.d.ts +84 -0
- package/dist/sheet/sheet-types.d.ts.map +1 -0
- package/dist/sheet/sheet-types.js +77 -0
- package/dist/sheet/sheet-types.js.map +1 -0
- package/dist/sheet/title-block-renderer.d.ts +44 -0
- package/dist/sheet/title-block-renderer.d.ts.map +1 -0
- package/dist/sheet/title-block-renderer.js +335 -0
- package/dist/sheet/title-block-renderer.js.map +1 -0
- package/dist/sheet/title-block-types.d.ts +100 -0
- package/dist/sheet/title-block-types.d.ts.map +1 -0
- package/dist/sheet/title-block-types.js +174 -0
- package/dist/sheet/title-block-types.js.map +1 -0
- package/dist/styles.d.ts +77 -0
- package/dist/styles.d.ts.map +1 -0
- package/dist/styles.js +347 -0
- package/dist/styles.js.map +1 -0
- package/dist/styling/index.d.ts +7 -0
- package/dist/styling/index.d.ts.map +1 -0
- package/dist/styling/index.js +10 -0
- package/dist/styling/index.js.map +1 -0
- package/dist/styling/layer-mapping.d.ts +57 -0
- package/dist/styling/layer-mapping.d.ts.map +1 -0
- package/dist/styling/layer-mapping.js +303 -0
- package/dist/styling/layer-mapping.js.map +1 -0
- package/dist/styling/line-styles.d.ts +49 -0
- package/dist/styling/line-styles.d.ts.map +1 -0
- package/dist/styling/line-styles.js +123 -0
- package/dist/styling/line-styles.js.map +1 -0
- package/dist/styling/line-weights.d.ts +61 -0
- package/dist/styling/line-weights.d.ts.map +1 -0
- package/dist/styling/line-weights.js +183 -0
- package/dist/styling/line-weights.js.map +1 -0
- package/dist/svg-exporter.d.ts +63 -0
- package/dist/svg-exporter.d.ts.map +1 -0
- package/dist/svg-exporter.js +278 -0
- package/dist/svg-exporter.js.map +1 -0
- package/dist/symbols/door-symbol.d.ts +82 -0
- package/dist/symbols/door-symbol.d.ts.map +1 -0
- package/dist/symbols/door-symbol.js +390 -0
- package/dist/symbols/door-symbol.js.map +1 -0
- package/dist/symbols/index.d.ts +8 -0
- package/dist/symbols/index.d.ts.map +1 -0
- package/dist/symbols/index.js +11 -0
- package/dist/symbols/index.js.map +1 -0
- package/dist/symbols/symbol-renderer.d.ts +29 -0
- package/dist/symbols/symbol-renderer.d.ts.map +1 -0
- package/dist/symbols/symbol-renderer.js +173 -0
- package/dist/symbols/symbol-renderer.js.map +1 -0
- package/dist/symbols/symbol-utils.d.ts +48 -0
- package/dist/symbols/symbol-utils.d.ts.map +1 -0
- package/dist/symbols/symbol-utils.js +129 -0
- package/dist/symbols/symbol-utils.js.map +1 -0
- package/dist/symbols/window-symbol.d.ts +57 -0
- package/dist/symbols/window-symbol.d.ts.map +1 -0
- package/dist/symbols/window-symbol.js +209 -0
- package/dist/symbols/window-symbol.js.map +1 -0
- package/dist/types.d.ts +443 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +31 -0
- package/dist/types.js.map +1 -0
- package/package.json +53 -0
package/dist/math.js.map
ADDED
|
@@ -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"}
|