@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,183 @@
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
+ * Line weight configuration with actual widths
6
+ */
7
+ export const LINE_WEIGHT_CONFIG = {
8
+ heavy: { widthMm: 0.5, widthPx: 2 },
9
+ medium: { widthMm: 0.35, widthPx: 1.4 },
10
+ light: { widthMm: 0.25, widthPx: 1 },
11
+ hairline: { widthMm: 0.18, widthPx: 0.7 },
12
+ };
13
+ /**
14
+ * IFC type to line weight mapping for cut lines
15
+ */
16
+ export const IFC_TYPE_WEIGHTS = {
17
+ // Structural - heavy
18
+ IfcWall: 'heavy',
19
+ IfcWallStandardCase: 'heavy',
20
+ IfcColumn: 'heavy',
21
+ IfcBeam: 'heavy',
22
+ IfcSlab: 'heavy',
23
+ IfcFooting: 'heavy',
24
+ IfcPile: 'heavy',
25
+ IfcRoof: 'heavy',
26
+ // Semi-structural - medium
27
+ IfcStair: 'medium',
28
+ IfcStairFlight: 'medium',
29
+ IfcRamp: 'medium',
30
+ IfcRampFlight: 'medium',
31
+ IfcRailing: 'medium',
32
+ IfcCurtainWall: 'medium',
33
+ // Openings - medium
34
+ IfcDoor: 'medium',
35
+ IfcWindow: 'medium',
36
+ IfcOpeningElement: 'light',
37
+ // Non-structural - light
38
+ IfcCovering: 'light',
39
+ IfcFurnishingElement: 'light',
40
+ IfcFurniture: 'light',
41
+ IfcBuildingElementProxy: 'light',
42
+ IfcDistributionElement: 'light',
43
+ IfcFlowTerminal: 'light',
44
+ IfcFlowSegment: 'light',
45
+ // Spaces - hairline
46
+ IfcSpace: 'hairline',
47
+ IfcZone: 'hairline',
48
+ };
49
+ /**
50
+ * Category to base weight mapping
51
+ */
52
+ const CATEGORY_WEIGHTS = {
53
+ cut: 'heavy',
54
+ projection: 'light',
55
+ hidden: 'hairline',
56
+ silhouette: 'medium',
57
+ crease: 'light',
58
+ boundary: 'light',
59
+ annotation: 'hairline',
60
+ };
61
+ /**
62
+ * Category to line style mapping
63
+ */
64
+ const CATEGORY_STYLES = {
65
+ cut: 'solid',
66
+ projection: 'solid',
67
+ hidden: 'dashed',
68
+ silhouette: 'solid',
69
+ crease: 'solid',
70
+ boundary: 'solid',
71
+ annotation: 'solid',
72
+ };
73
+ /**
74
+ * Assigns line weights and styles to drawing lines
75
+ */
76
+ export class LineWeightAssigner {
77
+ ifcTypeWeights;
78
+ constructor(customWeights) {
79
+ this.ifcTypeWeights = { ...IFC_TYPE_WEIGHTS, ...customWeights };
80
+ }
81
+ /**
82
+ * Assign weight and style to a drawing line
83
+ */
84
+ assignWeight(line) {
85
+ const baseWeight = this.getBaseWeight(line);
86
+ const lineStyle = this.getLineStyle(line);
87
+ const semanticType = this.getSemanticType(line);
88
+ return {
89
+ ...line,
90
+ lineWeight: baseWeight,
91
+ lineStyle,
92
+ semanticType,
93
+ };
94
+ }
95
+ /**
96
+ * Process all lines in a drawing
97
+ */
98
+ processLines(lines) {
99
+ return lines.map((line) => this.assignWeight(line));
100
+ }
101
+ /**
102
+ * Get the base weight for a line
103
+ */
104
+ getBaseWeight(line) {
105
+ // Cut lines use IFC type-based weight
106
+ if (line.category === 'cut') {
107
+ return this.ifcTypeWeights[line.ifcType] ?? CATEGORY_WEIGHTS.cut;
108
+ }
109
+ // Hidden lines are always hairline
110
+ if (line.visibility === 'hidden' || line.category === 'hidden') {
111
+ return 'hairline';
112
+ }
113
+ // Other categories use their base weight
114
+ return CATEGORY_WEIGHTS[line.category] ?? 'light';
115
+ }
116
+ /**
117
+ * Get the line style
118
+ */
119
+ getLineStyle(line) {
120
+ if (line.visibility === 'hidden' || line.category === 'hidden') {
121
+ return 'dashed';
122
+ }
123
+ return CATEGORY_STYLES[line.category] ?? 'solid';
124
+ }
125
+ /**
126
+ * Determine semantic type for layer assignment
127
+ */
128
+ getSemanticType(line) {
129
+ const { category, ifcType, visibility } = line;
130
+ if (visibility === 'hidden') {
131
+ return 'hidden';
132
+ }
133
+ if (category === 'cut') {
134
+ const upper = ifcType.toUpperCase();
135
+ if (upper.includes('WALL'))
136
+ return 'wall-cut';
137
+ if (upper.includes('COLUMN'))
138
+ return 'column-cut';
139
+ if (upper.includes('SLAB') || upper.includes('FLOOR'))
140
+ return 'slab-cut';
141
+ if (upper.includes('STAIR'))
142
+ return 'stair-cut';
143
+ if (upper.includes('DOOR'))
144
+ return 'opening-frame';
145
+ if (upper.includes('WINDOW'))
146
+ return 'window-frame';
147
+ return 'wall-cut';
148
+ }
149
+ if (category === 'projection') {
150
+ const upper = ifcType.toUpperCase();
151
+ if (upper.includes('WALL'))
152
+ return 'wall-projection';
153
+ if (upper.includes('FURNISH') || upper.includes('FURNITURE'))
154
+ return 'furniture';
155
+ if (upper.includes('EQUIPMENT'))
156
+ return 'equipment';
157
+ return 'wall-projection';
158
+ }
159
+ if (category === 'annotation') {
160
+ return 'annotation';
161
+ }
162
+ return 'wall-projection';
163
+ }
164
+ /**
165
+ * Get the actual width in mm for a weight
166
+ */
167
+ getWidthMm(weight) {
168
+ return LINE_WEIGHT_CONFIG[weight].widthMm;
169
+ }
170
+ /**
171
+ * Get the actual width in pixels for a weight (at 96 DPI)
172
+ */
173
+ getWidthPx(weight) {
174
+ return LINE_WEIGHT_CONFIG[weight].widthPx;
175
+ }
176
+ }
177
+ /**
178
+ * Create a default line weight assigner
179
+ */
180
+ export function createLineWeightAssigner(customWeights) {
181
+ return new LineWeightAssigner(customWeights);
182
+ }
183
+ //# sourceMappingURL=line-weights.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line-weights.js","sourceRoot":"","sources":["../../src/styling/line-weights.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAqB/D;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA6D;IAC1F,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE;IACnC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE;IACvC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE;IACpC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE;CAC1C,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA+B;IAC1D,qBAAqB;IACrB,OAAO,EAAE,OAAO;IAChB,mBAAmB,EAAE,OAAO;IAC5B,SAAS,EAAE,OAAO;IAClB,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,OAAO;IACnB,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,OAAO;IAEhB,2BAA2B;IAC3B,QAAQ,EAAE,QAAQ;IAClB,cAAc,EAAE,QAAQ;IACxB,OAAO,EAAE,QAAQ;IACjB,aAAa,EAAE,QAAQ;IACvB,UAAU,EAAE,QAAQ;IACpB,cAAc,EAAE,QAAQ;IAExB,oBAAoB;IACpB,OAAO,EAAE,QAAQ;IACjB,SAAS,EAAE,QAAQ;IACnB,iBAAiB,EAAE,OAAO;IAE1B,yBAAyB;IACzB,WAAW,EAAE,OAAO;IACpB,oBAAoB,EAAE,OAAO;IAC7B,YAAY,EAAE,OAAO;IACrB,uBAAuB,EAAE,OAAO;IAChC,sBAAsB,EAAE,OAAO;IAC/B,eAAe,EAAE,OAAO;IACxB,cAAc,EAAE,OAAO;IAEvB,oBAAoB;IACpB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,UAAU;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,gBAAgB,GAAqC;IACzD,GAAG,EAAE,OAAO;IACZ,UAAU,EAAE,OAAO;IACnB,MAAM,EAAE,UAAU;IAClB,UAAU,EAAE,QAAQ;IACpB,MAAM,EAAE,OAAO;IACf,QAAQ,EAAE,OAAO;IACjB,UAAU,EAAE,UAAU;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,eAAe,GAAoC;IACvD,GAAG,EAAE,OAAO;IACZ,UAAU,EAAE,OAAO;IACnB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,OAAO;IACnB,MAAM,EAAE,OAAO;IACf,QAAQ,EAAE,OAAO;IACjB,UAAU,EAAE,OAAO;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,kBAAkB;IACrB,cAAc,CAA6B;IAEnD,YAAY,aAA0C;QACpD,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,gBAAgB,EAAE,GAAG,aAAa,EAAE,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,IAAiB;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAEhD,OAAO;YACL,GAAG,IAAI;YACP,UAAU,EAAE,UAAU;YACtB,SAAS;YACT,YAAY;SACb,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,KAAoB;QAC/B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,IAAiB;QACrC,sCAAsC;QACtC,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC;QACnE,CAAC;QAED,mCAAmC;QACnC,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC/D,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,yCAAyC;QACzC,OAAO,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC;IACpD,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,IAAiB;QACpC,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC/D,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,OAAO,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC;IACnD,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,IAAiB;QACvC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QAE/C,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO,UAAU,CAAC;YAC9C,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,OAAO,YAAY,CAAC;YAClD,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,OAAO,UAAU,CAAC;YACzE,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,OAAO,WAAW,CAAC;YAChD,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO,eAAe,CAAC;YACnD,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,OAAO,cAAc,CAAC;YACpD,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO,iBAAiB,CAAC;YACrD,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAAE,OAAO,WAAW,CAAC;YACjF,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAAE,OAAO,WAAW,CAAC;YACpD,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QAED,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC9B,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,MAAkB;QAC3B,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,MAAkB;QAC3B,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;IAC5C,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,aAA0C;IAE1C,OAAO,IAAI,kBAAkB,CAAC,aAAa,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * SVG Exporter - Export 2D drawings to SVG format
3
+ *
4
+ * Generates architectural-quality SVG output with:
5
+ * - Proper line weights and styles
6
+ * - Hatch patterns
7
+ * - Layer organization
8
+ * - Scale and paper size handling
9
+ */
10
+ import type { Drawing2D, DrawingPolygon, Bounds2D } from './types';
11
+ import { type PaperSize, type DrawingScale } from './styles';
12
+ export interface SVGExportOptions {
13
+ /** Paper size */
14
+ paperSize?: PaperSize;
15
+ /** Drawing scale (e.g., { name: '1:100', factor: 100 }) */
16
+ scale?: DrawingScale;
17
+ /** Padding around drawing in mm */
18
+ padding?: number;
19
+ /** Include hidden lines */
20
+ showHiddenLines?: boolean;
21
+ /** Include hatching */
22
+ showHatching?: boolean;
23
+ /** Include title block */
24
+ showTitleBlock?: boolean;
25
+ /** Drawing title */
26
+ title?: string;
27
+ /** Project name */
28
+ projectName?: string;
29
+ /** Background color (default: white) */
30
+ backgroundColor?: string;
31
+ /** Units for dimension display */
32
+ units?: 'mm' | 'm';
33
+ }
34
+ export declare class SVGExporter {
35
+ private hatchGenerator;
36
+ /**
37
+ * Export a 2D drawing to SVG string
38
+ */
39
+ export(drawing: Drawing2D, options?: SVGExportOptions): string;
40
+ /**
41
+ * Export just the cut polygons with hatching (for section fills)
42
+ */
43
+ exportPolygons(polygons: DrawingPolygon[], bounds: Bounds2D, options?: SVGExportOptions): string;
44
+ private computeTransform;
45
+ private transformPoint;
46
+ private createHeader;
47
+ private createDefs;
48
+ private createPolygonDefs;
49
+ private createHatchPatternDefs;
50
+ private createLineLayer;
51
+ private renderLine;
52
+ private createHatchingLayer;
53
+ private renderPolygon;
54
+ private polygonToPath;
55
+ private renderHatchLine;
56
+ private createTitleBlock;
57
+ private escapeXml;
58
+ }
59
+ /**
60
+ * Export a Drawing2D to SVG string
61
+ */
62
+ export declare function exportToSVG(drawing: Drawing2D, options?: SVGExportOptions): string;
63
+ //# sourceMappingURL=svg-exporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg-exporter.d.ts","sourceRoot":"","sources":["../src/svg-exporter.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,SAAS,EAET,cAAc,EAEd,QAAQ,EAET,MAAM,SAAS,CAAC;AAGjB,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,YAAY,EAElB,MAAM,UAAU,CAAC;AAOlB,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB;IACjB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,uBAAuB;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0BAA0B;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kCAAkC;IAClC,KAAK,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC;CACpB;AAaD,qBAAa,WAAW;IACtB,OAAO,CAAC,cAAc,CAAwB;IAE9C;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM;IAmElE;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM;IAsBpG,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,sBAAsB;IAwC9B,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,aAAa;IAwBrB,OAAO,CAAC,aAAa;IA8BrB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,SAAS;CAQlB;AAMD;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAGlF"}
@@ -0,0 +1,278 @@
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 { HatchGenerator } from './hatch-generator';
5
+ import { getLineStyle, getHatchPattern, PAPER_SIZES, COMMON_SCALES, } from './styles';
6
+ import { boundsSize, boundsCenter } from './math';
7
+ // ═══════════════════════════════════════════════════════════════════════════
8
+ // SVG EXPORTER CLASS
9
+ // ═══════════════════════════════════════════════════════════════════════════
10
+ export class SVGExporter {
11
+ hatchGenerator = new HatchGenerator();
12
+ /**
13
+ * Export a 2D drawing to SVG string
14
+ */
15
+ export(drawing, options = {}) {
16
+ const { paperSize = PAPER_SIZES.A3_LANDSCAPE, scale = COMMON_SCALES.find((s) => s.factor === drawing.config.scale) || COMMON_SCALES[5], padding = 20, showHiddenLines = true, showHatching = true, showTitleBlock = false, title = 'Section', projectName = '', backgroundColor = '#FFFFFF', } = options;
17
+ // Calculate transform from drawing coordinates to SVG coordinates
18
+ const transform = this.computeTransform(drawing.bounds, paperSize, scale, padding);
19
+ // Build SVG
20
+ let svg = this.createHeader(paperSize, backgroundColor);
21
+ svg += this.createDefs(drawing, scale.factor);
22
+ // Layer: Hatching (bottom)
23
+ if (showHatching && drawing.cutPolygons.length > 0) {
24
+ svg += this.createHatchingLayer(drawing.cutPolygons, transform, scale.factor);
25
+ }
26
+ // Layer: Hidden lines
27
+ if (showHiddenLines) {
28
+ const hiddenLines = drawing.lines.filter((l) => l.visibility === 'hidden');
29
+ if (hiddenLines.length > 0) {
30
+ svg += this.createLineLayer('hidden-lines', hiddenLines, transform, 'Hidden Lines');
31
+ }
32
+ }
33
+ // Layer: Projection lines
34
+ const projectionLines = drawing.lines.filter((l) => l.category === 'projection' && l.visibility !== 'hidden');
35
+ if (projectionLines.length > 0) {
36
+ svg += this.createLineLayer('projection-lines', projectionLines, transform, 'Projection');
37
+ }
38
+ // Layer: Silhouettes and creases
39
+ const featureLines = drawing.lines.filter((l) => (l.category === 'silhouette' || l.category === 'crease' || l.category === 'boundary') &&
40
+ l.visibility !== 'hidden');
41
+ if (featureLines.length > 0) {
42
+ svg += this.createLineLayer('feature-lines', featureLines, transform, 'Feature Edges');
43
+ }
44
+ // Layer: Cut lines (top)
45
+ const cutLines = drawing.lines.filter((l) => l.category === 'cut');
46
+ if (cutLines.length > 0) {
47
+ svg += this.createLineLayer('cut-lines', cutLines, transform, 'Cut Lines');
48
+ }
49
+ // Title block
50
+ if (showTitleBlock) {
51
+ svg += this.createTitleBlock(paperSize, title, projectName, scale);
52
+ }
53
+ svg += '</svg>';
54
+ return svg;
55
+ }
56
+ /**
57
+ * Export just the cut polygons with hatching (for section fills)
58
+ */
59
+ exportPolygons(polygons, bounds, options = {}) {
60
+ const { paperSize = PAPER_SIZES.A3_LANDSCAPE, scale = COMMON_SCALES[5], padding = 20, backgroundColor = '#FFFFFF', } = options;
61
+ const transform = this.computeTransform(bounds, paperSize, scale, padding);
62
+ let svg = this.createHeader(paperSize, backgroundColor);
63
+ svg += this.createPolygonDefs(scale.factor);
64
+ svg += this.createHatchingLayer(polygons, transform, scale.factor);
65
+ svg += '</svg>';
66
+ return svg;
67
+ }
68
+ // ═══════════════════════════════════════════════════════════════════════════
69
+ // PRIVATE METHODS
70
+ // ═══════════════════════════════════════════════════════════════════════════
71
+ computeTransform(bounds, paperSize, scale, padding) {
72
+ const size = boundsSize(bounds);
73
+ const center = boundsCenter(bounds);
74
+ // Available drawing area
75
+ const availableWidth = paperSize.width - padding * 2;
76
+ const availableHeight = paperSize.height - padding * 2;
77
+ // Scale: world units to mm on paper
78
+ const worldToMm = 1000 / scale.factor; // mm per world unit (assuming world is in meters)
79
+ // Center the drawing
80
+ const offsetX = paperSize.width / 2 - center.x * worldToMm;
81
+ const offsetY = paperSize.height / 2 + center.y * worldToMm; // Flip Y
82
+ return {
83
+ scale: worldToMm,
84
+ offsetX,
85
+ offsetY,
86
+ flipY: true,
87
+ };
88
+ }
89
+ transformPoint(point, transform) {
90
+ return {
91
+ x: point.x * transform.scale + transform.offsetX,
92
+ y: transform.flipY
93
+ ? -point.y * transform.scale + transform.offsetY
94
+ : point.y * transform.scale + transform.offsetY,
95
+ };
96
+ }
97
+ createHeader(paperSize, backgroundColor) {
98
+ return `<?xml version="1.0" encoding="UTF-8"?>
99
+ <svg xmlns="http://www.w3.org/2000/svg"
100
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
101
+ width="${paperSize.width}mm"
102
+ height="${paperSize.height}mm"
103
+ viewBox="0 0 ${paperSize.width} ${paperSize.height}">
104
+ <rect width="100%" height="100%" fill="${backgroundColor}"/>
105
+ `;
106
+ }
107
+ createDefs(drawing, scaleFactor) {
108
+ let defs = ' <defs>\n';
109
+ defs += this.createHatchPatternDefs(scaleFactor);
110
+ defs += ' </defs>\n';
111
+ return defs;
112
+ }
113
+ createPolygonDefs(scaleFactor) {
114
+ let defs = ' <defs>\n';
115
+ defs += this.createHatchPatternDefs(scaleFactor);
116
+ defs += ' </defs>\n';
117
+ return defs;
118
+ }
119
+ createHatchPatternDefs(scaleFactor) {
120
+ const spacing = 3 * (scaleFactor / 100); // Adjust for scale
121
+ let defs = '';
122
+ // Diagonal hatch
123
+ defs += ` <pattern id="hatch-diagonal" patternUnits="userSpaceOnUse"
124
+ width="${spacing}" height="${spacing}" patternTransform="rotate(45)">
125
+ <line x1="0" y1="0" x2="0" y2="${spacing}" stroke="#000" stroke-width="0.15"/>
126
+ </pattern>\n`;
127
+ // Cross-hatch
128
+ defs += ` <pattern id="hatch-cross" patternUnits="userSpaceOnUse"
129
+ width="${spacing}" height="${spacing}">
130
+ <line x1="0" y1="0" x2="${spacing}" y2="${spacing}" stroke="#000" stroke-width="0.1"/>
131
+ <line x1="${spacing}" y1="0" x2="0" y2="${spacing}" stroke="#000" stroke-width="0.1"/>
132
+ </pattern>\n`;
133
+ // Horizontal lines
134
+ defs += ` <pattern id="hatch-horizontal" patternUnits="userSpaceOnUse"
135
+ width="${spacing}" height="${spacing}">
136
+ <line x1="0" y1="${spacing / 2}" x2="${spacing}" y2="${spacing / 2}" stroke="#000" stroke-width="0.1"/>
137
+ </pattern>\n`;
138
+ // Concrete dots
139
+ defs += ` <pattern id="hatch-concrete" patternUnits="userSpaceOnUse"
140
+ width="${spacing * 2}" height="${spacing * 2}">
141
+ <circle cx="${spacing * 0.3}" cy="${spacing * 0.3}" r="0.3" fill="#666"/>
142
+ <circle cx="${spacing * 1.3}" cy="${spacing * 1.3}" r="0.3" fill="#666"/>
143
+ <circle cx="${spacing * 0.8}" cy="${spacing * 1.6}" r="0.2" fill="#888"/>
144
+ </pattern>\n`;
145
+ // Steel (dense diagonal)
146
+ defs += ` <pattern id="hatch-steel" patternUnits="userSpaceOnUse"
147
+ width="${spacing * 0.7}" height="${spacing * 0.7}" patternTransform="rotate(45)">
148
+ <line x1="0" y1="0" x2="0" y2="${spacing * 0.7}" stroke="#333" stroke-width="0.2"/>
149
+ </pattern>\n`;
150
+ return defs;
151
+ }
152
+ createLineLayer(id, lines, transform, label) {
153
+ let layer = ` <g id="${id}" inkscape:label="${label}" inkscape:groupmode="layer">\n`;
154
+ for (const line of lines) {
155
+ layer += this.renderLine(line, transform);
156
+ }
157
+ layer += ' </g>\n';
158
+ return layer;
159
+ }
160
+ renderLine(line, transform) {
161
+ const style = getLineStyle(line.category, line.ifcType);
162
+ const p0 = this.transformPoint(line.line.start, transform);
163
+ const p1 = this.transformPoint(line.line.end, transform);
164
+ const dashArray = style.dashPattern.length > 0 ? ` stroke-dasharray="${style.dashPattern.join(' ')}"` : '';
165
+ return ` <line x1="${p0.x.toFixed(3)}" y1="${p0.y.toFixed(3)}" x2="${p1.x.toFixed(3)}" y2="${p1.y.toFixed(3)}"
166
+ stroke="${style.color}" stroke-width="${style.weight}"
167
+ stroke-linecap="${style.lineCap}"${dashArray}
168
+ data-entity-id="${line.entityId}" data-ifc-type="${line.ifcType}"/>\n`;
169
+ }
170
+ createHatchingLayer(polygons, transform, scaleFactor) {
171
+ let layer = ' <g id="hatching" inkscape:label="Hatching" inkscape:groupmode="layer">\n';
172
+ for (const polygon of polygons) {
173
+ const pattern = getHatchPattern(polygon.ifcType);
174
+ if (pattern.type === 'none')
175
+ continue;
176
+ // Render polygon with fill
177
+ layer += this.renderPolygon(polygon, transform, pattern);
178
+ // Generate and render hatch lines for non-solid fills
179
+ if (pattern.type !== 'solid' && pattern.type !== 'glass') {
180
+ const hatchResult = this.hatchGenerator.generateHatch(polygon, scaleFactor);
181
+ for (const hatchLine of hatchResult.lines) {
182
+ layer += this.renderHatchLine(hatchLine, transform, pattern);
183
+ }
184
+ }
185
+ }
186
+ layer += ' </g>\n';
187
+ return layer;
188
+ }
189
+ renderPolygon(polygon, transform, pattern) {
190
+ const pathData = this.polygonToPath(polygon.polygon, transform);
191
+ let fill;
192
+ if (pattern.type === 'solid') {
193
+ fill = pattern.fillColor || '#CCCCCC';
194
+ }
195
+ else if (pattern.type === 'glass') {
196
+ fill = pattern.fillColor || 'rgba(200, 230, 255, 0.3)';
197
+ }
198
+ else if (pattern.type === 'none') {
199
+ fill = 'none';
200
+ }
201
+ else {
202
+ // Use pattern fill
203
+ fill = `url(#hatch-${pattern.type})`;
204
+ }
205
+ return ` <path d="${pathData}" fill="${fill}"
206
+ stroke="${pattern.strokeColor}" stroke-width="${pattern.lineWeight}"
207
+ data-entity-id="${polygon.entityId}" data-ifc-type="${polygon.ifcType}"/>\n`;
208
+ }
209
+ polygonToPath(polygon, transform) {
210
+ let path = '';
211
+ // Outer boundary
212
+ if (polygon.outer.length > 0) {
213
+ const first = this.transformPoint(polygon.outer[0], transform);
214
+ path += `M ${first.x.toFixed(3)} ${first.y.toFixed(3)}`;
215
+ for (let i = 1; i < polygon.outer.length; i++) {
216
+ const p = this.transformPoint(polygon.outer[i], transform);
217
+ path += ` L ${p.x.toFixed(3)} ${p.y.toFixed(3)}`;
218
+ }
219
+ path += ' Z';
220
+ }
221
+ // Holes
222
+ for (const hole of polygon.holes) {
223
+ if (hole.length > 0) {
224
+ const first = this.transformPoint(hole[0], transform);
225
+ path += ` M ${first.x.toFixed(3)} ${first.y.toFixed(3)}`;
226
+ for (let i = 1; i < hole.length; i++) {
227
+ const p = this.transformPoint(hole[i], transform);
228
+ path += ` L ${p.x.toFixed(3)} ${p.y.toFixed(3)}`;
229
+ }
230
+ path += ' Z';
231
+ }
232
+ }
233
+ return path;
234
+ }
235
+ renderHatchLine(hatchLine, transform, pattern) {
236
+ const p0 = this.transformPoint(hatchLine.line.start, transform);
237
+ const p1 = this.transformPoint(hatchLine.line.end, transform);
238
+ return ` <line x1="${p0.x.toFixed(3)}" y1="${p0.y.toFixed(3)}" x2="${p1.x.toFixed(3)}" y2="${p1.y.toFixed(3)}"
239
+ stroke="${pattern.strokeColor}" stroke-width="${pattern.lineWeight}" stroke-linecap="butt"/>\n`;
240
+ }
241
+ createTitleBlock(paperSize, title, projectName, scale) {
242
+ const blockWidth = 180;
243
+ const blockHeight = 50;
244
+ const x = paperSize.width - blockWidth - 10;
245
+ const y = paperSize.height - blockHeight - 10;
246
+ return ` <g id="title-block">
247
+ <rect x="${x}" y="${y}" width="${blockWidth}" height="${blockHeight}"
248
+ fill="white" stroke="black" stroke-width="0.5"/>
249
+ <line x1="${x}" y1="${y + 20}" x2="${x + blockWidth}" y2="${y + 20}" stroke="black" stroke-width="0.3"/>
250
+ <line x1="${x}" y1="${y + 35}" x2="${x + blockWidth}" y2="${y + 35}" stroke="black" stroke-width="0.3"/>
251
+ <line x1="${x + 100}" y1="${y + 20}" x2="${x + 100}" y2="${y + blockHeight}" stroke="black" stroke-width="0.3"/>
252
+ <text x="${x + 5}" y="${y + 14}" font-family="Arial" font-size="10" font-weight="bold">${this.escapeXml(title)}</text>
253
+ <text x="${x + 5}" y="${y + 30}" font-family="Arial" font-size="8">${this.escapeXml(projectName)}</text>
254
+ <text x="${x + 5}" y="${y + 45}" font-family="Arial" font-size="8">Scale: ${scale.name}</text>
255
+ <text x="${x + 105}" y="${y + 30}" font-family="Arial" font-size="7">Date:</text>
256
+ <text x="${x + 105}" y="${y + 45}" font-family="Arial" font-size="7">${new Date().toLocaleDateString()}</text>
257
+ </g>\n`;
258
+ }
259
+ escapeXml(str) {
260
+ return str
261
+ .replace(/&/g, '&amp;')
262
+ .replace(/</g, '&lt;')
263
+ .replace(/>/g, '&gt;')
264
+ .replace(/"/g, '&quot;')
265
+ .replace(/'/g, '&apos;');
266
+ }
267
+ }
268
+ // ═══════════════════════════════════════════════════════════════════════════
269
+ // CONVENIENCE FUNCTION
270
+ // ═══════════════════════════════════════════════════════════════════════════
271
+ /**
272
+ * Export a Drawing2D to SVG string
273
+ */
274
+ export function exportToSVG(drawing, options) {
275
+ const exporter = new SVGExporter();
276
+ return exporter.export(drawing, options);
277
+ }
278
+ //# sourceMappingURL=svg-exporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg-exporter.js","sourceRoot":"","sources":["../src/svg-exporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Door symbol generator for architectural floor plans
3
+ *
4
+ * Generates standard door symbols including:
5
+ * - Swing arc (quarter circle showing door travel)
6
+ * - Door leaf line (panel in closed position)
7
+ * - Support for single/double swing, sliding, folding doors
8
+ */
9
+ import type { ArchitecturalSymbol, OpeningInfo, Point2D, Line2D, DoorOperationType, Bounds2D } from '../types';
10
+ /**
11
+ * Result of door symbol generation
12
+ */
13
+ export interface DoorSymbolResult {
14
+ /** The architectural symbol */
15
+ symbol: ArchitecturalSymbol;
16
+ /** Lines to draw (arc segments, leaf lines) */
17
+ lines: Line2D[];
18
+ /** Arc path for SVG (if applicable) */
19
+ arcPath?: string;
20
+ }
21
+ /**
22
+ * Configuration for door symbol generation
23
+ */
24
+ export interface DoorSymbolConfig {
25
+ /** Number of segments for arc approximation */
26
+ arcSegments: number;
27
+ /** Swing angle in degrees (default 90) */
28
+ swingAngle: number;
29
+ /** Show door leaf line */
30
+ showLeaf: boolean;
31
+ /** Show threshold line */
32
+ showThreshold: boolean;
33
+ }
34
+ /**
35
+ * Generates door symbols for 2D floor plans
36
+ */
37
+ export declare class DoorSymbolGenerator {
38
+ private config;
39
+ constructor(config?: Partial<DoorSymbolConfig>);
40
+ /**
41
+ * Generate door symbol from opening info
42
+ */
43
+ generateFromOpening(opening: OpeningInfo, bounds2D: Bounds2D, wallDirection: Point2D): DoorSymbolResult;
44
+ /**
45
+ * Generate a door symbol at a specific position
46
+ */
47
+ generateSymbol(center: Point2D, width: number, operation: DoorOperationType, wallDirection: Point2D, swingDirection: Point2D): DoorSymbolResult;
48
+ /**
49
+ * Generate single swing door symbol
50
+ */
51
+ private generateSwingDoor;
52
+ /**
53
+ * Generate double door symbol (two leaves meeting in middle)
54
+ */
55
+ private generateDoubleDoor;
56
+ /**
57
+ * Generate sliding door symbol
58
+ */
59
+ private generateSlidingDoor;
60
+ /**
61
+ * Generate double sliding door symbol
62
+ */
63
+ private generateDoubleSlidingDoor;
64
+ /**
65
+ * Generate folding door symbol
66
+ */
67
+ private generateFoldingDoor;
68
+ /**
69
+ * Generate revolving door symbol
70
+ */
71
+ private generateRevolvingDoor;
72
+ /**
73
+ * Generate arc as line segments
74
+ */
75
+ private generateArc;
76
+ /**
77
+ * Generate SVG arc path string
78
+ */
79
+ private generateArcSVGPath;
80
+ private getPerpendicularDirection;
81
+ }
82
+ //# sourceMappingURL=door-symbol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"door-symbol.d.ts","sourceRoot":"","sources":["../../src/symbols/door-symbol.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,mBAAmB,EAGnB,WAAW,EACX,OAAO,EACP,MAAM,EACN,iBAAiB,EACjB,QAAQ,EACT,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,+CAA+C;IAC/C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,0BAA0B;IAC1B,aAAa,EAAE,OAAO,CAAC;CACxB;AASD;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM;IAIlD;;OAEG;IACH,mBAAmB,CACjB,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,OAAO,GACrB,gBAAgB;IAgBnB;;OAEG;IACH,cAAc,CACZ,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,iBAAiB,EAC5B,aAAa,EAAE,OAAO,EACtB,cAAc,EAAE,OAAO,GACtB,gBAAgB;IA+BnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA+EzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoE1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmD3B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA2CjC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqD3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgD7B;;OAEG;IACH,OAAO,CAAC,WAAW;IAmCnB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,yBAAyB;CAGlC"}