Open desktop-applicatie voor constructieve berekeningen op basis van CalcPAD-syntax, met directe export naar IFC (4x3 STEP) en IFCX (JSON-LD). Werkt zowel als standalone Tauri-app als embedded library voor FEM-applicaties en normtoetsingen.
Voorheen bekend als Ifc-Calc — herbouwd onder de OpenAEC Foundation als opvolger van CalcPAD met open file-formats en moderne web-tech.
- Formules met eenheden —
mm,kN,N/mm²,mm⁴, … via mathjs unit-aware arithmetic - Automatische unit-simplificatie —
b*hgeeft directmm², geen handmatigeto-cast nodig - Wiskundige opmaak — KaTeX-rendering met echte breuken, superscripts, subscripts en Griekse letters
- Formule-keten — toont
naam = formule = ingevulde waarden = resultaatop één regel - Live preview — split-pane editor (CodeMirror 6) en debounced preview, syntax highlighting voor
.cpd - Belastingsgevallen — tabs onderaan voor SLS / ULS / aardbeving etc., elk met eigen prompt-waarden
Full subset compatibility met real-world CalcPAD-bestanden. Het 1094-regel 2259-Intertek-units.cpd regressie-bestand evalueert met 0 errors en rendert 6 SVG-tekeningen.
"Title,'prose,// comment#if … #else if … #else … #end if,#hide / #show / #pre / #post#repeat n … #end repeaten#for var = lo : hi … #loop(incl. nested)#def name(p1; p2; …) … #end defmacros,#def Name$ = literalconstants#include filename.cpd— externe macro-libraries en SVG drawings$Plot{ … @ x = lo : hi }— inline parametrische plots- Subscript-comma's (
V_b,0,n_Int,support,points),$-getypeerde refs, matrix[a;b|c;d] - Format-specs (
:F2), dotted/percent identifiers (Cs.Cd,F_0.9G50%TotalWeight) - mathjs Matrix-aware
take,hlookup,hlookup_ge,hlookup_le,vlookup,get
- Parametrische SVG-macros — prose-line value interpolation (
'<line x1="'a'" y1="'b'"/>) @svg … @endblocks voor handgeschreven SVG@img(file.svg)— externe SVG-tekeningen worden inline ge-embed (incl.<polygon fill="…">, hatch patterns, gradients) via dezelfde include-resolver als#include@img(file.png|jpg|…)— raster afbeeldingen via<img src>
Live IFCX (JSON-LD draft) en IFC4x3 STEP-SPF generatie vanuit de huidige calc.
- Detecteert structurele elementen via conventionele variabelenamen (
b_fdn,l_fdn,D_paal,M_Ed,R_c_d, …) - Altijd geldig Project → Site → Building → Storey skelet
- IFC-tab met spatial tree, STEP viewer en IFCX JSON viewer (syntax highlighting + klikbare entity-types naar BuildingSMART docs)
- Eén klik export:
.ifc/.ifcxdownload
- Belastingsgevallen (load cases) met eigen prompt-waarden per case
- PDF-export via Tauri shell + headless preview
- GEF-upload (
@gef name) voor sonderingsdata - 5 themes (light, forge, openaec, blueprint, contrast) — OpenAEC design tokens
@select var "Label" … @enddropdown-blocks voor materiaalkeuzes etc.
Open-Calculations-Studio/
├── packages/
│ ├── core/ # @ifc-calc/core — rekenengine (TS library)
│ │ ├── src/
│ │ │ ├── parser.ts # Line-based parser, macro expansion, #include
│ │ │ ├── evaluator.ts # mathjs evaluator + CalcPAD helpers
│ │ │ ├── ifc-generator.ts # IFCX / IFC4x3 STEP generators
│ │ │ ├── latex.ts # Expr → LaTeX converter
│ │ │ ├── renderer.ts # HTML renderer (KaTeX, SVG coalescing)
│ │ │ ├── gef-parser.ts # Sondering (GEF) parser
│ │ │ ├── types.ts # Public types
│ │ │ └── index.ts # Public API
│ │ └── package.json
│ ├── desktop/ # @openaec/calculations-studio — Tauri app
│ │ ├── src/ # React UI (ribbon, panels, preview)
│ │ ├── src-tauri/ # Rust shell (Tauri 2)
│ │ └── src/templates/calcpad-samples/ # Vendored .cpd + .svg samples
│ └── web/ # @ifc-calc/web — browser-only build
├── docs/superpowers/ # Design docs + implementation plans
└── package.json # npm workspaces root
"Project — woning Laageind 57
#include svg_drawing.cpd
# 1. Invoer
b = 300 mm
h = 500 mm
N_Ed = ?*(kN)
fck = 30 N/mm^2
# 2. Geometrie
A = b*h // mm² — automatisch
W_y = b*h^2/6 // mm³
# 3. Toetsing
sigma = N_Ed/A to N/mm^2
#if sigma ≤ fck/1.5
'Voldoet ✓
#else
'Voldoet NIET ✗
#end if
# 4. Detail-tekening
@img(detail-D1.svg)
# 5. Belasting-diagram
$Plot{f(x) @ x = 0 : L}
npm install# Core package bouwen (watch)
npm run build --workspace=@ifc-calc/core
# Desktop (Tauri) starten
npm run tauri:dev --workspace=@openaec/calculations-studio
# Of alleen de Vite browser-preview
npm run dev --workspace=@openaec/calculations-studioimport {
parse,
evaluate,
render,
generateIfcx,
generateIfc4x3Step,
} from '@ifc-calc/core';
const source = `
b = 300 mm
h = 500 mm
A = b*h
N_Ed = 120 kN
sigma = N_Ed/A to N/mm^2
`;
// Render naar HTML (KaTeX formules + SVG)
const ast = parse(source);
const evaluated = evaluate(ast, {});
const html = render(evaluated);
// IFC export uit dezelfde calc
const ifcx = generateIfcx(evaluated, { projectName: 'Toetsing balk B1' });
const step = generateIfc4x3Step(evaluated, { projectName: 'Toetsing balk B1' });import detailSvg from './detail-D1.svg?raw';
import svgDrawing from './svg_drawing.cpd?raw';
const ast = parse(source, {
includes: new Map([
['detail-D1.svg', detailSvg], // wordt door @img(detail-D1.svg) inline ge-embed
['svg_drawing.cpd', svgDrawing], // wordt door #include svg_drawing.cpd geladen
]),
});- TypeScript — type-safe codebase
- mathjs — expressie-parsing, eenheden, matrices
- KaTeX — wiskundige opmaak
- CodeMirror 6 — editor met
.cpdsyntax highlighting + autocomplete - React 19 — desktop UI
- Tauri 2 — Rust shell met file-system + dialog plugins
- Vite — bundler met
?rawimports voor samples - npm workspaces — monorepo
Zie LICENSE.
In actieve ontwikkeling onder de OpenAEC Foundation. PRs en issues welkom.