Skip to main content

openscad_cpp_evaluator

A C++20 port of openscad_evaluator (Python): an AST-walking geometry engine that takes a parsed OpenSCAD AST and produces Manifold CSG geometry, ready to export to STL/OBJ/OFF/3MF or hand off to a renderer.

Built on:

  • openscad_cpp_parser (git submodule) for lexing/parsing/AST/scope resolution.
  • Manifold v3.5.2 for the actual CSG boolean/mesh engine.
  • Boost.Polygon for roof()'s Voronoi-diagram construction.
  • nothings/stb (header-only) for surface()'s image loader and the built-in font provider's TrueType parsing/rasterization.

All fetched automatically via CMake FetchContent — no manual dependency installation beyond the toolchain below.

Status

All planned phases (0–9) are complete: the full primitive/transform/boolean/modifier/control-flow language surface, every builtin function, STL/OBJ/OFF/3MF import and export, hull()/minkowski()/ linear_extrude()/rotate_extrude()/roof()/offset()/surface()/DXF & SVG import/text(), an opt-in content-hash geometry cache, per-call-site profiling, and a gdb-style --debug REPL. See CLAUDE.md for the full phase-by-phase history and architecture notes.

Build

Requires:

  • CMake ≥ 3.24
  • A C++20 compiler (Clang, GCC, or MSVC — all three are covered by CI)
  • Bison ≥ 3.8 and Flex
    • macOS: brew install bison flex (the system bison is too old; CMake auto-detects Homebrew's)
    • Linux: sudo apt-get install bison flex
    • Windows: MSYS2's bison/flex (pacman -S bison flex) — GitHub's windows-latest runner ships MSYS2 pre-installed at C:\msys64; CMake auto-detects it there too

GoogleTest and every other C++ dependency are fetched automatically.

git clone --recurse-submodules <this-repo>
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j

(Omitting -DCMAKE_BUILD_TYPE=Release builds unoptimized — pass it explicitly for anything performance-sensitive.)

On Windows, CMake defaults to the multi-config Visual Studio generator, which ignores CMAKE_BUILD_TYPE; pass --config Release to cmake --build (and -C Release to ctest) instead.

Test

ctest --test-dir build --output-on-failure

Run a single binary or filter:

build/tests/oscad_eval_tests
build/tests/oscad_eval_tests --gtest_filter='FormatNumber.*'

The suite runs twice in CI — once with the bytecode VM on (the default) and once with it off (OSCAD_BYTECODE_VM=0) — so a regression in either the compiled or interpreted expression-eval path is caught.

CLI

build/tools/cli/openscad-cpp-evaluator <input.scad> -o <output.{stl,obj,off,3mf}> [--format stl|obj|off|3mf] [--debug]

The output format is inferred from -o's extension, or set explicitly with --format. --debug drops into a gdb-style REPL (break/run/continue/step/next/finish/print/ backtrace/set/list/quit/help) before and during evaluation.

build/tools/cli/openscad-cpp-evaluator model.scad -o model.stl

Architecture

See CLAUDE.md for the full per-file architecture map, the Python-reference cross-check history, and the rationale behind every non-obvious design choice (the two-pass resolve/generate CSG pipeline, the FontProvider injection seam, the closure-detection rule, etc.).

CI

GitHub Actions builds and tests on Linux, macOS, and Windows on every push/PR (.github/workflows/ci.yml).

Metadata

Release files for openscad-cpp-evaluator 1.48.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for openscad-cpp-evaluator 1.48.0
File Size Uploaded
openscad_cpp_evaluator-1.48.0.tar.gz 1.8 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for openscad-cpp-evaluator 1.48.0
File
openscad_cpp_evaluator-1.48.0-cp312-abi3-win_arm64.whl CPython 3.12 abi3 Windows ARM64 Details
openscad_cpp_evaluator-1.48.0-cp312-abi3-win_amd64.whl CPython 3.12 abi3 Windows x86-64 Details
openscad_cpp_evaluator-1.48.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 abi3 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
openscad_cpp_evaluator-1.48.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 abi3 Linux glibc 2.28+ ARM64, Linux glibc 2.27+ ARM64 Details
openscad_cpp_evaluator-1.48.0-cp312-abi3-macosx_13_0_x86_64.whl CPython 3.12 abi3 macOS 13.0+ x86-64 Details
openscad_cpp_evaluator-1.48.0-cp312-abi3-macosx_13_0_arm64.whl CPython 3.12 abi3 macOS 13.0+ ARM64 Details

Total release size: 49.8 MB

Release files / openscad_cpp_evaluator-1.48.0.tar.gz

Download URL openscad_cpp_evaluator-1.48.0.tar.gz
Size 1.8 MB
Tags Source
SHA-256 checksum
How to use checksums
6351ab4a0f351ffd63d0740eebaa65170c98c056dd0510421d220ac262aa3727
BLAKE2b-256 checksum
How to use checksums
281b17d4af84051544683249d13688bdbb7e9247cf1ad27547063b2dd3b7eabb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / openscad_cpp_evaluator-1.48.0-cp312-abi3-win_arm64.whl

Download URL openscad_cpp_evaluator-1.48.0-cp312-abi3-win_arm64.whl
Size 10.5 MB
Tags CPython 3.12 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
cbb8bd731440481212f3cc28a3e8f864bc898befa2d42644e13a1f232e877a39
BLAKE2b-256 checksum
How to use checksums
7b40bcb8fdb037d6e20c9a01e6f1290c93944d6989699229d8a0c570d9237be4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / openscad_cpp_evaluator-1.48.0-cp312-abi3-win_amd64.whl

Download URL openscad_cpp_evaluator-1.48.0-cp312-abi3-win_amd64.whl
Size 11.0 MB
Tags CPython 3.12 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
845ad55b9946ed887ab866682f86477e162b8eb2369b30a4190f3316f40eb33a
BLAKE2b-256 checksum
How to use checksums
dbf05e44aedfda89e22cc78cea322478502ae0801abe4b7a342d4fa239302f35
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / openscad_cpp_evaluator-1.48.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL openscad_cpp_evaluator-1.48.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 7.6 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
5197520cb0a51b7966fb86648f1b116bb28c0ab06c6f42840206926ec9a759c1
BLAKE2b-256 checksum
How to use checksums
a796675e9486d6f9a07c11272ab007eec4662236bc83ef0ad8f973d135fc5693
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / openscad_cpp_evaluator-1.48.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL openscad_cpp_evaluator-1.48.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 7.2 MB
Tags CPython 3.12 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
56d582506959199dbc597b75e32fa1d4e7c875c10fa0fea9cf883b76f96175ec
BLAKE2b-256 checksum
How to use checksums
f4a7d301956544738546888e28566b57d140b6cac70b7957ae9a1937aa4ab405
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / openscad_cpp_evaluator-1.48.0-cp312-abi3-macosx_13_0_x86_64.whl

Download URL openscad_cpp_evaluator-1.48.0-cp312-abi3-macosx_13_0_x86_64.whl
Size 6.1 MB
Tags CPython 3.12 abi3 macOS 13.0+ x86-64
SHA-256 checksum
How to use checksums
fd6efb6fc0b2d27f32595c8b3b32ffb5a4eec8b34da2d39325d120ac8baaf85f
BLAKE2b-256 checksum
How to use checksums
58183473d49e4e5be5b0f227d3da0d19a9eabdb72f939fc9c4e1b694289be655
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / openscad_cpp_evaluator-1.48.0-cp312-abi3-macosx_13_0_arm64.whl

Download URL openscad_cpp_evaluator-1.48.0-cp312-abi3-macosx_13_0_arm64.whl
Size 5.8 MB
Tags CPython 3.12 abi3 macOS 13.0+ ARM64
SHA-256 checksum
How to use checksums
2c297eb614d3e1d00dd52c47f71ac0b33b528bbca25c28c206700aa0145f903a
BLAKE2b-256 checksum
How to use checksums
87cab0ca2df431f8c762066f7d9c0e58b3debc42f8bc79531084441f9e42deff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

1.49.1

7 release files

1.49.0

7 release files

This release

1.48.0 This release

7 release files

1.47.0

7 release files

1.46.0

7 release files

1.34.0

7 release files

1.33.0

7 release files

1.32.0

7 release files

1.31.0

7 release files

1.30.0

7 release files

1.29.0

7 release files

1.28.6

7 release files

1.28.5

7 release files

1.28.4

7 release files

1.28.3

7 release files

1.28.2

7 release files

1.28.1

7 release files

1.28.0

7 release files

1.27.0

7 release files

1.26.0

7 release files

1.25.0

7 release files

1.24.0

7 release files

1.23.1

7 release files

1.22.0

7 release files

1.21.0

7 release files

1.20.5

7 release files

1.20.3

7 release files

1.20.2

7 release files

1.20.1

7 release files

1.20.0

7 release files

1.19.3

7 release files

1.19.2

7 release files

1.19.1

7 release files

1.19.0

7 release files

1.9.0

7 release files

1.8.0

7 release files

1.7.2

7 release files

1.7.0

7 release files

1.6.1

7 release files

1.6.0

7 release files

1.5.0

7 release files

1.4.1

7 release files

1.4.0

7 release files

1.3.1

7 release files

1.3.0

7 release files

1.2.0

7 release files

1.1.0

7 release files

1.0.1

7 release files

0.55.0

7 release files

0.54.0

7 release files

0.53.0

7 release files

0.52.0

7 release files

0.51.3

7 release files

0.51.1

7 release files

0.51.0

7 release files

0.50.1

7 release files

0.50.0

7 release files

0.49.0

7 release files

0.48.0

7 release files

0.47.0

7 release files

0.46.0

7 release files

0.45.1

7 release files

0.45.0

7 release files

0.44.0

7 release files

0.43.0

7 release files

0.42.1

7 release files

0.42.0

7 release files

0.41.0

7 release files

0.40.0

7 release files

0.39.0

7 release files

0.38.1

7 release files

0.38.0

7 release files

0.37.0

7 release files

0.36.0

7 release files

0.35.0

7 release files

0.34.0

7 release files

0.33.0

7 release files

0.32.2

7 release files

0.32.0

7 release files

0.31.2

7 release files

0.31.1

7 release files

0.31.0

7 release files

0.30.0

7 release files

0.29.3

7 release files

0.29.2

7 release files

0.29.1

6 release files

0.29.0

6 release files

0.28.2

6 release files

0.28.0

6 release files

0.27.1

6 release files

0.27.0

6 release files

0.13.0

6 release files

0.10.0

6 release files

0.9.2

6 release files

0.9.1

6 release files

0.9.0

6 release files

0.8.1

6 release files

0.8.0

6 release files

0.7.0

6 release files

0.6.1

6 release files

0.6.0

6 release files

0.5.1

6 release files

0.4.10

6 release files

0.4.9

6 release files

0.4.8

6 release files

0.4.7

6 release files

0.4.6

6 release files

0.4.5

6 release files

0.4.4

6 release files

0.4.3

6 release files

0.4.2

6 release files

0.4.1

6 release files

0.4.0

6 release files

0.3.0

6 release files

0.2.0

6 release files

0.1.0

6 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page