@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,438 @@
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
+ // CONSTANTS
6
+ // ═══════════════════════════════════════════════════════════════════════════
7
+ /** Line weight presets in mm */
8
+ const LINE_WEIGHT_VALUES = {
9
+ heavy: 0.5,
10
+ medium: 0.35,
11
+ light: 0.25,
12
+ hairline: 0.18,
13
+ };
14
+ /** Dash pattern presets [dash, gap, ...] in mm */
15
+ const DASH_PATTERNS = {
16
+ solid: [],
17
+ dashed: [2, 1],
18
+ dotted: [0.5, 0.5],
19
+ dashdot: [3, 1, 0.5, 1],
20
+ center: [6, 1, 1, 1],
21
+ };
22
+ /** Default resolved style */
23
+ const DEFAULT_STYLE = {
24
+ fillColor: '#CCCCCC',
25
+ strokeColor: '#000000',
26
+ backgroundColor: '#FFFFFF',
27
+ lineWeight: 0.25,
28
+ lineCap: 'round',
29
+ lineJoin: 'round',
30
+ dashPattern: [],
31
+ hatchPattern: 'none',
32
+ hatchSpacing: 3,
33
+ hatchAngle: 45,
34
+ hatchSecondaryAngle: -45,
35
+ hatchColor: '#000000',
36
+ hatchLineWeight: 0.13,
37
+ visible: true,
38
+ opacity: 1,
39
+ drawOrder: 0,
40
+ };
41
+ // ═══════════════════════════════════════════════════════════════════════════
42
+ // IFC TYPE HIERARCHY (for subtype matching)
43
+ // ═══════════════════════════════════════════════════════════════════════════
44
+ const IFC_TYPE_HIERARCHY = {
45
+ IfcWall: ['IfcWallStandardCase', 'IfcWallElementedCase'],
46
+ IfcSlab: ['IfcSlabStandardCase', 'IfcSlabElementedCase'],
47
+ IfcBeam: ['IfcBeamStandardCase'],
48
+ IfcColumn: ['IfcColumnStandardCase'],
49
+ IfcDoor: ['IfcDoorStandardCase'],
50
+ IfcWindow: ['IfcWindowStandardCase'],
51
+ IfcMember: ['IfcMemberStandardCase'],
52
+ IfcPlate: ['IfcPlateStandardCase'],
53
+ IfcStair: ['IfcStairFlight'],
54
+ IfcRamp: ['IfcRampFlight'],
55
+ IfcBuildingElement: [
56
+ 'IfcWall', 'IfcSlab', 'IfcBeam', 'IfcColumn', 'IfcDoor', 'IfcWindow',
57
+ 'IfcStair', 'IfcRamp', 'IfcRoof', 'IfcRailing', 'IfcCovering',
58
+ ],
59
+ IfcDistributionElement: [
60
+ 'IfcDistributionFlowElement', 'IfcDistributionControlElement',
61
+ ],
62
+ IfcFlowElement: [
63
+ 'IfcFlowTerminal', 'IfcFlowSegment', 'IfcFlowFitting', 'IfcFlowController',
64
+ ],
65
+ };
66
+ function getIfcSubtypes(ifcType) {
67
+ const subtypes = IFC_TYPE_HIERARCHY[ifcType] || [];
68
+ const allSubtypes = [...subtypes];
69
+ // Recursively get subtypes of subtypes
70
+ for (const subtype of subtypes) {
71
+ allSubtypes.push(...getIfcSubtypes(subtype));
72
+ }
73
+ return allSubtypes;
74
+ }
75
+ // ═══════════════════════════════════════════════════════════════════════════
76
+ // CRITERION EVALUATION
77
+ // ═══════════════════════════════════════════════════════════════════════════
78
+ /**
79
+ * Evaluate a comparison operator
80
+ */
81
+ function evaluateOperator(actual, operator, expected) {
82
+ switch (operator) {
83
+ case 'equals':
84
+ return actual === expected;
85
+ case 'notEquals':
86
+ return actual !== expected;
87
+ case 'contains':
88
+ if (typeof actual === 'string' && typeof expected === 'string') {
89
+ return actual.toLowerCase().includes(expected.toLowerCase());
90
+ }
91
+ return false;
92
+ case 'notContains':
93
+ if (typeof actual === 'string' && typeof expected === 'string') {
94
+ return !actual.toLowerCase().includes(expected.toLowerCase());
95
+ }
96
+ return true;
97
+ case 'startsWith':
98
+ if (typeof actual === 'string' && typeof expected === 'string') {
99
+ return actual.toLowerCase().startsWith(expected.toLowerCase());
100
+ }
101
+ return false;
102
+ case 'endsWith':
103
+ if (typeof actual === 'string' && typeof expected === 'string') {
104
+ return actual.toLowerCase().endsWith(expected.toLowerCase());
105
+ }
106
+ return false;
107
+ case 'greaterThan':
108
+ if (typeof actual === 'number' && typeof expected === 'number') {
109
+ return actual > expected;
110
+ }
111
+ return false;
112
+ case 'lessThan':
113
+ if (typeof actual === 'number' && typeof expected === 'number') {
114
+ return actual < expected;
115
+ }
116
+ return false;
117
+ case 'greaterOrEqual':
118
+ if (typeof actual === 'number' && typeof expected === 'number') {
119
+ return actual >= expected;
120
+ }
121
+ return false;
122
+ case 'lessOrEqual':
123
+ if (typeof actual === 'number' && typeof expected === 'number') {
124
+ return actual <= expected;
125
+ }
126
+ return false;
127
+ case 'exists':
128
+ return actual !== undefined && actual !== null;
129
+ case 'notExists':
130
+ return actual === undefined || actual === null;
131
+ case 'in':
132
+ if (Array.isArray(expected)) {
133
+ return expected.includes(actual);
134
+ }
135
+ return false;
136
+ case 'notIn':
137
+ if (Array.isArray(expected)) {
138
+ return !expected.includes(actual);
139
+ }
140
+ return true;
141
+ default:
142
+ return false;
143
+ }
144
+ }
145
+ /**
146
+ * Evaluate a single criterion against element data
147
+ */
148
+ function evaluateCriterion(criterion, element) {
149
+ switch (criterion.type) {
150
+ case 'all':
151
+ return true;
152
+ case 'ifcType': {
153
+ if (!criterion.ifcTypes || criterion.ifcTypes.length === 0) {
154
+ return true;
155
+ }
156
+ const typesToMatch = criterion.includeSubtypes
157
+ ? criterion.ifcTypes.flatMap((t) => [t, ...getIfcSubtypes(t)])
158
+ : criterion.ifcTypes;
159
+ return typesToMatch.some((t) => t.toLowerCase() === element.ifcType.toLowerCase());
160
+ }
161
+ case 'property': {
162
+ if (!criterion.propertyName)
163
+ return false;
164
+ const operator = criterion.operator || 'equals';
165
+ let actualValue;
166
+ if (criterion.propertySet && element.properties) {
167
+ const pset = element.properties[criterion.propertySet];
168
+ actualValue = pset?.[criterion.propertyName];
169
+ }
170
+ else if (element.properties) {
171
+ // Search all property sets
172
+ for (const pset of Object.values(element.properties)) {
173
+ if (criterion.propertyName in pset) {
174
+ actualValue = pset[criterion.propertyName];
175
+ break;
176
+ }
177
+ }
178
+ }
179
+ return evaluateOperator(actualValue, operator, criterion.value);
180
+ }
181
+ case 'propertySet': {
182
+ if (!criterion.propertySet || !element.properties) {
183
+ return criterion.operator === 'notExists';
184
+ }
185
+ const exists = criterion.propertySet in element.properties;
186
+ const operator = criterion.operator || 'exists';
187
+ if (operator === 'exists')
188
+ return exists;
189
+ if (operator === 'notExists')
190
+ return !exists;
191
+ return exists;
192
+ }
193
+ case 'material': {
194
+ if (!criterion.materialNames || !element.materials) {
195
+ return false;
196
+ }
197
+ return criterion.materialNames.some((pattern) => element.materials.some((m) => m.toLowerCase().includes(pattern.toLowerCase())));
198
+ }
199
+ case 'layer': {
200
+ if (!criterion.layerNames || !element.layers) {
201
+ return false;
202
+ }
203
+ return criterion.layerNames.some((pattern) => element.layers.some((l) => l.toLowerCase().includes(pattern.toLowerCase())));
204
+ }
205
+ case 'expressId': {
206
+ if (!criterion.expressIds)
207
+ return false;
208
+ return criterion.expressIds.includes(element.expressId);
209
+ }
210
+ case 'modelId': {
211
+ if (!criterion.modelIds || !element.modelId)
212
+ return false;
213
+ return criterion.modelIds.includes(element.modelId);
214
+ }
215
+ default:
216
+ return false;
217
+ }
218
+ }
219
+ /**
220
+ * Check if an object is compound criteria
221
+ */
222
+ function isCompoundCriteria(criteria) {
223
+ return 'logic' in criteria && 'conditions' in criteria;
224
+ }
225
+ /**
226
+ * Evaluate criteria (simple or compound) against element data
227
+ */
228
+ function evaluateCriteria(criteria, element) {
229
+ if (isCompoundCriteria(criteria)) {
230
+ const results = criteria.conditions.map((c) => evaluateCriteria(c, element));
231
+ if (criteria.logic === 'and') {
232
+ return results.every(Boolean);
233
+ }
234
+ else {
235
+ return results.some(Boolean);
236
+ }
237
+ }
238
+ return evaluateCriterion(criteria, element);
239
+ }
240
+ // ═══════════════════════════════════════════════════════════════════════════
241
+ // STYLE RESOLUTION
242
+ // ═══════════════════════════════════════════════════════════════════════════
243
+ /**
244
+ * Resolve line weight to mm value
245
+ */
246
+ function resolveLineWeight(weight) {
247
+ if (weight === undefined)
248
+ return DEFAULT_STYLE.lineWeight;
249
+ if (typeof weight === 'number')
250
+ return weight;
251
+ const value = LINE_WEIGHT_VALUES[weight];
252
+ return value !== undefined ? value : DEFAULT_STYLE.lineWeight;
253
+ }
254
+ /**
255
+ * Resolve dash pattern to array
256
+ */
257
+ function resolveDashPattern(style) {
258
+ if (style === undefined)
259
+ return DEFAULT_STYLE.dashPattern;
260
+ if (typeof style === 'string') {
261
+ return DASH_PATTERNS[style] ?? DEFAULT_STYLE.dashPattern;
262
+ }
263
+ if (style.custom) {
264
+ return style.custom;
265
+ }
266
+ if (style.preset) {
267
+ return DASH_PATTERNS[style.preset] ?? DEFAULT_STYLE.dashPattern;
268
+ }
269
+ return DEFAULT_STYLE.dashPattern;
270
+ }
271
+ /**
272
+ * Merge a partial style into a resolved style
273
+ */
274
+ function mergeStyle(base, override) {
275
+ return {
276
+ fillColor: override.fillColor ?? base.fillColor,
277
+ strokeColor: override.strokeColor ?? base.strokeColor,
278
+ backgroundColor: override.backgroundColor ?? base.backgroundColor,
279
+ lineWeight: override.lineWeight !== undefined ? resolveLineWeight(override.lineWeight) : base.lineWeight,
280
+ lineCap: override.lineCap ?? base.lineCap,
281
+ lineJoin: override.lineJoin ?? base.lineJoin,
282
+ dashPattern: override.lineStyle ? resolveDashPattern(override.lineStyle) : base.dashPattern,
283
+ hatchPattern: override.hatchPattern ?? base.hatchPattern,
284
+ hatchSpacing: override.hatchSpacing ?? base.hatchSpacing,
285
+ hatchAngle: override.hatchAngle ?? base.hatchAngle,
286
+ hatchSecondaryAngle: override.hatchSecondaryAngle ?? base.hatchSecondaryAngle,
287
+ hatchColor: override.hatchColor ?? base.hatchColor,
288
+ hatchLineWeight: override.hatchLineWeight ?? base.hatchLineWeight,
289
+ visible: override.visible ?? base.visible,
290
+ opacity: override.opacity ?? base.opacity,
291
+ drawOrder: override.drawOrder ?? base.drawOrder,
292
+ };
293
+ }
294
+ // ═══════════════════════════════════════════════════════════════════════════
295
+ // RULE ENGINE
296
+ // ═══════════════════════════════════════════════════════════════════════════
297
+ export class GraphicOverrideEngine {
298
+ rules = [];
299
+ constructor(rules) {
300
+ if (rules) {
301
+ this.setRules(rules);
302
+ }
303
+ }
304
+ /**
305
+ * Set the active rules
306
+ */
307
+ setRules(rules) {
308
+ // Sort by priority (ascending - lower priority applied first)
309
+ this.rules = [...rules].sort((a, b) => a.priority - b.priority);
310
+ }
311
+ /**
312
+ * Add a rule
313
+ */
314
+ addRule(rule) {
315
+ this.rules.push(rule);
316
+ this.rules.sort((a, b) => a.priority - b.priority);
317
+ }
318
+ /**
319
+ * Remove a rule by ID
320
+ */
321
+ removeRule(ruleId) {
322
+ this.rules = this.rules.filter((r) => r.id !== ruleId);
323
+ }
324
+ /**
325
+ * Get all active rules
326
+ */
327
+ getRules() {
328
+ return [...this.rules];
329
+ }
330
+ /**
331
+ * Apply overrides to an element and get resolved style
332
+ */
333
+ applyOverrides(element, baseStyle) {
334
+ // Start with default style merged with any base style
335
+ let resolvedStyle = baseStyle
336
+ ? mergeStyle(DEFAULT_STYLE, baseStyle)
337
+ : { ...DEFAULT_STYLE };
338
+ const matchedRules = [];
339
+ // Apply rules in priority order
340
+ for (const rule of this.rules) {
341
+ if (!rule.enabled)
342
+ continue;
343
+ if (evaluateCriteria(rule.criteria, element)) {
344
+ resolvedStyle = mergeStyle(resolvedStyle, rule.style);
345
+ matchedRules.push(rule);
346
+ }
347
+ }
348
+ return {
349
+ element,
350
+ style: resolvedStyle,
351
+ matchedRules,
352
+ };
353
+ }
354
+ /**
355
+ * Apply overrides to multiple elements
356
+ */
357
+ applyOverridesToMany(elements, baseStyles) {
358
+ const results = new Map();
359
+ for (const element of elements) {
360
+ const baseStyle = baseStyles?.get(element.expressId);
361
+ results.set(element.expressId, this.applyOverrides(element, baseStyle));
362
+ }
363
+ return results;
364
+ }
365
+ /**
366
+ * Check which rules match an element (for debugging/preview)
367
+ */
368
+ getMatchingRules(element) {
369
+ return this.rules.filter((rule) => rule.enabled && evaluateCriteria(rule.criteria, element));
370
+ }
371
+ /**
372
+ * Validate a rule's criteria syntax
373
+ */
374
+ static validateCriteria(criteria) {
375
+ const errors = [];
376
+ if (isCompoundCriteria(criteria)) {
377
+ if (!criteria.conditions || criteria.conditions.length === 0) {
378
+ errors.push('Compound criteria must have at least one condition');
379
+ }
380
+ for (const condition of criteria.conditions) {
381
+ errors.push(...GraphicOverrideEngine.validateCriteria(condition));
382
+ }
383
+ }
384
+ else {
385
+ if (!criteria.type) {
386
+ errors.push('Criterion must have a type');
387
+ }
388
+ if (criteria.type === 'property' && !criteria.propertyName) {
389
+ errors.push('Property criterion requires propertyName');
390
+ }
391
+ if (criteria.type === 'ifcType' && (!criteria.ifcTypes || criteria.ifcTypes.length === 0)) {
392
+ errors.push('IFC type criterion requires at least one type');
393
+ }
394
+ }
395
+ return errors;
396
+ }
397
+ }
398
+ /**
399
+ * Create a default override engine
400
+ */
401
+ export function createOverrideEngine(rules) {
402
+ return new GraphicOverrideEngine(rules);
403
+ }
404
+ /**
405
+ * Helper to create a simple IFC type criterion
406
+ */
407
+ export function ifcTypeCriterion(types, includeSubtypes = true) {
408
+ return {
409
+ type: 'ifcType',
410
+ ifcTypes: types,
411
+ includeSubtypes,
412
+ };
413
+ }
414
+ /**
415
+ * Helper to create a property criterion
416
+ */
417
+ export function propertyCriterion(propertyName, operator, value, propertySet) {
418
+ return {
419
+ type: 'property',
420
+ propertyName,
421
+ propertySet,
422
+ operator,
423
+ value: value,
424
+ };
425
+ }
426
+ /**
427
+ * Helper to combine criteria with AND
428
+ */
429
+ export function andCriteria(...conditions) {
430
+ return { logic: 'and', conditions };
431
+ }
432
+ /**
433
+ * Helper to combine criteria with OR
434
+ */
435
+ export function orCriteria(...conditions) {
436
+ return { logic: 'or', conditions };
437
+ }
438
+ //# sourceMappingURL=rule-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-engine.js","sourceRoot":"","sources":["../../src/graphic-overrides/rule-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Graphic Overrides Types
3
+ *
4
+ * Defines the data model for parametric graphic overrides in 2D drawings.
5
+ * Allows users to customize colors, line weights, hatches based on
6
+ * IFC types, properties, or custom criteria.
7
+ */
8
+ import type { HatchPatternType } from '../styles';
9
+ export type LineWeightPreset = 'heavy' | 'medium' | 'light' | 'hairline';
10
+ export type LineStylePreset = 'solid' | 'dashed' | 'dotted' | 'dashdot' | 'center';
11
+ export interface DashPattern {
12
+ /** Pattern name for presets */
13
+ preset?: LineStylePreset;
14
+ /** Custom dash array [dash, gap, ...] in mm */
15
+ custom?: number[];
16
+ }
17
+ export type CriteriaOperator = 'equals' | 'notEquals' | 'contains' | 'notContains' | 'startsWith' | 'endsWith' | 'greaterThan' | 'lessThan' | 'greaterOrEqual' | 'lessOrEqual' | 'exists' | 'notExists' | 'in' | 'notIn';
18
+ export type CriteriaType = 'ifcType' | 'property' | 'propertySet' | 'material' | 'layer' | 'expressId' | 'modelId' | 'all';
19
+ /**
20
+ * Single criterion for matching elements
21
+ */
22
+ export interface OverrideCriterion {
23
+ /** Type of criterion */
24
+ type: CriteriaType;
25
+ /** IFC types to match (for type='ifcType') */
26
+ ifcTypes?: string[];
27
+ /** Include subtypes (e.g., IfcWall includes IfcWallStandardCase) */
28
+ includeSubtypes?: boolean;
29
+ /** Property set name (for type='property' or 'propertySet') */
30
+ propertySet?: string;
31
+ /** Property name (for type='property') */
32
+ propertyName?: string;
33
+ /** Comparison operator */
34
+ operator?: CriteriaOperator;
35
+ /** Value to compare against */
36
+ value?: string | number | boolean | string[] | number[];
37
+ /** Material name patterns (for type='material') */
38
+ materialNames?: string[];
39
+ /** Layer/presentation layer names (for type='layer') */
40
+ layerNames?: string[];
41
+ /** Express IDs to match (for type='expressId') */
42
+ expressIds?: number[];
43
+ /** Model IDs to match (for type='modelId') */
44
+ modelIds?: string[];
45
+ }
46
+ /**
47
+ * Compound criteria with logical operators
48
+ */
49
+ export interface OverrideCriteria {
50
+ /** Logical operator for combining conditions */
51
+ logic: 'and' | 'or';
52
+ /** List of conditions */
53
+ conditions: (OverrideCriterion | OverrideCriteria)[];
54
+ }
55
+ /**
56
+ * Complete graphic style that can be applied to elements
57
+ */
58
+ export interface GraphicStyle {
59
+ /** Fill color for cut polygons (hex with optional alpha: #RRGGBB or #RRGGBBAA) */
60
+ fillColor?: string;
61
+ /** Stroke/line color (hex) */
62
+ strokeColor?: string;
63
+ /** Background color for patterns */
64
+ backgroundColor?: string;
65
+ /** Line weight (preset name or custom mm value) */
66
+ lineWeight?: LineWeightPreset | number;
67
+ /** Line style (dash pattern) */
68
+ lineStyle?: LineStylePreset | DashPattern;
69
+ /** Line cap style */
70
+ lineCap?: 'butt' | 'round' | 'square';
71
+ /** Line join style */
72
+ lineJoin?: 'miter' | 'round' | 'bevel';
73
+ /** Hatch pattern type */
74
+ hatchPattern?: HatchPatternType;
75
+ /** Hatch line spacing in mm */
76
+ hatchSpacing?: number;
77
+ /** Hatch angle in degrees */
78
+ hatchAngle?: number;
79
+ /** Secondary hatch angle for cross-hatch */
80
+ hatchSecondaryAngle?: number;
81
+ /** Hatch line color */
82
+ hatchColor?: string;
83
+ /** Hatch line weight in mm */
84
+ hatchLineWeight?: number;
85
+ /** Whether element is visible */
86
+ visible?: boolean;
87
+ /** Opacity (0-1) */
88
+ opacity?: number;
89
+ /** Z-order for overlapping elements (higher = on top) */
90
+ drawOrder?: number;
91
+ }
92
+ /**
93
+ * Complete override rule combining criteria and style
94
+ */
95
+ export interface GraphicOverrideRule {
96
+ /** Unique identifier */
97
+ id: string;
98
+ /** Display name */
99
+ name: string;
100
+ /** Optional description */
101
+ description?: string;
102
+ /** Whether rule is active */
103
+ enabled: boolean;
104
+ /** Priority (higher = applied later, wins conflicts) */
105
+ priority: number;
106
+ /** Match criteria */
107
+ criteria: OverrideCriteria | OverrideCriterion;
108
+ /** Style to apply */
109
+ style: GraphicStyle;
110
+ /** Category for organization */
111
+ category?: string;
112
+ /** Tags for filtering */
113
+ tags?: string[];
114
+ }
115
+ /**
116
+ * Named collection of override rules
117
+ */
118
+ export interface GraphicOverridePreset {
119
+ /** Unique identifier */
120
+ id: string;
121
+ /** Display name */
122
+ name: string;
123
+ /** Description */
124
+ description?: string;
125
+ /** Icon name or emoji */
126
+ icon?: string;
127
+ /** List of rules in this preset */
128
+ rules: GraphicOverrideRule[];
129
+ /** Whether this is a built-in preset */
130
+ builtIn?: boolean;
131
+ /** Category (e.g., "Safety", "Structural", "MEP") */
132
+ category?: string;
133
+ }
134
+ /**
135
+ * Element data used for matching override rules
136
+ */
137
+ export interface ElementData {
138
+ /** Express ID */
139
+ expressId: number;
140
+ /** Model ID (for federation) */
141
+ modelId?: string;
142
+ /** IFC type (e.g., 'IfcWall') */
143
+ ifcType: string;
144
+ /** Properties organized by property set */
145
+ properties?: Record<string, Record<string, unknown>>;
146
+ /** Material names */
147
+ materials?: string[];
148
+ /** Layer/presentation layer assignments */
149
+ layers?: string[];
150
+ }
151
+ /**
152
+ * Fully resolved style with all defaults filled in
153
+ * Note: lineWeight is resolved to a number (mm), not a preset name
154
+ */
155
+ export interface ResolvedGraphicStyle {
156
+ /** Fill color for cut polygons (hex) */
157
+ fillColor: string;
158
+ /** Stroke/line color (hex) */
159
+ strokeColor: string;
160
+ /** Background color for patterns */
161
+ backgroundColor: string;
162
+ /** Line weight in mm (resolved from preset or custom) */
163
+ lineWeight: number;
164
+ /** Line cap style */
165
+ lineCap: 'butt' | 'round' | 'square';
166
+ /** Line join style */
167
+ lineJoin: 'miter' | 'round' | 'bevel';
168
+ /** Resolved dash pattern as array [dash, gap, ...] in mm */
169
+ dashPattern: number[];
170
+ /** Hatch pattern type */
171
+ hatchPattern: HatchPatternType;
172
+ /** Hatch line spacing in mm */
173
+ hatchSpacing: number;
174
+ /** Hatch angle in degrees */
175
+ hatchAngle: number;
176
+ /** Secondary hatch angle for cross-hatch */
177
+ hatchSecondaryAngle: number;
178
+ /** Hatch line color */
179
+ hatchColor: string;
180
+ /** Hatch line weight in mm */
181
+ hatchLineWeight: number;
182
+ /** Whether element is visible */
183
+ visible: boolean;
184
+ /** Opacity (0-1) */
185
+ opacity: number;
186
+ /** Z-order for overlapping elements */
187
+ drawOrder: number;
188
+ }
189
+ /**
190
+ * Result of applying overrides to an element
191
+ */
192
+ export interface OverrideResult {
193
+ /** The element data */
194
+ element: ElementData;
195
+ /** Resolved style */
196
+ style: ResolvedGraphicStyle;
197
+ /** Rules that matched (in order of application) */
198
+ matchedRules: GraphicOverrideRule[];
199
+ }
200
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/graphic-overrides/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
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
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/graphic-overrides/types.ts"],"names":[],"mappings":"AAAA;;+DAE+D"}