Skip to content

GCAD Studio v0.2.0a1

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 28 Oct 10:38
· 16 commits to master since this release
1866be4

A pre-release of v0.2 (2026-10-28): the web studio, process kernels, ISO 10303 parametric exchange and two kernels for formats that are not CAD languages. M9 to M13 of the v0.2 plan are still to come; the wheel is on GitHub Releases, not on PyPI.

Kernel elmergrid. ElmerGrid's .grd structured-mesh format from Elmer FEM, MATC expressions included, as a bundled kernel: grammar, rewrite rules, a GCore prelude and five examples, with no change to the core. Each material becomes a named, coloured solid or region, so a .grd file opens in the studio and exports like any other model. Keywords that only shape the mesh are ignored; ones that change the geometry and are not supported are errors at their line. Checked against ElmerGrid itself: per-material area or volume and bounds match on 441 of the 531 distinct .grd files in Elmer's sources, and every other file is an error by design (SPEC §5.2).

ISO 10303 parametric exchange (M14, proposed; SPEC §5.5). A kernel, iso10303, opens STEP files (.stp, .step, .p21): ISO 10303-42 CSG and 2D CSG, ISO 10303-55 histories, ISO 10303-108 parameters with ISO 13584-20 expressions (a slider on a parameter drives the model), ISO 10303-111 holes, pockets and bosses, ISO 10303-112 sketches and colours; explicit B-rep is read by OpenCASCADE. Each file is checked against the EXPRESS schema its header names, every WHERE, UNIQUE and global rule evaluated, with diagnostics at the instance. The export format step-parametric writes any model back as parametric STEP under the AP242 long form, which reads back to the same graph. Its grammar is traced to the standard's own productions and checked against them; a coverage matrix gives every AP242 entity a status. The ISO 10303 stack is freecad-nxstyle's, vendored. New for every kernel: letrec, records and at, data built-ins, import_source, named string decoders, semantic checkers, trace mode, graph export formats, and gcad grammar import for Wirth Syntax Notation. New commands: gcad iso schema and gcad iso check.

Web studio (M7, SPEC §4.1). The studio as a static site that needs nothing installed: the same UI talks to gcad.server.Studio running in Pyodide in a Web Worker instead of to gcad serve. Back-end M runs on Manifold's own WebAssembly build through a small binding with the manifold3d API, so the geometry matches the native back-end (checked for every bundled example). Every mesh and 2D format exports in the browser; STEP and IGES say they need the local install. Files are kept in the browser, with Upload and Download. A runaway model is replaced by the next edit within about a second, by a standby worker. tools/build_site.py builds the site reproducibly from pinned, SHA-256-checked Pyodide, Manifold and wheels; CI tests it in headless Chrome and publishes it to GitHub Pages from master.

Process kernels (M8, SPEC §7.2). A language served by its own program is now a kernel: the manifest names the program, which answers a JSON-RPC protocol on stdin/stdout and returns a geometry graph, a STEP file or a mesh. The runner knows no particular language. The program keeps running between evaluations; each evaluation is held to the time limit, and a newer one ends it. Kernels from outside GCAD Studio run only after you trust their folder (gcad kernel trust, or the studio's prompt). Two come bundled: openscad runs your installed OpenSCAD on .scad files, and cadquery runs .cq.py scripts in a CadQuery environment you name with GCAD_CADQUERY_PYTHON, keeping the geometry exact for STEP and IGES. A mesh handed back by a kernel is never exported as STEP or IGES.

OpenFOAM blockMeshDict kernel. blockmesh reads the dictionary OpenFOAM's blockMesh utility reads and shows the solid its hex blocks occupy, one named, coloured part per cell zone, in millimetres (OpenFOAM's metres times scale, convertToMeters or units). It is a grammar kernel, written only as a grammar, rewrite rules, a GCore prelude and examples: $macros become defines and references, and blockMesh's vertex and face numbering, inside-out check, collapsed (wedge) blocks and arc, polyLine and line edges are GCore. Cell counts, grading and patches are ignored; projections, splines, transform, #include, #codeStream and values computed by #calc or #eval are errors at their line. CI compares it with blockMesh from the Ubuntu archive. To find system/blockMeshDict, which has no extension, a kernel manifest may now list exact file names (filenames).