@ifc-lite/cli 0.25.0 → 0.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/stats-aggregation.d.ts +109 -0
- package/dist/commands/stats-aggregation.d.ts.map +1 -0
- package/dist/commands/stats-aggregation.js +153 -0
- package/dist/commands/stats-aggregation.js.map +1 -0
- package/dist/commands/stats.d.ts.map +1 -1
- package/dist/commands/stats.js +11 -127
- package/dist/commands/stats.js.map +1 -1
- package/package.json +10 -10
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure aggregation helpers for `ifc-lite stats` — extracted so the KPI /
|
|
3
|
+
* WWR / GFA math can be unit tested against a fake `bim` surface instead of
|
|
4
|
+
* only through a real parsed IFC file. `statsCommand` in stats.ts wires
|
|
5
|
+
* these to the SDK's `BimContext`.
|
|
6
|
+
*/
|
|
7
|
+
export interface QuantitySet {
|
|
8
|
+
name: string;
|
|
9
|
+
quantities: Array<{
|
|
10
|
+
name: string;
|
|
11
|
+
value: unknown;
|
|
12
|
+
}>;
|
|
13
|
+
}
|
|
14
|
+
export interface PropertySet {
|
|
15
|
+
name: string;
|
|
16
|
+
properties?: Array<{
|
|
17
|
+
name: string;
|
|
18
|
+
value: unknown;
|
|
19
|
+
}>;
|
|
20
|
+
}
|
|
21
|
+
/** Minimal surface these helpers need from a `BimContext`. */
|
|
22
|
+
export interface QuantityBim<R = unknown> {
|
|
23
|
+
quantities: (ref: R) => QuantitySet[];
|
|
24
|
+
}
|
|
25
|
+
export interface PropertyBim<R = unknown> {
|
|
26
|
+
properties: (ref: R) => PropertySet[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Sum a named quantity across every quantity set on every element ref,
|
|
30
|
+
* adding up all matches ("Gross" and "Net" names given as alternatives —
|
|
31
|
+
* Gross/Net are two names for a slot the model only ever fills one of, not
|
|
32
|
+
* two quantities to add). A quantity set holding two quantities with the
|
|
33
|
+
* same name is not valid IFC — IfcElementQuantity's UniqueQuantityNames
|
|
34
|
+
* WHERE rule forbids it — so this function does not try to guess intent
|
|
35
|
+
* for non-compliant data; it just sums whatever is present. Returns 0 for
|
|
36
|
+
* an empty list — the caller decides what an empty aggregate means (e.g. a
|
|
37
|
+
* GFA fallback).
|
|
38
|
+
*/
|
|
39
|
+
export declare function sumQuantity<R>(bim: QuantityBim<R>, refs: R[], quantityNames: string[]): number;
|
|
40
|
+
/** Read a single property's value out of a named property set, or undefined. */
|
|
41
|
+
export declare function getPropertyValue<R>(bim: PropertyBim<R>, ref: R, psetName: string, propName: string): unknown;
|
|
42
|
+
/** IFC boolean-logical literals that mean "true" across the encodings the parser hands back. */
|
|
43
|
+
export declare function isTruthyIfcBoolean(value: unknown): boolean;
|
|
44
|
+
export interface WallAggregate {
|
|
45
|
+
totalWallArea: number;
|
|
46
|
+
exteriorWallArea: number;
|
|
47
|
+
totalWallVolume: number;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Per-wall area/volume aggregation, plus the exterior-wall-area subtotal
|
|
51
|
+
* used as the Window-Wall-Ratio denominator. `exteriorWallArea` is a SUBSET
|
|
52
|
+
* of `totalWallArea` (every exterior wall's area is counted in both), not a
|
|
53
|
+
* separate quantity — callers must not sum them.
|
|
54
|
+
*/
|
|
55
|
+
export declare function aggregateWalls<R>(bim: QuantityBim<R> & PropertyBim<R>, walls: Array<{
|
|
56
|
+
ref: R;
|
|
57
|
+
}>): WallAggregate;
|
|
58
|
+
/**
|
|
59
|
+
* Window-Wall Ratio as a percentage. Uses exterior wall area when any exists
|
|
60
|
+
* (the architecturally meaningful denominator); falls back to total wall
|
|
61
|
+
* area only when there is no exterior-wall data at all — NOT when exterior
|
|
62
|
+
* area happens to be smaller, and not summed with total wall area.
|
|
63
|
+
*/
|
|
64
|
+
export declare function computeWindowWallRatio(totalWindowArea: number, exteriorWallArea: number, totalWallArea: number): number;
|
|
65
|
+
/**
|
|
66
|
+
* Gross Floor Area: sum of each storey's own `GrossFloorArea` quantity
|
|
67
|
+
* (a storey with none contributes 0, i.e. an empty group — it must not be
|
|
68
|
+
* skipped or it would silently undercount). Falls back to the model's total
|
|
69
|
+
* slab floor area only when the storey-quantity sum is exactly 0 (no storey
|
|
70
|
+
* anywhere reports GFA), not per-storey.
|
|
71
|
+
*/
|
|
72
|
+
export declare function computeGrossFloorArea<R>(bim: QuantityBim<R>, storeys: Array<{
|
|
73
|
+
ref: R;
|
|
74
|
+
}>, fallbackTotalFloorArea: number): number;
|
|
75
|
+
export interface MaterialSummaryEntry {
|
|
76
|
+
name: string;
|
|
77
|
+
count: number;
|
|
78
|
+
volume: number;
|
|
79
|
+
}
|
|
80
|
+
export interface MaterialsBim<R = unknown> extends QuantityBim<R> {
|
|
81
|
+
materials: (ref: R) => {
|
|
82
|
+
materials?: Array<string | {
|
|
83
|
+
name?: string;
|
|
84
|
+
}>;
|
|
85
|
+
name?: string;
|
|
86
|
+
} | null | undefined;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Per-material element count and summed Gross/NetVolume, sorted by element
|
|
90
|
+
* count descending (most common material first).
|
|
91
|
+
*/
|
|
92
|
+
export declare function computeMaterialSummary<R>(bim: MaterialsBim<R>, elements: Array<{
|
|
93
|
+
ref: R;
|
|
94
|
+
}>, round: (n: number) => number): MaterialSummaryEntry[];
|
|
95
|
+
export interface ValidationSummary {
|
|
96
|
+
duplicateGlobalIds: number;
|
|
97
|
+
unnamedElements: number;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Model-health checks: how many GlobalIds are duplicated (a count of
|
|
101
|
+
* *offending IDs*, not of duplicate rows — three elements sharing one
|
|
102
|
+
* GlobalId count as 1 here, matching the original implementation) and how
|
|
103
|
+
* many elements have no name / an empty-string name.
|
|
104
|
+
*/
|
|
105
|
+
export declare function computeValidation(elements: Array<{
|
|
106
|
+
globalId?: unknown;
|
|
107
|
+
name?: unknown;
|
|
108
|
+
}>): ValidationSummary;
|
|
109
|
+
//# sourceMappingURL=stats-aggregation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats-aggregation.d.ts","sourceRoot":"","sources":["../../src/commands/stats-aggregation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,153 @@
|
|
|
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
|
+
* Sum a named quantity across every quantity set on every element ref,
|
|
6
|
+
* adding up all matches ("Gross" and "Net" names given as alternatives —
|
|
7
|
+
* Gross/Net are two names for a slot the model only ever fills one of, not
|
|
8
|
+
* two quantities to add). A quantity set holding two quantities with the
|
|
9
|
+
* same name is not valid IFC — IfcElementQuantity's UniqueQuantityNames
|
|
10
|
+
* WHERE rule forbids it — so this function does not try to guess intent
|
|
11
|
+
* for non-compliant data; it just sums whatever is present. Returns 0 for
|
|
12
|
+
* an empty list — the caller decides what an empty aggregate means (e.g. a
|
|
13
|
+
* GFA fallback).
|
|
14
|
+
*/
|
|
15
|
+
export function sumQuantity(bim, refs, quantityNames) {
|
|
16
|
+
let total = 0;
|
|
17
|
+
for (const ref of refs) {
|
|
18
|
+
const qsets = bim.quantities(ref);
|
|
19
|
+
for (const qset of qsets) {
|
|
20
|
+
for (const q of qset.quantities) {
|
|
21
|
+
if (quantityNames.includes(q.name)) {
|
|
22
|
+
total += Number(q.value) || 0;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return total;
|
|
28
|
+
}
|
|
29
|
+
/** Read a single property's value out of a named property set, or undefined. */
|
|
30
|
+
export function getPropertyValue(bim, ref, psetName, propName) {
|
|
31
|
+
try {
|
|
32
|
+
const psets = bim.properties(ref);
|
|
33
|
+
for (const pset of psets) {
|
|
34
|
+
if (pset.name === psetName) {
|
|
35
|
+
const prop = pset.properties?.find(p => p.name === propName);
|
|
36
|
+
if (prop)
|
|
37
|
+
return prop.value;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Property not available
|
|
43
|
+
}
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
/** IFC boolean-logical literals that mean "true" across the encodings the parser hands back. */
|
|
47
|
+
export function isTruthyIfcBoolean(value) {
|
|
48
|
+
return value === true || value === 'TRUE' || value === '.T.';
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Per-wall area/volume aggregation, plus the exterior-wall-area subtotal
|
|
52
|
+
* used as the Window-Wall-Ratio denominator. `exteriorWallArea` is a SUBSET
|
|
53
|
+
* of `totalWallArea` (every exterior wall's area is counted in both), not a
|
|
54
|
+
* separate quantity — callers must not sum them.
|
|
55
|
+
*/
|
|
56
|
+
export function aggregateWalls(bim, walls) {
|
|
57
|
+
let totalWallArea = 0;
|
|
58
|
+
let exteriorWallArea = 0;
|
|
59
|
+
let totalWallVolume = 0;
|
|
60
|
+
for (const w of walls) {
|
|
61
|
+
let wallArea = 0;
|
|
62
|
+
let wallVolume = 0;
|
|
63
|
+
const qsets = bim.quantities(w.ref);
|
|
64
|
+
for (const qset of qsets) {
|
|
65
|
+
for (const q of qset.quantities) {
|
|
66
|
+
if (q.name === 'GrossSideArea' || q.name === 'NetSideArea') {
|
|
67
|
+
wallArea = Number(q.value) || 0;
|
|
68
|
+
}
|
|
69
|
+
if (q.name === 'GrossVolume' || q.name === 'NetVolume') {
|
|
70
|
+
wallVolume = Number(q.value) || 0;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
totalWallArea += wallArea;
|
|
75
|
+
totalWallVolume += wallVolume;
|
|
76
|
+
const isExternal = getPropertyValue(bim, w.ref, 'Pset_WallCommon', 'IsExternal');
|
|
77
|
+
if (isTruthyIfcBoolean(isExternal)) {
|
|
78
|
+
exteriorWallArea += wallArea;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return { totalWallArea, exteriorWallArea, totalWallVolume };
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Window-Wall Ratio as a percentage. Uses exterior wall area when any exists
|
|
85
|
+
* (the architecturally meaningful denominator); falls back to total wall
|
|
86
|
+
* area only when there is no exterior-wall data at all — NOT when exterior
|
|
87
|
+
* area happens to be smaller, and not summed with total wall area.
|
|
88
|
+
*/
|
|
89
|
+
export function computeWindowWallRatio(totalWindowArea, exteriorWallArea, totalWallArea) {
|
|
90
|
+
const wwrBase = exteriorWallArea > 0 ? exteriorWallArea : totalWallArea;
|
|
91
|
+
return wwrBase > 0 ? (totalWindowArea / wwrBase) * 100 : 0;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Gross Floor Area: sum of each storey's own `GrossFloorArea` quantity
|
|
95
|
+
* (a storey with none contributes 0, i.e. an empty group — it must not be
|
|
96
|
+
* skipped or it would silently undercount). Falls back to the model's total
|
|
97
|
+
* slab floor area only when the storey-quantity sum is exactly 0 (no storey
|
|
98
|
+
* anywhere reports GFA), not per-storey.
|
|
99
|
+
*/
|
|
100
|
+
export function computeGrossFloorArea(bim, storeys, fallbackTotalFloorArea) {
|
|
101
|
+
const grossFloorArea = sumQuantity(bim, storeys.map(s => s.ref), ['GrossFloorArea']);
|
|
102
|
+
return grossFloorArea === 0 ? fallbackTotalFloorArea : grossFloorArea;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Per-material element count and summed Gross/NetVolume, sorted by element
|
|
106
|
+
* count descending (most common material first).
|
|
107
|
+
*/
|
|
108
|
+
export function computeMaterialSummary(bim, elements, round) {
|
|
109
|
+
const materialVolumes = new Map();
|
|
110
|
+
const materialCounts = new Map();
|
|
111
|
+
for (const e of elements) {
|
|
112
|
+
const mat = bim.materials(e.ref);
|
|
113
|
+
const first = mat?.materials?.[0];
|
|
114
|
+
const firstName = typeof first === 'string' ? first : first?.name;
|
|
115
|
+
const matName = firstName ?? mat?.name;
|
|
116
|
+
if (!matName)
|
|
117
|
+
continue;
|
|
118
|
+
materialCounts.set(matName, (materialCounts.get(matName) ?? 0) + 1);
|
|
119
|
+
const qsets = bim.quantities(e.ref);
|
|
120
|
+
for (const qset of qsets) {
|
|
121
|
+
for (const q of qset.quantities) {
|
|
122
|
+
if (q.name === 'GrossVolume' || q.name === 'NetVolume') {
|
|
123
|
+
materialVolumes.set(matName, (materialVolumes.get(matName) ?? 0) + (Number(q.value) || 0));
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return [...materialCounts.entries()]
|
|
130
|
+
.sort((a, b) => b[1] - a[1])
|
|
131
|
+
.map(([name, count]) => ({
|
|
132
|
+
name,
|
|
133
|
+
count,
|
|
134
|
+
volume: round(materialVolumes.get(name) ?? 0),
|
|
135
|
+
}));
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Model-health checks: how many GlobalIds are duplicated (a count of
|
|
139
|
+
* *offending IDs*, not of duplicate rows — three elements sharing one
|
|
140
|
+
* GlobalId count as 1 here, matching the original implementation) and how
|
|
141
|
+
* many elements have no name / an empty-string name.
|
|
142
|
+
*/
|
|
143
|
+
export function computeValidation(elements) {
|
|
144
|
+
const globalIds = elements.map(e => e.globalId).filter(Boolean);
|
|
145
|
+
const globalIdCounts = new Map();
|
|
146
|
+
for (const id of globalIds) {
|
|
147
|
+
globalIdCounts.set(id, (globalIdCounts.get(id) ?? 0) + 1);
|
|
148
|
+
}
|
|
149
|
+
const duplicateGlobalIds = [...globalIdCounts.entries()].filter(([, count]) => count > 1).length;
|
|
150
|
+
const unnamedElements = elements.filter(e => !e.name || e.name === '').length;
|
|
151
|
+
return { duplicateGlobalIds, unnamedElements };
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=stats-aggregation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats-aggregation.js","sourceRoot":"","sources":["../../src/commands/stats-aggregation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"AAsBA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuJhE"}
|
package/dist/commands/stats.js
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { createHeadlessContext } from '../loader.js';
|
|
11
11
|
import { printJson, hasFlag, fatal } from '../output.js';
|
|
12
|
+
import { aggregateWalls, computeWindowWallRatio, computeGrossFloorArea, computeMaterialSummary, computeValidation, sumQuantity, } from './stats-aggregation.js';
|
|
12
13
|
export async function statsCommand(args) {
|
|
13
14
|
const filePath = args.find(a => !a.startsWith('-'));
|
|
14
15
|
if (!filePath)
|
|
@@ -44,127 +45,26 @@ export async function statsCommand(args) {
|
|
|
44
45
|
const walls = bim.query().byType('IfcWall').toArray();
|
|
45
46
|
const slabs = bim.query().byType('IfcSlab').toArray();
|
|
46
47
|
const windows = bim.query().byType('IfcWindow').toArray();
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
let wallArea = 0;
|
|
52
|
-
let wallVolume = 0;
|
|
53
|
-
const qsets = bim.quantities(w.ref);
|
|
54
|
-
for (const qset of qsets) {
|
|
55
|
-
for (const q of qset.quantities) {
|
|
56
|
-
if (q.name === 'GrossSideArea' || q.name === 'NetSideArea') {
|
|
57
|
-
wallArea = Number(q.value) || 0;
|
|
58
|
-
}
|
|
59
|
-
if (q.name === 'GrossVolume' || q.name === 'NetVolume') {
|
|
60
|
-
wallVolume = Number(q.value) || 0;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
totalWallArea += wallArea;
|
|
65
|
-
totalWallVolume += wallVolume;
|
|
66
|
-
// Check IsExternal from Pset_WallCommon
|
|
67
|
-
const isExternal = getPropertyValue(bim, w.ref, 'Pset_WallCommon', 'IsExternal');
|
|
68
|
-
if (isExternal === true || isExternal === 'TRUE' || isExternal === '.T.') {
|
|
69
|
-
exteriorWallArea += wallArea;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
let totalFloorArea = 0;
|
|
73
|
-
let totalSlabVolume = 0;
|
|
74
|
-
for (const s of slabs) {
|
|
75
|
-
const qsets = bim.quantities(s.ref);
|
|
76
|
-
for (const qset of qsets) {
|
|
77
|
-
for (const q of qset.quantities) {
|
|
78
|
-
if (q.name === 'GrossArea' || q.name === 'NetArea') {
|
|
79
|
-
totalFloorArea += Number(q.value) || 0;
|
|
80
|
-
}
|
|
81
|
-
if (q.name === 'GrossVolume' || q.name === 'NetVolume') {
|
|
82
|
-
totalSlabVolume += Number(q.value) || 0;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
let totalWindowArea = 0;
|
|
88
|
-
for (const w of windows) {
|
|
89
|
-
const qsets = bim.quantities(w.ref);
|
|
90
|
-
for (const qset of qsets) {
|
|
91
|
-
for (const q of qset.quantities) {
|
|
92
|
-
if (q.name === 'Area') {
|
|
93
|
-
totalWindowArea += Number(q.value) || 0;
|
|
94
|
-
break;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
48
|
+
const { totalWallArea, exteriorWallArea, totalWallVolume } = aggregateWalls(bim, walls);
|
|
49
|
+
const totalFloorArea = sumQuantity(bim, slabs.map((s) => s.ref), ['GrossArea', 'NetArea']);
|
|
50
|
+
const totalSlabVolume = sumQuantity(bim, slabs.map((s) => s.ref), ['GrossVolume', 'NetVolume']);
|
|
51
|
+
const totalWindowArea = sumQuantity(bim, windows.map((w) => w.ref), ['Area']);
|
|
99
52
|
// WWR uses exterior wall area if available, falls back to total wall area
|
|
100
|
-
const
|
|
101
|
-
const windowWallRatio = wwrBase > 0 ? (totalWindowArea / wwrBase) * 100 : 0;
|
|
53
|
+
const windowWallRatio = computeWindowWallRatio(totalWindowArea, exteriorWallArea, totalWallArea);
|
|
102
54
|
// GFA: sum GrossFloorArea from IfcBuildingStorey quantities, fallback to slab area
|
|
103
|
-
|
|
104
|
-
for (const storey of storeys) {
|
|
105
|
-
const qsets = bim.quantities(storey.ref);
|
|
106
|
-
for (const qset of qsets) {
|
|
107
|
-
for (const q of qset.quantities) {
|
|
108
|
-
if (q.name === 'GrossFloorArea') {
|
|
109
|
-
grossFloorArea += Number(q.value) || 0;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
if (grossFloorArea === 0)
|
|
115
|
-
grossFloorArea = totalFloorArea;
|
|
55
|
+
const grossFloorArea = computeGrossFloorArea(bim, storeys, totalFloorArea);
|
|
116
56
|
// Total volume across all elements
|
|
117
57
|
let totalVolume = totalWallVolume + totalSlabVolume;
|
|
118
58
|
const volTypes = ['IfcColumn', 'IfcBeam', 'IfcRoof', 'IfcStair', 'IfcFooting'];
|
|
119
59
|
for (const t of volTypes) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
for (const qset of qsets) {
|
|
123
|
-
for (const q of qset.quantities) {
|
|
124
|
-
if (q.name === 'GrossVolume' || q.name === 'NetVolume') {
|
|
125
|
-
totalVolume += Number(q.value) || 0;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
60
|
+
const refs = bim.query().byType(t).toArray().map((e) => e.ref);
|
|
61
|
+
totalVolume += sumQuantity(bim, refs, ['GrossVolume', 'NetVolume']);
|
|
130
62
|
}
|
|
131
63
|
// Material summary with volumes
|
|
132
|
-
const materialVolumes = new Map();
|
|
133
|
-
const materialCounts = new Map();
|
|
134
64
|
const allBuildingElements = bim.query().toArray();
|
|
135
|
-
|
|
136
|
-
const mat = bim.materials(e.ref);
|
|
137
|
-
const first = mat?.materials?.[0];
|
|
138
|
-
const firstName = typeof first === 'string' ? first : first?.name;
|
|
139
|
-
const matName = firstName ?? mat?.name;
|
|
140
|
-
if (!matName)
|
|
141
|
-
continue;
|
|
142
|
-
materialCounts.set(matName, (materialCounts.get(matName) ?? 0) + 1);
|
|
143
|
-
const qsets = bim.quantities(e.ref);
|
|
144
|
-
for (const qset of qsets) {
|
|
145
|
-
for (const q of qset.quantities) {
|
|
146
|
-
if (q.name === 'GrossVolume' || q.name === 'NetVolume') {
|
|
147
|
-
materialVolumes.set(matName, (materialVolumes.get(matName) ?? 0) + (Number(q.value) || 0));
|
|
148
|
-
break;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
const materialSummary = [...materialCounts.entries()]
|
|
154
|
-
.sort((a, b) => b[1] - a[1])
|
|
155
|
-
.map(([name, count]) => ({
|
|
156
|
-
name,
|
|
157
|
-
count,
|
|
158
|
-
volume: round(materialVolumes.get(name) ?? 0),
|
|
159
|
-
}));
|
|
65
|
+
const materialSummary = computeMaterialSummary(bim, allBuildingElements, round);
|
|
160
66
|
// Validation checks
|
|
161
|
-
const
|
|
162
|
-
const globalIdCounts = new Map();
|
|
163
|
-
for (const id of globalIds) {
|
|
164
|
-
globalIdCounts.set(id, (globalIdCounts.get(id) ?? 0) + 1);
|
|
165
|
-
}
|
|
166
|
-
const duplicateGlobalIds = [...globalIdCounts.entries()].filter(([, count]) => count > 1).length;
|
|
167
|
-
const unnamedElements = allBuildingElements.filter((e) => !e.name || e.name === '').length;
|
|
67
|
+
const { duplicateGlobalIds, unnamedElements } = computeValidation(allBuildingElements);
|
|
168
68
|
const stats = {
|
|
169
69
|
building: buildingName,
|
|
170
70
|
schema,
|
|
@@ -253,20 +153,4 @@ export async function statsCommand(args) {
|
|
|
253
153
|
function round(n) {
|
|
254
154
|
return Math.round(n * 100) / 100;
|
|
255
155
|
}
|
|
256
|
-
function getPropertyValue(bim, ref, psetName, propName) {
|
|
257
|
-
try {
|
|
258
|
-
const psets = bim.properties(ref);
|
|
259
|
-
for (const pset of psets) {
|
|
260
|
-
if (pset.name === psetName) {
|
|
261
|
-
const prop = pset.properties?.find((p) => p.name === propName);
|
|
262
|
-
if (prop)
|
|
263
|
-
return prop.value;
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
catch {
|
|
268
|
-
// Property not available
|
|
269
|
-
}
|
|
270
|
-
return undefined;
|
|
271
|
-
}
|
|
272
156
|
//# sourceMappingURL=stats.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ifc-lite/cli",
|
|
3
|
-
"version": "0.25.
|
|
3
|
+
"version": "0.25.1",
|
|
4
4
|
"description": "CLI toolkit for IFC files — query, validate, export, create, and script BIM data",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -20,25 +20,25 @@
|
|
|
20
20
|
"README.md"
|
|
21
21
|
],
|
|
22
22
|
"dependencies": {
|
|
23
|
+
"@ifc-lite/bcf": "^2.0.0",
|
|
23
24
|
"@ifc-lite/clash": "^1.9.1",
|
|
24
25
|
"@ifc-lite/create": "^2.2.0",
|
|
25
26
|
"@ifc-lite/data": "^3.4.1",
|
|
26
|
-
"@ifc-lite/bcf": "^2.0.0",
|
|
27
27
|
"@ifc-lite/diff": "^0.7.0",
|
|
28
|
-
"@ifc-lite/extensions": "^0.5.0",
|
|
29
28
|
"@ifc-lite/export": "^3.0.0",
|
|
30
|
-
"@ifc-lite/
|
|
29
|
+
"@ifc-lite/extensions": "^0.5.0",
|
|
30
|
+
"@ifc-lite/geometry": "^4.0.1",
|
|
31
|
+
"@ifc-lite/ids": "^1.15.50",
|
|
32
|
+
"@ifc-lite/ifcx": "^3.0.0",
|
|
31
33
|
"@ifc-lite/merge": "^0.4.4",
|
|
32
34
|
"@ifc-lite/mcp": "^0.12.0",
|
|
33
35
|
"@ifc-lite/mutations": "^1.27.0",
|
|
34
|
-
"@ifc-lite/
|
|
35
|
-
"@ifc-lite/ifcx": "^3.0.0",
|
|
36
|
-
"@ifc-lite/parser": "^4.3.0",
|
|
37
|
-
"@ifc-lite/sandbox": "^2.2.1",
|
|
36
|
+
"@ifc-lite/parser": "^4.3.1",
|
|
38
37
|
"@ifc-lite/query": "^2.0.0",
|
|
38
|
+
"@ifc-lite/sandbox": "^2.2.1",
|
|
39
39
|
"@ifc-lite/sdk": "^3.0.0",
|
|
40
|
-
"@ifc-lite/
|
|
41
|
-
"@ifc-lite/
|
|
40
|
+
"@ifc-lite/viewer-core": "^0.2.14",
|
|
41
|
+
"@ifc-lite/wasm": "^6.0.1"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@types/node": "^26.2.0",
|