{"id":50076130,"url":"https://github.com/openaec-foundation/open-calculations-studio","last_synced_at":"2026-07-29T07:00:24.721Z","repository":{"id":340236753,"uuid":"1160009183","full_name":"OpenAEC-Foundation/Open-Calculations-Studio","owner":"OpenAEC-Foundation","description":"Open desktop-applicatie voor constructieve berekeningen op basis van CalcPAD-syntax, met live IFCX en IFC4x3 STEP export — opvolger van CalcPAD onder de OpenAEC Foundation.","archived":false,"fork":false,"pushed_at":"2026-06-14T05:38:42.000Z","size":3285,"stargazers_count":8,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-14T07:24:28.143Z","etag":null,"topics":["calcpad","engineering-calculations","ifc","ifcx","katex","mathjs","openaec","structural-engineering","tauri","typescript"],"latest_commit_sha":null,"homepage":"https://github.com/OpenAEC-Foundation","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OpenAEC-Foundation.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-17T12:40:21.000Z","updated_at":"2026-06-07T03:16:48.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/OpenAEC-Foundation/Open-Calculations-Studio","commit_stats":null,"previous_names":["openaec-foundation/ifc-calc","openaec-foundation/open-calculations-studio"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/OpenAEC-Foundation/Open-Calculations-Studio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenAEC-Foundation%2FOpen-Calculations-Studio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenAEC-Foundation%2FOpen-Calculations-Studio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenAEC-Foundation%2FOpen-Calculations-Studio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenAEC-Foundation%2FOpen-Calculations-Studio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OpenAEC-Foundation","download_url":"https://codeload.github.com/OpenAEC-Foundation/Open-Calculations-Studio/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenAEC-Foundation%2FOpen-Calculations-Studio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36022278,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-29T02:00:04.910Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["calcpad","engineering-calculations","ifc","ifcx","katex","mathjs","openaec","structural-engineering","tauri","typescript"],"created_at":"2026-05-22T07:14:17.839Z","updated_at":"2026-07-29T07:00:24.564Z","avatar_url":"https://github.com/OpenAEC-Foundation.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Open Calculations Studio\n\nOpen 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.\n\n\u003e Voorheen bekend als **Ifc-Calc** — herbouwd onder de OpenAEC Foundation als opvolger van CalcPAD met open file-formats en moderne web-tech.\n\n## Features\n\n### Rekenen\n- **Formules met eenheden** — `mm`, `kN`, `N/mm²`, `mm⁴`, … via mathjs unit-aware arithmetic\n- **Automatische unit-simplificatie** — `b*h` geeft direct `mm²`, geen handmatige `to`-cast nodig\n- **Wiskundige opmaak** — KaTeX-rendering met echte breuken, superscripts, subscripts en Griekse letters\n- **Formule-keten** — toont `naam = formule = ingevulde waarden = resultaat` op één regel\n- **Live preview** — split-pane editor (CodeMirror 6) en debounced preview, syntax highlighting voor `.cpd`\n- **Belastingsgevallen** — tabs onderaan voor SLS / ULS / aardbeving etc., elk met eigen prompt-waarden\n\n### CalcPAD-compatibiliteit\nFull 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.\n\n- `\"Title`, `'prose`, `// comment`\n- `#if … #else if … #else … #end if`, `#hide / #show / #pre / #post`\n- `#repeat n … #end repeat` en `#for var = lo : hi … #loop` (incl. nested)\n- `#def name(p1; p2; …) … #end def` macros, `#def Name$ = literal` constants\n- `#include filename.cpd` — externe macro-libraries en SVG drawings\n- `$Plot{ … @ x = lo : hi }` — inline parametrische plots\n- Subscript-comma's (`V_b,0`, `n_Int,support,points`), `$`-getypeerde refs, matrix `[a;b|c;d]`\n- Format-specs (`:F2`), dotted/percent identifiers (`Cs.Cd`, `F_0.9G50%TotalWeight`)\n- mathjs Matrix-aware `take`, `hlookup`, `hlookup_ge`, `hlookup_le`, `vlookup`, `get`\n\n### Tekeningen\n- **Parametrische SVG-macros** — prose-line value interpolation (`'\u003cline x1=\"'a'\" y1=\"'b'\"/\u003e`)\n- **`@svg … @end`** blocks voor handgeschreven SVG\n- **`@img(file.svg)`** — externe SVG-tekeningen worden inline ge-embed (incl. `\u003cpolygon fill=\"…\"\u003e`, hatch patterns, gradients) via dezelfde include-resolver als `#include`\n- **`@img(file.png|jpg|…)`** — raster afbeeldingen via `\u003cimg src\u003e`\n\n### IFC export\nLive IFCX (JSON-LD draft) en IFC4x3 STEP-SPF generatie vanuit de huidige calc.\n- Detecteert structurele elementen via conventionele variabelenamen (`b_fdn`, `l_fdn`, `D_paal`, `M_Ed`, `R_c_d`, …)\n- Altijd geldig Project → Site → Building → Storey skelet\n- IFC-tab met spatial tree, STEP viewer en IFCX JSON viewer (syntax highlighting + klikbare entity-types naar BuildingSMART docs)\n- Eén klik export: `.ifc` / `.ifcx` download\n\n### Overig\n- **Belastingsgevallen** (load cases) met eigen prompt-waarden per case\n- **PDF-export** via Tauri shell + headless preview\n- **GEF-upload** (`@gef name`) voor sonderingsdata\n- **5 themes** (light, forge, openaec, blueprint, contrast) — OpenAEC design tokens\n- **`@select var \"Label\" … @end`** dropdown-blocks voor materiaalkeuzes etc.\n\n## Projectstructuur\n\n```\nOpen-Calculations-Studio/\n├── packages/\n│   ├── core/                          # @ifc-calc/core — rekenengine (TS library)\n│   │   ├── src/\n│   │   │   ├── parser.ts              # Line-based parser, macro expansion, #include\n│   │   │   ├── evaluator.ts           # mathjs evaluator + CalcPAD helpers\n│   │   │   ├── ifc-generator.ts       # IFCX / IFC4x3 STEP generators\n│   │   │   ├── latex.ts               # Expr → LaTeX converter\n│   │   │   ├── renderer.ts            # HTML renderer (KaTeX, SVG coalescing)\n│   │   │   ├── gef-parser.ts          # Sondering (GEF) parser\n│   │   │   ├── types.ts               # Public types\n│   │   │   └── index.ts               # Public API\n│   │   └── package.json\n│   ├── desktop/                       # @openaec/calculations-studio — Tauri app\n│   │   ├── src/                       # React UI (ribbon, panels, preview)\n│   │   ├── src-tauri/                 # Rust shell (Tauri 2)\n│   │   └── src/templates/calcpad-samples/   # Vendored .cpd + .svg samples\n│   └── web/                           # @ifc-calc/web — browser-only build\n├── docs/superpowers/                  # Design docs + implementation plans\n└── package.json                       # npm workspaces root\n```\n\n## Document Syntax\n\n```calcpad\n\"Project — woning Laageind 57\n\n#include svg_drawing.cpd\n\n# 1. Invoer\nb = 300 mm\nh = 500 mm\nN_Ed = ?*(kN)\nfck = 30 N/mm^2\n\n# 2. Geometrie\nA = b*h          // mm² — automatisch\nW_y = b*h^2/6    // mm³\n\n# 3. Toetsing\nsigma = N_Ed/A to N/mm^2\n\n#if sigma ≤ fck/1.5\n    'Voldoet ✓\n#else\n    'Voldoet NIET ✗\n#end if\n\n# 4. Detail-tekening\n@img(detail-D1.svg)\n\n# 5. Belasting-diagram\n$Plot{f(x) @ x = 0 : L}\n```\n\n## Installatie\n\n```bash\nnpm install\n```\n\n## Ontwikkeling\n\n```bash\n# Core package bouwen (watch)\nnpm run build --workspace=@ifc-calc/core\n\n# Desktop (Tauri) starten\nnpm run tauri:dev --workspace=@openaec/calculations-studio\n\n# Of alleen de Vite browser-preview\nnpm run dev --workspace=@openaec/calculations-studio\n```\n\n## Gebruik als library\n\n```typescript\nimport {\n  parse,\n  evaluate,\n  render,\n  generateIfcx,\n  generateIfc4x3Step,\n} from '@ifc-calc/core';\n\nconst source = `\nb = 300 mm\nh = 500 mm\nA = b*h\nN_Ed = 120 kN\nsigma = N_Ed/A to N/mm^2\n`;\n\n// Render naar HTML (KaTeX formules + SVG)\nconst ast = parse(source);\nconst evaluated = evaluate(ast, {});\nconst html = render(evaluated);\n\n// IFC export uit dezelfde calc\nconst ifcx = generateIfcx(evaluated, { projectName: 'Toetsing balk B1' });\nconst step = generateIfc4x3Step(evaluated, { projectName: 'Toetsing balk B1' });\n```\n\n### Externe SVG / `#include` inlinen\n\n```typescript\nimport detailSvg from './detail-D1.svg?raw';\nimport svgDrawing from './svg_drawing.cpd?raw';\n\nconst ast = parse(source, {\n  includes: new Map([\n    ['detail-D1.svg', detailSvg],     // wordt door @img(detail-D1.svg) inline ge-embed\n    ['svg_drawing.cpd', svgDrawing],  // wordt door #include svg_drawing.cpd geladen\n  ]),\n});\n```\n\n## Tech Stack\n\n- **TypeScript** — type-safe codebase\n- **mathjs** — expressie-parsing, eenheden, matrices\n- **KaTeX** — wiskundige opmaak\n- **CodeMirror 6** — editor met `.cpd` syntax highlighting + autocomplete\n- **React 19** — desktop UI\n- **Tauri 2** — Rust shell met file-system + dialog plugins\n- **Vite** — bundler met `?raw` imports voor samples\n- **npm workspaces** — monorepo\n\n## Licentie\n\nZie [`LICENSE`](LICENSE).\n\n## Status\n\nIn actieve ontwikkeling onder de [OpenAEC Foundation](https://github.com/OpenAEC-Foundation). PRs en issues welkom.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenaec-foundation%2Fopen-calculations-studio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenaec-foundation%2Fopen-calculations-studio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenaec-foundation%2Fopen-calculations-studio/lists"}