@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":"symbol-renderer.js","sourceRoot":"","sources":["../../src/symbols/symbol-renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Utility functions for architectural symbol generation
3
+ */
4
+ import type { ArchitecturalSymbol, OpeningInfo, Point2D, Bounds2D, DoorOperationType, WindowPartitioningType } from '../types';
5
+ import { type DoorSymbolResult } from './door-symbol';
6
+ import { type WindowSymbolResult } from './window-symbol';
7
+ /**
8
+ * Generate a door symbol from opening info
9
+ */
10
+ export declare function generateDoorSymbol(opening: OpeningInfo, bounds2D: Bounds2D, wallDirection: Point2D): DoorSymbolResult;
11
+ /**
12
+ * Generate a door symbol at a specific position
13
+ */
14
+ export declare function generateDoorSymbolAt(center: Point2D, width: number, operation: DoorOperationType, wallDirection: Point2D, swingDirection: Point2D): DoorSymbolResult;
15
+ /**
16
+ * Generate a window symbol from opening info
17
+ */
18
+ export declare function generateWindowSymbol(opening: OpeningInfo, bounds2D: Bounds2D, wallDirection: Point2D, wallThickness?: number): WindowSymbolResult;
19
+ /**
20
+ * Generate a window symbol at a specific position
21
+ */
22
+ export declare function generateWindowSymbolAt(center: Point2D, width: number, wallDirection: Point2D, wallThickness: number, partitioning?: WindowPartitioningType): WindowSymbolResult;
23
+ /**
24
+ * Generate a stair arrow symbol
25
+ */
26
+ export declare function generateStairArrow(position: Point2D, direction: 'up' | 'down', length: number, rotation?: number, riserCount?: number): ArchitecturalSymbol;
27
+ /**
28
+ * Generate a north arrow symbol
29
+ */
30
+ export declare function generateNorthArrow(position: Point2D, rotation?: number, scale?: number): ArchitecturalSymbol;
31
+ /**
32
+ * Generate a section mark symbol
33
+ */
34
+ export declare function generateSectionMark(position: Point2D, sectionId: string, viewDirection: 'left' | 'right' | 'both', scale?: number): ArchitecturalSymbol;
35
+ /**
36
+ * Generate a level mark symbol
37
+ */
38
+ export declare function generateLevelMark(position: Point2D, elevation: number, label: string, scale?: number): ArchitecturalSymbol;
39
+ /**
40
+ * Determine wall direction from opening bounds
41
+ * Returns normalized direction along the longer axis
42
+ */
43
+ export declare function inferWallDirection(bounds2D: Bounds2D): Point2D;
44
+ /**
45
+ * Generate symbols for all openings
46
+ */
47
+ export declare function generateOpeningSymbols(openings: OpeningInfo[], openingBounds2D: Map<number, Bounds2D>, wallDirections?: Map<number, Point2D>): ArchitecturalSymbol[];
48
+ //# sourceMappingURL=symbol-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-utils.d.ts","sourceRoot":"","sources":["../../src/symbols/symbol-utils.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,WAAW,EACX,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAuB,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEjF;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,OAAO,GACrB,gBAAgB,CAGlB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,iBAAiB,EAC5B,aAAa,EAAE,OAAO,EACtB,cAAc,EAAE,OAAO,GACtB,gBAAgB,CAGlB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,OAAO,EACtB,aAAa,CAAC,EAAE,MAAM,GACrB,kBAAkB,CAGpB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,OAAO,EACtB,aAAa,EAAE,MAAM,EACrB,YAAY,GAAE,sBAAuC,GACpD,kBAAkB,CAIpB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAE,IAAI,GAAG,MAAM,EACxB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAU,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,mBAAmB,CAYrB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,OAAO,EACjB,QAAQ,GAAE,MAAU,EACpB,KAAK,GAAE,MAAU,GAChB,mBAAmB,CAQrB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EACxC,KAAK,GAAE,MAAU,GAChB,mBAAmB,CAWrB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAU,GAChB,mBAAmB,CAWrB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAS9D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,WAAW,EAAE,EACvB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EACtC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC,mBAAmB,EAAE,CAoBvB"}
@@ -0,0 +1,129 @@
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 { DoorSymbolGenerator } from './door-symbol';
5
+ import { WindowSymbolGenerator } from './window-symbol';
6
+ /**
7
+ * Generate a door symbol from opening info
8
+ */
9
+ export function generateDoorSymbol(opening, bounds2D, wallDirection) {
10
+ const generator = new DoorSymbolGenerator();
11
+ return generator.generateFromOpening(opening, bounds2D, wallDirection);
12
+ }
13
+ /**
14
+ * Generate a door symbol at a specific position
15
+ */
16
+ export function generateDoorSymbolAt(center, width, operation, wallDirection, swingDirection) {
17
+ const generator = new DoorSymbolGenerator();
18
+ return generator.generateSymbol(center, width, operation, wallDirection, swingDirection);
19
+ }
20
+ /**
21
+ * Generate a window symbol from opening info
22
+ */
23
+ export function generateWindowSymbol(opening, bounds2D, wallDirection, wallThickness) {
24
+ const generator = new WindowSymbolGenerator();
25
+ return generator.generateFromOpening(opening, bounds2D, wallDirection, wallThickness);
26
+ }
27
+ /**
28
+ * Generate a window symbol at a specific position
29
+ */
30
+ export function generateWindowSymbolAt(center, width, wallDirection, wallThickness, partitioning = 'SINGLE_PANEL') {
31
+ const generator = new WindowSymbolGenerator();
32
+ const perpDirection = { x: -wallDirection.y, y: wallDirection.x };
33
+ return generator.generateSymbol(center, width, wallThickness, wallDirection, perpDirection, partitioning);
34
+ }
35
+ /**
36
+ * Generate a stair arrow symbol
37
+ */
38
+ export function generateStairArrow(position, direction, length, rotation = 0, riserCount) {
39
+ return {
40
+ type: 'stair-arrow',
41
+ position,
42
+ rotation,
43
+ scale: 1,
44
+ parameters: {
45
+ direction,
46
+ length,
47
+ riserCount,
48
+ },
49
+ };
50
+ }
51
+ /**
52
+ * Generate a north arrow symbol
53
+ */
54
+ export function generateNorthArrow(position, rotation = 0, scale = 1) {
55
+ return {
56
+ type: 'north-arrow',
57
+ position,
58
+ rotation,
59
+ scale,
60
+ parameters: {},
61
+ };
62
+ }
63
+ /**
64
+ * Generate a section mark symbol
65
+ */
66
+ export function generateSectionMark(position, sectionId, viewDirection, scale = 1) {
67
+ return {
68
+ type: 'section-mark',
69
+ position,
70
+ rotation: 0,
71
+ scale,
72
+ parameters: {
73
+ sectionId,
74
+ viewDirection,
75
+ },
76
+ };
77
+ }
78
+ /**
79
+ * Generate a level mark symbol
80
+ */
81
+ export function generateLevelMark(position, elevation, label, scale = 1) {
82
+ return {
83
+ type: 'level-mark',
84
+ position,
85
+ rotation: 0,
86
+ scale,
87
+ parameters: {
88
+ elevation,
89
+ label,
90
+ },
91
+ };
92
+ }
93
+ /**
94
+ * Determine wall direction from opening bounds
95
+ * Returns normalized direction along the longer axis
96
+ */
97
+ export function inferWallDirection(bounds2D) {
98
+ const width = bounds2D.max.x - bounds2D.min.x;
99
+ const height = bounds2D.max.y - bounds2D.min.y;
100
+ if (width > height) {
101
+ return { x: 1, y: 0 };
102
+ }
103
+ else {
104
+ return { x: 0, y: 1 };
105
+ }
106
+ }
107
+ /**
108
+ * Generate symbols for all openings
109
+ */
110
+ export function generateOpeningSymbols(openings, openingBounds2D, wallDirections) {
111
+ const symbols = [];
112
+ for (const opening of openings) {
113
+ const bounds = openingBounds2D.get(opening.openingId);
114
+ if (!bounds)
115
+ continue;
116
+ const wallDir = wallDirections?.get(opening.hostElementId) ?? inferWallDirection(bounds);
117
+ if (opening.type === 'door') {
118
+ const result = generateDoorSymbol(opening, bounds, wallDir);
119
+ symbols.push(result.symbol);
120
+ }
121
+ else if (opening.type === 'window') {
122
+ const result = generateWindowSymbol(opening, bounds, wallDir);
123
+ symbols.push(result.symbol);
124
+ }
125
+ // Pure openings (no door/window) don't get symbols
126
+ }
127
+ return symbols;
128
+ }
129
+ //# sourceMappingURL=symbol-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-utils.js","sourceRoot":"","sources":["../../src/symbols/symbol-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Window symbol generator for architectural floor plans
3
+ *
4
+ * Generates standard window symbols including:
5
+ * - Frame lines (parallel lines at opening edges)
6
+ * - Glass line (single line in center)
7
+ * - Mullions (for multi-pane windows)
8
+ */
9
+ import type { ArchitecturalSymbol, OpeningInfo, Point2D, Line2D, WindowPartitioningType, Bounds2D } from '../types';
10
+ /**
11
+ * Result of window symbol generation
12
+ */
13
+ export interface WindowSymbolResult {
14
+ /** The architectural symbol */
15
+ symbol: ArchitecturalSymbol;
16
+ /** Lines to draw (frame, glass, mullions) */
17
+ lines: Line2D[];
18
+ }
19
+ /**
20
+ * Configuration for window symbol generation
21
+ */
22
+ export interface WindowSymbolConfig {
23
+ /** Frame depth as fraction of wall thickness (default 0.1) */
24
+ frameDepthRatio: number;
25
+ /** Show glass line in center */
26
+ showGlassLine: boolean;
27
+ /** Show frame lines */
28
+ showFrameLines: boolean;
29
+ /** Wall thickness for frame offset calculation */
30
+ defaultWallThickness: number;
31
+ }
32
+ /**
33
+ * Generates window symbols for 2D floor plans
34
+ */
35
+ export declare class WindowSymbolGenerator {
36
+ private config;
37
+ constructor(config?: Partial<WindowSymbolConfig>);
38
+ /**
39
+ * Generate window symbol from opening info
40
+ */
41
+ generateFromOpening(opening: OpeningInfo, bounds2D: Bounds2D, wallDirection: Point2D, wallThickness?: number): WindowSymbolResult;
42
+ /**
43
+ * Generate a window symbol at a specific position
44
+ */
45
+ generateSymbol(center: Point2D, width: number, wallThickness: number, wallDirection: Point2D, perpDirection: Point2D, partitioning: WindowPartitioningType): WindowSymbolResult;
46
+ /**
47
+ * Generate mullion lines based on window partitioning
48
+ */
49
+ private generateMullions;
50
+ private getMullionCount;
51
+ private getPerpendicularDirection;
52
+ }
53
+ /**
54
+ * Generate simple window lines (frame only, no symbol object)
55
+ */
56
+ export declare function generateSimpleWindowLines(center: Point2D, width: number, wallDirection: Point2D, wallThickness?: number): Line2D[];
57
+ //# sourceMappingURL=window-symbol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"window-symbol.d.ts","sourceRoot":"","sources":["../../src/symbols/window-symbol.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,mBAAmB,EAEnB,WAAW,EACX,OAAO,EACP,MAAM,EACN,sBAAsB,EACtB,QAAQ,EACT,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,+BAA+B;IAC/B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,6CAA6C;IAC7C,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8DAA8D;IAC9D,eAAe,EAAE,MAAM,CAAC;IACxB,gCAAgC;IAChC,aAAa,EAAE,OAAO,CAAC;IACvB,uBAAuB;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,kDAAkD;IAClD,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AASD;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAqB;gBAEvB,MAAM,GAAE,OAAO,CAAC,kBAAkB,CAAM;IAIpD;;OAEG;IACH,mBAAmB,CACjB,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,OAAO,EACtB,aAAa,CAAC,EAAE,MAAM,GACrB,kBAAkB;IAiBrB;;OAEG;IACH,cAAc,CACZ,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,OAAO,EACtB,aAAa,EAAE,OAAO,EACtB,YAAY,EAAE,sBAAsB,GACnC,kBAAkB;IA4FrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuExB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,yBAAyB;CAGlC;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,OAAO,EACtB,aAAa,GAAE,MAAY,GAC1B,MAAM,EAAE,CAYV"}
@@ -0,0 +1,209 @@
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
+ const DEFAULT_CONFIG = {
5
+ frameDepthRatio: 0.1,
6
+ showGlassLine: true,
7
+ showFrameLines: true,
8
+ defaultWallThickness: 0.2, // 200mm
9
+ };
10
+ /**
11
+ * Generates window symbols for 2D floor plans
12
+ */
13
+ export class WindowSymbolGenerator {
14
+ config;
15
+ constructor(config = {}) {
16
+ this.config = { ...DEFAULT_CONFIG, ...config };
17
+ }
18
+ /**
19
+ * Generate window symbol from opening info
20
+ */
21
+ generateFromOpening(opening, bounds2D, wallDirection, wallThickness) {
22
+ const partitioning = opening.windowPartitioning ?? 'SINGLE_PANEL';
23
+ const width = opening.width;
24
+ const thickness = wallThickness ?? this.config.defaultWallThickness;
25
+ // Calculate center of opening
26
+ const center = {
27
+ x: (bounds2D.min.x + bounds2D.max.x) / 2,
28
+ y: (bounds2D.min.y + bounds2D.max.y) / 2,
29
+ };
30
+ // Determine perpendicular direction
31
+ const perpendicular = this.getPerpendicularDirection(wallDirection);
32
+ return this.generateSymbol(center, width, thickness, wallDirection, perpendicular, partitioning);
33
+ }
34
+ /**
35
+ * Generate a window symbol at a specific position
36
+ */
37
+ generateSymbol(center, width, wallThickness, wallDirection, perpDirection, partitioning) {
38
+ const lines = [];
39
+ const halfWidth = width / 2;
40
+ const frameDepth = wallThickness * this.config.frameDepthRatio;
41
+ const halfThickness = wallThickness / 2;
42
+ // Frame lines (two parallel lines at opening edges along wall direction)
43
+ if (this.config.showFrameLines) {
44
+ // Outer frame line (at wall face)
45
+ lines.push({
46
+ start: {
47
+ x: center.x - wallDirection.x * halfWidth + perpDirection.x * halfThickness,
48
+ y: center.y - wallDirection.y * halfWidth + perpDirection.y * halfThickness,
49
+ },
50
+ end: {
51
+ x: center.x + wallDirection.x * halfWidth + perpDirection.x * halfThickness,
52
+ y: center.y + wallDirection.y * halfWidth + perpDirection.y * halfThickness,
53
+ },
54
+ });
55
+ // Inner frame line (at opposite wall face)
56
+ lines.push({
57
+ start: {
58
+ x: center.x - wallDirection.x * halfWidth - perpDirection.x * halfThickness,
59
+ y: center.y - wallDirection.y * halfWidth - perpDirection.y * halfThickness,
60
+ },
61
+ end: {
62
+ x: center.x + wallDirection.x * halfWidth - perpDirection.x * halfThickness,
63
+ y: center.y + wallDirection.y * halfWidth - perpDirection.y * halfThickness,
64
+ },
65
+ });
66
+ // Jamb lines (short lines at window edges)
67
+ lines.push({
68
+ start: {
69
+ x: center.x - wallDirection.x * halfWidth + perpDirection.x * halfThickness,
70
+ y: center.y - wallDirection.y * halfWidth + perpDirection.y * halfThickness,
71
+ },
72
+ end: {
73
+ x: center.x - wallDirection.x * halfWidth - perpDirection.x * halfThickness,
74
+ y: center.y - wallDirection.y * halfWidth - perpDirection.y * halfThickness,
75
+ },
76
+ });
77
+ lines.push({
78
+ start: {
79
+ x: center.x + wallDirection.x * halfWidth + perpDirection.x * halfThickness,
80
+ y: center.y + wallDirection.y * halfWidth + perpDirection.y * halfThickness,
81
+ },
82
+ end: {
83
+ x: center.x + wallDirection.x * halfWidth - perpDirection.x * halfThickness,
84
+ y: center.y + wallDirection.y * halfWidth - perpDirection.y * halfThickness,
85
+ },
86
+ });
87
+ }
88
+ // Glass line (single line in center of wall)
89
+ if (this.config.showGlassLine) {
90
+ lines.push({
91
+ start: {
92
+ x: center.x - wallDirection.x * halfWidth,
93
+ y: center.y - wallDirection.y * halfWidth,
94
+ },
95
+ end: {
96
+ x: center.x + wallDirection.x * halfWidth,
97
+ y: center.y + wallDirection.y * halfWidth,
98
+ },
99
+ });
100
+ }
101
+ // Add mullions based on partitioning type
102
+ const mullionLines = this.generateMullions(center, width, wallThickness, wallDirection, perpDirection, partitioning);
103
+ lines.push(...mullionLines);
104
+ const params = {
105
+ width,
106
+ frameDepth,
107
+ mullionCount: this.getMullionCount(partitioning),
108
+ };
109
+ return {
110
+ symbol: {
111
+ type: 'window-frame',
112
+ position: center,
113
+ rotation: Math.atan2(wallDirection.y, wallDirection.x),
114
+ scale: 1,
115
+ parameters: params,
116
+ },
117
+ lines,
118
+ };
119
+ }
120
+ /**
121
+ * Generate mullion lines based on window partitioning
122
+ */
123
+ generateMullions(center, width, wallThickness, wallDirection, perpDirection, partitioning) {
124
+ const lines = [];
125
+ const halfThickness = wallThickness / 2;
126
+ switch (partitioning) {
127
+ case 'DOUBLE_PANEL_VERTICAL':
128
+ // Single vertical mullion in center
129
+ lines.push({
130
+ start: {
131
+ x: center.x + perpDirection.x * halfThickness,
132
+ y: center.y + perpDirection.y * halfThickness,
133
+ },
134
+ end: {
135
+ x: center.x - perpDirection.x * halfThickness,
136
+ y: center.y - perpDirection.y * halfThickness,
137
+ },
138
+ });
139
+ break;
140
+ case 'DOUBLE_PANEL_HORIZONTAL':
141
+ // Single horizontal mullion in center (along wall direction)
142
+ // This would be a line perpendicular to the wall
143
+ break;
144
+ case 'TRIPLE_PANEL_VERTICAL':
145
+ // Two vertical mullions
146
+ const thirdWidth = width / 3;
147
+ for (const offset of [-thirdWidth / 2, thirdWidth / 2]) {
148
+ lines.push({
149
+ start: {
150
+ x: center.x + wallDirection.x * offset + perpDirection.x * halfThickness,
151
+ y: center.y + wallDirection.y * offset + perpDirection.y * halfThickness,
152
+ },
153
+ end: {
154
+ x: center.x + wallDirection.x * offset - perpDirection.x * halfThickness,
155
+ y: center.y + wallDirection.y * offset - perpDirection.y * halfThickness,
156
+ },
157
+ });
158
+ }
159
+ break;
160
+ case 'TRIPLE_PANEL_BOTTOM':
161
+ case 'TRIPLE_PANEL_TOP':
162
+ // One horizontal mullion and one vertical in lower/upper section
163
+ lines.push({
164
+ start: {
165
+ x: center.x + perpDirection.x * halfThickness,
166
+ y: center.y + perpDirection.y * halfThickness,
167
+ },
168
+ end: {
169
+ x: center.x - perpDirection.x * halfThickness,
170
+ y: center.y - perpDirection.y * halfThickness,
171
+ },
172
+ });
173
+ break;
174
+ default:
175
+ // SINGLE_PANEL and others - no mullions
176
+ break;
177
+ }
178
+ return lines;
179
+ }
180
+ getMullionCount(partitioning) {
181
+ switch (partitioning) {
182
+ case 'DOUBLE_PANEL_VERTICAL':
183
+ case 'DOUBLE_PANEL_HORIZONTAL':
184
+ return 1;
185
+ case 'TRIPLE_PANEL_VERTICAL':
186
+ case 'TRIPLE_PANEL_HORIZONTAL':
187
+ case 'TRIPLE_PANEL_BOTTOM':
188
+ case 'TRIPLE_PANEL_TOP':
189
+ case 'TRIPLE_PANEL_LEFT':
190
+ case 'TRIPLE_PANEL_RIGHT':
191
+ return 2;
192
+ default:
193
+ return 0;
194
+ }
195
+ }
196
+ getPerpendicularDirection(dir) {
197
+ return { x: -dir.y, y: dir.x };
198
+ }
199
+ }
200
+ /**
201
+ * Generate simple window lines (frame only, no symbol object)
202
+ */
203
+ export function generateSimpleWindowLines(center, width, wallDirection, wallThickness = 0.2) {
204
+ const generator = new WindowSymbolGenerator();
205
+ const perpDirection = { x: -wallDirection.y, y: wallDirection.x };
206
+ const result = generator.generateSymbol(center, width, wallThickness, wallDirection, perpDirection, 'SINGLE_PANEL');
207
+ return result.lines;
208
+ }
209
+ //# sourceMappingURL=window-symbol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"window-symbol.js","sourceRoot":"","sources":["../../src/symbols/window-symbol.ts"],"names":[],"mappings":"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"}