Примеры работы
Rust: Open → Query → Edit → Write
use ifccore::IfcModel;
let source = std::fs::read("model.ifc")?;
let mut model = IfcModel::open(&source);
for wall in model.entities_by_type("IFCWALL") {
println!("#{} {}", wall.express_id(), wall.type_name());
}
let wall_id = model
.entities_by_type("IFCWALL")
.first()
.map(|wall| wall.express_id());
if let Some(wall_id) = wall_id {
let mut edit = model.edit();
// Name — третий explicit-атрибут IfcRoot, поэтому позиция равна 2.
edit.set_attribute(wall_id, 2, "'Новое имя'");
edit.commit()?;
}
let mut output = std::fs::File::create("model-updated.ifc")?;
model.write(&mut output)?;
# Ok::<(), Box<dyn std::error::Error>>(())
Полные компилируемые варианты находятся в crates/ifccore/examples/.
Node/WASM
import fs from "node:fs";
import core from "@ifc-core/wasm-node";
const opened = JSON.parse(core.ifc_open(fs.readFileSync("model.ifc")));
try {
console.log(JSON.parse(core.ifc_query(opened.handle, 1)));
} finally {
core.ifc_close(opened.handle);
}
Browser
В browser package сначала вызывается default init(), затем те же lifecycle
exports. IFC передаётся как Uint8Array; большие файлы Viewer читает блоками и
передаёт Worker.
Типовые сценарии
- просмотр: open → tree/search → properties → geometry → close;
- изменение: preview → confirmed commit → refresh affected entities → export;
- диагностика: open → diagnostics/performance report → close;
- MCP: open_model → find/get/property/relations → close_model.