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.37.2

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.37.2
File Size Uploaded
openscad_cpp_evaluator-1.37.2.tar.gz 1.7 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for openscad-cpp-evaluator 1.37.2
File
openscad_cpp_evaluator-1.37.2-cp312-abi3-win_arm64.whl CPython 3.12 abi3 Windows ARM64 Details
openscad_cpp_evaluator-1.37.2-cp312-abi3-win_amd64.whl CPython 3.12 abi3 Windows x86-64 Details
openscad_cpp_evaluator-1.37.2-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.37.2-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.37.2-cp312-abi3-macosx_13_0_x86_64.whl CPython 3.12 abi3 macOS 13.0+ x86-64 Details
openscad_cpp_evaluator-1.37.2-cp312-abi3-macosx_13_0_arm64.whl CPython 3.12 abi3 macOS 13.0+ ARM64 Details

Total release size: 49.1 MB

Release files / openscad_cpp_evaluator-1.37.2.tar.gz

Download URL openscad_cpp_evaluator-1.37.2.tar.gz
Size 1.7 MB
Tags Source
SHA-256 checksum
How to use checksums
c78ca7b9561c4e3bf4d16c922615f982be0eca753104cea54c7dc9fa323373ae
BLAKE2b-256 checksum
How to use checksums
af8fdca9a121d1d3a4de89cee6c4606035a42f3373e48dbfa6048f3ab56d6921
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.37.2-cp312-abi3-win_arm64.whl

Download URL openscad_cpp_evaluator-1.37.2-cp312-abi3-win_arm64.whl
Size 10.4 MB
Tags CPython 3.12 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
dc0e0bed1f33588a72b685138e8514c64308aefffba3d62270968f55d28021df
BLAKE2b-256 checksum
How to use checksums
26eb360d772787aba60959529e11bd1df0f9a2f9d6062193474726cb5576c241
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.37.2-cp312-abi3-win_amd64.whl

Download URL openscad_cpp_evaluator-1.37.2-cp312-abi3-win_amd64.whl
Size 10.9 MB
Tags CPython 3.12 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
90d7bc0568ef4910adf80d44aa74a664ca0442ec967e4af98a0038efc88b4022
BLAKE2b-256 checksum
How to use checksums
ef1f9c71a70bf91bc668baa144afccf8c588f9c6e443a44d1854178b5885b243
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.37.2-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL openscad_cpp_evaluator-1.37.2-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 7.4 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
8f5448033afa860b25f746c134854e3ed2b4bbcf03dc727bcbebff63f29ddb5e
BLAKE2b-256 checksum
How to use checksums
2c8c52b58604dc18df8ec757e5c4113febf19c3ad8c66118048902d967bae978
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.37.2-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL openscad_cpp_evaluator-1.37.2-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 7.0 MB
Tags CPython 3.12 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
c5b8c6a0d9ff0f6cf9a56f220ff9ec7d0ca34a9e6bd5b15e7a81764d416ed5d8
BLAKE2b-256 checksum
How to use checksums
52e16af9f735c2a3c8a89008c04b4e87efba379ce23639612dfe3ced04f37f01
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.37.2-cp312-abi3-macosx_13_0_x86_64.whl

Download URL openscad_cpp_evaluator-1.37.2-cp312-abi3-macosx_13_0_x86_64.whl
Size 6.0 MB
Tags CPython 3.12 abi3 macOS 13.0+ x86-64
SHA-256 checksum
How to use checksums
cca1110f0396b83ccdfe66cc90fc62e91077d82fb0a4162d0869c286daa4e999
BLAKE2b-256 checksum
How to use checksums
2323892cf1e1336783245984eb34a982e6d67299395480d430ad7b0eb1ea2487
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.37.2-cp312-abi3-macosx_13_0_arm64.whl

Download URL openscad_cpp_evaluator-1.37.2-cp312-abi3-macosx_13_0_arm64.whl
Size 5.7 MB
Tags CPython 3.12 abi3 macOS 13.0+ ARM64
SHA-256 checksum
How to use checksums
726cb0c0923aec400d1cde2e234f033adbe1dca5b73ebc7e19a952840013c694
BLAKE2b-256 checksum
How to use checksums
c130e67d2ae2e7b97552d4cd1fd53dfcfb2a984f30b4ce406e176c2fe7337bb3
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.47.0

7 release files

1.46.0

7 release files

This release

1.37.2 This release

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