@ifc-lite/cli 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/clash.d.ts +2 -0
- package/dist/commands/clash.d.ts.map +1 -0
- package/dist/commands/clash.js +188 -0
- package/dist/commands/clash.js.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/package.json +16 -14
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clash.d.ts","sourceRoot":"","sources":["../../src/commands/clash.ts"],"names":[],"mappings":"AA2JA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+DhE"}
|
|
@@ -0,0 +1,188 @@
|
|
|
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
|
+
* ifc-lite clash <file.ifc> [options]
|
|
6
|
+
*
|
|
7
|
+
* Detect geometric clashes between elements in an IFC model. Meshes the model
|
|
8
|
+
* headlessly, maps it to representation-agnostic clash elements, then runs the
|
|
9
|
+
* clash engine with either a single ad-hoc rule (--a/--b) or the standard
|
|
10
|
+
* discipline matrix (--matrix). Results print as a concise human summary or
|
|
11
|
+
* machine-readable JSON, and can be exported as a BCF archive (--bcf).
|
|
12
|
+
*/
|
|
13
|
+
import { readFile, writeFile } from 'node:fs/promises';
|
|
14
|
+
import { basename } from 'node:path';
|
|
15
|
+
import { createHeadlessContext } from '../loader.js';
|
|
16
|
+
import { getFlag, hasFlag, fatal, printJson } from '../output.js';
|
|
17
|
+
import { GeometryProcessor } from '@ifc-lite/geometry';
|
|
18
|
+
import { createClashEngine, disciplineMatrixRules, groupClashes, } from '@ifc-lite/clash';
|
|
19
|
+
import { elementsFromStep } from '@ifc-lite/clash/step';
|
|
20
|
+
import { createBCFFromClashResult } from '@ifc-lite/clash/bcf';
|
|
21
|
+
import { writeBCF } from '@ifc-lite/bcf';
|
|
22
|
+
/** Maximum number of clashes embedded in --json output before truncation. */
|
|
23
|
+
const JSON_CLASH_CAP = 1000;
|
|
24
|
+
/** Maximum number of clash rows shown in the human summary. */
|
|
25
|
+
const HUMAN_CLASH_CAP = 20;
|
|
26
|
+
/**
|
|
27
|
+
* Mesh a model once and cache the meshes by model id so repeated clash runs
|
|
28
|
+
* within a single process never re-mesh the same file.
|
|
29
|
+
*/
|
|
30
|
+
const meshCache = new Map();
|
|
31
|
+
let sharedProcessor;
|
|
32
|
+
async function getProcessor() {
|
|
33
|
+
if (!sharedProcessor) {
|
|
34
|
+
const processor = new GeometryProcessor();
|
|
35
|
+
await processor.init();
|
|
36
|
+
sharedProcessor = processor;
|
|
37
|
+
}
|
|
38
|
+
return sharedProcessor;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Mesh the whole model. Prefers the parsed `store.source` bytes; falls back to
|
|
42
|
+
* reading the file path from disk when the store did not retain its source.
|
|
43
|
+
*/
|
|
44
|
+
async function meshModel(store, modelId, filePath) {
|
|
45
|
+
const cached = meshCache.get(modelId);
|
|
46
|
+
if (cached)
|
|
47
|
+
return cached;
|
|
48
|
+
let bytes = store.source;
|
|
49
|
+
if (!bytes || bytes.byteLength === 0) {
|
|
50
|
+
const buffer = await readFile(filePath);
|
|
51
|
+
bytes = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);
|
|
52
|
+
}
|
|
53
|
+
const processor = await getProcessor();
|
|
54
|
+
const result = await processor.process(bytes);
|
|
55
|
+
meshCache.set(modelId, result.meshes);
|
|
56
|
+
return result.meshes;
|
|
57
|
+
}
|
|
58
|
+
function parseMode(raw) {
|
|
59
|
+
const mode = raw ?? 'hard';
|
|
60
|
+
if (mode !== 'hard' && mode !== 'clearance') {
|
|
61
|
+
fatal(`Invalid --mode "${mode}". Supported modes: hard, clearance`);
|
|
62
|
+
}
|
|
63
|
+
return mode;
|
|
64
|
+
}
|
|
65
|
+
function parseNumberFlag(raw, flag) {
|
|
66
|
+
if (raw === undefined)
|
|
67
|
+
return undefined;
|
|
68
|
+
const value = Number(raw);
|
|
69
|
+
if (!Number.isFinite(value)) {
|
|
70
|
+
fatal(`Invalid ${flag} value "${raw}" (must be a number)`);
|
|
71
|
+
}
|
|
72
|
+
return value;
|
|
73
|
+
}
|
|
74
|
+
function parseGroupBy(raw) {
|
|
75
|
+
const g = raw ?? 'cluster';
|
|
76
|
+
if (g !== 'cluster' && g !== 'rule' && g !== 'typePair' && g !== 'element') {
|
|
77
|
+
fatal(`Invalid --group "${g}". Supported: cluster, rule, typePair, element`);
|
|
78
|
+
}
|
|
79
|
+
return g;
|
|
80
|
+
}
|
|
81
|
+
function buildRules(args, mode, tolerance, clearance) {
|
|
82
|
+
if (hasFlag(args, '--matrix')) {
|
|
83
|
+
return disciplineMatrixRules(mode, clearance);
|
|
84
|
+
}
|
|
85
|
+
const a = getFlag(args, '--a') ?? '*';
|
|
86
|
+
const b = getFlag(args, '--b');
|
|
87
|
+
const rule = {
|
|
88
|
+
id: 'cli-rule',
|
|
89
|
+
name: b ? `${a} vs ${b}` : `${a} self-clash`,
|
|
90
|
+
a,
|
|
91
|
+
mode,
|
|
92
|
+
};
|
|
93
|
+
if (b !== undefined)
|
|
94
|
+
rule.b = b;
|
|
95
|
+
if (tolerance !== undefined)
|
|
96
|
+
rule.tolerance = tolerance;
|
|
97
|
+
if (clearance !== undefined)
|
|
98
|
+
rule.clearance = clearance;
|
|
99
|
+
return [rule];
|
|
100
|
+
}
|
|
101
|
+
function formatClashRow(clash) {
|
|
102
|
+
const aName = clash.a.name ? `${clash.a.tag} "${clash.a.name}"` : clash.a.tag;
|
|
103
|
+
const bName = clash.b.name ? `${clash.b.tag} "${clash.b.name}"` : clash.b.tag;
|
|
104
|
+
const distance = clash.distance < 0
|
|
105
|
+
? `penetration ${Math.abs(clash.distance).toFixed(3)}m`
|
|
106
|
+
: `gap ${clash.distance.toFixed(3)}m`;
|
|
107
|
+
return ` [${clash.severity}] ${aName} x ${bName} (${clash.status}, ${distance})`;
|
|
108
|
+
}
|
|
109
|
+
function printHumanSummary(result) {
|
|
110
|
+
const { summary } = result;
|
|
111
|
+
process.stdout.write(`\n Clash Detection Results\n`);
|
|
112
|
+
process.stdout.write(` -----------------------\n`);
|
|
113
|
+
process.stdout.write(` Total clashes: ${summary.total}\n`);
|
|
114
|
+
process.stdout.write(` By severity: critical ${summary.bySeverity.critical}, major ${summary.bySeverity.major}, minor ${summary.bySeverity.minor}, info ${summary.bySeverity.info}\n`);
|
|
115
|
+
if (result.truncated) {
|
|
116
|
+
process.stdout.write(` Truncated: ${result.truncated.reason} (${result.truncated.droppedPairs} pairs dropped)\n`);
|
|
117
|
+
}
|
|
118
|
+
if (summary.total > 0) {
|
|
119
|
+
const shown = result.clashes.slice(0, HUMAN_CLASH_CAP);
|
|
120
|
+
process.stdout.write(`\n Top ${shown.length} of ${summary.total} clashes:\n`);
|
|
121
|
+
for (const clash of shown) {
|
|
122
|
+
process.stdout.write(`${formatClashRow(clash)}\n`);
|
|
123
|
+
}
|
|
124
|
+
const dropped = summary.total - shown.length;
|
|
125
|
+
if (dropped > 0) {
|
|
126
|
+
process.stdout.write(`\n ... ${dropped} more clash(es) not shown (use --json for the full list).\n`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
process.stdout.write('\n');
|
|
130
|
+
}
|
|
131
|
+
export async function clashCommand(args) {
|
|
132
|
+
const filePath = args.find(a => !a.startsWith('-'));
|
|
133
|
+
if (!filePath) {
|
|
134
|
+
fatal('Usage: ifc-lite clash <file.ifc> [--a <selector>] [--b <selector>] [--mode hard|clearance] [--tolerance N] [--clearance N] [--matrix] [--bcf <out.bcfzip>] [--group cluster|rule|typePair|element] [--bcf-status <status>] [--max-topics N] [--json]');
|
|
135
|
+
}
|
|
136
|
+
const jsonOutput = hasFlag(args, '--json');
|
|
137
|
+
const mode = parseMode(getFlag(args, '--mode'));
|
|
138
|
+
const tolerance = parseNumberFlag(getFlag(args, '--tolerance'), '--tolerance');
|
|
139
|
+
const clearance = parseNumberFlag(getFlag(args, '--clearance'), '--clearance');
|
|
140
|
+
const bcfPath = getFlag(args, '--bcf');
|
|
141
|
+
const bcfGroupBy = parseGroupBy(getFlag(args, '--group'));
|
|
142
|
+
const bcfStatus = getFlag(args, '--bcf-status');
|
|
143
|
+
const maxTopics = parseNumberFlag(getFlag(args, '--max-topics'), '--max-topics');
|
|
144
|
+
const { store } = await createHeadlessContext(filePath);
|
|
145
|
+
const modelId = basename(filePath);
|
|
146
|
+
if (!jsonOutput)
|
|
147
|
+
process.stderr.write(` Meshing ${modelId} ...\n`);
|
|
148
|
+
const meshes = await meshModel(store, modelId, filePath);
|
|
149
|
+
const { elements, exclusions } = elementsFromStep({ store, meshes, modelId });
|
|
150
|
+
const rules = buildRules(args, mode, tolerance, clearance);
|
|
151
|
+
const engine = createClashEngine({ backend: 'ts' });
|
|
152
|
+
const result = await engine.run(elements, rules, {
|
|
153
|
+
exclusions,
|
|
154
|
+
tolerance,
|
|
155
|
+
onProgress: (p) => {
|
|
156
|
+
if (!jsonOutput) {
|
|
157
|
+
process.stderr.write(`\r Clashing: ${p.phase} ${p.rule} (${p.done}/${p.total})`);
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
if (!jsonOutput)
|
|
162
|
+
process.stderr.write('\n');
|
|
163
|
+
if (bcfPath) {
|
|
164
|
+
const groups = groupClashes(result, { by: bcfGroupBy });
|
|
165
|
+
const project = await createBCFFromClashResult(result, groups, {
|
|
166
|
+
author: 'ifc-lite clash',
|
|
167
|
+
projectName: 'Clash report',
|
|
168
|
+
// Headless: no snapshots (no renderer) — viewer export embeds those.
|
|
169
|
+
...(bcfStatus ? { status: bcfStatus } : {}),
|
|
170
|
+
...(maxTopics != null ? { maxTopics } : {}),
|
|
171
|
+
});
|
|
172
|
+
const blob = await writeBCF(project);
|
|
173
|
+
const buffer = Buffer.from(await blob.arrayBuffer());
|
|
174
|
+
await writeFile(bcfPath, buffer);
|
|
175
|
+
process.stderr.write(` BCF report written to ${bcfPath} (${groups.length} topic group(s), grouped by ${bcfGroupBy})\n`);
|
|
176
|
+
}
|
|
177
|
+
if (jsonOutput) {
|
|
178
|
+
const total = result.clashes.length;
|
|
179
|
+
const clashes = result.clashes.slice(0, JSON_CLASH_CAP);
|
|
180
|
+
const truncated = total > clashes.length
|
|
181
|
+
? { reason: `capped at ${JSON_CLASH_CAP} clashes for display`, dropped: total - clashes.length }
|
|
182
|
+
: null;
|
|
183
|
+
printJson({ summary: result.summary, truncated, clashes });
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
printHumanSummary(result);
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=clash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clash.js","sourceRoot":"","sources":["../../src/commands/clash.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -14,6 +14,7 @@ import { propsCommand } from './commands/props.js';
|
|
|
14
14
|
import { exportCommand } from './commands/export.js';
|
|
15
15
|
import { idsCommand } from './commands/ids.js';
|
|
16
16
|
import { bcfCommand } from './commands/bcf.js';
|
|
17
|
+
import { clashCommand } from './commands/clash.js';
|
|
17
18
|
import { createCommand } from './commands/create.js';
|
|
18
19
|
import { evalCommand } from './commands/eval.js';
|
|
19
20
|
import { runCommand } from './commands/run.js';
|
|
@@ -60,6 +61,7 @@ const HELP = `
|
|
|
60
61
|
export <file.ifc> --format csv|json|ifc Export data to file or stdout
|
|
61
62
|
ids <file.ifc> <rules.ids> Validate against IDS rules
|
|
62
63
|
bcf <create|list|add-comment> Work with BCF collaboration files
|
|
64
|
+
clash <file.ifc> [--matrix] [--bcf F] Detect geometric clashes between elements
|
|
63
65
|
create <type> [options] --out F Create IFC elements (30+ types)
|
|
64
66
|
eval <file.ifc> "<expression>" Evaluate SDK expression
|
|
65
67
|
run <script.js> <file.ifc> Execute a script against model
|
|
@@ -100,6 +102,9 @@ const HELP = `
|
|
|
100
102
|
ifc-lite export model.ifc --format json --type IfcWall,IfcDoor
|
|
101
103
|
ifc-lite ids model.ifc requirements.ids --json
|
|
102
104
|
ifc-lite bcf create --title "Missing door" --out issue.bcf
|
|
105
|
+
ifc-lite clash model.ifc --matrix --json
|
|
106
|
+
ifc-lite clash model.ifc --a "IfcDuct*|IfcPipe*" --b "IfcWall*" --mode clearance --clearance 0.05
|
|
107
|
+
ifc-lite clash model.ifc --matrix --bcf clashes.bcfzip
|
|
103
108
|
ifc-lite create wall --height 3 --thickness 0.2 --start 0,0,0 --end 5,0,0 --out wall.ifc
|
|
104
109
|
ifc-lite create stair --number-of-risers 12 --riser-height 0.175 --width 1.2 --out stair.ifc
|
|
105
110
|
ifc-lite create door --width 0.9 --height 2.1 --position 0,0,0 --out door.ifc
|
|
@@ -183,6 +188,9 @@ async function main() {
|
|
|
183
188
|
case 'bcf':
|
|
184
189
|
await bcfCommand(commandArgs);
|
|
185
190
|
break;
|
|
191
|
+
case 'clash':
|
|
192
|
+
await clashCommand(commandArgs);
|
|
193
|
+
break;
|
|
186
194
|
case 'create':
|
|
187
195
|
await createCommand(commandArgs);
|
|
188
196
|
break;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;+DAE+D;AAE/D;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,+DAA+D;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;AAE7B,MAAM,IAAI,GAAG;cACC,OAAO
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.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.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "CLI toolkit for IFC files — query, validate, export, create, and script BIM data",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -19,21 +19,23 @@
|
|
|
19
19
|
"README.md"
|
|
20
20
|
],
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@ifc-lite/
|
|
23
|
-
"@ifc-lite/
|
|
24
|
-
"@ifc-lite/
|
|
25
|
-
"@ifc-lite/
|
|
26
|
-
"@ifc-lite/export": "^1.19.0",
|
|
27
|
-
"@ifc-lite/bcf": "^1.15.3",
|
|
28
|
-
"@ifc-lite/ids": "^1.15.2",
|
|
29
|
-
"@ifc-lite/create": "^1.15.0",
|
|
22
|
+
"@ifc-lite/bcf": "^1.15.4",
|
|
23
|
+
"@ifc-lite/clash": "^1.1.0",
|
|
24
|
+
"@ifc-lite/create": "^1.15.1",
|
|
25
|
+
"@ifc-lite/data": "^2.0.0",
|
|
30
26
|
"@ifc-lite/encoding": "^1.14.6",
|
|
27
|
+
"@ifc-lite/export": "^1.19.3",
|
|
28
|
+
"@ifc-lite/extensions": "^0.3.0",
|
|
29
|
+
"@ifc-lite/ids": "^1.15.4",
|
|
30
|
+
"@ifc-lite/geometry": "^2.1.0",
|
|
31
|
+
"@ifc-lite/mcp": "^0.3.0",
|
|
32
|
+
"@ifc-lite/mutations": "^1.15.1",
|
|
33
|
+
"@ifc-lite/parser": "^3.0.0",
|
|
34
|
+
"@ifc-lite/query": "^1.14.8",
|
|
31
35
|
"@ifc-lite/sandbox": "^1.15.0",
|
|
32
|
-
"@ifc-lite/
|
|
33
|
-
"@ifc-lite/
|
|
34
|
-
"@ifc-lite/wasm": "^1.
|
|
35
|
-
"@ifc-lite/extensions": "^0.2.0",
|
|
36
|
-
"@ifc-lite/viewer-core": "^0.2.3"
|
|
36
|
+
"@ifc-lite/sdk": "^1.17.0",
|
|
37
|
+
"@ifc-lite/viewer-core": "^0.2.4",
|
|
38
|
+
"@ifc-lite/wasm": "^2.1.1"
|
|
37
39
|
},
|
|
38
40
|
"devDependencies": {
|
|
39
41
|
"@types/node": "^25.9.1",
|